2013-09-27
| 00:13 | kennylovesroaste | the nice thing about non-OO functional systems like clojure is that they conform to modern C++ systems that are not OO |
| 00:13 | kennylovesroaste | entity-relationships |
| 00:14 | chord | kennylovesroaste: you gonna work on a rts or rpg game made in clojure? |
| 00:14 | kennylovesroaste | another case where OO just fails |
| 00:14 | kennylovesroaste | chord: no, just an AI system possibly |
| 00:14 | Cua | if you have to name one simple project with idiomatic clojure code, which will you choose? |
| 00:14 | Cua | I am looking for clojure example to get the 'feel' of it, reading clojurescript compiler atm |
| 00:14 | kennylovesroaste | I would do an AI system in clojure and the engine in C++ |
| 00:15 | TEttinger | Cua, that's a good question. |
| 00:15 | TEttinger | I imagine lein is pretty large |
| 00:15 | Cua | it seems quite... different from other languages I have touched, and I even touched a few FP ones |
| 00:15 | brehaut | Cua: ring is good. lein is large but technomancy tries to make it approachable |
| 00:15 | TEttinger | $google github Raynes |
| 00:15 | lazybot | [Raynes (Anthony Grimes) · GitHub] https://github.com/Raynes |
| 00:16 | Raynes | ohai |
| 00:16 | Cua | brehaut: TEttinger thank |
| 00:16 | TEttinger | Raynes, you write idiomatic clojure code right? |
| 00:17 | Raynes | Uh, I certainly hope so. |
| 00:17 | kennylovesroaste | trying to look for good examples, but modern AAA game programmers totally reject classical OO patterns |
| 00:17 | chord | kennylovesroaste: what kind of AI are you trying to dio |
| 00:17 | TEttinger | heh. I was just looking for a nice bunch of clojure repos for Cua to browse |
| 00:17 | kennylovesroaste | chord: : simulation of group behavior |
| 00: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 |
| 00:18 | Raynes | Clojure code rarely has an expiration date. |
| 00:18 | sm0ke | stupid cosmic rays |
| 00:18 | brehaut | sm0ke: did you reload in your repl a bunch? |
| 00: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 |
| 00:19 | Raynes | It's best to use it within a week of opening though. |
| 00:19 | sm0ke | brehaut: yea i did that |
| 00: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 |
| 00:20 | brehaut | sm0ke: or seomthing along those lines |
| 00:20 | TEttinger | Cua: https://github.com/Raynes/refheap seems pretty well-organized |
| 00:20 | chord | kennylovesroaste: what does simulation of group behavior mean exactly |
| 00:20 | Cua | oh, nice, simple but useful example |
| 00:20 | Cua | thank again |
| 00:21 | TEttinger | Cua, it isn't exactly small, but all the parts are small so it shouldn't be total overload |
| 00: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 |
| 00:21 | TEttinger | thank Raynes! |
| 00:21 | Raynes | You're welcome peoples! |
| 00:21 | kennylovesroaste | http://www.gamasutra.com/view/feature/3382/implementing_a_group_behavioral_.php |
| 00: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 |
| 00:22 | kennylovesroaste | chord: forget graphics, get your AI down first |
| 00: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) |
| 00:22 | TEttinger | kennylovesroaste, you might like dijkstra maps (a generalization of dijkstra pathfinding) |
| 00:23 | kennylovesroaste | chord: : specifically large world, human world interactions |
| 00:23 | kennylovesroaste | chord: : people I know have been contacted to do simulations on large world AI + human dynamics |
| 00:23 | TEttinger | kennylovesroaste: http://paleoludic.com/writing/whitespace-reasoning/ http://paleoludic.com/writing/a-pathfinding-primer/ http://paleoludic.com/writing/engineering-pds/ |
| 00:24 | kennylovesroaste | TEttinger: yep |
| 00:24 | chord | kennylovesroaste: overrated |
| 00:24 | TEttinger | I have a clojure implementation, it turns out pretty fast in practice |
| 00:25 | kennylovesroaste | the dynamics of large scale human and AI agents is interesting |
| 00:25 | kennylovesroaste | mostly because of humans are very good at exploitation |
| 00:25 | kennylovesroaste | it's easy to just spawn mobs and AI them |
| 00:26 | kennylovesroaste | but dynamic graphs of human graph change is very hard when you have constraints |
| 00:26 | TEttinger | have you seen tucker's kobolds? |
| 00:26 | kennylovesroaste | no |
| 00:26 | kennylovesroaste | didn't read the whole article |
| 00:26 | kennylovesroaste | will do |
| 00:27 | TEttinger | http://www.tuckerskobolds.com/ excellent example of AI gone horribly wrong |
| 00:27 | kennylovesroaste | that's the thing |
| 00:27 | TEttinger | (for the players) |
| 00:27 | TEttinger | (great for the world) |
| 00:27 | kennylovesroaste | when you get funky with AI and humans are smart as hell and they exploit it |
| 00:28 | kennylovesroaste | i'd love to exploit minecraft |
| 00:28 | kennylovesroaste | wish we had the real source code |
| 00:28 | kennylovesroaste | just to explore things |
| 00:29 | kennylovesroaste | the old school mud guys know some things :) |
| 00:30 | sm0ke | Aha i added this zookeeper-clj dependency which fu**ed up the logging deps. |
| 00:31 | sm0ke | why would he directly include log4j instead of -api!! |
| 00:31 | sm0ke | seriously this log4j slf4j and all 4js for logging are turly nuisance in java |
| 00:32 | sm0ke | 8 out of 10 runtime conflicts are due to logging apis |
| 00:32 | sm0ke | what the jar hell |
| 00:33 | kennylovesroaste | what is the normal HOME for Emacs...gonna bite the bullet |
| 00:34 | kennylovesroaste | even though i hate "text editors" |
| 00:34 | kennylovesroaste | yogthos|away: : you love eclipse right? |
| 00:34 | kennylovesroaste | why can't i script eclipse, intellij like emacs |
| 00:35 | kennylovesroaste | and have org-mode too |
| 00:36 | sm0ke | eclipse is the internet explorer of java world. |
| 00:37 | kennylovesroaste | can i paste something about AI and why classical OO is wrong? |
| 00:37 | kennylovesroaste | 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 |
| 00: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? |
| 00:37 | kennylovesroaste | actors don't do shit |
| 00:37 | sm0ke | kennylovesroaste: what is it with you and hate for OO? |
| 00:37 | kennylovesroaste | things don't do shit |
| 00:37 | kennylovesroaste | sm0ke: : i hate classical OO |
| 00:38 | kennylovesroaste | it's wrong |
| 00:38 | sm0ke | kennylovesroaste: what's wrong about it? |
| 00:38 | kennylovesroaste | methods and data structures don't belong together |
| 00:38 | sm0ke | kennylovesroaste: why not? |
| 00:38 | kennylovesroaste | just wrong |
| 00:38 | kennylovesroaste | can't explain it...ask the Common Lisp guys |
| 00:39 | kennylovesroaste | generic methods |
| 00:39 | kennylovesroaste | multi-methods |
| 00: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. |
| 00:39 | sm0ke | what about it? |
| 00:39 | kennylovesroaste | it's just wrong that data and methods are together |
| 00:39 | kennylovesroaste | plain wrong |
| 00:39 | sm0ke | wow he is religious |
| 00:39 | sm0ke | about OO being wrong |
| 00:40 | kennylovesroaste | no, Common Lisp generic functions and multi-dispatch is right |
| 00:40 | kennylovesroaste | that's OO in my book |
| 00: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. |
| 00:40 | Raynes | THESE THINGS ARE WRONG AND THESE THINGS ARE RIGHT AND I DON'T KNOW WHY. |
| 00:40 | kennylovesroaste | i don't have to back it up. it's just the way i feel |
| 00:40 | kennylovesroaste | sorry |
| 00:40 | kennylovesroaste | methods and data are separate |
| 00:40 | sm0ke | :D you sir are wrong |
| 00:41 | kennylovesroaste | sm0ke: : ask Rich about that |
| 00:41 | tbaldridge | coding by feeling is always a bad idea, |
| 00:41 | tbaldridge | it just feels wrong |
| 00:41 | kennylovesroaste | ask rich how he feels about methods and data being in the same "group" |
| 00:41 | noonian | tbaldridge: lol |
| 00:42 | kennylovesroaste | rich will tell us why it's wrong |
| 00:42 | kennylovesroaste | fine |
| 00:42 | kennylovesroaste | i'll tell you why |
| 00:42 | mischov | Raynes: wrong all the things! |
| 00:42 | kennylovesroaste | because then you have first-class methods |
| 00:42 | sm0ke | i think i am going to coin a new term "lisp fanboys" |
| 00:42 | kennylovesroaste | and other methods acting on your objects |
| 00:42 | kennylovesroaste | it's bullshit |
| 00:43 | kennylovesroaste | total bullshit |
| 00:43 | tbaldridge | kennylovesroaste: so is it attaching methods to objects, or mutability? |
| 00:43 | kennylovesroaste | smalltalk greybeards that taught us wrong |
| 00:43 | kennylovesroaste | attaching a method to an object is wrong |
| 00:43 | kennylovesroaste | plain and simple |
| 00:43 | kennylovesroaste | we have data and functions |
| 00:43 | tbaldridge | kennylovesroaste: so what are protocols in Clojure? |
| 00:44 | xeqi | &(partial merge {:a 2}) ;; apparently this is wrong |
| 00:44 | lazybot | ⇒ #<core$partial$fn__4070 clojure.core$partial$fn__4070@1e34443> |
| 00:44 | kennylovesroaste | you tell me |
| 00:44 | kennylovesroaste | the answer to the expression problem? |
| 00:44 | Cua | kennylovesroaste: by 'attaching' you mean 'this object owns the method, other non-inherited objects can't use it?' |
| 00:45 | kennylovesroaste | it's a first class thing |
| 00:45 | kennylovesroaste | for example, my day job |
| 00:45 | kennylovesroaste | extension methods |
| 00:45 | kennylovesroaste | it just feels wrong that any method is attached to a DTO |
| 00:45 | Cua | make sense = easy for my brain to digest, just me though |
| 00:46 | kennylovesroaste | what we call in the .net world |
| 00:46 | kennylovesroaste | we have data structures and we have functions |
| 00:46 | kennylovesroaste | old school |
| 00:46 | chord | i need a "Learn you a clojure" book |
| 00:46 | kennylovesroaste | why do some methods are first class |
| 00:46 | chord | whats the best one out there |
| 00: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? |
| 00:46 | kennylovesroaste | and then we have to artifically attach methods ex-post-facto |
| 00:46 | kennylovesroaste | to some object |
| 00:46 | kennylovesroaste | total bullshit |
| 00:47 | kennylovesroaste | plus, multi-methods are the way to go |
| 00:47 | kennylovesroaste | be declarative |
| 00:47 | sm0ke | before this in scala i used to do concurrency with actors..which also guarantee thread safety for local objects |
| 00:47 | kennylovesroaste | declare your intention with multimethods |
| 00:47 | tbaldridge | kennylovesroaste: then why did rich add protocols? |
| 00:48 | kennylovesroaste | tbaldridge: : from what i remember, a great way to interop with java and plus very, very fast...multimethods are slow |
| 00:48 | kennylovesroaste | yes, multimethods are slow |
| 00:49 | kennylovesroaste | i only like clojure for the semantics |
| 00:49 | kennylovesroaste | hate lisp and the syntax |
| 00:49 | sm0ke | kennylovesroaste: do you know that clojure is a lisp? |
| 00:49 | tbaldridge | oh great one more of these guys... |
| 00:49 | kennylovesroaste | tbaldridge: : no dude, i accept what clojure is |
| 00:50 | kennylovesroaste | tbaldridge: : i said nothing more..clojure is great |
| 00:50 | kennylovesroaste | don't get stupid on me about how I have to accept s-expression |
| 00: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). |
| 00:50 | sm0ke | f*ck it , i need to get a book |
| 00:50 | kennylovesroaste | that's idiot |
| 00:51 | tbaldridge | sm0ke: yeah I hate that |
| 00:52 | kennylovesroaste | tbaldridge: heh, have they solved multimethods in scala yet? |
| 00:53 | kennylovesroaste | tbaldridge: : big debate on LTU many moons ago |
| 00:53 | kennylovesroaste | 'ye old expression problem" |
| 00:53 | tbaldridge | I don't know about scala, but I used multimethods in C# |
| 00:54 | sm0ke | wtf...everyone has multimethods...even java |
| 00:54 | sm0ke | i think polymorphic methods translate to multimethods? |
| 00:55 | jonasen | tbaldridge: Great video on macros |
| 00:55 | tbaldridge | sm0ke: not really |
| 00:55 | sm0ke | i dont know much clojure to know subtle differences though |
| 00:55 | chord | so how question how do I write the main function in clojure... |
| 00:55 | tbaldridge | sm0ke: multimethods have a dispatch fn that decides how things are dispatched |
| 00:57 | sm0ke | chord: defn -main [] ? |
| 00:58 | chord | why the hell is it -main and not main |
| 00:58 | Apage43 | (clojure.java.shell/sh "open" "-a" "Starcraft.app") |
| 00:58 | sm0ke | chord: haha man you are worse than me in clojure i see |
| 00:58 | sm0ke | chord: i think its just a convention |
| 00:59 | chord | ok seriously i need a book |
| 00:59 | chord | i need a book that explains why there are these conventions |
| 00: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 |
| 00:59 | sm0ke | chord: like functions in clojure which have side effect a written with a bang like sideeffect! |
| 00:59 | Apage43 | you can change it |
| 01:00 | chord | wtf is (:gen-class) |
| 01:00 | sm0ke | Apage43: Ah i see |
| 01:00 | callen | Frightened and angry Haskell user. Tonight is a good night. |
| 01:00 | Apage43 | http://clojuredocs.org/clojure_core/clojure.core/gen-class |
| 01:00 | chord | Apage43: WTF WHY IS MAIN FUNCTION SO COMPLICATED |
| 01:01 | sm0ke | Apage43: but is the gen class implicit for every namespace? |
| 01:01 | Apage43 | no |
| 01:01 | xeqi | why is it called main? |
| 01:01 | xeqi | I want it to be -core |
| 01:01 | Apage43 | classes aren't generated unless you put a (:gen-class) in your (ns) form |
| 01:01 | callen | why is it called? |
| 01:01 | callen | why is it? |
| 01:01 | callen | why is is? |
| 01:01 | callen | why is? |
| 01:01 | callen | why? |
| 01:01 | clojurebot | why is the ram gone is <reply>I blame UTF-16. http://www.tumblr.com/tagged/but-why-is-the-ram-gone |
| 01:01 | callen | ? |
| 01: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) |
| 01:02 | chord | Apage43: wtf who thought it was a good idea to complicate main with (:gen-class) |
| 01:02 | sm0ke | Apage43: so you are saying when you decalre a :main in lein..it adds a gen-class ? |
| 01:02 | Apage43 | sm0ke: no, it doesn't |
| 01:02 | sm0ke | eee |
| 01:02 | Apage43 | it works fine with lein run if you don't |
| 01:02 | Apage43 | but if you want a standalone jar |
| 01:02 | TimMc | Go home, callen, you're drunk. |
| 01:02 | Apage43 | you'll need to add it |
| 01:03 | callen | TimMc: just pre-competition jitters and memories of philosophizing |
| 01:03 | tbaldridge | jonasen: thanks |
| 01:03 | Apage43 | you can ignore gen-class for -main if you don't want an executable standalone jar |
| 01:03 | chord | ok you know that clojure is a piece of shit when its harder to understand hello world clojure over hello world clojure |
| 01:03 | chord | over hello world python |
| 01:04 | callen | Hickey's Design and Composition talk addresses this. |
| 01:04 | sm0ke | :D |
| 01:05 | chord | callen: i need your clojure book NOW |
| 01:05 | noonian | ,"hello, world" |
| 01:05 | clojurebot | "hello, world" |
| 01:07 | callen | chord: if it's going to make people like you write clojure, then I shouldn't write the book. |
| 01:07 | TimMc | snrk |
| 01:07 | arrdem | pwnt |
| 01:07 | sm0ke | chord: what are you trying to write in clojure? |
| 01:07 | chord | callen: i'm going to learn clojure JUST TO SPITE YOU |
| 01:08 | tbaldridge | http://31.media.tumblr.com/tumblr_lmhjcvHNao1qewg7lo1_250.gif |
| 01:08 | chord | sm0ke: right now i'm trying to get to the point of using JOGL |
| 01:09 | sm0ke | chord: whats stopping you? |
| 01: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 |
| 01:09 | chord | sm0ke: I DON'T UNDERSTAND HOW TO MAKE MAIN |
| 01:09 | arrdem | chord: :gen-class is indeed a difficult thing to type |
| 01:10 | kennylovesroaste | chord: no caps bro |
| 01:10 | callen | I got a reaction gif out of tbaldridge? Today is a triumphant today. |
| 01:10 | kennylovesroaste | chord: people will help you |
| 01:10 | Apage43 | lein new app starcraft |
| 01:10 | callen | I fully expect these good auspices to mean my team will win Clojure Cup. |
| 01:10 | chord | arrdem: why do i need to understand :gen-class, even c++ main function is simpler, that is just wrong |
| 01:10 | callen | lein new starcraft mai-clone |
| 01:10 | sm0ke | chord: writing in CAPS wont help either...did you know about lein?? |
| 01:10 | lazybot | sm0ke: Definitely not. |
| 01:10 | arrdem | Apage43: an app I can get behind! |
| 01:10 | tbaldridge | callen: it doesn't help that the client I'm currently working with requires an animated gif on every commit |
| 01:10 | callen | tbaldridge: <3 |
| 01:10 | noonian | chord: because most of the time using clojure, you never need to do what you are trying to do |
| 01:10 | chord | sm0ke: I'm using eclipse so I don't know whats going on in the backgroud |
| 01:10 | kennylovesroaste | non P.C their asian |
| 01:10 | arrdem | tbaldridge: I'm so sorry |
| 01:11 | Apage43 | (if you use "lein new app <projectname>" it creates main *for* you) |
| 01:11 | tbaldridge | lol |
| 01:11 | kennylovesroaste | that's how asians communicate |
| 01:11 | callen | kennylovesroaste: they're*, unless people own asians now. |
| 01:11 | kennylovesroaste | "give me the codes" |
| 01:11 | muhoo | this is feeling kind of icky |
| 01:12 | callen | muhoo: I'm sure that's how my one dollar bills feel on the weekend. |
| 01:13 | muhoo | oh, having fun at the O'Farrell? |
| 01:13 | chord | arrdem: explain what i need to do here to make this work https://gist.github.com/anonymous/6724234 |
| 01:13 | kennylovesroaste | muhoo: : almost my last name |
| 01: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. |
| 01:13 | kennylovesroaste | muhoo: : but english instead of irish |
| 01:13 | arrdem | chord: you just need to add a (:gen-class) to your (ns), after you get a better attitude |
| 01:13 | muhoo | kennylovesroaste: in joke, sorry, callen lives in san francsico, look up "mitchell brother's o'farrell theater" |
| 01:14 | kennylovesroaste | muhoo: : ahh..i'm a Ferrell..it's english |
| 01:14 | amalloy | muhoo: when i was in sf i lived right across the street from there |
| 01:14 | muhoo | hahah, in the TL? wow |
| 01:14 | arrdem | chord: although if you `lein run -m rts.core` it may just work without the gen-class |
| 01:14 | callen | amalloy is a hero to inspire us all. |
| 01:15 | kennylovesroaste | do you guys learn to live without debugger? |
| 01:15 | callen | kennylovesroaste: yes |
| 01:15 | kennylovesroaste | i love a stepping |
| 01:15 | kennylovesroaste | steppin;' is fun for me |
| 01:15 | callen | Referentially transparent code doesn't need it as much and stepping is more tedious than trace dumps. |
| 01:15 | kennylovesroaste | step and see locals and such |
| 01:15 | amalloy | muhoo: yeah, 888 Ofarrell is actually a pretty nice building, despite being on the edge of the TL |
| 01: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 |
| 01: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. |
| 01:16 | muhoo | in between them, most ofte |
| 01:16 | noonian | kennylovesroaste: I just use print and pprint statements |
| 01:16 | kennylovesroaste | muhoo: : oh brother, chains of s-expressions |
| 01:16 | kennylovesroaste | small funcs i guess |
| 01:16 | muhoo | (-> foo bar baz quux doh wtf omg) |
| 01:16 | callen | muhoo: I have emacs macros that inject deftrace across swaths of functions for me :P |
| 01:16 | kennylovesroaste | awesome, but when something goes wrong |
| 01:16 | muhoo | and there's a bug in what's passed between quuz and doh |
| 01:16 | callen | kennylovesroaste: when something goes wrong? use Ritz. |
| 01:16 | kennylovesroaste | yes, yes |
| 01:17 | callen | muhoo: the trace log shows what passed between quuz and doh. |
| 01:17 | kennylovesroaste | that's why i'm doing emacs |
| 01:17 | callen | it shows arguments and returns. |
| 01:17 | kennylovesroaste | and org-mode |
| 01:17 | muhoo | ~deftrace |
| 01:17 | clojurebot | Pardon? |
| 01:17 | kennylovesroaste | i'm not smart enough to debug dynamic languages |
| 01:17 | callen | people need to learn to use c.t.t - it's seriously good. |
| 01:17 | muhoo | ,(doc deftrace) |
| 01:17 | clojurebot | No entiendo |
| 01:17 | callen | kennylovesroaste: I had a stepping debugger in Python. Don't miss it anymore. |
| 01:17 | muhoo | :-/ |
| 01:17 | callen | muhoo: https://github.com/clojure/tools.trace/ |
| 01:18 | kennylovesroaste | callen: thank god for small functions |
| 01:18 | kennylovesroaste | think about small functions |
| 01: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 |
| 01: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. |
| 01:18 | kennylovesroaste | our MVC C# is a mess with all that javascript |
| 01:18 | callen | noonian: my unit tests tend to cover that. |
| 01:19 | kennylovesroaste | to be honest though, clojure is still dynamic |
| 01:19 | callen | I can usually "sense" when a function needs a test. |
| 01:19 | tbaldridge | kennylovesroaste: sadly, C# can be done very nicely, just most people don't do it that way |
| 01:19 | kennylovesroaste | tbaldridge: : our client-side is a damn mess..hoping to introduce at least knockout |
| 01: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 |
| 01:19 | kennylovesroaste | callback-after-callback-after-callback |
| 01: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 |
| 01:20 | kennylovesroaste | i'm in the weeds this week |
| 01:20 | kennylovesroaste | the C# isn't the problem |
| 01:20 | callen | noonian: probability of failure / degree to which I can fully encapsulate it in my mind at a glance (as a percentage) |
| 01:20 | kennylovesroaste | javascript is always the problem |
| 01:20 | tbaldridge | you could even port core.async to C# if you felt like it. |
| 01:20 | tbaldridge | yeah |
| 01:20 | kennylovesroaste | we can't compile it |
| 01:20 | kennylovesroaste | and see our resharper |
| 01: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. |
| 01:21 | callen | including at least one or two pathological, depending. |
| 01:21 | kennylovesroaste | maybe i'm in the wrong channel and should be in #scala |
| 01:21 | callen | kennylovesroaste: see ya! |
| 01:21 | kennylovesroaste | even though i love, fucking love clojure semantics |
| 01:21 | callen | noonian: I don't test anything that's obvious. |
| 01:21 | callen | kennylovesroaste: we'll miss your casual racism. Maybe chord can pick up the slack on that. |
| 01:21 | noonian | callen: thanks, thats a good way to look at it about knowing something probably isn't perfect but not what |
| 01:21 | kennylovesroaste | callen: : thanks dude |
| 01:21 | kennylovesroaste | callen: : huh? |
| 01:22 | callen | kennylovesroaste: I'm teasing you for what you said earlier. |
| 01:22 | kennylovesroaste | i wanna hear about my causual racism |
| 01:22 | kennylovesroaste | i'm not P.C! |
| 01:22 | callen | also my housemates are burning a raccoon on the stove and I'm going to lose my mind. |
| 01:22 | callen | 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 :) |
| 01:23 | kennylovesroaste | us white boys in america are the minority |
| 01:23 | kennylovesroaste | whatever |
| 01:23 | kennylovesroaste | i brought it up |
| 01:23 | kennylovesroaste | you brought it up |
| 01: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? |
| 01:23 | tbaldridge | gist? |
| 01:23 | clojurebot | gist is http://gist.github.com/ |
| 01:23 | callen | http://i.imgur.com/vdFA01K.png |
| 01:24 | kennylovesroaste | question |
| 01:24 | kennylovesroaste | how do you debug deeply nested s-expression? |
| 01:24 | kennylovesroaste | i don't get it |
| 01:24 | kennylovesroaste | small funcs? |
| 01:24 | callen | the s-expressions are besides the point. |
| 01:24 | callen | Write small functions. |
| 01: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 |
| 01:25 | kennylovesroaste | so when you -> |
| 01:25 | kennylovesroaste | you repl individual parts |
| 01:25 | callen | what noonian said if you're too lazy to defn the sub-components and deftrace all of it. |
| 01: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 |
| 01:25 | Brand0 | does rich hickey ever log onto #clojure? |
| 01:25 | callen | I'm too lazy to do stuff manually, so I just use trace. |
| 01:25 | callen | Brand0: last time I talked to him on IRC was in '08 or '09 |
| 01:26 | callen | definitely not in '10 |
| 01:26 | callen | that doesn't mean he wasn't around though. |
| 01:26 | callen | there are lots of Cogni employees in here that could tell you a more precise answer :P |
| 01:26 | Brand0 | thanks |
| 01:26 | kennylovesroaste | good community |
| 01:26 | kennylovesroaste | love the semantics |
| 01:27 | kennylovesroaste | love my static typing and python like syntax |
| 01:27 | kennylovesroaste | i'll still hang out |
| 01:27 | kennylovesroaste | just wish i could have it |
| 01:27 | callen | kennylovesroaste: are you Steven? |
| 01:27 | kennylovesroaste | we can't do programming in the large without static typing |
| 01:27 | kennylovesroaste | no bro |
| 01:27 | kennylovesroaste | just me |
| 01:27 | kennylovesroaste | chris |
| 01:28 | callen | you talk to yourself in public just like this other solipsist that frequented the channel |
| 01:28 | kennylovesroaste | i'll do my own programming emacs and stuff, but can never ever introduce dynamic lisp into my team |
| 01:28 | kennylovesroaste | love solopist |
| 01:28 | callen | solipsist. |
| 01:28 | kennylovesroaste | yes |
| 01:28 | kennylovesroaste | sorry |
| 01:28 | noonian | kennylovesroaste: rich hickey wrote clojure so he could use it for programming in the large |
| 01:29 | kennylovesroaste | do you want to argue noonian ? |
| 01:29 | noonian | no |
| 01:29 | tbaldridge | kennylovesroaste: I beg to differ, I work daily on very large Clojure codebases, static types just get in the way |
| 01:29 | kennylovesroaste | i love clojure for anti-OO and it's seq semantics |
| 01:30 | kennylovesroaste | tbaldridge: : cool |
| 01:30 | tbaldridge | you think you're more productive because you spend half your day re-writing your types to fit some new requirement. |
| 01:30 | sm0ke | i think clojure has type hints |
| 01:30 | kennylovesroaste | tbaldridge: : since our codebase is increasingly javascript i guess it doesn't matter |
| 01:30 | kennylovesroaste | i just like static semantic help with the IDE |
| 01:30 | sm0ke | is that equivalent to static typing? |
| 01:31 | sm0ke | i mean does type hints catch compile time errors? |
| 01:31 | kennylovesroaste | since clojure isn't OO it's much easier on semantic help |
| 01:31 | Cua | isn't type hinting only for optimization |
| 01:31 | kennylovesroaste | sm0ke: : yes |
| 01:31 | Cua | for some cases |
| 01:31 | kennylovesroaste | but i want for teams our ides helping us out |
| 01:32 | kennylovesroaste | i know it's hard core to think that we don't need help |
| 01:32 | callen | Clojure has the faculties of an OO language, just in a simpler and more composable form. |
| 01:32 | kennylovesroaste | but then you do Intellij or Resharper and then you realize |
| 01:32 | tbaldridge | kennylovesroaste: PyCharm would beg to differ about static typing needed for IDE support |
| 01:32 | kennylovesroaste | tbaldridge: : very hard, and heuristic |
| 01:32 | callen | I use Rope in Emacs with Python, IDE-esque support works fine. |
| 01:32 | kennylovesroaste | jetbrains are geniusis |
| 01:33 | kennylovesroaste | sic |
| 01:33 | callen | no they aren't, lol. |
| 01:33 | sm0ke | this also seems interseting https://github.com/clojure/core.typed |
| 01:33 | Apage43 | There's also light table-like stuff, which just instruments and traces your code |
| 01:33 | callen | they're a product company. |
| 01:33 | kennylovesroaste | they are very good at heuristics |
| 01:33 | Apage43 | and you can see the data flow through it |
| 01:33 | kennylovesroaste | when you're dynamics then you're heuristic |
| 01:33 | kennylovesroaste | and not absolute |
| 01:33 | noonian | Apage43: how do you configure that in light table? |
| 01: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. |
| 01:34 | Apage43 | dunno how to turn it on on files. In the instarepl its always on |
| 01:34 | noonian | I saw the kickstarter video but I haven't been able to get that working |
| 01:34 | kennylovesroaste | tbaldridge: : what do you say about clojure vs scala? |
| 01:34 | callen | tbaldridge: except when you need mutability* |
| 01:34 | callen | Scala is tedious and mis-designed. |
| 01:34 | Apage43 | I haven't really used it extensively, mostly because I am not very productive outside of vim or emacs |
| 01:34 | callen | if you could say it was designed at all. |
| 01:34 | kennylovesroaste | i'm amazed that clojure is beating out scala |
| 01:35 | kennylovesroaste | as a dynamic typing and a lisp |
| 01:35 | kennylovesroaste | amazing |
| 01:35 | kennylovesroaste | i have my feelings |
| 01:35 | callen | kennylovesroaste: this is kind of tedious. do you come with a -q flag that restricts your output to Clojure stuff? |
| 01:35 | callen | say, questions about how to do things? |
| 01:35 | callen | you're less relevant than chord, and that dude tries his hardest to be irrelevant of anybody in here. |
| 01:35 | sm0ke | kennylovesroaste: sup odersky |
| 01:35 | kennylovesroaste | callen: tell OO people how to not do OO |
| 01:36 | sm0ke | :D |
| 01:36 | kennylovesroaste | callen: tell java/c#/Ruby/Python people how they've been doing it wrong |
| 01: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 |
| 01:36 | kennylovesroaste | callen: i'm not chord |
| 01:36 | callen | Some childen grew up never being told to be quiet by their parents. Those children grew up to become chord and kennylovesroaste. |
| 01:36 | callen | kennylovesroaste: you were made for each other. |
| 01:37 | sm0ke | this channel is entertaining today |
| 01:37 | callen | kennylovesroaste: speak for others' benefit, not yours. shush. |
| 01:37 | kennylovesroaste | callen: you hurt my feelings ;( |
| 01:37 | chord | callen: I'm going to get JOGL working without your help, and i'm not going to show the code to you |
| 01:37 | kennylovesroaste | i thought i had some insight about non-OO |
| 01:37 | Apage43 | I read some code I would've rather not seen today |
| 01:37 | kennylovesroaste | i guess not |
| 01:37 | dissipate | Apage43, a coding horror? |
| 01:37 | noonian | can never be unseen lol |
| 01:37 | callen | Apage43: o rly? Do I need to share my transitive tree breakdown -> bag of entities -> tree rematerialization code to you? |
| 01:38 | callen | because boy, do I have some horrors for you. |
| 01:38 | Apage43 | callen: see, that'd actually be interesting |
| 01:38 | kennylovesroaste | callen: : what do you do for a living then? |
| 01:38 | Apage43 | this was a coding challenge submission |
| 01:38 | kennylovesroaste | callen: : with your transitive tree breakdowns? |
| 01:38 | Apage43 | (a coworker was challenging a canditate) |
| 01:38 | Apage43 | and the thing *didn't compile or run* |
| 01: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. |
| 01:39 | Apage43 | the code had never been tried |
| 01:39 | kennylovesroaste | sounds like the clojure version of Tony Morris |
| 01:39 | kennylovesroaste | too big for his britches |
| 01:39 | Apage43 | just "hope it works!" |
| 01:39 | callen | and I was going from tree -> bag of entities -> back to tree |
| 01:39 | dissipate | Apage43, which language? |
| 01:39 | Apage43 | Java. |
| 01:39 | kennylovesroaste | callen: like git? |
| 01: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 |
| 01:39 | dissipate | Apage43, is it a Java shop? |
| 01:39 | callen | kennylovesroaste: nothing like git. |
| 01:39 | Cua | so what do you guys think about Scala vs Clojure? Yes I know I am in #clojure |
| 01:39 | Apage43 | the position was a java position |
| 01: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 |
| 01:40 | callen | Cua: stop. |
| 01:40 | Cua | I looks at Scala and get this 'C++ like' feeling |
| 01:40 | Cua | so I choose the other one |
| 01:40 | Cua | callen: okay |
| 01:40 | callen | stop talking about things that aren't Clojure. |
| 01:40 | callen | nobody cares what you think about Scala here or in #scala. |
| 01:40 | callen | just code. |
| 01:40 | dissipate | Apage43, there in lies your problem. Java is a really low bar inherently. |
| 01: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 |
| 01:40 | kennylovesroaste | callen: talk about real world things then |
| 01:40 | callen | I was...just a moment ago. |
| 01:41 | kennylovesroaste | not about bags of trees |
| 01:41 | callen | I was talking about what I did at work today and yesterday. |
| 01:41 | dissipate | Apage43, hire for a Haskell position, or Clojure. the bar is raised. |
| 01: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. |
| 01:41 | callen | that's as real-world as it gets. |
| 01:41 | kennylovesroaste | talk about how javascript sucks on the front end |
| 01:41 | Apage43 | yeah but then I have to tell the haskell/clojure guy to write Java |
| 01:41 | Apage43 | =P |
| 01:42 | callen | Apage43: you use Java at your shop? |
| 01:42 | kennylovesroaste | and how callback to callback and callback sucks |
| 01:42 | Apage43 | anyway I'm not the guy over this position anyhow |
| 01:42 | Apage43 | callen: Android |
| 01:42 | callen | #jobsIdoNotWant |
| 01:42 | tbaldridge | kennylovesroaste: use clojurescript on the front-end. problem solved. :-P |
| 01:42 | dissipate | callen, nobody seems to want to admit that they work at a Java shop or they run a Java shop |
| 01:42 | kennylovesroaste | talk about how i can deal with popups on the frontend |
| 01:42 | Apage43 | specifically an Android library |
| 01:42 | callen | tbaldridge: Prismatic used to have a backend driven by CLJS on Node.js |
| 01:43 | dissipate | Apage43, was the code challenge on site or take home? |
| 01:43 | Apage43 | dissipate: take home |
| 01:43 | kennylovesroaste | tbaldridge: :so i have a popup that needs to talk to the page |
| 01:43 | chord | tbaldridge: TOO LATE I ALREADY FOUND THIS Clojure Gently video : http://www.youtube.com/watch?v=dQ6hhnitzHg |
| 01:43 | dissipate | haha, if it was take home, that's an epic fail |
| 01:43 | kennylovesroaste | tbaldridge: : and we have ajax, jquery, and all sorts of mess |
| 01:43 | Brand0 | does anyone here have much experience running pure clojure in the back end as web server? how does it scale memory-wise? |
| 01:43 | kennylovesroaste | it's a freaking mess |
| 01:43 | noonian | then the haskell guy will write haskell that writes java |
| 01:43 | kennylovesroaste | i'm in hell |
| 01:43 | kennylovesroaste | javascript hell |
| 01:44 | callen | I think hell is debugging haskell-java. |
| 01:44 | brehaut | Brand0: it depends a lot on how much time you spend tuning your JVM |
| 01:44 | kennylovesroaste | and tomorrow when i sober up it'll be hell |
| 01:44 | callen | MonadVisitorPatternFactory |
| 01:44 | callen | MonadTransformerParserCombinatorObserverSupervisor |
| 01:44 | clojurebot | excusez-moi |
| 01:44 | kennylovesroaste | ajax after callback after callback |
| 01:44 | Brand0 | brehaut, do most people use J2EE? |
| 01:44 | Brand0 | (or do you?) |
| 01:44 | brehaut | callen: VistorMonadTransformerStateFactoryFactory |
| 01:44 | kennylovesroaste | sorry tbaldridge |
| 01:44 | kennylovesroaste | just us brothers in the field |
| 01:44 | brehaut | Brand0: i would assume nearly nobody uses J2EE |
| 01: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. |
| 01:45 | callen | brehaut: I now have a new favorite way to troll Haskell users. Write faux Haskell code with Factory in the name. |
| 01:45 | kennylovesroaste | can someone give a brother a framework for doing wizards in jquery |
| 01:45 | kennylovesroaste | just simple shit |
| 01:45 | callen | kennylovesroaste: no. learn to code. |
| 01:45 | kennylovesroaste | callen: : fuck you |
| 01:45 | callen | kennylovesroaste: just simple shit - so just code it. |
| 01:45 | brehaut | step one: stop doing wizards. step two: stop using jquery. problems all solved |
| 01:45 | kennylovesroaste | callen: : i gotta deal with other assholes |
| 01:46 | kennylovesroaste | callen: : knockout |
| 01:46 | Apage43 | dissipate: yeah, pretty much true. Hiring is hard. |
| 01:46 | kennylovesroaste | i guess that's why i make 120k |
| 01:46 | callen | Apage43: my secret weapon in hiring is fizzbuzz. |
| 01:46 | kennylovesroaste | to solve problems |
| 01:46 | Apage43 | yeah, I had this conversation today |
| 01:47 | callen | Apage43: are you sure? |
| 01:47 | Apage43 | the guy's coding challenge was a little complex |
| 01:47 | callen | Apage43: it's the (inc (inc (inc fizzbuzz))) |
| 01:47 | callen | Apage43: you start with vanilla fizzbuzz, but the difficulty steadily and smoothly ratchets up. |
| 01:47 | Apage43 | and the point was made that even a really simple challenge filters out a *lot* of folks |
| 01:47 | callen | Apage43: I've never once had someone survive all stages of my fizzbuzz interview question. |
| 01:47 | Apage43 | huh |
| 01:47 | kennylovesroaste | Apage43: : i would be filtered out, but i would produce on a team |
| 01:47 | Apage43 | fun :) |
| 01:48 | kennylovesroaste | there's a difference |
| 01:48 | callen | Apage43: it's based on Dave Fayram's. |
| 01:48 | kennylovesroaste | you think all your brains can be leaders? |
| 01:48 | callen | Apage43: has about 6 or 7 stages, depending on whether they skip stages. |
| 01:48 | callen | Apage43: starts with the standard fizzbuzz and then gets abstracted more and more. |
| 01:48 | brehaut | callen: aha brilliant. his fizz buzz is stunning |
| 01:49 | callen | brehaut: the trick was in producing something that steadily ups the difficulty across his version and beyond it. |
| 01:49 | dissipate | wtf? this fizz buzz thing is a joke right? |
| 01:49 | kennylovesroaste | fizzbuzz is simple shit, but that stupid mensa crap is bullshit |
| 01:49 | callen | it's the perfect interview question. |
| 01:49 | callen | kennylovesroaste: you wouldn't get past stage 2 of my fizzbuzz :P |
| 01:49 | callen | I guarantee it. |
| 01:49 | kennylovesroaste | maybe not |
| 01:49 | brehaut | http://dave.fayr.am/posts/2012-10-4-finding-fizzbuzz.html ← dissipate |
| 01:49 | callen | I've flunked out engineers that have been programming for 15 years at stage 2 or 3. |
| 01:49 | kennylovesroaste | but callen i'd lead you |
| 01:49 | callen | kennylovesroaste: you wouldn't. |
| 01:49 | callen | kennylovesroaste: I don't answer to brainless dickwits. |
| 01:49 | kennylovesroaste | callen: you'd never lead anybody |
| 01:50 | callen | kennylovesroaste: I was the CTO of my last company. |
| 01:50 | callen | kennylovesroaste: so that's patently false. |
| 01:50 | callen | I lead a team of engineers. |
| 01:50 | kennylovesroaste | callen: : "your last company" |
| 01:50 | callen | yes, a startup. |
| 01:50 | chord | keenylovesroaste: you're doing a good job keep on trolling callen until I figure out this clojure shit |
| 01:50 | callen | we were funded. |
| 01:50 | kennylovesroaste | i'd put my brain against yours |
| 01:50 | clojurebot | Gabh mo leithscéal? |
| 01:50 | kennylovesroaste | you want math? |
| 01:50 | callen | I want code. |
| 01:50 | kennylovesroaste | sieves? |
| 01:50 | kennylovesroaste | factorials |
| 01:51 | callen | are factorials supposed to be complicated? |
| 01:51 | kennylovesroaste | fibonicas |
| 01:51 | callen | or fibonacci? |
| 01:51 | kennylovesroaste | bullshit |
| 01:51 | kennylovesroaste | you're an idiot |
| 01:51 | Brand0 | more trolling haskell users tips |
| 01:51 | kennylovesroaste | i'd fire you on the spot |
| 01:51 | kennylovesroaste | do you think I or YOU want a Carmack? |
| 01:51 | callen | I've found someone I like less than chord. |
| 01:52 | callen | chord: you're now my second-least-favorite person. You've been promoted. |
| 01:52 | kennylovesroaste | or a rockstar? |
| 01:52 | callen | chord: say hi to your bottom-buddy kennylovesroaste. |
| 01:52 | kennylovesroaste | you don't want rockstars |
| 01:52 | kennylovesroaste | i fire middle-managers like callen |
| 01:52 | chord | is there a bot recording this conversation to a log |
| 01:53 | callen | chord: it's IRC |
| 01:53 | noonian | you can be fairly sure the NSA has access to a log |
| 01:53 | kennylovesroaste | this guy callen is another one i've dealth with |
| 01:54 | kennylovesroaste | many, many times |
| 01:54 | callen | you don't actually know if I'm a guy or not, but we can go with that. |
| 01:54 | glosoli | lol |
| 01:54 | callen | can we add casual sexism to the list? |
| 01:54 | kennylovesroaste | can we add hate P.C to the list |
| 01:54 | kennylovesroaste | anyway.. |
| 01:54 | OtherRaven | it's not much of an addition on the internet |
| 01:55 | kennylovesroaste | no, we're not allowed to hate on some people |
| 01:55 | callen | OtherRaven: I'm not even one to usually notice sexism or racism, but this guy is obliterating my tolerance levels. |
| 01:55 | kennylovesroaste | i can hate on white people like callen though? please? |
| 01:55 | callen | you don't know if I'm white either. |
| 01:55 | kennylovesroaste | white men? |
| 01:55 | callen | or a man. |
| 01:55 | callen | why don't we just go with "people" unqualified by creed, race, or gender and focus on the content of their thoughts and deeds? |
| 01:55 | OtherRaven | callen: yeah, but he's trying so hard it's laughable |
| 01:56 | kennylovesroaste | if you're not either, it's very cool |
| 01:56 | kennylovesroaste | are you an Indian woman? |
| 01:56 | callen | OtherRaven: the funny part is, I'm usually the villain in this channel. This guy makes me look like a saint. |
| 01:56 | TEttinger | it hasn't taken long for #clojure to get inundated with trolls, has it |
| 01:56 | kennylovesroaste | it's fun |
| 01:56 | callen | TEttinger: depends on how long you've been here for that perspective to be the case. |
| 01:56 | brehaut | TEttinger: 5 or 6 years? |
| 01:56 | clojurebot | excusez-moi |
| 01:56 | Apage43 | now we know we've made it :) |
| 01:57 | OtherRaven | callen: not everyone has what it takes to be a Real Troll |
| 01:57 | callen | took longer than I thought I would, shorter than I would've liked. |
| 01:57 | kennylovesroaste | i hate callen |
| 01:57 | kennylovesroaste | callen is an evil white male |
| 01:57 | mtp | i'm a pretty bad antitroll |
| 01:57 | kennylovesroaste | we have estabished that |
| 01:57 | kennylovesroaste | :) |
| 01:57 | kennylovesroaste | just messing around |
| 01:57 | mtp | i'm just joking |
| 01:57 | kennylovesroaste | i'm not |
| 01:58 | kennylovesroaste | callen is pure evil |
| 01:58 | kennylovesroaste | he's a white male |
| 01:58 | noonian | hey, leave us innocent white males out of it |
| 01:58 | brehaut | TEttinger: the earliest logs i know of are from Feb 1s 2008 |
| 01:58 | kennylovesroaste | or a indian male |
| 01:58 | kennylovesroaste | which is almost as evil |
| 01:58 | kennylovesroaste | indian as the continent not P.C native american |
| 01:59 | TEttinger | brehaut, I more meant since chord came back, and kennylovesroaste got here, it just got way worse very quickly |
| 01:59 | OtherRaven | men aren't evil, they're just a little porcine |
| 01:59 | kennylovesroaste | sorry TEttinger |
| 01:59 | TEttinger | you're not though |
| 01:59 | kennylovesroaste | i'll shut up |
| 01:59 | callen | OtherRaven: men are delicious and offensive to jewish people? |
| 01:59 | kennylovesroaste | TEttinger: : can we just be free to talk? |
| 01:59 | OtherRaven | callen: yes XD |
| 02:00 | callen | the nice part of the trolls is that I'm no longer even close to the most hated person here anymore |
| 02:00 | callen | now I can do my dark work unnoticed. |
| 02:00 | kennylovesroaste | it's not troll |
| 02:00 | TEttinger | kennylovesroaste, yes, I'm putting you on ignore though |
| 02:00 | kennylovesroaste | cool |
| 02:00 | callen | TEttinger: don't plonk him. Suffer with us. |
| 02:00 | callen | it'll refine the soul. |
| 02:00 | TEttinger | I don't have your amazing stamina callen |
| 02:01 | kennylovesroaste | what does rich say! |
| 02:01 | OtherRaven | I'd ignore him (and that other one, what's his name) but then I'd be tormented by curiosity. |
| 02:01 | callen | TEttinger: I am indeed an everlasting doom-engine of hatred. |
| 02:01 | muhoo | wtf happened here? ugh. |
| 02:01 | kennylovesroaste | that's your ultimate thinking |
| 02:01 | kennylovesroaste | rich would say get rid of me |
| 02:01 | callen | OtherRaven: that's why I don't. |
| 02:01 | callen | It's not worth the partial snips of trolling of people reacting. |
| 02:01 | callen | You can ignore direct replies, but stuff leaks through. |
| 02:01 | kennylovesroaste | i do have some interesting quips |
| 02:01 | kennylovesroaste | and not total troll |
| 02:02 | kennylovesroaste | so there! |
| 02:02 | TEttinger | eh, it's ok. I just get less messages to check |
| 02:02 | callen | muhoo: so how about them 49'ers? |
| 02:02 | callen | muhoo: I'm taking off work tomorrow for Clojure Cup :) |
| 02:02 | TEttinger | didn't they just crush the rams? |
| 02:02 | callen | TEttinger: I wouldn't know. Just making conversation, haha. |
| 02:02 | TEttinger | it was a really one-sided game is all |
| 02:03 | TEttinger | apparently most of them have been so far |
| 02:03 | OtherRaven | that's, like, football right? |
| 02:03 | callen | OtherRaven: american football I think. |
| 02:03 | TEttinger | american football yes |
| 02:03 | kennylovesroaste | listen, sorry to "troll" you guys |
| 02:03 | kennylovesroaste | i'm not trolling |
| 02:03 | kennylovesroaste | i love languages |
| 02: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? |
| 02:03 | kennylovesroaste | i'll leave you guys alone |
| 02:03 | callen | glosoli: keyboard? |
| 02:03 | noonian | I won't be able to find joy until the basketball season starts up again |
| 02:04 | TEttinger | 49ers refers to the gold rush of 1849, which sorta brought most of the future inhabitants of san francisco to california IIRC |
| 02:04 | callen | noonian: college or pro? |
| 02:04 | glosoli | callen: wtf, sorry keyword... sleepy damn |
| 02:04 | noonian | pro\ |
| 02:04 | TEttinger | why they named the team that... |
| 02:04 | noonian | I like college football heh |
| 02:04 | callen | noonian: too much drama these days. |
| 02:04 | chord | you guys are talking too fast I can't keep up with the chat and do google searches |
| 02:04 | TEttinger | noonian, harvey mudd has a football team. did I say football I meant foosball |
| 02:05 | TEttinger | my brother went there |
| 02:05 | OtherRaven | chord: they're talking about sports... you're not missing much |
| 02:06 | callen | hater. |
| 02:06 | callen | I should talk about my strength training programming, then you'd get really bored :) |
| 02:06 | OtherRaven | don't be hating on haters |
| 02: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. |
| 02:07 | chord | wtf is that |
| 02:07 | noonian | chord: its all good I get that too |
| 02:07 | callen | chord: AOT. |
| 02:07 | callen | noonian: no no, let the fear permeate his mind. |
| 02:07 | noonian | ahead of time compile |
| 02:08 | callen | noonian: it makes the flesh tastier for the harvesting when they're perpetually afraid. |
| 02:08 | kennylovesroaste | go Rams |
| 02:08 | arrdem | callen: you continue to brighten my day. |
| 02:08 | noonian | as opposed to 'just in time compiled' |
| 02:08 | kennylovesroaste | callen: do you do paredit? |
| 02:09 | callen | kennylovesroaste: not lately, didn't offer enough money. |
| 02:09 | callen | kennylovesroaste: do you for a fitty and a tank of gas tho. |
| 02:09 | kennylovesroaste | callen: :2 fity per tank |
| 02:09 | kennylovesroaste | paredit |
| 02:09 | kennylovesroaste | callen: |
| 02:10 | callen | kennylovesroaste: for a fitty and a tank of gas I'll balance your parens alright. |
| 02:10 | callen | gotcher structural editin' right here son. |
| 02:10 | kennylovesroaste | yes |
| 02:10 | arrdem | callen: but can you reindent indentation sensitive grammars? |
| 02:11 | kennylovesroaste | you slurp s-expressions like Obama does the private economy |
| 02:11 | chord | why did the following work even without :gen-class java -jar ./target/rts-0.1.0-SNAPSHOT-standalone.jar |
| 02:11 | callen | I don't think anybody understood what I was saying. |
| 02:11 | kennylovesroaste | callen: no i just slurped it to my own political means |
| 02:12 | brehaut | http://xkcd.com/1270/ |
| 02:12 | marcopolo2 | Anyone know how I can do the cljs equivalent of some.library.with.func(12,5)? Instead of doing (.func (.-with (.-library .... |
| 02:12 | OtherRaven | callen: you were making structural editing sound like prostution... I think |
| 02:12 | callen | jesus, at least somebody got it. |
| 02:12 | callen | thick ass yobbos. |
| 02:12 | kennylovesroaste | tell me how it work with prostituion? |
| 02:12 | arrdem | callen: I mean do you want audience feedback here? you're doing this heckling thing pretty well |
| 02:12 | kennylovesroaste | yes, slurp functions |
| 02:12 | arrdem | callen: and the popcorn is hot |
| 02:13 | callen | kennylovesroaste: I work it. With you. Working it. |
| 02:13 | callen | kennylovesroaste: for a fitty and a tank of gas. And I rebalance your parens. Greek. |
| 02:13 | callen | bare symbols, the works. |
| 02:13 | kennylovesroaste | callen: : fity 2 |
| 02:13 | callen | you're not very good at this conversation thing. |
| 02:14 | OtherRaven | you geeks and your jargon |
| 02:14 | kennylovesroaste | not at all, just south park |
| 02:14 | kennylovesroaste | 2 fity |
| 02: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? |
| 02:14 | callen | I know it might be culturally insensitive/biased, but the false negatives might be worth it. |
| 02:15 | arrdem | ok so unless you want this troll to get community rep points I suggest we kick it posthaste. |
| 02:15 | kennylovesroaste | callen: :nope, you got me |
| 02:15 | kennylovesroaste | callen: : what would you do without being a big man |
| 02:15 | kennylovesroaste | shit |
| 02:15 | muhoo | ~gentlemen |
| 02:15 | clojurebot | You can't fight in here. This is the war room. |
| 02:15 | noonian | thats awesome |
| 02:15 | OtherRaven | tehehe |
| 02:15 | callen | muhoo: there's no fight here. He runs flailing into brick walls back and forth. I sit in my chair and heckle. |
| 02:16 | kennylovesroaste | callen wants to be a big man |
| 02:16 | callen | we could do a strength competition, but if you don't train, you'll probably lose. |
| 02:16 | callen | I'm okay with deciding things on that basis, home team advantage. |
| 02:17 | OtherRaven | is this the sort of strength training you program? |
| 02:17 | callen | I just don't think it's the most relevant metric. |
| 02:17 | kennylovesroaste | it reminds me of Boogie Nights |
| 02:17 | kennylovesroaste | "how much do you bench" |
| 02:17 | chord | Ok I finally got lein run working, now I need someone to tell me how to get JOGL working |
| 02:17 | callen | haha, I do a lot more than just bench. |
| 02:17 | callen | squats/bench/press/deadlifts/power cleans... |
| 02:17 | arrdem | callen: dost thou even hoist? |
| 02:18 | callen | arrdem: VERILY |
| 02:18 | kennylovesroaste | callen: how many men have you killed in combat? |
| 02:18 | muhoo | callen: do not feed |
| 02:18 | callen | kennylovesroaste: none, are you volunteering? |
| 02:18 | callen | muhoo: fine fine. |
| 02:18 | kennylovesroaste | callen: you've never killed a man? |
| 02:18 | arrdem | muhoo: until we kick it, I say let him loose. |
| 02: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 |
| 02:18 | callen | kennylovesroaste: no but you're making me reconsider my ethics. |
| 02:18 | arrdem | kennylovesroaste: I'm about to once this reverse whois finishes.. |
| 02:19 | callen | LOL |
| 02:19 | kennylovesroaste | callen: you've never been in war? |
| 02:19 | callen | chord: threats don't work. The nation of Clojure does not respond to terrorist demands. |
| 02:19 | arrdem | kennylovesroaste: just keep typing. you'll know when it gets to you |
| 02:20 | kennylovesroaste | hah |
| 02:20 | kennylovesroaste | never fought in Afghan or Iraq? |
| 02:20 | kennylovesroaste | haha |
| 02:20 | kennylovesroaste | you've never been in war |
| 02:20 | kennylovesroaste | bitch |
| 02:21 | arrdem | callen: at what point are we allowed to mention t3ch and get these idiots out of here |
| 02:21 | callen | arrdem: I'm thinking about it. |
| 02:21 | kennylovesroaste | callen: you're a punk |
| 02:21 | kennylovesroaste | callen: you never fought in war |
| 02:21 | arrdem | callen: I'm down. Also submitting a PR to clojurebot for a ~votekick |
| 02:21 | arrdem | s/pr/issue/ |
| 02:21 | callen | god that would be amazing. |
| 02:22 | kennylovesroaste | probably european |
| 02:22 | callen | maybe based on a rolling log of activity? |
| 02:22 | kennylovesroaste | swede or something |
| 02:22 | callen | participation I mean. |
| 02:22 | kennylovesroaste | callen: you're a punk ass-bitch |
| 02:22 | arrdem | callen: nah. I'll base it on my clojure-cup entry which is community rep estimation |
| 02:22 | callen | arrdem: *serious-face* we're going to crush you. |
| 02:23 | kennylovesroaste | europeans |
| 02:23 | callen | arrdem: I have a crack team represented by California, Chicago, and Vancouver :) |
| 02:23 | arrdem | callen: I have a team of Austinites. we win. |
| 02:23 | callen | arrdem: only in income left-over after taxes :( |
| 02:23 | kennylovesroaste | some of us fight in wars |
| 02:23 | callen | everytime I see a pay-stub I cry deep deep tears of sorrow. |
| 02:23 | kennylovesroaste | some of us don't |
| 02:23 | kennylovesroaste | you're a punk! |
| 02:23 | arrdem | technomancy: sorry to bug you but for the love of god kick this troll |
| 02:24 | kennylovesroaste | us americans fight for you |
| 02:24 | callen | I think t3ch won't do it just because he latched onto my butthole. |
| 02:24 | callen | and will blame me because the last two trolls latched onto me. |
| 02:24 | arrdem | callen: wat |
| 02:24 | arrdem | oh. eh. |
| 02:24 | callen | arrdem: half-joking. |
| 02:25 | kennylovesroaste | fuck you europeans! |
| 02:25 | arrdem | callen: yeah I'll be interested to see what the other rep systems look like.. |
| 02:25 | callen | arrdem: we're doing Simonides. |
| 02:25 | arrdem | callen: I don't get it. |
| 02:25 | callen | superhero lossless client analytics :D |
| 02:26 | kennylovesroaste | i will always hate leftists |
| 02:26 | arrdem | I think our name is nil punters :/ |
| 02:26 | kennylovesroaste | which means all europeans |
| 02:26 | callen | arrdem: our team is named Flying Parens |
| 02:26 | kennylovesroaste | just pure fucking scum |
| 02:26 | kennylovesroaste | kick me |
| 02:26 | callen | project name is Simonides. |
| 02:26 | kennylovesroaste | rich hates leftist too! |
| 02:27 | arrdem | ah. we settled on cloutjure, hence my earlier complaining about LEIN_IRONIC_JURE |
| 02:27 | kennylovesroaste | rich hates european scum |
| 02:27 | marcopolo2 | Okay, another cljs question; How do I do new someObj.foo() ? |
| 02:27 | kennylovesroaste | fucking leftists |
| 02:27 | arrdem | marcopolo2: (.foo someObj) |
| 02:28 | marcopolo2 | arrdem: note the new keyword |
| 02:28 | chord | where do I download jogl jars, I can't find it among the trillion deep link hell on their webpage |
| 02:28 | marcopolo2 | (.foo someObj) would become someObj.foo() |
| 02:28 | callen | chord: http://download.java.net/maven/2/net/java/dev/jogl/ |
| 02:28 | callen | chord: http://docs.codehaus.org/display/MAVENUSER/Projects+With+JNI |
| 02:28 | callen | chord: http://opensource.mxtelecom.com/maven/repo/com/wapmx/native/mx-native-loader/1.2/ |
| 02:29 | gws | chord: http://jogamp.org/wiki/index.php/Downloading_and_installing_JOGL |
| 02:29 | callen | chord: http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html |
| 02:29 | chord | I don't use maven |
| 02:29 | chord | so no |
| 02:29 | arrdem | (inc callen) |
| 02:29 | lazybot | ⇒ 12 |
| 02:29 | callen | gave him everything he needed and still spat it back out. |
| 02:29 | chord | maven is overbloated piece of shit |
| 02:29 | arrdem | sadly the record I built today only counts up not down, and will not reflect his poor choices. |
| 02:30 | gws | callen: http://slash7.com/2006/12/22/vampires/ |
| 02: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 |
| 02: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. |
| 02:30 | callen | gws: cool stuff, thanks :) |
| 02:32 | chord | (dec maven) |
| 02:32 | lazybot | ⇒ -1 |
| 02:32 | callen | chord: http://i.imgur.com/ul5CO44.gif |
| 02:33 | callen | gws: http://i.imgur.com/Tg4KupP.gif |
| 02:34 | gws | very fitting - just the right amount of aggression |
| 02:35 | callen | gws: http://i.imgur.com/Ay29K.jpg |
| 02:37 | chord | holy shit how am I suppose to ship my game this jogl jar is 24 megabytes |
| 02:37 | callen | chord: http://i.imgur.com/xllH4.gif |
| 02:38 | arrdem | callen: congradulations on optimizing yourself out to a gif search |
| 02:38 | chord | you can't expect people to download a 24 megabytes of bloat |
| 02:38 | callen | chord: http://i.imgur.com/SRjI8UV.gif |
| 02:39 | chord | arrdem: now you realize why your clojure games fail to get downloaded |
| 02:40 | arrdem | chord: .... I'm a language and software engineer. I don't do games. |
| 02:42 | callen | arrdem->chord == http://i.imgur.com/SCC5vcX.gif |
| 02: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 |
| 02:43 | callen | arrdem: http://i.imgur.com/W8MIvcH.gif |
| 02:43 | arrdem | callen: there was some talk of using karma as a backend, but that's easy to abuse |
| 02:45 | chord | we need kenny back |
| 02:46 | arrdem | callen: http://i.minus.com/ieNOTP0kc1MRf.gif |
| 02:47 | callen | arrdem: http://i.imgur.com/nelFxeU.gif |
| 02:49 | chord | how do I add jogl jar to the project clitoris file: project.clj |
| 02:49 | callen | chord: http://i.imgur.com/YEqx5oK.jpg |
| 02:50 | arrdem | callen: re last http://i.imgur.com/zo6Kb6y.gif |
| 02:51 | Apage43 | oh man |
| 02:51 | chord | you guys are dumb dumb |
| 02:51 | callen | chord: http://i.imgur.com/mwzRcmL.jpg |
| 02:52 | arrdem | chord: http://i.minus.com/i8Mlu0EqJoZb0.gif |
| 02:52 | Apage43 | I switch back to this channel (with my IRC client that inlines images) |
| 02:52 | Apage43 | and I have no idea what's going on but there are cats everywhere |
| 02:52 | gws | chord: http://i.imgur.com/bsdLyZO.gif |
| 02:53 | arrdem | (inc gws) THANK you I wanted to post that! |
| 02:53 | arrdem | (inc gws) ; THANK you I wanted to post that! ;; goddamn comments |
| 02:53 | lazybot | ⇒ 2 |
| 02:54 | chord | the reason why you're all posting images is to deal with the pain of your girlfriend dumping you |
| 02:55 | arrdem | chord: http://i.imgur.com/NOt65Pn.gif |
| 02:55 | chord | I'M BLOCKING YOU ALL |
| 02:55 | gws | chord: http://i.imgur.com/W9j3TzM.gif |
| 02:57 | callen | (inc arrdem) (inc gws) |
| 02:57 | lazybot | ⇒ 1 |
| 02:57 | callen | (inc gws) |
| 02:57 | lazybot | ⇒ 3 |
| 02:58 | arrdem | t3chnomancy right about now.. http://i.imgur.com/nGfeX9C.gif |
| 02:58 | callen | me, when he notices - http://i.imgur.com/rgA8DCz.gif |
| 02:59 | gws | callen: i had thought maybe http://i.imgur.com/D6sI2iv.gif |
| 02:59 | chord | I need kenny to distract these assholes |
| 02:59 | chord | kennylovesroaste where are you |
| 03:00 | gws | this will turn out to be a weird prank and they'll both leave at once with #HASKELL RULES part messages |
| 03:01 | callen | gws: perfect @ gif. |
| 03:01 | chord | OH FUCK IT JUST TEACH ME HOW TO USE MAVEN TO GET JOGL |
| 03:01 | chord | NOW NOW NOW |
| 03: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 |
| 03:02 | chord | how the hell does leiningen know where maven stuff is |
| 03:03 | Jarda | http://mvnrepository.com/ |
| 03:03 | seancorfield | it searches maven central and clojars |
| 03:03 | Jarda | use teh search |
| 03:03 | seancorfield | and anywhere else you tell it |
| 03:03 | callen | chord: I sent you all the info for this had you been paying attention. |
| 03:04 | callen | chord: wait, what am I thinking? http://i.imgur.com/KFVH0CE.gif |
| 03:04 | seancorfield | perhaps [org.jogamp.jogl/jogl "2.0.2"] |
| 03:04 | arrdem | (inc callen) |
| 03:04 | lazybot | ⇒ 13 |
| 03:06 | Jarda | http://i.imgur.com/sMAo5PW.gif |
| 03:07 | chord | (do it 13 times please (dec callen)) |
| 03:07 | gws | chord: http://i.imgur.com/zEEsLlz.gif |
| 03:08 | chord | where are you retards finding these |
| 03:09 | arrdem | chord: http://i.imgur.com/dk43Yma.jpg |
| 03:12 | dissipate | chord, clearly they are finding them on imgur |
| 03:12 | chord | noonian_ you LIED TO ME THES FAILED :dependencies [[org.clojure/clojure "1.5.1"] [org.jogamp/jogl "2.0.2"]] |
| 03:12 | dissipate | fail? |
| 03:12 | chord | dissipate how me get jogl work NOW |
| 03:12 | chord | 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/) |
| 03:12 | chord | DISSIPATE DEBUG NOW |
| 03:12 | gws | chord: http://i.imgur.com/EJXmGbv.gif |
| 03:12 | noonian_ | chord: try [org.jogamp.jogl/jogl "2.0.2"] |
| 03:13 | dissipate | chord, sorry, i haven't done anything with clojure dependencies. :( |
| 03:13 | chord | noonian_wtf how did you know that would work |
| 03:13 | dissipate | chord, i heard noonian_ is pretty good at FizzBuzz |
| 03:14 | chord | noonian_ and dissipate we are going to make a starcraft clone in clojure |
| 03:14 | chord | ok go go go team |
| 03:14 | callen | chord: time for http://i.imgur.com/9xNfB70.jpg |
| 03: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 |
| 03:17 | chord | noonia_ are you working on the project? |
| 03:18 | chord | noonian_ you working? |
| 03:18 | noonian_ | jogl? no lol |
| 03:18 | noonian_ | i hadn't heard of it before you mentioned it today |
| 03:19 | chord | noonian_ so thats why your girlfriend cheated on you? |
| 03:21 | noonian_ | yeah, she was into opengl |
| 03: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 :/ |
| 03:22 | callen | arrdem: he works on a script. |
| 03:23 | arrdem | callen: how unfortunate. at least I could hope for some originality... |
| 03:23 | callen | arrdem: well, it's not explicit. Just an unoriginal creature :) |
| 03: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 |
| 03:23 | arrdem | callen: http://i.imgur.com/kby68UN.gif I don't get people |
| 03:24 | arrdem | chord: http://i.imgur.com/UN25Bfq.gif |
| 03:24 | callen | chord: http://i.imgur.com/bz3YWZh.jpg |
| 03:24 | gws | chord: http://i.imgur.com/TL81F.gif |
| 03:25 | dissipate | chord, are you kidding me? we are hot software developers with fast cars and mansions |
| 03:26 | chord | why does swing awt and swt all exist for jogl |
| 03:27 | callen | chord: http://i.imgur.com/iSYWY6A.gif |
| 03:27 | arrdem | callen, gws: http://i.imgur.com/IvI0r4i.gif |
| 03:28 | arrdem | thanks for the laughs, I must retire now |
| 03:29 | chord | YOU ARE ALL STUPID WITH NO GIRLFRIEND |
| 03:29 | gws | arrdem: http://i.imgur.com/MjyuQOi.gif |
| 03:30 | callen | gws: http://i.imgur.com/eQEm8Zp.gif |
| 03:30 | arrdem | chord: http://i.imgur.com/AD623pX.jpg |
| 03:31 | chord | you guys are so sad |
| 03:31 | gws | chord: http://i.imgur.com/ieUhuJ8.gif |
| 03:31 | chord | instead of being with your girlfriend |
| 03:31 | chord | you look at imgur |
| 03:31 | chord | so girlfriend must have dumped you |
| 03:31 | arrdem | chord: http://25.media.tumblr.com/28601fce603ad7128c223a571866d35f/tumblr_moe8f81Va11sppmago1_400.gif |
| 03:32 | seancorfield | i daren't even click on these links... |
| 03:32 | chord | arrdem: tell me about she cheated on you |
| 03:32 | arrdem | seancorfield: I'm just shuffling at this point. the results are awesome. |
| 03:33 | seancorfield | chord: did you ever actually get jogl running? |
| 03:33 | chord | NO |
| 03:33 | seancorfield | damn chord you must be really stupid! :) |
| 03:33 | arrdem | seancorfield: http://i.imgur.com/DlkEtqy.gif |
| 03:33 | seancorfield | i'm not clicking those links arrdem :) |
| 03:34 | gws | (inc arrdem) |
| 03:34 | lazybot | ⇒ 6 |
| 03:34 | callen | chord: http://i.imgur.com/bJ3sovW.gif |
| 03:34 | arrdem | seancorfield: that one was totally safe. I swear. |
| 03:35 | callen | chord right now == http://i.imgur.com/BUcgW6q.gif |
| 03:35 | chord | FUCK YOU ALL |
| 03:36 | callen | http://i.imgur.com/INz7Q1u.gif |
| 03:37 | seancorfield | what happened to kennylovesroaste ? that was all so entertaining... it was like a free cabaret between you guys... |
| 03:37 | callen | seancorfield: -_-' |
| 03:37 | dissipate | seancorfield, he's too busy earning his $120K |
| 03:38 | TEttinger | dissipate: s/$120K/disgust of his peers/ |
| 03:39 | dissipate | a lot of people earning $120K are cranking out terrible code. :( |
| 03:39 | dissipate | pay doesn't mean much in terms of quality in the software industry. most companies just don't care about code quality. |
| 03: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 :) |
| 03:40 | seancorfield | lol |
| 03:40 | callen | TEttinger: it's not a strict pass/fail |
| 03:41 | callen | TEttinger: it's just a score card for comparing candidates. |
| 03:41 | callen | and you can skip over parts of it if you make the leap of logic to skip the more immediate obvious step |
| 03:41 | TEttinger | I'm taking notes callen |
| 03:41 | TEttinger | you're giving away secretz |
| 03: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 |
| 03:41 | seancorfield | my tolerance for "coding tests" is very low so you'd probably kick me out too... |
| 03:41 | dissipate | TEttinger, i have the solution to his test right here: http://dave.fayr.am/posts/2012-10-4-finding-fizzbuzz.html |
| 03:42 | callen | seancorfield: I'm terrible at coding tests. That's why I use fizzbuzz. |
| 03:42 | TEttinger | that was only 2 or 3 steps I thought? |
| 03:42 | callen | dissipate: mine is different, but there are some lessons there. |
| 03:42 | dissipate | i've passed all the coding tests i've taken, but they were actually pretty lame |
| 03: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 |
| 03:43 | seancorfield | all the senior folks passed... you know, the ones who'd been promoted to pure management positions... and all the _programmers_ failed it |
| 03:43 | seancorfield | which was about what i expected |
| 03:43 | dissipate | i don't think i would ever work for google. my tolerance for high pressure interviews is not that good. |
| 03:43 | callen | seancorfield: fizzbuzz isn't a coding test, it's a bare minimum filter and it's a nice gradient for "placing" people. |
| 03:44 | opqdonut | I too have found the need for a "bare minimum filter" |
| 03:44 | opqdonut | some candidates just don't seem to know how to program |
| 03: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 |
| 03:44 | seancorfield | dissipate: google have admitted their old interview technique is a "complete waste of time" |
| 03:44 | callen | I should really stop calling my test fizzbuzz, that's almost deceptive. |
| 03:44 | seancorfield | yup, that's the article |
| 03:44 | kizzx2 | maybe i missed, but why are coding tests bad idea in general? |
| 03:44 | callen | seancorfield: they didn't ditch the coding tests, they ditched the weird brain teasers. |
| 03:45 | callen | 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. |
| 03:45 | dissipate | gws, seancorfield, yeah, i saw that. but has google actually eliminated their high pressure interview tactics? |
| 03:45 | opqdonut | kizzx2: the technical interview situation is highly artificial and very stressful |
| 03:45 | callen | kizzx2: people that work well when given time to think, breathe, sip coffee, and read papers do poorly in that context. |
| 03:45 | kizzx2 | that's true |
| 03:45 | callen | it's intended to produce false negatives in favor of meeting some kind of bare minimum. |
| 03: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 |
| 03: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. |
| 03:46 | kizzx2 | but i guess that would be better than just looking at GPAs |
| 03: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. |
| 03:46 | callen | I prefer to look at github repos, ask them about their work, deep dive a project they were responsible for, and then do fizzbuzz. |
| 03:47 | callen | fizzbuzz at the end because it can go on for hours. |
| 03: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)" |
| 03:47 | callen | although I usually cut it off after 15-30m |
| 03:47 | dissipate | any place that has interviews that go on for a week or more is not a place i will ever work |
| 03:47 | kizzx2 | that was C++ |
| 03:47 | Apage43 | We just throw candidates at a grab-bag of random folks for ~45min each |
| 03:47 | Apage43 | which is a bit odd |
| 03:48 | Apage43 | I have no idea how anyone else does interviews |
| 03: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. |
| 03:48 | seancorfield | i ask about projects, and look at their google footprint (github etc), but don't bother with a specific coding style problem |
| 03:48 | Apage43 | I usually yeah, have them Explain Like I'm Five a project they worked on |
| 03:48 | callen | I try to keep them as relaxed as possible. |
| 03:49 | callen | 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. |
| 03:49 | callen | and if they're representing the degree of involvement they had. |
| 03:49 | seancorfield | what was your worst project? why? what was your best project? why? |
| 03:49 | seancorfield | then drill in |
| 03:49 | Apage43 | yeah, once I get the high level thing I'll start picking things and having them drill in |
| 03:49 | callen | seancorfield: yeah. |
| 03: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? |
| 03:49 | TEttinger | kizzx2: I just realized how bad that is. |
| 03:50 | callen | Apage43: the project I just got over the hump of...I'll be telling stories about it for a decade at least. |
| 03:50 | callen | dissipate: I don't usually get a clean-room way to evaluate clean code. |
| 03: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) |
| 03:50 | TEttinger | dissipate: I wouldn't hire me. |
| 03:50 | callen | dissipate: whiteboard code is unfair. github code is rarely serious enough to judge on that basis. |
| 03:50 | callen | I prefer clean code by a huge amount, but I haven't found a way to measure it. |
| 03: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." |
| 03:51 | callen | I'm way stricter than my coworkers. I write immutable Python classes and the like. |
| 03:51 | Apage43 | Which wouldn't have been so bad if he didn't list all those topics on his resume as "skills" |
| 03:51 | callen | not in interviews, for production. |
| 03:51 | callen | Apage43: some skill. dem googlin'. |
| 03:51 | dissipate | callen, one simple rule of thumb is function size and whether they adhere to the 'do one thing' rule. |
| 03: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. |
| 03: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. |
| 03:52 | Kelet | (For CS) |
| 03:52 | callen | Unless I give them a homework assignment which I hate doing except as a follow-up |
| 03:52 | Kelet | I wish more universities had a software engineering degree or something. |
| 03:52 | callen | Kelet: I don't. |
| 03:52 | callen | I wish more universities actually taught people CS and programming. |
| 03:53 | callen | you can learn git in an afternoon from a free book. |
| 03: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. |
| 03:53 | gws | callen: please tell my coworkers that |
| 03:53 | callen | gws: dude. my company uses hg. I am ready to hang from the rafters. |
| 03: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 |
| 03: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 |
| 03:54 | callen | dissipate: it's a nifty idea but they can always foist off by saying they don't know the language or something. |
| 03: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. |
| 03:54 | gws | we used SVN and switched, and i've had some of the strangest discussions... |
| 03:54 | callen | Apage43: yep. |
| 03:54 | dissipate | Kelet, a lot of shops don't do TDD, agile, bug tracking |
| 03:54 | gws | (inc Apage43) |
| 03:54 | lazybot | ⇒ 6 |
| 03:54 | callen | (inc Apage43) |
| 03:54 | lazybot | ⇒ 7 |
| 03:54 | dissipate | callen, they can say they don't know the language for the language they are interviewing for? |
| 03: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 |
| 03:54 | TEttinger | pfft bug tracking. I prefer my bugs silent and unnoticed |
| 03:55 | noonian_ | man, I was using rcs at my university; it was rough |
| 03:55 | callen | "I do not recognize the existence of flaws in my software" |
| 03:55 | Apage43 | I once worked somewhere that build a version control system in house |
| 03:55 | seancorfield | rcs... oh i remember that... as a step up from sccs :) |
| 03:55 | TEttinger | not invented here eh |
| 03:56 | Apage43 | yep |
| 03:56 | seancorfield | Apage43: srsly? |
| 03:56 | Apage43 | yep |
| 03:56 | gws | you worked for microsoft? |
| 03:56 | dissipate | seancorfield, ask them to clean up code that has clear violations of Demeter's Law or dependency injection. |
| 03:56 | TEttinger | teamserver 2016: it won't work for 3 more years |
| 03:56 | Apage43 | it was made of perl, VB6, informix, and rexec |
| 03:56 | callen | Demeter's is such utter nonsense. |
| 03:57 | dissipate | callen, how so? seems pretty basic to me. |
| 03:57 | TEttinger | Demeter, mother of persephone? |
| 03:57 | Apage43 | and was tightly integrated into the deployment system |
| 03:57 | callen | dissipate: tripe. |
| 03:57 | dissipate | callen, poppycock? |
| 03:57 | Apage43 | (you could only deploy code that was checked into the system) |
| 03:57 | callen | indeed. |
| 03:57 | dissipate | callen, and this is why we can't have clean code |
| 03:57 | callen | dissipate: http://i.imgur.com/ZBwTnNI.gif |
| 03:58 | noonian_ | just drink beer with them, chat em up, and go with your gut imo you'll probably do just as well |
| 03:58 | hyPiRion | noonian_: yeah, I wouldn't be surprised if that were the case |
| 03:58 | callen | noonian_: I'd still probe their knowledge over beer. |
| 03:58 | noonian_ | yeah for sure |
| 03:58 | callen | I'm kind of insistent with my probes. Just ask my ex-girlfriends. |
| 04:00 | chord | I STILL HATE YOU ALL |
| 04:00 | chord | but i need help |
| 04:01 | wedr | gnaa |
| 04:01 | chord | http://lifeofaprogrammergeek.blogspot.com/2009/04/opengl-in-clojure.html |
| 04:01 | chord | wtf is doto |
| 04:01 | wedr | /ignore chord |
| 04:01 | wedr | ups |
| 04:01 | callen | chord: http://i.imgur.com/x4R1BHY.gif |
| 04:01 | gws | chord: extinct bird |
| 04:01 | callen | (inc gws) |
| 04:01 | chord | (doto (.getGL drawable) |
| 04:01 | lazybot | ⇒ 4 |
| 04:01 | chord | wtf does that do |
| 04:01 | arrdem | (inc callen) |
| 04:01 | lazybot | ⇒ 14 |
| 04:02 | Apage43 | ,(doto 12 println) |
| 04:02 | clojurebot | 12\n12 |
| 04:02 | noonian_ | ,(do (println 12) (println 13)) |
| 04:02 | clojurebot | 12\n13\n |
| 04:03 | chord | YOU GUYS AREN'T HELPING |
| 04:03 | gws | chord: it does getGL to drawable |
| 04: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 ... |
| 04:04 | callen | chord: http://i.imgur.com/eWeAKfu.gif |
| 04:04 | chord | you retards are all drunk |
| 04:05 | callen | http://i.imgur.com/CV2xoTY.gif |
| 04:05 | seancorfield | chord: you're not helping your cause man... but you're entertaining :) |
| 04:06 | noonian_ | it would be nice if there were units on the graph here: https://github.com/ptaoussanis/clojure-web-server-benchmarks |
| 04:06 | callen | noonian_: http://www.techempower.com/benchmarks/ |
| 04:06 | noonian_ | nice, thanks callen |
| 04:06 | callen | noonian_: the unit is requests per second mate. |
| 04:07 | noonian_ | yeah, I was guessing that higher was better |
| 04:07 | callen | noonian_: my recommendation? use jetty or http-kit. |
| 04: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 |
| 04:07 | gws | i am completely serious |
| 04:07 | noonian_ | yeah, I've been using jetty but I'm looking at maybe moving to http-kit for the websocket support |
| 04:08 | callen | gws: rm -rf /mnt/nfsroot/home/user_responsible |
| 04:08 | noonian_ | gws: lol |
| 04:08 | Apage43 | I usually use aleph for that |
| 04:08 | seancorfield | ok, i've had about as much entertainment as i can stand so it's bedtime for me... |
| 04: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. |
| 04:09 | noonian_ | so no dynamic vars? |
| 04:09 | callen | noonian_: I wouldn't recommend it :) |
| 04:10 | callen | I, for one, am in favor of forcing people to not rely on thread-per-request semantics. |
| 04:10 | chord | (.addGLEventListener canvas (proxy [GLEventListener] [] ....... |
| 04:10 | chord | how the fuck does that work |
| 04:10 | callen | but I haven't convinced yogthos to take a flamethrower to lib-noir in favor of this crusade yet. |
| 04:10 | chord | wtf is proxy |
| 04:10 | Apage43 | ew, proxy |
| 04:11 | Apage43 | use reify |
| 04:11 | callen | chord: http://i.imgur.com/4vf35gb.gif |
| 04:11 | chord | the corresponding java code does the following, how does the proxy create the new joglExample canvas.addGLEventListener(new joglExample()); |
| 04:12 | chord | noonian_: answer now hurry up |
| 04:12 | noonian_ | I'm not a monkey |
| 04:12 | chord | noonian_: so you admit you're not a clojure expert |
| 04:13 | dissipate | chord, #java |
| 04:13 | noonian_ | yeah dude, I'm pretty new to clojure |
| 04:13 | chord | dissipate: i'm asking about proxy |
| 04:13 | noonian_ | but I think it creates an object that acts like a GLEventListener I think |
| 04:13 | noonian_ | I've never used proxy myself |
| 04:14 | noonian_ | and I think its been deprecated in favor of reify and stuff |
| 04:15 | Apage43 | http://i.imgur.com/wiqqwQm.jpg |
| 04:16 | chord | ok noonian_ Apage43 explain proxy vs reify |
| 04:17 | gws | chord: http://stackoverflow.com/questions/5821892/why-should-i-use-reify-instead-of-proxy-in-clojure |
| 04:17 | noonian_ | you should google them there are tons of examples out there |
| 04:17 | chord | THAT STILL DOESN'T EXPLAIN WHAT REIFY IS |
| 04:17 | gws | ,(doc reify) |
| 04:17 | chord | STOP BEING LAZY NOONIAN_ JUST TELL ME THE ANSWER |
| 04: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... |
| 04:18 | chord | wtf that documentation doesn't help |
| 04:18 | chord | just more confusion |
| 04:18 | metellus | what're the odds of an op showing up here ever |
| 04:18 | gws | chord: http://clojure.org/datatypes |
| 04:18 | chord | metellus you can makes things go faster be explaining how this works http://lifeofaprogrammergeek.blogspot.com/2009/04/opengl-in-clojure.html |
| 04:19 | llasram | metellus: technomancy has ops, so worst-case is most PDT waking-hours |
| 04:19 | noonian_ | it returns an instance anonymous class that can implement zero or more interfaces |
| 04:20 | metellus | good to know, thanks |
| 04:20 | hyPiRion | guys, guys |
| 04:20 | hyPiRion | /ignore is your friend |
| 04:21 | llasram | Oh, is that what we're talking about? |
| 04:21 | llasram | I /ignored that guy days ago (assuming it's the starcraft clone dude) |
| 04:21 | chord | hey i'm not trolling, i'm making progress |
| 04:21 | chord | I have code to prove it |
| 04:21 | callen | chord: three lines of code, one of which is (doto ...) |
| 04: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 |
| 04:24 | chord | am I suppose to use proxy or reify is there no "new" function to create an object? |
| 04:25 | Apage43 | ,(new java.util.Date) |
| 04:25 | clojurebot | #inst "2013-09-27T07:54:31.952-00:00" |
| 04: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(); } }); |
| 04:26 | chord | (new WindowAdapter ..... uh yah stuff go here????? |
| 04:27 | Apage43 | (doto frame (.addWindowListener (reify WindowAdapter (windowClosing [this _e] (.exit this))))) |
| 04:28 | chord | so why can't I ignore new and always just use reify |
| 04:28 | noonian_ | you can use new to create instances of existing java classes |
| 04:29 | noonian_ | but usually you would use the sugar |
| 04:29 | noonian_ | (Integer. 6) |
| 04:30 | chord | still not understanding why new exists if reify exists |
| 04:30 | Apage43 | new Thing() { extra methods; } is different from new Thing() |
| 04:30 | noonian_ | I don't think you could create an instance of Integer with reify |
| 04:31 | Apage43 | the first is closer to reify. It creates a new class that implements some interface, and instantiates it, all at once |
| 04:31 | Apage43 | just like reify |
| 04:31 | Apage43 | whereas new Thing(), and regular new, just instantiate existing classes |
| 04:34 | chord | (reshape [#^GLAutoDrawable drawable x y w h] |
| 04:34 | chord | #^ |
| 04:34 | chord | ??????????????????????????????? |
| 04:36 | chord | i demand an explanation |
| 04:36 | noonian_ | its part of the proxy form, its the definition of the reshape method like the java one |
| 04:37 | chord | noonian_ no web documentation = you bullshitting me |
| 04:38 | noonian_ | its just like the java version lower down in that file you were linking |
| 04:39 | noonian_ | i told you it was indented poorly, and i don't need documentation because you posted the code |
| 04:39 | chord | (.addWindowListener (proxy [WindowAdapter] [] (windowClosing [e] (exit)))) |
| 04:39 | chord | that one has no #^ |
| 04:39 | chord | so you lying |
| 04:40 | noonian_ | (proxy [GLEventListener] [] |
| 04:41 | noonian_ | public class joglExample implements GLEventListener |
| 04:41 | noonian_ | public void reshape(GLAutoDrawable gLDrawable, int x, int y, int width, int height) { |
| 04:42 | noonian_ | (reshape [#^GLAutoDrawable drawable x y w h] |
| 04:43 | chord | and how does that help me understand #^ |
| 04:43 | noonian_ | oh, i didn't realize thats what you were asking lol |
| 04:43 | noonian_ | that is a type declaration I think |
| 04:43 | noonian_ | like GLAutoDrawable gLDrawable |
| 04:43 | noonian_ | in java |
| 04:43 | chord | wtf why is there type declaration in a dynamic language |
| 04:44 | noonian_ | well, you are interacting with a java library what did you expect? |
| 04:44 | chord | so why does x y w h have no type declarations |
| 04:44 | chord | and what happens if you leave off the type declaration on drawable |
| 04:45 | chord | SEE YOU GUYS ARE ALL CLOJURE NOOBS |
| 04:45 | chord | NONE OF YOU ARE ANSWERING IN 1 NANOSECOND |
| 04:45 | chord | NICE JOB YOU EXPERS |
| 04:45 | chord | EXPERTS |
| 04:46 | noonian_ | i wouldn't be surprised if it worked without the type hint |
| 04:46 | clgv | chord: lol. all-morning trolling tour started? :P |
| 04:47 | noonian_ | its probably faster with it |
| 04:47 | chord | clgv: i'm not trolling |
| 04:47 | chord | clgv: i have code |
| 04:47 | noonian_ | lol |
| 04:47 | jkj_ | chord: prolly works without type hints, but might be faster with it because could skip some reflection |
| 04:47 | clgv | noonian_: yes, you are right, most interop calls will also work without type hints. |
| 04:48 | clgv | chord: you are trolling in your uppercase messages :P |
| 04:48 | noonian_ | clgv: thanks, I haven't done much interop |
| 04:48 | chord | clgv: you're just mad that I'm actually making progress towards making an opengl window in clojure where you failed |
| 04:48 | jkj_ | :D |
| 04:49 | chord | see even jkj_ agrees with me |
| 04:49 | clgv | chord: that's the kind of trolling I meant ;) |
| 04:49 | chord | clgv: so no denial means i'm right though |
| 04:49 | clgv | chord: just keep a polite tone around here and you will get a lot of help as everyone else does |
| 04:50 | TEttinger | the well may have been poisoned, clgv. |
| 04:50 | jkj | btw. why ^# here and not just ^ |
| 04:50 | jkj | oops |
| 04:50 | jkj | #^ |
| 04:50 | Apage43 | i believe that's older syntax |
| 04:50 | clgv | jkj: thats old syntax somewhat prior to clojure 1.2 |
| 04:50 | TEttinger | jkj: isn't that the old syntax for type hints, ninja Apage43 |
| 04:51 | chord | oh shit so this example i'm looking at is old syntax? |
| 04:51 | chord | whats the new way |
| 04:51 | Apage43 | ^ |
| 04:52 | katratxo | e.g ^String |
| 04: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 |
| 04:55 | noonian_ | get a sprite up, then take a game design course |
| 04:55 | Apage43 | http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html |
| 04:55 | jkj | Chrono Trigger! クロノ・トリガー! |
| 04:56 | Apage43 | http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#UNDECIMBER |
| 04:56 | jkj | chord: http://stackoverflow.com/questions/16385049/timers-in-clojure |
| 04:56 | jkj | chord: didn't answer your question though |
| 04: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 |
| 04:58 | Apage43 | http://www.slate.com/articles/arts/culturebox/2013/07/hollywood_and_blake_snyder_s_screenwriting_book_save_the_cat.html |
| 04:58 | chord | so no answer means you guys are too dump to know how they do it |
| 04:58 | noonian_ | theres probably a variable somewhere called world that holds that state |
| 04:58 | jkj | now. we've just forgotten how we did it |
| 04:58 | noonian_ | afk |
| 04:59 | chord | so you guys admitting you don't know how they implement zelda |
| 04:59 | jkj | chord: you can e.g. have an agent holding the big world state map |
| 04:59 | jkj | chord: and then send-off funcs to modify worl state |
| 05:00 | jkj | not my core competence so i wouldn't know...^H ^H ^H^^H ^H care to answer because i've only forgotten |
| 05:00 | jkj | troll-friday |
| 05:00 | jkj | gotta grab lunch |
| 05:01 | jkj | what's the time? |
| 05:01 | chord | its night time... |
| 05:02 | jkj | so i'm having my weekend before you. oh goody. 11:31 here |
| 05: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 |
| 05:06 | jkj | chord: i'd say data should be hierarchical maps and state changes functions that modify the tree |
| 05:06 | chord | I WANT DETAILS OF HOW TO DO THIS |
| 05:06 | chord | SOMEONE MUST HAVE ASKED THE EXACT SAME QUESTION BEFORE |
| 05:06 | jkj | chord: momentos |
| 05:06 | chord | THERE SHOULD BE AN ARTICLE OUT THERE |
| 05:06 | chord | GIVE ME A LINK TO IT |
| 05:06 | jkj | chord: http://clojuredocs.org/clojure_core/clojure.core/add-watch |
| 05:06 | chord | GIVE ME A LINK TO THE PAST (you see that pun I'm really cool) |
| 05:07 | jkj | chord: you register a watch that reacts to the world changes |
| 05:07 | chord | i don't e at memenmtos |
| 05:07 | chord | horrible candy |
| 05:07 | OtherRaven | chord: so what is it a troll eats? |
| 05: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 |
| 05:09 | OtherRaven | chord: good, I'm loath to be useful to you |
| 05:10 | jkj | tired trolls need some lone time in recuperacoon, in comfortable sopor slime |
| 05:11 | OtherRaven | that sounds... messy |
| 05:12 | noonian_ | sopor slime, always good for parties |
| 05:12 | noonian_ | the top link on google for sopor slime just made my night/morning |
| 05:16 | chord | so when I get an opengl window up what project are we going to make |
| 05:16 | chord | you guys are going to help me right |
| 05:17 | noonian_ | have you ever made a game in any language before? |
| 05:18 | chord | noonian_ if I say yes will that mean you will help |
| 05:18 | noonian_ | not a chance, I'm passing out soon |
| 05:18 | chord | why are you guys so resistant to game idea |
| 05: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 |
| 05:21 | chord | noonian_ oh so you admit you're going to STEAL MY CODE |
| 05:21 | noonian_ | no, I didn't say I'd use it |
| 05:22 | chord | AH HAH I CAUGGHT YOU |
| 05:23 | noonian_ | you won't have anything to worry about until you write something worth stealing |
| 05:24 | chord | noonian_ so you're saying i'm WORTHLESS |
| 05:24 | noonian_ | you keep putting words in my mouth, I'm not saying anything you're saying I'm saying |
| 05:25 | noonian_ | good luck with your game |
| 05:25 | chord | noonian_ you're going to help me with starcraft clone |
| 05:28 | chord | noonian_ just say yse |
| 05:32 | chord | DAMN IT |
| 05:32 | chord | NO ONE HELPS ME |
| 05: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 |
| 05:35 | chord | hpYiRion: but I am spoiled. |
| 05:37 | TEttinger | $google the first ten games you make |
| 05:37 | lazybot | [The 12 Best Games on Facebook - Kotaku] http://kotaku.com/5878915/the-9-best-games-on-facebook |
| 05:37 | chord | $google starcraft clone |
| 05:37 | lazybot | [Atrox (starcraft clone) gameplay 1v2 vs Ai - YouTube] http://www.youtube.com/watch?v=1PGHy_4dXkE |
| 05:37 | hyPiRion | I love how that title says "the 12 best" and, in the link, says "the-9-best" |
| 05:38 | chord | $google will hyPiRion help me to make a starcraft clone |
| 05:38 | lazybot | [Stetmann's research log - StarCraft and StarCraft II Wiki] http://starcraft.wikia.com/wiki/Stetmann's_research_log |
| 05:40 | TEttinger | “Your first ten games will suck.” – Jesse Schell (Game Designer, Author of “The Art of Game Design: A Book of Lenses“) |
| 05:41 | chord | Tettinger: guy made his first game http://www.achrongame.com/ |
| 05:42 | chord | didn't suck |
| 05:43 | mercwithamouth | ok i can't believe you're still on here talking about starcraft |
| 05:43 | mercwithamouth | i'm new to #clojure but is this some sort of 'fetish' for you? |
| 05:43 | TEttinger | mercwithamouth, it's a disease. trollitis, or anon's syndrome. |
| 05:44 | chord | you like call of duty games instead? |
| 05:44 | mercwithamouth | TEttinger: my god... |
| 05:45 | mercwithamouth | if i were to make a game it would be futuristic levitating cars fighting in cities...same angle/perspective as starcraft... |
| 05:45 | mercwithamouth | but lets not get 'that' started... |
| 05:46 | mercwithamouth | anyone bought the lispcast video? |
| 05:47 | mercwithamouth | i just grabbed it..it seems like it may be quite good for new guys |
| 05:47 | chord | lets talk starcraft instead |
| 05:47 | mercwithamouth | go to #gamedev |
| 05:47 | chord | they already banned me |
| 05:48 | mercwithamouth | that's an idea... |
| 05:59 | djcoin | Ahah, I worship StarCraft (broodwar) too :) |
| 06:00 | mercwithamouth | chord: write a clojure book on natural language processing for me please |
| 06:47 | hashcat | different betweem protocol and multimethod |
| 06:47 | hashcat | ? |
| 06:47 | clojurebot | Gabh mo leithscéal? |
| 07:06 | clgv | hashcat: protocols dispatch on the first argument only multimethods can dispatch on any argument |
| 07:07 | clgv | hashcat: what exactly do you want to know? |
| 07:07 | hashcat | clgv: which of them I should use |
| 07:07 | clgv | hashcat: depends on what you want to do |
| 07:07 | hashcat | I get it now |
| 07:08 | clgv | hashcat: protocols are located closer to the OOP world whereas multimethods are rooted in the functional world ;) |
| 07:13 | hashcat | clgv: that's a concise advice |
| 07:52 | klokbask_ | having trouble saving the complete body of a POST response (using clj-http) |
| 07:53 | klokbask_ | 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 |
| 07:54 | klokbask_ | so I guess the problem is how I use io/input-stream and io/output-stream. any takers? |
| 08:01 | llasram | klokbask_: It's hard to say much without code. Refheap/gist? |
| 08:06 | mercwithamouth | when would you say the joy of clojure is suitable to read? i'm only 1/4 through programming clojure(oreilly book) |
| 08:08 | llasram | mercwithamouth: I think it's the best programming language book I've read, so definitely yes IMHO |
| 08:08 | llasram | Oh, *when* |
| 08:08 | llasram | Hah |
| 08:08 | llasram | Eh, I think you only need the basics of the language |
| 08: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 |
| 08:10 | `cbp | mercwithamouth: read 3/5 of clojure programming and then move on to joc |
| 08:12 | mercwithamouth | `cbp: and not 3/6? =P |
| 08:13 | `cbp | well its divided into 5 sections :P |
| 08:13 | mercwithamouth | `cbp: gotcha...i figured after building abstractions =P |
| 08:14 | mercwithamouth | `cbp: actually you're dead on. |
| 08:15 | klokbask_ | llasram: https://gist.github.com/grav/6727373 |
| 08:16 | klokbask_ | llsram: test-url: http://vaas.acapela-group.com/MESSAGES/009086065076095086065065083/EVAL_3480291/sounds/330594833_d29b45429f745.mp3 |
| 08:16 | klokbask_ | this will say "one two three four five", but some of the 'five' is cut off. If I curl it, it works fine |
| 08: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 |
| 08:18 | llasram | klokbask_: In this case, you can actually just change your `let` to `with-open` and it should work fine |
| 08: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 |
| 08: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 |
| 08:47 | borkdude | why didn't anyone tell me about lein retest before... |
| 08:49 | mdrogalis | borkdude: I've been using Midje autotest. |
| 08:52 | borkdude | we're not using midje right now |
| 08:52 | borkdude | but thanks |
| 08:53 | mdrogalis | Yep. |
| 09:11 | ni291187 | Is there a documentation page where all the special character are explained: @, ~, #, ' etc.? |
| 09:12 | ragge | ni291887: http://clojure.org/reader |
| 09:12 | ragge | repl: http://clojure.org/reader |
| 09:12 | ragge | might be what you're looking for |
| 09:13 | repl | ragge: exactly what I was looking for, thanks! |
| 09:27 | mdrogalis | tbaldridge: ping |
| 09:27 | tbaldridge | mdrogalis: pong |
| 09: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 |
| 09:37 | mzdravkov | or I will have to concatenate them manualy |
| 09:40 | ambroseb_ | mzdravkov: have you looked at apply? |
| 09:41 | ambroseb_ | mzdravkov: I don't think I understand what you mean. |
| 09: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]) |
| 09:44 | mzdravkov | and this function will be recursively called working on the same item, while decrasing the remaining-operations "var" |
| 09:44 | mzdravkov | ohh I understand... |
| 09:45 | mzdravkov | I can make the function multiarity and there will be no need to do it with concatenating the head and tail |
| 09:48 | hfaafb | mzdravkov: I don't understand why you would want to pass in the head of the collection again |
| 09:50 | hfaafb | if you have some example code it might help clarify |
| 09: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 |
| 09:50 | mzdravkov | hfaab: I will write it just in second |
| 09:55 | mzdravkov | hfaafb: something like this |
| 09:55 | mzdravkov | https://gist.github.com/mzdravkov/6728540 |
| 09:56 | mzdravkov | (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 | jowag | 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 | clgv | 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 | jowag | 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 | jowag | because when we will have CinC, I suppose all clojure.lang interfaces will be replaced by protocols |
| 10:21 | wakeup | hi all |
| 10:23 | wakeup | 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 | devn | 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 | mdrogalis | 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 | postwait | Compiler.load(new StringReader(that string)); |
| 11:35 | postwait | 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 | postwait | 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 | nDuff | 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 | tbaldridge | 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 | tbaldridge | 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 | egghead | i'd pitch in if I was guaranteed photo evidence |
| 12:03 | devn | eggs |
| 12:05 | devn | also, yes to technomancy |
| 12:05 | indigo | technomancy: Yes |
| 12:06 | indigo | 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 | 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 | devn | Raynes: what are you hacking on? |
| 12:08 | Raynes | Mostly work stuff right now. |
| 12:09 | Raynes | 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 | devn | err "3 star" |
| 12:12 | indigo | devn: Of course! ;D |
| 12:12 | indigo | I'm trying to become a five-star programmer |
| 12:12 | indigo | Still stuck at three |
| 12:15 | indigo | 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 | indigo | 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 | endou | 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 | tbaldridge | 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 | tbaldridge | 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 | dnolen | 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 | dnolen | 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 | noncom | ? |
| 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 | dnolen | 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 | postwait | And I need to do it from the Java side, not the clojure side. |
| 12:40 | postwait | 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 | noncom | 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 | noncom | (apply) also does not work.. |
| 12:46 | noncom | 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 | dnolen | 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 | marcopolo2 | 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 | dnolen | 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 | noncom | i could just go with some defaults for other args |
| 12:56 | noncom | s/assing/passing |
| 12:58 | rasmusto | s/assing/sassing |
| 12:59 | noncom | )) |
| 12:59 | rasmusto | (->> (() |
| 13:00 | noncom | hmmm |
| 13:15 | nDuff | ...makes it very, very hard to make, clojure.core.* separate packages from clojure.core |
| 13:16 | nDuff | ...hmm. |
| 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 | justin_smith | *group |
| 13:21 | justin_smith | 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 | justin_smith | 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 | justin_smith | 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 | justin_smith | so is indexing not automatic? |
| 13:27 | technomancy | justin_smith: no, it is |
| 13:29 | technomancy | 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 | technomancy | we have a fallback JVM running |
| 13:32 | technomancy | I think we decided that wasn't such a great idea |
| 13:34 | justin_smith | technomancy: I guess that would explain it |
| 13:34 | justin_smith | 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 | technomancy | 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 | marcopolo2 | s/someFunction/some-function |
| 13:42 | l3dx | ah |
| 13:42 | l3dx | 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 | marcopolo2 | 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 | piranha | 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 | marcopolo2 | 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 | piranha | 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 | ambrosebs | 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 | mdrogalis | 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 | callen | 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 | `cbp | ,(apply (apply comp (list + inc -)) '(1 2 3 4)) |
| 15:12 | clojurebot | -7 |
| 15:13 | fowlslegs | 4clojure "special restrictions: comp" |
| 15:13 | fowlslegs | 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 | rasmusto | 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 | fowlslegs | 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 | fowlslegs | 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 | fowlslegs | ,(-> '(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 | callen | 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 | mdrogalis | 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 | fowlslegs | , 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 | callen | 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 | `cbp | 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 | callen | 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 | sm0ke | 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 | sm0ke | 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 | sm0ke | 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 | marcopolo2 | sm0ke: You might want to setup hostnames for each node, and use hostnames |
| 15:43 | marcopolo2 | 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 | SegFaultAX | 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 | sm0ke | 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 | sm0ke | my point being that this minimises the configuration to bare minimum |
| 15:51 | sm0ke | 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 | sm0ke | marcopolo2: all that with just minimum configuration of every node just knowing about zookeeper |
| 15:56 | sm0ke | 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 | marcopolo2 | sm0ke: maybe a zeroconf solution? http://avahi.org/ |
| 15:58 | sm0ke | i really dont like multicast |
| 15:58 | sm0ke | 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 | sm0ke | loud* |
| 16:01 | sm0ke | it just introduces unseen complexity which is out of my skill set |
| 16:03 | sm0ke | 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 | marcopolo2 | 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 | callen | 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 | gws | 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 | callen | 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 | marcopolo2 | 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 | ambrosebs | 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 | marcopolo2 | 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 | devn | 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:34 | tbaldridge | http://imgs.xkcd.com/comics/real_programmers.png |
| 16:34 | SegFaultAX | Pff, 58 is for kids. |
| 16:34 | SegFaultAX | 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 | fowlslegs | 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 | noonian | oops, but call fn f instead :P |
| 16:39 | noonian | 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 | fowlslegs | 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 | egghead | 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 | noonian | 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 | noonian | 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 | gfredericks | the sort of thing you'd really want for that kind of application |
| 17:05 | JoelMcCracken | yeah |
| 17:05 | JoelMcCracken | 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 | JoelMcCracken | Org mode is *ok* at that |
| 17:07 | JoelMcCracken | its is a little unwieldly though |
| 17:07 | technomancy | org is a beast |
| 17:08 | technomancy | 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 | technomancy | =) |
| 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 | JoelMcCracken | oh im still on 7.9.3 |
| 17:10 | JoelMcCracken | 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 | 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 | gfredericks | technomancy: this is racket's killer app |
| 17:11 | technomancy | GONNA_OPEN_A_LIST_NOW_KAY? 1 2 3 GONNA_CLOSE_IT |
| 17:11 | technomancy | ^ look ma, no syntax |
| 17:11 | JoelMcCracken | whats clojure's chef-like tool? |
| 17:12 | JoelMcCracken | 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 | JoelMcCracken | i wouldnt be angry |
| 17:14 | callen | JoelMcCracken: Pallet is not like Chef. |
| 17:14 | leo_33 | ok |
| 17:14 | leo_33 | 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 | callen | *either |
| 17:15 | technomancy | callen: well technically I didn't say that =) |
| 17:15 | technomancy | 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 | JoelMcCracken | =) |
| 17:16 | JoelMcCracken | forget it |
| 17:16 | JoelMcCracken | 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 | noonian | 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 | 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 | egghead | 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 | egghead | 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 | noonian | 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 | jimrthy | 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 | muhoo | oic, nm, their site still says 2013 |
| 17:42 | ztellman_ | SF next year, I think |
| 17:42 | ztellman_ | 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 | ztellman_ | 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 | ztellman_ | I mean, parts of it smell like pee, but SF is pretty tame |
| 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 | ztellman_ | 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 | ztellman_ | 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 | TimMc | That's pretty messed up. |
| 17:57 | ztellman_ | TimMc: we have temperate weather and decent social programs |
| 17:57 | ztellman_ | 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 | muhoo | 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 | ztellman_ | come on, the graph theory toga parties are great |
| 18:01 | ztellman_ | 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 | muhoo | i thought hollywood has moved on since |
| 18:02 | ztellman_ | muhoo: nah, they were filming it last year |
| 18:02 | ztellman_ | 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 | ztellman_ | 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 | muhoo | i.e. moscone prolly ain't cheap |
| 18:04 | ztellman_ | ha, that's a bit grandiose for a clojure conference |
| 18:04 | ztellman_ | there are plenty of hotels with conference space |
| 18:04 | ztellman_ | 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 | callen | 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 | noprompt | 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 | ztellman_ | 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 | noprompt | lol |
| 18:09 | callen | yes, lets go with that. horizontally scalable to infinity. |
| 18:09 | callen | 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 | callen | ztellman_: when I say, "save everything" I mean it. |
| 18:10 | ztellman_ | if I trace out obscene words with my mouse, will you save them? |
| 18:11 | ztellman_ | because that's a deal-breaker |
| 18:11 | callen | ztellman_: no mouse-move tracking. Maybe hover. |
| 18:11 | callen | 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 | callen | 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 | noprompt | *volume |
| 18:13 | noprompt | ztellman_: haha yes! |
| 18:14 | noprompt | 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 | callen | not right now ;_; |
| 18:15 | callen | noprompt: energy drink recommendations - go. |
| 18:15 | ztellman_ | create a fractal compression scheme for the mouse trajectory |
| 18:15 | ztellman_ | 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 | callen | noprompt: I was considering a timeout mechanism for that with elision of the event metadata for the intermediate mouse movements. |
| 18:16 | callen | 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 | ztellman_ | 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 | noprompt | 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 | bja | 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 | bja | I have the level and namespace part down |
| 18:22 | bja | (and filtering on logging level |
| 18:22 | bja | and then integration into sentry |
| 18:23 | bja | line isn't strictly necessary, but it'd be handy |
| 18:23 | technomancy | IIRC it's *line* |
| 18:24 | technomancy | or something |
| 18:24 | technomancy | 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 | lodin | 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 | gfredericks | or a spin loop |
| 18:38 | tbaldridge | lodin: is this CPU bound? |
| 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 | tbaldridge | 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 | gfredericks | 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 | gfredericks | also it's not actually lazy |
| 18:47 | gfredericks | 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 | lynaghk | 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 | lynaghk | 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 | tbaldridge | 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 | lynaghk | 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 | tbaldridge | 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 | lynaghk | 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 | tbaldridge | 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 | lynaghk | 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 | bbloom | saw a comment from Tim Sweeney, a guy I have huge respect for, and i couldn't help but laugh |
| 19:08 | bbloom | "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 | technomancy | 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 | callen | gf3: hai |
| 19:34 | gf3 | Hola |
| 19:34 | callen | gf3: IRC was a better iea. |
| 19:34 | callen | idea* |
| 19:35 | gf3 | Yeah that hangouts thing isn't the best |
| 19:35 | gf3 | 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 | callen | pbiggar: even convinced 3 people to join me in the Cup. :) |
| 19:39 | callen | 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 | justin_smith | you just need to construct the format emit* can use |
| 19:46 | logic_prog | is there a good example on google search? |
| 19:46 | logic_prog | 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 | justin_smith | logic_prog: http://sprunge.us/TCWH?clojure example of using it in a repl |
| 19:50 | justin_smith | seems like an easy enough format to generate |
| 19:50 | logic_prog | justin_smith: noted, thanks, will explore this more |
| 20:20 | logic_prog | so I'm staring at the enfocus 2.0.0-snapshort source code |
| 20:20 | logic_prog | doesit not support listenerens on keydown/keypress? |
| 20:20 | logic_prog | I can't seem to find it anywere |
| 20:26 | chord | anyone here? |
| 20:26 | chord | ANSWER ME |
| 20:27 | phiat | many lurkers, yes |
| 20:28 | callen | chord: http://i.imgur.com/nZYmwdi.gif |
| 20:28 | callen | 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 | chord | ANSWER ME NOW |
| 20:32 | chord | 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 | chord | gl.clj: (ns rts.core) (defn hi (println "testing")) |
| 20:35 | chord | 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 | shoerain | justin_smith: (source source) returns the same as (source clojure.repl/source), so I'm assuming they're the same for me? |
| 20:51 | shoerain | 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 | @technomancy | 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 | Apage43 | *ly |
| 20:55 | shoerain | technomancy: inspecting metadata, as in (meta obj) command? |
| 20:55 | @technomancy | shoerain: (meta #'myvar) |
| 20:55 | Apage43 | (meta #'+) |
| 20:55 | Apage43 | er |
| 20:55 | Apage43 | ,(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 | chord | I can't get this namespace for opengl to work |
| 21:03 | chord | 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 | chord | 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 | shoerain | but i'll probably leave trying to implement that for a while... |
| 21:13 | Apage43 | https://www.refheap.com/19090 |
| 21:13 | Apage43 | 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 | justin_smith | I think that will go in my user.clj |
| 21:15 | riley526 | allenj12: sort them and then compare? |
| 21:15 | riley526 | 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 | allenj12 | 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 | Apage43 | either sort.. or.. |
| 21:17 | Apage43 | (= (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 | riley526 | 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 | justin_smith | or something like that |
| 21:20 | phiat | (:karma phiat) |
| 21:20 | phiat | nope |
| 21:21 | jared314 | (karma phiat) |
| 21:21 | jared314 | nope |
| 21:21 | justin_smith | ##karma jared314 |
| 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 | yuri_niyazov | java.io.Closeable |
| 21:24 | yuri_niyazov | (close [this] (.close connection) :ok)) |
| 21:25 | yuri_niyazov | Just wrapping an JDBC connection in a record. |
| 21:25 | yuri_niyazov | now, let's say that this code resides in namespace a |
| 21:25 | yuri_niyazov | How do I call the close method on a database if I am in interface b? |
| 21:26 | yuri_niyazov | 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 | justin_smith | 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 | Apage43 | 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 | justin_smith | 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 | phiat | 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 | phiat | ;; is not where to *look* for existing native libraries; use :jvm-opts with |
| 21:32 | phiat | ;; -Djava.library.path=... instead for that. |
| 21:32 | phiat | justin_smith: I have the jar in my lib/ ... just do :source-paths ["lib/"] ? the project.clj example mentions : |
| 21:32 | phiat | 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 | jared314 | (bf ++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.) |
| 21:36 | jared314 | (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 | justin_smith | lein install installs to the local .m2 |
| 21:37 | justin_smith | 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 | justin_smith | 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 | phiat | ok will check out |
| 21:46 | jared314 | i thought lein-localrepo used mvm install |
| 21:46 | justin_smith | I think it does |
| 21:46 | justin_smith | I have used the latter, not the former |
| 21:47 | justin_smith | 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 | allenj12 | (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 | chord | 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 | phiat | need some hand holding |
| 22:26 | phiat | to recap: i have a video.jar ( a processing video library), and want to use it in my project... |
| 22:26 | phiat | 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 | phiat | i havent touched it |
| 22:28 | phiat | so there is no 'plugin'/easy way... can we not make this tool? seems like it should exist |
| 22:29 | phiat | 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 | phiat | no success yet |
| 22:31 | chord | phiat: :dependencies [[org.clojure/clojure "1.5.1"] [org.jogamp.jogl/jogl "2.0.2"]] |
| 22:31 | chord | thats how i got my jogl working |
| 22:31 | chord | 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 | phiat | i have video.jar |
| 22:32 | phiat | what next? |
| 22:33 | phiat | 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 | phiat | 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 | gfredericks | phiat: I already linked you to the docs for the mvn command |
| 22:38 | gfredericks | 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 | phiat | processing |
| 22:48 | phiat | 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 | phiat | i got ":repositories {"local" "file:maven_repository"}" in my projects.clj and [processing/video "1.0.0"] in my deps |
| 22:49 | phiat | 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 | phiat | seems newest |
| 22:51 | phiat | 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 | jared314 | so they made it hard |
| 22:56 | jared314 | 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 | chord | 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 | jared314 | 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 | jared314 | phiat: add dependency and lein deps |
| 23:04 | jared314 | mvn deploy:deploy-file -DgroupId=org.hack -DartifactId=hack -Dversion=0.0.1 -Dpackaging=jar -Dfile=Hack.jar -Durl=file:repo |
| 23:05 | jared314 | :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 | phiat | takes in video, converts bitmap to 3d boxes, looks cool |
| 23:08 | phiat | 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 | phiat | after lein deps |
| 23:12 | phiat | 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 | jared314 | lein reps :tree |
| 23:13 | jared314 | 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 | phiat | [org.hack/hack "0.0.1"] |
| 23:21 | phiat | :) |
| 23:21 | phiat | so close... |
| 23:21 | phiat | almost |
| 23:22 | jared314 | phiat: if this is the processing video jar, then you should be able to use that namespace |
| 23:22 | jared314 | phiat: in the repl |
| 23:22 | phiat | ... example ??? :) |
| 23:23 | phiat | (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 | phiat | 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 | phiat | 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 | phiat | lein repl |
| 23:27 | phiat | 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 | jared314 | 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 | phiat | (import '[processing.video Video]) - > ClassNotFoundException processing.core.PConstants java.net.URLClassLoader$1.run (URLClassLoader.java:202) |
| 23:31 | phiat | hmm. i shoudl look into adding this into quill somehow |
| 23:31 | phiat | quil |
| 23:32 | phiat | i'll be back later. thanks jared314 |
| 23:32 | phiat | 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 | chord | but this fails (ns rts.core (:require rts.gl)) (defn -main [& args] (println "testing")) |
| 23:36 | chord | 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 | phiat | (defn f [] <--- need that (println "x")) |
| 23:38 | chord | wtf how did the absense of [ ] give me that exception |
| 23:38 | chord | instead of telling me parse error |
| 23:39 | phiat | defn is macro? maybe |
| 23:41 | jared314 | i thought defn was a function |
| 23:41 | jared314 | maybe it is a macro |
| 23:42 | phiat | it is, i dont know if that is the reason for what chord wanted |
| 23:48 | phiat | 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 |