#clojure logs

2013-11-15

00:01swarthyI'm confused by #'x, i see that it expands to (var x). Is (var) something like a pointer to an object?
00:02bitemyappswarthy: yes but vars are transparent when used.
00:02bitemyappswarthy: vars are how you create references to values
00:02bitemyappswarthy: symbols are how you name vars.
00:03bitemyappswarthy: vars and symbols used to be a singular concept in Common Lisp, Hickey had to separate the two in order to make Lisp-1 + full macros work.
00:04swarthyso this is the seperation of identity and value then? (def x 4) thus x == 4 and (var x) == x itself
00:04swarthydo I understand that right?
00:04bitemyappwell, identity traditionally has been "are these the same pointer?"
00:05bitemyapppretty sure vars are isomorphic in this case, vars are equal if they share the same value, and they're only identical if they're the same var.
00:06bitemyappbut they don't have to actually *SHARE* the same value, just *BE* the same value.
00:07swarthyi see. So this would be used in something like STM maybe. To check if the new and old are the same value before committing the identity of the var to its new value.
00:07swarthyi'm trying to understand why something like this exists
00:07ambroseb_Ember-: danneu: core.typed has nothing to do with how generic your code is. It catches type errors in your code, no matter what abstraction level you use.
00:08swarthybitemyapp: I'm coming from here: http://mmcgrana.github.io/2010/08/clj-http-clojure-http-client.html very last item (def request...)
00:08swarthybitemyapp: wondering what the #'core/request signifies
00:08TimMcswarthy: A var is a mutable pointer; a symbol is the name of a var. (Symbols don't *have* to name vars, of course.)
00:08bitemyappswarthy: that's indirection so it doesn't retain the original value
00:08bitemyappswarthy: so you can dereference it upon use
00:09bitemyappswarthy: often needed for things like app reloading...
00:09bitemyappswarthy: think about it, without indirection, how can you swap things out so your server uses the new handler code?
00:09bitemyappvars are why you can overwrite/monkeypatch arbitrary data.
00:09bitemyappeven if you shouldn't abuse that as a first-order programming methodology.
00:10bitemyappswarthy: is it all beginning to come together now?
00:10swarthyyes it is more tangible at least
00:10swarthythanks!
00:10bitemyappswarthy: you have a REPL. Take your weapon, strike down your unknowns.
00:10bitemyappswarthy: test it!
00:10bitemyappswarthy: experiment!
00:12swarthyah i see. (def x 5) (def y #'x) (println @y)
00:20TimMc(inc bitemyapp)
00:20lazybot⇒ 12
00:25sshackCan anyone here help me out with a simple clojure problem.
00:26Adeononly after you present your simple clojure problem
00:26sshackI've got a leon project with a few different files. foo.bar, foo.baz. I run a leon repo and it loads foor.bar namespace, but then I cannot access foo.baz namespace no matter what I try.
00:27sshackfoo.baz/quux (use 'foo.baz) both spit out errors.
00:28sshackI am clearly missing something. Can anyone give me some pointers?
00:28swarthyWhat are the errors?
00:37sshackException lib names inside prefix lists must not contain periods clojure.core/load-lib
00:39swarthypaste the code you are tyring to run/execute and the error on refheap.com. I'm still new myself so I'll need to see as much as possible to help
00:45swarthysshack: this may be helpful to you - http://blog.8thlight.com/colin-jones/2010/12/05/clojure-libs-and-namespaces-require-use-import-and-ns.html
00:47sshackSee, even what I think are fully qualified function calls don't seem to work.
00:47swarthyso you 'lein new myapp' then cd myapp then 'lein repl' (+ 1 2)
00:48swarthydo you get 3?
00:48sshackYeah. It's only my own functions that have this problem.
00:49swarthywhere have you saved these files? When you (use) or (require) those files in they need to have a (ns) declaration that co-responds to the directory structure. And that directory structure needs to be on your java classpath.
00:49sshackmyapp/foo.clj
00:50sshackerm src/myapp/foo.clj
00:51sshackhttps://www.refheap.com/20900
00:52sshackhttps://www.refheap.com/20901 <- With code this time.
00:54swarthyI don't think your testapp.foo is compiled.
00:54swarthyI'm trying to figure out how to do that at the repl.
00:55swarthytry (compile 'testapp.foo)
00:55swarthythen what you did before
00:57sshackOkay, now that is stupid.
00:59sshackSo why do I have to compile this?
00:59swarthyClojure is a compiled language.
00:59swarthybut also try (use 'foo.bar :reload-all)
01:00swarthyreplace foo.bar with what you have
01:00sshackAnd why wasn't that mentioned in any tutorial somewhere?
01:00swarthyYou should use LightTable when you are first getting started.
01:00swarthyIt will make working with it all super easy.
01:02swarthyThe way clojure works is that you write a mystuff.clj which gets compiled to a series of .class files. .class files are what the JVM uses for bytecode. Doing all of this manually at the repl is a pain. So most people use Emacs or some other editor to do it for them. I suggest LightTable again, it is free and very easy to use.
01:02swarthyYou just open your project folder. then press ctrl-enter to evaluate your code
01:02swarthyand the results show up right next to it
01:02sshackI'm still missing something as I know I've done this in the past.
01:02sshackYeah, I know about lt.
01:03swarthyWhat do you know you have done?
01:04sshackLoaded all my code and called functions in a different ns.
01:07swarthyyou could (require 'myapp.foo) then (myapp.foo/bar x) should work
01:08swarthyor (require '[myapp.foo :as foo]) then use (foo/bar x)
01:11`cbp_why is haskell so hard lol
01:12`cbp_worst syntax ;-;
01:17danneui could never find a good workflow with haskell
01:17danneuespecially when i'm used to evaluating the line i'm looking at in a file with cloclo
01:23brainproxycloclo?
01:23sshackswarthy Right. So my problem seems to come down entirely to my code vs others code.
01:24sshackI can use/require other peoples code and iw works perfectly. But clojure seemingly just won't find my code at least at the repl.
01:24sshackBut that's enough for tonight. I"m starting to make mistakes.
01:25swarthyyeah, ask tomorrow during the day. More experienced people will be around and I am sure they can sort you out!
01:41bitemyapparrdem: alright, Linux machine gets a monopoly on the KVM for awhile, I need to get some work done ^_^
01:41bitemyapparrdem: stealing your idea (mostly)
02:16Ember-ambroseb_: yes, I know that
02:16Ember-but type checking can do sanity checking for you
02:17Ember-if your function just wants map as a parameter and nothing else will do then type checking is way to go
02:17Ember-and that was the original problem mentioned
02:18Ember-that guy was worried that if he writes more clojure code into single codebase he will lose track of what his functions should take as parameter
02:18Ember-and I tried to tell him that he needs to change the way he thinks about his function signatures in general
02:18Ember-but there are cases when you need to be explicit and that's a great place for either contracts or typed clojure
02:19Ember-where typed clojure of course is way more comprehensive choice
02:45ambroseb_Ember-: I don't understand the thinking that just because we're in a dynamic language most of our functions should have some defined behaviour for any parameter type. I'd say the overwhelming majority of functions (both library & user defined) have more specific types than Any as parameters, so it's a valid concern to lose track of this information.
02:45ambroseb_whether these functions blow up or have undefined behaviour on weird input is another matter
02:51bitemyappambroseb_: interfaces that actually need to handle such a thing usually break out into discrete type dispatch eventually anyway
02:52Ember-ambroseb_: I agree what you say, maybe I expressed myself badly
02:52bitemyappthere's a pretty narrow range of things that truly dynamic functions can express that are awkward in a static type system and that range gets narrower by the year.
02:53Ember-what I was trying to say that it is a *good* thing to be able to accept many different *datastructures* if that's what your function takes
02:53Ember-when it makes sense
02:53Ember-and in clojure world you usually want to pass around datastructures
02:54Ember-when I've taught Clojure for Java programmers I've noticed that is the no. 1 problem they are facing
02:54Ember-they have hard time to grasp the fact that in Clojure you want to operate on data structures, not on some specific types containing your data
02:54bitemyappEmber-: that doesn't actually happen very often.
02:54bitemyappat best, you're writing functions for data that is vaguely "mappy" or vaguely "iterable"
02:55bitemyappthese are concepts trivially reified in a static type system that isn't made of ass and fail like Java's
02:55Ember-bitemyapp: true, but that doesn't mean that isn't a good thing when it's possible
02:55bitemyappthen when somebody passes a "mappy" thing or "iterable'ish" thing to your function that doesn't satisfy all of your constraints, you can fuckin' fix it instead of getting cryptic exceptions.
02:56bitemyappEmber-: you get a lot more mileage out of knowing things than you do not knowing things.
02:56Ember-of course
02:56bitemyappEmber-: dynamic type systems are like wearing a blind fold so that when you scoop food out of random bowls into your mouth you don't have to know what you're eating
02:56Ember-like I said, I expressed myself badly obviously
02:56bitemyappEmber-: there are many wonderful things about Clojure, none of them have to do with having a primitive type system.
02:57Ember-and that must be the reason why I said typed clojure is great, right?
02:57Ember-I *do* know all of these things
02:57bitemyappthis conversation isn't for just you and I
02:57bitemyappsometimes I expound on things just to disseminate ideas
02:58bitemyappsame reason I tweet things.
02:58Ember-I've written clojure professionally and while doing that I've faced situations where I want to be extremely strict about the parameters my function can take
02:58Ember-but I've also faced situations where all I care is some little thing in the parameter and rest can be whatever
02:59Ember-the latter has *always* been more generic and used in more places
02:59bitemyappyou always care, it's just a question of how much you're thinking about it
02:59bitemyappthe only time you truly don't care about your parameters or data you're using is when you're not actually using them
02:59Ember-yeah, if you don't care then you don't need that function
02:59bitemyappyou're always relying on *something* to be true
02:59bitemyappthe question is how specific and well thought out those things are
03:00Ember-yes, but my original statement comes from the guys coming from static typed world
03:00Ember-especially java guys
03:00bitemyappjava doesn't represent anything good or interesting about static type systems
03:00Ember-since they just can't think that's a real option to *not* be *completely* strict
03:00bitemyappJava as a language is a vehicle for hate, fear, and human misery.
03:00Ember-hehe
03:01Ember-it has many, many things done wrong
03:01Ember-but it is better than some alternatives :)
03:01Ember-take PHP for example
03:01Ember-or C++
03:02Ember-everything is relative to where you compare it
03:02Ember-if you compare java to clojure or haskell then yes, I agree with you completely
03:03bitemyappClojure doesn't meaningfully have a type system, so it doesn't belong on that spectrum.
03:03Ember-especially to haskell since we were talking about static typing
03:03bitemyappClojure has a type system like a bald man has a hair style.
03:04Ember-but this conversation is pointless, we obviously think likewise
03:04Ember-I need to work :P
03:04bitemyappEmber-: I need to write Haskell code, soothe my soul :P
03:05Ember-bitemyapp: feel sorry for me, I'm writing Java
03:05Ember-my last project was with Clojure :(
03:05Ember-oh, and it's a legacy system
03:05bitemyappEmber-: I'm sorry to hear that. My current project (wrapping up right now) at work is in Clojure, next one is likely to involve Clojure but I can't be sure how much.
03:05Ember-so, legacy system written in Java
03:06bitemyappThere's some legacy at my company, but it's Python and a startup so only so much pain is possible.
03:06Ember-I've tried to convince the customer that certain parts would make sense if it was in Clojure (which it would)
03:06Ember-but they think that's something bad and hipster
03:06Ember-same as they think WebLogic is great
03:07Ember-even though I presented them with arguments that it isn't and it's actually just costing them a lot of money for nothing
03:07Ember-and making our lives more miserable
03:07bitemyappEmber-: you need to find a new customer or rejigger that relationship yo.
03:07bitemyappLife is too short to write Java.
03:07Ember-fortunately I get out of this project by the end of the year
03:07bitemyappGood.
03:08bitemyappEmber-: my current life improvement goal is getting out of the bay area. I've heard good things about Seattle, Portland, and Austin.
03:08bitemyappI don't know how soon a departure could happen, it's looking like a 1-2 year goal.
03:08Ember-well, I live in Finland :)
03:09bitemyappEmber-: I don't know if I would be very happy working as a programmer outside of the US.
03:10bitemyappI guess there are some Haskell and Clojure companies outside of the US, but it can be harder to find.
03:10Ember-bitemyapp: very true
03:11Ember-but fortunately in Finland Clojure is raising it's head *hard*
03:11Ember-quite a many companies have either started using it or are considering
03:11Ember-Haskell is still in minority
03:11bitemyappEmber-: JVM host for Clojure helping there I imagine?
03:12bitemyappI think people overestimate the usefulness of being on the JVM, personally, but if it sells it sells.
03:13TEttingerbitemyapp, it's been a pretty huge selling point for me, since I learned Java before any lisps
03:14TEttingerit does let me back into comfortable mutable java libs for tasks where that makes sense
03:14bitemyappTEttinger: I came to Clojure from Python and learned Haskell concurrently. The JVM was a wash for me. It seems to have helped bootstrap some libraries more quickly, but a lot of the libraries have ugliness hiding under the covers.
03:14TEttingeryes.
03:15bitemyappI could name a few that have given me grief as a result
03:15TEttingerbut would it be better anywhere else?
03:15bitemyappTEttinger: Python and Haskell's libraries were typically a clean break except in the case of some underlying C, pretty happy with that.
03:16TEttingermy only real issue with clojure on the JVM is that a significant group of end users do not have any sort of java installed, and bundling a JVM is ugh.
03:16bitemyappAnother reason I'm meh about the JVM is that I really like having fast-starting binaries.
03:16bitemyappor scripts.
03:16TEttingerthat too.
03:17bitemyappI do a lot of odd-and-end scripting/automation/binary distribution/dev-opsy stuff
03:17bitemyappClojure is...not great for that.
03:17bitemyappI end up setting up a REPL and trying to do what I need to do in "batch"
03:17bitemyappwhich works okay up to a point, but it's not really what I want.
03:22Ember-bitemyapp: indeed, that's the reason
03:22Ember-and the fact that you can call java code from clojure easily
03:22Ember-so there's an existing ecosystem
03:23Ember-sure, a lot of java code is so bad when you think it from clojure side of things that you don't *want* to call it
03:23Ember-but that is a compelling argument anyway for management
04:30ambrosebsisn't the docstring for iterate incorrect?
04:30ambrosebs,(doc iterate)
04:30clojurebot"([f x]); Returns a lazy sequence of x, (f x), (f (f x)) etc. f must be free of side-effects"
04:30ambrosebs(class (iterate + 1))
04:30ambrosebs,(class (iterate + 1))
04:30clojurebotclojure.lang.Cons
04:30ambrosebsthat's not a LazySeq
04:33ambrosebsthe implementation looks fishy
04:33ambrosebs(cons x (lazy-seq ...)) vs (lazy-seq (cons x ...))
04:34ambrosebssecond arity of reductions has the same problem
04:40ambrosebsCons is just as lazy as LazySeq right?
04:40ambrosebsso this is probably not a problem.
04:41ambrosebsfrom a typing perspective, I'm not sure what to give the return type of iterate as
04:41ambrosebsI guess ISeq or ASeq
04:41ambrosebsin fact LazySeq sounds optimistic for *any* sequence operation return type
04:42ambrosebslike Cons, LazySeq is just an implementation of ASeq
04:44clgvambrosebs: no. you are right. cons is not lazy. the first element of that sequence is already realized
04:44ambrosebsclgv: well it's already realised by passing to iterate.
04:44ambrosebsbut yes
04:45clgvambrosebs: yeah that's true. but we are arguing about the properties of the return value
04:46clgvambrosebs: I wonder if that is supposed to be some (pre-mature?) optimization
04:46ambrosebsclgv: it seems unlikely, the first arity of repeat has the same idiom but backwards
04:47ambrosebsI think it's just an unintentional inconsistency. The big question for me: what does the documentation mean exactly by "returns a lazy sequence".
04:47clgvambrosebs: well, than I'd regard it as an error but with most likely no practical implications
04:48clgvambrosebs: the documentation clearly shoots for the behaviour repeat exposes
04:49ambrosebsThere are Seqs that are never lazy at all right? So a "lazy sequence" must mean a LazySeq I guess
04:49ambrosebsI mean, a partially lazy Cons is even incorrect, but yea.
04:50ambrosebsHmm actually is there an implementation of ISeq that is eager?
04:51ambrosebsprobably not relevant.
05:10clgvambrosebs: yes. PersistentList implements ISeq ;)
05:11ambrosebsclgv: :)
07:08djpowellHmm, sourcemaps don't work on Windows, under advanced mode, or various other combinations of options
07:09djpowellSeems to be to do with the relative path munging and backslashes and stuff
08:08jamiei_Does anyone know how to set the series labels for a multiple series time series chart with incanter? Setting the :series-label property does not produce the outcome I expect.
08:56danielszmulewiczIRC is quiet because everybody's at the clojure_conj?
08:56danielszmulewicz:-)
08:56danielszmulewiczjealous
08:56Ember-no, I'm cursing Java code
09:00mdrogalisdanielszmulewicz: Correct.
09:01danielszmulewiczmdrogalis: :)
09:04clgvdanielszmulewicz: it's wakeup time for those in GMT - 8 I guess ;)
09:06danielszmulewiczOh right. I always forget
09:30ambrosebsis it clojure_conj because it sounds like conf, or (into conference people) ? :)
09:31carkbecause it's conj'ing people together ?
09:31mdrogalisHah, ambrosebs
09:31echo-areaWhich http client would you suggest? http-kit, clj-http, or http.async.client?
09:32ambrosebscark: (into conference people) is the same as (apply conj conference people) :)
09:32carkif a little obfuscated !
09:34carkyou know what, i never used conj with more than one item to be conj'ed
09:34carkdidn't even know it was possible
09:34carkbeen using clojure since before 1.0
09:34cark...
09:35mdrogalisI recently learned you can do:
09:35mdrogalis,(assoc [1 2] 0 3)
09:35clojurebot[3 2]
09:35mdrogalisHad no idea assoc could do that.
09:35cark,(get [1 2] 1)
09:35clojurebot2
09:36carki'd say it's vectors that can do it
09:36mdrogalisYou get my point :P
09:36carkhehe yep
09:38philandstuffvectors are Associative
09:42clgvambrosebs: no, `into` uses transients and is more efficient ;)
09:42clgvambrosebs: I thought the "conj"ing together people might be the reason...
09:43clgvambrosebs: is there a "clojure cons" in front of the toillets at "clojure conj"? ;)
09:44ambrosebsclgv: :)
09:47Aim_HereThe "clojure dissoc" happens when people decide to form squabbling factions and excommunicate each other from the Clojure community
09:47carkdisj !
09:48mdrogalisHeh
09:53uruvielHey, what would be the good way of matching rules for unknownly deep maps with core.logic? Say unify ?p with {:foo {:bar {:baz p}}} or {:foo {:baz p}}
09:56ambrosebsuruviel: sounds like a recursive conde? it's been so long since I've used core.logic, that's all I've got :)
09:57hiredmanuruviel: I like recursive goals with feature rec, I assume you are matching something tree like, like the output of clojure.xml/parse
09:59arrdemecho-area: clj-http is what I see getting the most use... but they all do the same job.
09:59uruvielambrosebs: thank, I'll take a look. basically what I'm after is that I have some input map (from XML or JSON) and want to trigger some rules based on "what kinda looks like" (i.e. I'd like to be as ignorant as possible about the structure of the data)
09:59uruviel*thank you
09:59echo-areaarrdem: I got the same idea on a stackoverflow page. Thank you!
09:59uruvielI thought core.logic might be an interesting fit, I looked into core.match but it doesn't seem to handle nested maps that well
10:14uruvielhiredman: is there some documentation on recursive goals somewhare? (been a while since I did logic programming, and even that was in prolog)
10:35mikerodwhy are dynamic bindings in `binding` bound in parallel as opposed to sequential, like `let`
10:35mikerodI'm just curious in the motivation in working opposite to `let`
11:02technomancymikerod: IIRC it's only possible to do it efficiently for let
11:05zerokarmalefthmm, wouldn't it have more to do with the difference b/w binding and let wrt lexical scope rather than efficiency?
11:06technomancyIIRC to do it efficiently dynamically you have to push bindings as a whole
11:06technomancybecause binding macroexpands to push-thread-bindings?
11:10zerokarmalefttechnomancy: yea, all the value-exprs-to-be-bound have to be evaluated before push-thread-bindings
11:24clgvit is amazing how badly you miss clojure when you have to use R to extract data from their binary "Rdata" format...
11:26mikerodso it is just more efficient to push-thread-bindings in bulk?
11:27pjstadigthere are some sticky issues with popping bindings if you push them one at a time
11:27pjstadiglike if you get an exception poping one of the bindings, then what do you do with the rest
11:28pjstadigbut probably it's more to do with efficiency i guess
11:30technomancyit's actually more surprising to me that you *can* let-bind efficiently one at a time
11:47mikerodinteretsing
11:47mikerodinteresting*
11:49danneuAdding a slight background and underline to clojure function-names in definitions is life-changing
11:51mikeroddanneu: visually?
11:51danneuhttp://i.imgur.com/Cen1sIG.png
11:52danneuno more hunting for the fn name
11:52mikerodyeah, that makes it a bit more obvious
11:53danneumight even make it <marquee>
12:15danneuputting tests in ^{:test _} meta is also pretty awesome in the early stages of a project. that way functions are portable in a time when you're not yet sure how you're going to actually split up namespaces or what your abstraction will look like
12:15danneu(while my monologue is on the subject of recent things i've started doing)
12:17danneufeel free to siphon some of my awesomeness into your own projects.
12:17danneuplenty to go around
12:17xificurChi i'm trying to install cider for emacs 24 on slackware 14 with no luck. package-install throws an "Error during download request: not found" and el-get-install doesn't show cider as an option, only nrepl
12:18technomancyxificurC: nrepl.el from marmalade still works well
12:19xificurCtechnomancy: so theres no need to go for cider? I was out for a couple of months
12:21danneuxificurC: id just roll with nrepl
12:22technomancyI don't think there's any need to switch unless there's a specific bug you're running into that's been fixed in the past few weeks
12:22xificurCI remember now that I couldnt get nrepl working well on this machine before, sigh
12:23xificurCi think the best i could do was run an nrepl session via leiningen and then jack in
12:23xificurCnope, I dont have leiningen, must have been another machine.. and leiningen wont install either
12:24danneui dont think that's so painful a workaround if you really have to do that
12:24danneuas long as everything's operational after that like nrepl-eval-buffer
12:24technomancyI doubt cider will have fixed that
12:25danneuxificurC: what would actually happen when you'd nrepl-jack-in?
12:25xificurCdanneu: that aws on a different machine, i have bigger problems here :)
12:26xificurCgosh im a noob at slackware
12:28danneuyou must be pretty patient if youre willing to set up a development environment on an OS you're not so familiar with
12:28xificurCill have to update jdk first but the tarball md5sum is failing
12:29arrdemdanneu: he'll fit in nicely... as evidenced by chord we have the patience of saints here.
12:29xificurCdanneu: i got clojure or common lisp running on slackware,win xp, win 7 and maybe even pcbsd
12:31xificurCso you cant wget jdk, thats a nice one
12:31danneuarrdem: good point
12:32xificurCthat explains the md5sum failure and why the jdk tarball had 175kB. A small implementation indeed
12:33danneui dont know why i so quickly dismissed the wooly yaks that graze on the plains of OS idiosyncrasies
12:34xificurCand I already have 2 jdks on my machine, how brave of me
12:35xificurCshouldnt leiningen compile on 7u21?
12:40xificurChow can i uninstall a previous version of nrepl?
12:41mpwdxificurC: Maybe try rm -r the offending directory in ~/.m2/repository/
12:42mpwdDoes anyone know the fastest JSON parsing library for clojure?
12:43mtpis json parsing a measurable bottleneck in your code?
12:43mtpuntil that is 'yes', i wouldn't bother fretting over finding the fastest one
12:45indigoOh PHP https://www.refheap.com/20921
12:45notstevempwd: have you tried the clojure version? https://github.com/clojure/data.json it's a pretty save bet
12:46indigompwd: Cheshire is pretty good too https://github.com/dakrone/cheshire
12:51arrdemindigo: .... WTFPHP
12:51indigoarrdem: I know right
12:52arrdemindigo: it's great because I can't even justify it at all. I'm really really curious why that's the case.
12:54indigoarrdem: Yeah... I have no idea as well. Maybe some backwards compat crap?
12:55indigoMaybe I should ask in ##php
12:55indigo:P
12:56S11001001arrdem: null converts to 0
12:57S11001001oh, no, that doesn't make sense.
12:58`cbpanyone using http-kit websockets, i use the .toString method on channels to log connections but sometimes I get clients like #<AsyncChannel 0.0.0.0/0.0.0.0:8080<->null> why would that be
13:10indigoarrdem: I asked and they just redirected me to the comparisons operator page :|
13:11S11001001indigo: they probably did you a favor; the php docs are about the only sane thing in php land
13:11mpwdmtp: No, but we are using it for serialization and there are several libraries, so I just wanted the fastest. I figure I'll just go with cheshire
13:11indigoHehe yep
13:11arrdemS11001001: haha yeah that's why I'm entertained by this.
13:12arrdemindigo: is nil < -Inf ?
13:13indigoarrdem: For which language
13:14S11001001arrdem, indigo: ah, I see. The 2nd case is applicable: left operand is null, right is anything: convert to bool, false < true
13:14arrdemindigo: php
13:15arrdemS11001001: okay. that makes sense at least.
13:15indigoarrdem: True
13:17arrdem,(#'clojure.pprint/cl-format "~b" -1)
13:17clojurebot#<CompilerException java.lang.RuntimeException: Unable to resolve var: clojure.pprint/cl-format in this context, compiling:(NO_SOURCE_PATH:0:0)>
13:17indigoI was all "nil.. Ruby? Clojure?"
13:17arrdem,(do (use 'clojure.pprint) (cl-format "~b" -1))
13:17clojurebot#<IllegalArgumentException java.lang.IllegalArgumentException: Don't know how to create ISeq from: java.lang.Long>
13:19xificurCso it only took an hour or two to get nrepl running
13:19arrdem,(do (use 'clojure.pprint) (cl-format nil "~b" -1))
13:19arrdemclojurebot: ping
13:19clojurebot"-1"
13:19clojurebotPONG!
13:19devnanyone know where exp and pow come from in overtone?
13:26`cbpyogthos: hi
13:35upwardindexAny way to make git a little bit more smart with sexps ?
13:38joegallohttp://wandrian.net/2012-03-11-1727-custom-git-hunk-headers-for-lisp.html this is useful
13:38joegalloit's just a minor improvement, though
13:39joegallothere are also some command line flags you can use to ignore whitespace changes, which make it easier to deal with the addition of a wrapping form that changes indentation on a bunch of lines
13:47upwardindexjoegallo: thank you that will help a bit
13:50pjstadigupwardindex: i find this useful
13:50pjstadigi forget what it does https://github.com/pjstadig/new.dotfiles/blob/master/.gitconfig#L23
13:51pjstadigit helps git find a useful chunk of text to show at the top of a diff
13:51pjstadighttp://stackoverflow.com/questions/3409526/customizing-headings-in-git-diff
13:51joegalloyeah, technically what pjstadig has is the same setup as i have.
13:52joegallowhich is an amazing coincidence
13:52pjstadighaha, yeah that is an amazing coincidence
13:52pjstadigif only i actually read chats before i opened my big mouth
13:56joegalloheh, no worries, brotha
13:57arrdemdidn't someone put together a custom git frontend that actually stored Clojure code structurally rather than textually?
13:57arrdemwoulda sworn I saw that on HN a few months ago...
13:58pjstadigarrdem: don't know. rich did codeq
14:01bitemyapparohner: that was Codeq which is built on Datomic.
14:01bitemyapperrr...arrdem ^^
14:02bitemyapparrdem: also Seangrove made a web frontend to that I believe.
14:02arrdembitemyapp: ah. that makes sense.
14:02bitemyapparrdem: https://groups.google.com/forum/#!topic/clojure/Fs6AHk5hA_k
14:02arrdemI really want to play with that...
14:02bitemyapparrdem: http://blog.datomic.com/2012/10/codeq.html
14:03bitemyapparrdem: so go play with it
14:03arrdemsoo many yaks so little time..
14:04danenaniadoes the closure compiler munge object keys created with (js-ob)? getting an error only in advanced mode that seems to be caused by munging
14:05danenaniaif so, is there a way to stop it doing so? can i annotate string keys with ^:export?
14:06danenaniaapparently i can't annotate string keys
14:08bitemyappdanenania: don't do that.
14:08bitemyappdanenania: wait, nevermind, you're doing something else, sorry.
14:11seangrovearrdem: Not perfect, might be fun for you to play with http://www.jidaexplorer.com/
14:12arrdemseangrove: haha thanks for the link
14:12seangrove... or Codeqsplorer
14:13arrdemidk. I feel like structural version control is a good thing, and I also have this feeling that issue tracking and version control should be integrated into a single system.
14:13technomancyarrdem: I've read a bit about it, but last I checked all the research in the area of tree-aware version control was around XML =\
14:14arrdemvc backed support for literate as long as I'm dreaming...
14:14seangrovedanenania: I don't think that closure will munge string keys
14:15danenaniaseangrove: just discovered that apparently it does unless using aset/aget http://squirrel.pl/blog/2013/03/28/two-ways-to-access-properties-in-clojurescript/
14:15arrdemtechnomancy: that's most unfortunate...
14:15technomancyindeed
14:16seangrovedanenania: Very interesting, I was just looking at the implementation of js-obj, but that explanation makes sense
14:17bitemyapparrdem: issue tracking is a workflow issue and people are too persnickety about it. Version control should be neutral territory.
14:17bitemyapparrdem: "complecting" things together instead of making composable tools isn't the answer.
14:18bitemyappHaving too much shit rolled into the same thing is part of what made Fossil terrible.
14:18seangrovearrdem: I agree with bitemyapp, but I would very much like to see what a structurally-aware vc looks like
14:18bitemyappstructurally aware VC would be great, I just don't think you need to throw JIRA into it.
14:19seangroveYeup.
14:19arrdembitemyapp: I guess so. Really all I want is an issue tracking system that integrates nicely with my entirely emacs/zsh based workflow. The real answer is probably to just run a $ROOT/.git and an ignored $ROOT/issues/ with a seperate .git...
14:19bitemyapparrdem: that's org-mode dude.
14:20seangroveHrm, pondering storing edn in a postgres field vs figuring out how to use the native hstore...
14:20technomancybitemyapp: only if you want to get issue reports from emacs users only
14:20technomancy"it's a feature, not a bug"
14:20arrdem^ this
14:20arrdemwait. no. ^^^ that.
14:20bitemyappI didn't know other people were a prerequisite.
14:21technomancybitemyapp: spoken like a bona-fide CL hacker!
14:21bitemyappseangrove: is it a simple KV query pattern or do you need to query the contents?
14:21bitemyapptechnomancy: well, I legitimately didn't know arrdem needed anybody but himself to use his issue tracking.
14:21technomancybitemyapp: maybe I'm projecting my own desires
14:21technomancywouldn't be the first time
14:21arrdembitemyapp: I don't, but technomancy's got my number on this one.
14:22seangrovebitemyapp: k:v with arrays as values, I'm thinking. Querying is nice, but not a requirement. I'll have some background workers chewing through the database constantly updating queryable fields
14:22seangrovearrdem: I don't know if it's a tome as much as a blackhole
14:22technomancyarrdem: https://github.com/technomancy/edgestow <- doesn't actually work, but
14:22seangroveIt just keeps going
14:23bitemyappseangrove: then either way can work, but the reason for using HStore is so you query against the contents.
14:23technomancyseangrove: org is another whole emacs within emacs
14:23bitemyappyou could make a structural version control system as long as you decided on some universal concepts
14:23bitemyappand made a language plugin system
14:23seangrovebitemyapp: Yeah, I'm wondering if it's going to be a nightmare to figure out how to use hstore from clojure and thus should be put off until later...
14:24arrdemtechnomancy: this is evil. I love it.
14:24technomancyseangrove: I tried using hstore from clojure a while back
14:24technomancyit was pretty awkward
14:24technomancyhad to pull in a crazy adapter class from a random openstreetmap jar
14:24technomancymaybe it's gotten better?
14:24bitemyapptechnomancy: not especially.
14:25seangrovetechnomancy: Sounds like I should 100% avoid it then, thank you for that anecdote
14:25bitemyappseangrove: in a situation where you want to store edn, you're generally looking at a datomic or document store oriented access pattern.
14:25technomancyhttps://github.com/heroku/buildkits/blob/master/project.clj#L15
14:25technomancythis was like a year ago
14:26seangrovebitemyapp: Yeah, it's occurred to me. I've got a live demo coming up Monday and need to get things done, but I'll have to sit you down and talk about the schema/workload and hear your thoughts on bringing datomic in the mix
14:26bitemyapp`cbp: so, projects. Made any decisions as to what you want to work on?
14:26`cbpbitemyapp: nope =p
14:27seangrovetechnomancy: Thanks again, really saved my day/weekend I think.
14:27technomancynp
14:27technomancythe new json stuff looks nicer, but no idea re: jdbc support
14:27bitemyapp`cbp: lightweight composable SQL library, possibly with hstore/json support etc
14:28bitemyapp`cbp: let me dig up my list
14:28`cbpmaybe a haskell-powered blog and get my dissertation done at the same time!
14:28bitemyapp`cbp: there's grom
14:28bitemyapp`cbp: http://github.com/bitemyapp/grom/
14:28seangrovetechnomancy: Yeah, pvh got me on on a pg kick a few years ago and definitely love it, but it can be hard to take advantage of a lot of the pg-specific features from clojure
14:28bitemyapp`cbp: grom is an nREPL client in Haskell
14:29technomancyoh yeah pvh is super helpful
14:29bitemyappI'm a big fan of PostgreSQL myself.
14:32seangrovetechnomancy: He's definitely not long on clojure though. Laughed at me quite a few times when we switched over.
14:32technomancyM-x eyeroll
14:32bitemyapp`cbp: I had an idea for Erlang style OTP in Clojure, but I think Immutant is kinda covering that
14:32seangroveI would have thought you and mark would have done a better job indoctrinating the faithful there :P
14:32bitemyappseangrove: from what?
14:32bitemyappseangrove: mark went over to the Go camp a long time ago
14:32technomancyseangrove: I'm not really "there"
14:33technomancythere's a pretty huge disconnect between remotes and locals
14:33bitemyapp`cbp: Scala School for Clojure, Wrap ssh/jsch with something nicer (core.async?), Swagger support
14:33bitemyapp`cbp: Leiningen test selectors in the REPL
14:33technomancybitemyapp: well
14:34technomancybitemyapp: all of `lein test` turned into a library, really
14:34bitemyapp`cbp: SMTP -> Database/Search Engine
14:34technomancytest selectors alone would be a bit half-assed
14:34bitemyapp`cbp: zero-config in-memory lucene index (Clucy?)
14:34seangrovetechnomancy: Ah, bummer to hear that. Used to be the top place I wanted to work.
14:35bitemyapp`cbp: any of those strike you?
14:35technomancyyeah, it's been a bit disappointing
14:35`cbpbitemyapp: maybe i'll let the dice roll
14:35bitemyapp`cbp: erruh?
14:35indigobitemyapp: The Lucene index sounds fun
14:35indigoLucene is sexy
14:35technomancyclojurebot: 2d12
14:35clojurebotTitim gan éirí ort.
14:35technomancy=(
14:36bitemyappindigo: next on my list is getting Simonides launched.
14:36technomancyhiredman: what's the dice command?
14:36bitemyappif noprompt can get a fucking internet connection, we'll pair on Grom.
14:36bitemyapp~roll
14:36clojurebotCool story bro.
14:37arrdem$roll 2d6
14:37bitemyappseangrove: know of any frontend testing (automated) stuff that is more baked than this: https://github.com/pandeiro/ghost ?
14:37arrdemdang
14:38seangrovebitemyapp: We use clojurescript.test and selenium/taxi + Sauce Labs
14:38bitemyappoh right, of course.
14:39`cbphmm porqué no los tres
14:39`cbpprolly start with lein test as a ser- er library
14:39cmiles74bitemyapp: I have a pull request out to clj-webdriver (taxi
14:39cmiles74bitemyapp: ) to include PhantomJS support.
14:40bitemyapp`cbp: like technomancy said, that's sort of a library already. The question is how to extend it.
14:40bitemyappor make it nicer. or something.
14:40bitemyappcmiles74: hrm, that would be nice.
14:40bitemyappcmiles74: it's too bad casper et al are kinda ghetto.
14:41`cbpok uhm lucene then
14:41bitemyapp`cbp: https://github.com/weavejester/clucy
14:41bitemyapp`cbp: ah, he already has support for a memory-index.
14:41bitemyapphaha, hum.
14:41`cbpgg
14:42cmiles74bitemyapp: clj-webdriver is a step in the right direction, but it's still not really fun.
14:42bitemyappcmiles74: yeah.
14:43bitemyapp`cbp: want to write Haskell? :P
14:43`cbpbitemyapp: I'm having a bit of a hard time with it honestly hah
14:43bitemyapp`cbp: tried Yann Esposito's tutorial?
14:43bitemyapp`cbp: http://yannesposito.com/Scratch/en/blog/Haskell-the-Hard-Way/
14:43`cbpi'll need a few weeks to grok it probably
14:43`cbpyeah im following that
14:44bitemyapp`cbp: s'all good.
14:44`cbpone of the examples there didnt work and so i asked in #haskell and left even more confused
14:44`cbp:-p
14:44bitemyapp`cbp: which?
14:46`cbpbitemyapp: the example right before 3.2.3 i think
14:47`cbpbitemyapp: ill probably try to add lazyness to revise this weekend
14:47bitemyapp`cbp: that's a really good idea.
14:47`cbpbitemyapp: also a `do` query
14:52`cbpor uh something similar i can't quite remember what i wanted
14:52`cbpthe python driver had something i wanted
14:53bitemyapp`cbp: I fixed that Haskell program.
14:53bitemyapp`cbp: do you want to see?
14:54bitemyapp`cbp: data Complex a = Complex { real :: a, img :: a} <--- I made it parametric and removed the typeclass qualifier.
14:54bitemyappλ> real c
14:54bitemyapp1.0
14:54bitemyappit was referring to an "a" that hadn't been passed to the type constructor (parametric type constructor)
14:54bitemyappI don't know why his code was data Complex = ...
14:55`cbpoh so it was a bug?
14:55bitemyapp`cbp: his fuck-up, not yours.
14:55`cbpI imagined maybe this code is on previous version
14:55bitemyappI'm figuring out how to reintegrate the typeclass qualification now, but it "just works" now.
14:55`cbpbitemyapp: do you have a paste?
14:55`cbpor i guess its just that line
14:56bitemyappit's just that line.
14:56bitemyappdata Complex = Num a => Complex { real :: a, img :: a} -- old
14:56bitemyappdata Complex a = Complex { real :: a, img :: a} -- new
14:56bitemyappthe problem is "a" can be anything right now
14:56bitemyappso I need to figure out how to readd the Num constraint.
14:58bitemyapp`cbp: you can do this too: data Complex a b = Complex { real :: a, img :: b}
14:58bitemyapptho I don't know why you would.
14:58bitemyappI'm figuring out why my typeclass qualification makes the type decl existential.
15:01bitemyappsorry, GADT issue.
15:01bitemyapp`cbp: that specific syntax actually got deprecated.
15:01bitemyapp`cbp: Yann's tutorial is probably getting long in the tooth.
15:01`cbpbitemyapp: yeah that's what i figured
15:01bitemyappor not.
15:01bitemyappsigh.
15:02`cbplol
15:02bitemyapp`cbp: #haskell can't agree on what #haskell thinks about Yann's tutorial.
15:02bitemyappanswers to come when they stop arguing.
15:03arrdemis the argumet worth watching?
15:03bitemyapparrdem: no, they're right.
15:03bitemyappyou don't constrain the types of your data
15:03bitemyappyou constrain the types of your functions.
15:03bitemyapp`cbp: ^^
15:04bitemyappnoprompt: long time no see.
15:04bitemyappnoprompt: the age of Grom is upon us.
15:05bitemyappnoprompt: Prepare thyself and thy Salad: http://yannesposito.com/Scratch/en/blog/Haskell-the-Hard-Way/
15:05`cbpoh uhm
15:05`cbpok
15:06noncom,(keyword "aaa bbb")
15:06clojurebot:aaa bbb
15:06`cbphow does grom work
15:06noncomwhy are keywords with space allowed?
15:06hiredmanclojurebot: 1d6
15:06clojurebotNo entiendo
15:06hiredman3d6+5
15:06clojurebot13
15:06noncom{(keyword "a b") 3}
15:06hiredmanthere we go
15:06bitemyapp2d12
15:06clojurebot12
15:06danneuIf you've (case (int x) ...) and your case-preds are 1, 2, 3, then how can you resolve the reflection error where (int x) is an int, but 1 2 3 are longs?
15:06bitemyappnice.
15:06noncom,{(keyword "a b") 3}
15:06clojurebot{:a b 3}
15:07`cbp1d6
15:07clojurebot6
15:07noncom,{(keyword "a b") (keyword "c d")}
15:07clojurebot{:a b :c d}
15:07hiredmandanneu: remove (int x)
15:07bitemyapp,(get {(keyword "a b") 3} (keyword "a b"))
15:07clojurebot3
15:08nopromptbitemyapp: zomg, the salad jokes last night.
15:08bitemyappnoprompt: Grom will eat your salad and take your land.
15:08noncomso why keywords with spaces are alowed? that ruined my world today
15:08danneuhiredman: haha, yeah. i'll just do that. the function it's dispatching uses (int _) for a dumb reason
15:08technomancy...
15:08bitemyappnoprompt: https://github.com/bitemyapp/grom/ all glory to grom!
15:08nopromptbitemyapp: eff, i'm gonna be in hell for a little while. javascript.
15:09bitemyapptechnomancy: twitter.
15:09technomancybitemyapp: I saw
15:09hiredmandanneu: it seems unlikely that that is the reflection warning though
15:09bitemyappnoprompt: I'm sorry to hear that. Write Fay instead and compile to JS!
15:09`cbpnoncom: how did it ruin your day
15:09nopromptbitemyapp: if i could write in an alt-js lang believe me i would be cljs.
15:10noncom`cbp: boiled to a simple example, i was trying to get the key :a from the map readout, which did not exit, and was :a b instead
15:10nopromptbitemyapp: the best thing i can do right now is use mori.
15:10nopromptbitemyapp: however, i'm still writing clj/cljs at home.
15:10noncom`cbp: i could not find where was i wrong
15:10`cbpnoncom: oh :-)
15:10noncomthe data was coming from elsewhere so i had no guess that that can happen
15:10teslanickJavascript isn't so bad; it's remarkably expressive for having a stupid java-like syntax.
15:11seangroveteslanick: Nope, it's pretty bad.
15:11nopromptteslanick: what seangrove said.
15:11seangroveIt's tolerable in small doses, but it's to be carefully monitored.
15:12nopromptit's magnified after a full year of clj/cljs.
15:12nopromptjavascript is a bit more tolerable than python i'll say that.
15:13bitemyappnoprompt: don't get me started about Python's fake closures.
15:14nenorbotbitemyapp: what's wrong with Python's closures?
15:14poppingtonicI've noticed that, the more I immerse myself in Clojure, the harder it gets for me to parse Python.
15:14teslanickhe told you not to get him started ;)
15:15nenorbotJust genuinely curious :)
15:20nopromptdnolen: will cljsbuild automatically compile js that uses closure too?
15:21noprompt^ or if anyone else has an answer to that question.
15:26OscarZI'm looking at memoize function here: http://clojure.org/atoms .The function will be called recursively, I'm wondering about the scope of "mem" .. wouldnt there be a new copy of mem for each function call ?
15:27RaynesOscarZ: mem is defined outside of the anonymous function.
15:27OscarZobviously not.. but how does that work..
15:27`cbpOscarZ: it's a closure
15:27RaynesOscarZ: The returned function closes over 'mem'. That's what a closure is.
15:27OscarZoh.. right.. the "fn" part ?
15:28RaynesYes. That's an anonymous function, which memoize returns.
15:28TimMcnenorbot: Yeah, I keep hearing people whinge about Python's closures, but I still haven't heard an explanation.
15:28OscarZthanks.. it makes sense
15:36seangroveHrm, what's the clojure method of converting clojure datastructures to edn? I see clojure.edn/read-string for reading
15:36`cbpseangrove: pr-str
15:36justin_smithseangrove: usually pr-str suffices
15:37justin_smithor pr with a stream argument
15:37seangroveAh, yes, sorry, my example I was using in the repl was slightly off
15:37seangrovepr-str was doing its job fine, pebkac
15:43arrdemhum... looking at using core.logic for a strategy system. Should I be pushing predicates into c.c.l instead of writing them in stock Clojure?
15:56adhollandercd
16:01TimMcls
16:01lazybotboot data dev home lost+found opt root sbin selinux swap tmp
16:09pjstadigrm -rf /
16:10TimMcpjstadig: You'll need a --no-preserve-root
16:16alsowhat clojurescript compiler options (versions? something?) would cause it to emit javascript like "cljs.core.constant$keyword$7" instead of "cljs.core.Keyword(null, "else", "else", 1017020587)"
16:16hyPiRionTimMc: we should totally implement Swearjure in https://github.com/alandipert/gherkin
16:16alsoi get cljs.core.constant$keyword$7 running bin/cljsc and the other from lein-cljsbuild
16:17alsoi *think* i'm using r2030
16:18bitemyappseangrove: are we still doing Lava?
16:21bitemyappseangrove: if so, is that today or tomorrow?
16:21TimMchyPiRion: Yeah, I'm definitely waiting for Clash or whatever Clojure-on-bash gets called. :-P
16:21TimMcAre you at the conj?
16:22seangrovebitemyapp: tomorrow, and if you're not going into your office on Saturday, we can find a more in-the-middle place to meet. Must be bars somewhere in the middle.
16:22technomancyTimMc: are you???
16:22lazybottechnomancy: Oh, absolutely.
16:22seangroveI believe SF has the highest number of bars per-capita in the states
16:22hyPiRionTimMc: yep
16:23TimMctechnomancy: Nope.
16:23technomancysadface.jpg
16:23TimMcYeah, I should go some time.
16:23TimMcToo busy this year.
16:24bitemyappseangrove: I won't be at the office, but the office isn't a bad epicenter because I have unparking next to it.
16:24biggbeardoes "lein repl" reads the file project.clj? and if so how to include in there libraries like clojure.pprint. Please
16:24seangrovealso: Very strange
16:25technomancybiggbear: clojure.pprint is a namespace, not a library
16:25augustldoing algorithm basics on coursera. Are there any papers/blog posts/.... about the persistent data structures in Clojure?
16:25pjstadigaugustl: yes
16:26pjstadighttp://lmgtfy.com/?q=phil+bagwell
16:26bitemyapppjstadig: that's just mean :(
16:27bitemyapppjstadig: it's not actually that obvious that Clojure's data structures are based on Bagwell, rather than Okasaki's work.
16:27pjstadigturns out the results aren't that great, they don't surface any papers
16:27pjstadighttp://lampwww.epfl.ch/papers/idealhashtrees.pdf
16:27bitemyappdammit
16:27clojurebotGabh mo leithscéal?
16:27bitemyappbeat me to the punch.
16:28augustlpjstadig: thanks!
16:28pjstadigsure
16:29pjstadigaugustl: i don't think there are any papers on clojure's persistent vectors, but there's the rrb trees paper which kinda explains them http://infoscience.epfl.ch/record/169879/files/RMTrees.pdf
16:29pjstadigand adds some features to them
16:30augustliirc Clojure is unique in that they're completely immutable?
16:30augustlor is it transients that makes Clojure unique?
16:31technomancyaugustl: clojure is different from many implementations in that the performance characteristics don't degrade over time
16:31technomancyalso efficient functional vectors are quite rare
16:32augustlperhaps reading the damn code is enough for a good understanding - after the coursera algorithms course, that is
16:32pjstadigaugustl: implementing them will be the most illuminating
16:32pjstadigreading the code second best
16:32pjstadig(aside from reading the papers)
16:32alsoseangrove: it's :emit-constants
16:32alsoseems to be true for my lein-cljsbuild, false for cljsc
16:33augustlpjstadig: are there C implementations? Would be fun to toy with that
16:33seangrovealso: That's the source of the problem? I've never seen that flag.
16:33augustlmemory management aside..
16:33alsoi think it's this: https://groups.google.com/forum/#!topic/clojurescript/bSFK6CEE3PE
16:34pjstadigaugustl: you need GC for persistent datastructures to work, which could is possible in C
16:39technomancynice round of applause for juxt at the conj
16:39bitemyapptechnomancy: wait, are you watching?
16:39bitemyapptechnomancy: is there a stream?!
16:40technomancybitemyapp: I'm ... present
16:40technomancyin, you know, meatspace
16:40biggbeartechnomancy: thanks, i guess you have to require clojure.pprint in the project.clj -> repl-options -> init?
16:40bitemyapptechnomancy: oh, I didn't know. ;_;
16:40bitemyapptechnomancy: who used juxt?
16:41technomancybiggbear: yeah; there's no way afaik to refer it everywhere though
16:41technomancybitemyapp: alan dipert had a juxt in his lisp-in-bash impl
16:42technomancyand the current speaker said it was his favourite function
16:42bitemyapptechnomancy: I just documented this code which uses juxt: (into {} (map #((juxt :db/id identity) %) (db->schema db)))
16:43technomancy\m/
16:43technomancybitemyapp: wayt
16:43technomancywait
16:43bitemyapptechnomancy: wut
16:44pjstadigwat
16:44technomancywhat is going on with the #()
16:44technomancywere you just checking to make sure I'm paying attention?
16:44bitemyapptechnomancy: this is production code.
16:44S11001001technomancy: needs to meet quota of eta expansion
16:45bitemyapptechnomancy: I remember it breaking before I did that, but I can remove it and see if the arity is kosher.
16:45bitemyappin the absence of a type system keeping me honest, cargo cult rules the day.
16:46noncomhow do i better parse huge trees in recursive manner with element types (but not java types) that require different parsers AND avoid StackOverflow exception? example: https://www.refheap.com/20932
16:46technomancybitemyapp: or you know... a repl?
16:47bitemyapptechnomancy: I did use it in a REPL
16:47bitemyappthat's how I knew to add the wrapper >:)
16:47bitemyapplet me test again tho
16:47technomancyI don't see how it can make a difference in a map over one coll
16:47justin_smithnoncom: at parse time you could build a DAG in terms of elementa-ids and connections to them in one map and elements by id in another map, and then construct the tree out of the DAG after you are done parsing
16:48justin_smiththat way everything can go in the heap
16:48bitemyappI still need a library that randomly fucks with my functions to test my coverage.
16:49bitemyappI end up doing manual "negative" tests before proceeding with a change that I am running the tests to verify.
16:49bitemyappahhh and the negative test failed. Fuck me in the beard.
16:49technomancy._.
16:53bitemyappnicferrier: Scala is so good because everyone can just pretend it's Java. #thatsagoodthingright?
16:55noncomjustin_smith: i got it but still have two questions: 1) why parsing to build the maps wont cause SO?, 2) what's DAG?
16:55justin_smithDirected Acyclic Graph
16:55justin_smitha standard data structure
16:55noncomah
16:55justin_smithyou don't need to use the stack to build the data
16:56noncomright
16:56justin_smiththat's why I suggest the connections map / elements map implementation
16:56noncomi can use an atom instead of the stack, am i right?
16:56justin_smithright
16:56justin_smithor a ref
16:56noncomcool!
16:57noncomthanks!
16:57justin_smithn/p
16:57justin_smiththere is still the trick of changing the non-tail-recursive descent into a linear non stack-building (or minimally stack-building) version
16:58justin_smithbut the DAG will help with that
16:58noncomyes, DAG is a radical approach
16:58bitemyapphello 90s.
16:58bitemyappTotally Radical!
16:59justin_smithradical in the old sense as well: it is very primitive, you can build most other data structures out of one :)
16:59bitemyapptechnomancy: bare juxt is fine.
16:59bitemyapptechnomancy: good catch.
16:59technomancybitemyapp: yw =)
17:00noncomsorry me no native english, radical i mean that it is totally impure when i was first thinking pure, but let it go
17:00noncomno tailcall optimisation makes the mutable approach the best here
17:01noncomjustin_smith: you said "most", what datastructures it can't help to build?
17:02justin_smithnoncom: just hedging my bet
17:02justin_smith:)
17:02noncom:D
17:02justin_smithit could be that it is a basis for every possible data structure, for all I know
17:03justin_smithhmm.. I guess you could build a cyclic graph out of multiple acyclic graphs, so the obvious answer to that question is ruled out...
17:03noncomyeah.. everything is described in terms of relations..
17:04justin_smithbut of course you cannot build a DCG out of a single DAG
17:06TEttingerhypergraphs man
17:07justin_smithahh, I figured something like that existed
17:07justin_smithTIL, thanks
17:08TEttingerjustin_smith, hypergraphs are barely used and the one implementation I have found is awfully slow.
17:08TEttingerbut in theory, they can be used to implement I believe any data structure
17:09justin_smithyeah, when an article on a data structure has this much math in it I usually figure it doesn't have much use outside haskell programming :)
17:09justin_smith*much practical programming use
17:09noncomcan a prolog program be considered a hypergraph?
17:10justin_smiththere is probably a linear transform from turing machine to hypergraph
17:10TEttingeryeah. I might look up data literals to see if I can make http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html have some nice syntax sugar for Clojure.
17:12justin_smithI have been working on a pure clojure quad-tree implementation, so I can use it in clojure or clojurescript for packing algorithms
17:12justin_smithfor extra credit I decided not to use any geometry libs and relearn all my 2d geometry by implementing it out of bare clojure
17:13bitemyappjustin_smith: whyyyyyyy?
17:13amalloyTEttinger: why would you want that mutable data structure to have nice clojure sugar? there's already an immutable analogue to that at org.flatland/ordered
17:14justin_smithbecause I want to be better at geometry, to inform my packing algorithms :)
17:14noncomTEttinger: you mean clojure is going to have a LHM literal?
17:14noncomjustin_smith: so the lib was ok? recently i've been thinking of octrees in clojure for 3d...
17:15justin_smithwell the libs I could find all used interop
17:15justin_smithand I want my code to be runnable on the client
17:15justin_smithor the server
17:15justin_smithwhich rules out just using a js or java based lib
17:16seangroveHrm, wish there was an easy way to tail the *nrepl-server* buffer when it's spewing tons of text
17:16seangroveI have to keep mashing M->
17:16justin_smithalso, nothing wrong with polishing one's weapon, so to speak
17:16bitemyappjustin_smith: definitely not. Your reasons make sense.
17:17justin_smithseangrove: there is an emacs mode I once found for that - similar to auto-revert mode but for buffers that are getting inserted to by other elisp
17:17Glenjaminhi guys, random question: how do you pronouce ".clj" ?
17:17seangrovejustin_smith: Interesting, couldn't find it from a bit of googling
17:17hfaafbsee el jay
17:17bitemyappseangrove: auto-revert-tail-mode not working because it's not a file?
17:18bitemyappseangrove: http://www.gnu.org/software/emacs/manual/html_node/emacs/Reverting.html
17:18bitemyappseangrove: http://www.emacswiki.org/emacs/AutoRevertMode
17:18justin_smithI don't think auto-revert does what you expect when there is no file
17:18seangrovebitemyapp: Yeah, it's not a file, hence the trouble
17:19amalloyGlenjamin: usuall see el jay, indeed, although occasionally clidge is convenient
17:19justin_smithculje?
17:19bitemyappseangrove: the code in that emacs wiki page has a goto-char thing, might be able to set up a timer for that.
17:19Glenjamini realised i was thinking of it as "kludge" in my head, which doesn't really fit :D
17:19seangrovebitemyapp: I'll check it out, thanks
17:21justin_smithbitemyapp: yeah, that's what the snippet I lost was doing, (goto-char (point-max)), followed by sit-for in a loop
17:22justin_smith(while also doing things by making sure this was being done in the right buffer etc. - for extra credit you could even skip the whole thing if the buffer is not visible)
17:23justin_smithno, not sit-for
17:23justin_smithrun-at-time
17:41TEttingernoncom, I just found https://github.com/flatland/ordered , which does what I wanted anyway
17:42JohnCMadison_Can anyone point me to the replacement of dissoc-in?
17:44TimMcJohnCMadison_: update-in + dissoc
17:44JohnCMadison_ok
17:44JohnCMadison_i wonder why
17:44JohnCMadison_thanks TimMc
17:45TimMcIIRC, it may not work properly at the top level.
17:45TimMc&(update-in {:a 1 :b 2} [] dissoc :a)
17:45lazybot⇒ {nil nil, :a 1, :b 2}
17:45TimMc:-(
17:45bitemyappJohnCMadison_: I don't think people really agreed on what it should be mean for unmaterialized/partially materialized paths.
17:45TimMc&(update-in {:a 1 :b 2} [:does :not :exist] dissoc :a)
17:45lazybot⇒ {:does {:not {:exist nil}}, :a 1, :b 2}
17:45bitemyappI think amalloy have disagreed on the semantics before :)
17:46TimMc^ Yeah, there's some weird results.
17:46bitemyappTimMc: might as well just use a function that returns nil
17:46JohnCMadison_ok. right. better to have no function than a buggy one
17:46bitemyappit wasn't buggy
17:46bitemyappit was a philosophical dispute.
17:46JohnCMadison_ah
17:47bitemyappthere wasn't a way to get everybody to agree on a single well-defined behavior.
17:47TimMcbitemyapp: Do you recall a case where you disagreed?
17:47bitemyappTimMc: do you want me to recount amalloy and I's discussion, or what I think it should do?
17:48TimMcI'm guessing there would be some argument about what happens when you dissoc the last key in a map (although it's pretty clear to me.)
17:48TimMcbitemyapp: Recount, if you can.
17:48bitemyappthere are like 2-3 different things
17:48TimMcI'll search if you can't.
17:48bitemyappone is whether it should short-circuit the nested path if it encounters a key along the way that doesn't exist
17:48bitemyappwhether it should nil the value out or remove the attribute properly
17:49bitemyappwhether removing the final key in a map should result in {} or nil (I prefer the former, result here depends on the last issue somewhat)
17:49bitemyappTimMc: amalloy mostly discussed the nesting issue
17:49bitemyappand I*
17:49TimMcThey all seem pretty straightforward to me, but I can see where argument would arise.
17:49TimMc(yes, remove, {})
17:50TimMcFor some decisions, you would end up with a recursive modification.
17:50bitemyappTimMc: so the two of us agree at least.
17:50TimMc(dissoc-in {:a {:b {:c 4}}} [:a :b :c]) would result in nil, e.g.
17:51bitemyappoh, no.
17:51bitemyappI wouldn't want that.
17:51Apage43,(assoc nil :a 1)
17:51clojurebot{:a 1}
17:51TimMcNeither would I, that's the consequence of...
17:51bitemyapp(dissoc-in {:a {:b {:c 4}}} [:a :b :c]) should return {:a {:b {}}}
17:51Apage43well
17:51Apage43the problem with that
17:52Apage43is
17:52TimMc(mu, mu, nil)
17:52bitemyappApage43: Clojure gives no fucks about nils.
17:52Apage43if my initial thing is a sorted-map
17:52Apage43and I dissoc it empty and the assoc onto the thing I dissoced from
17:52Apage43I don't want it to become a different type of map in the middle there
17:52bitemyappApage43: that's why we're saying don't return nil. Or at least I am.
17:52TimMc*Nod* I am not a fan of Clojure's pretending nil is a meaningful collection.
17:53TEttingerso is the solution to toplevel update-in to just use update?
17:53bitemyappTimMc: I'm not a fan of anything-goes compilers.
17:53TEttingeroh there is no update
17:54TimMc&(update-in {} [] assoc 1 2)
17:54lazybot⇒ {nil {1 2}}
17:54Apage43...
17:54TimMc*sigh*
17:54TimMcI'm pretty sure update-in has a buggy base case.
17:54Apage43such surprising
17:54`cbphaah wat
17:54bitemyappso type safe, wow, pretty error
17:56TimMcIf I (update-in ..map.. [..path..] assoc 1 2), then (get-in ..map.. [..path.. 1]) should return 2
17:56TimMcErr, that second ..map.. should really be the first expression.
17:56bitemyappTimMc: that sort of symmetry would certainly be nice.
17:57bitemyappgrumble grumble.
17:57TimMc&(update-in {:a {:b {:c 4}}} [:a :b :c] dissoc :c)
17:57lazybotjava.lang.ClassCastException: java.lang.Long cannot be cast to clojure.lang.IPersistentMap
17:57TimMc&(update-in {:a {:b {:c 4}}} [:a :b] dissoc :c)
17:57lazybot⇒ {:a {:b {}}}
17:57TimMcOther than the short-circuiting and the base case, I think update-in + dissoc does the right thing.
17:58Apage43other favorite thing is the clojure.set functions that will totally give strange answers if you feed them collections that aren't sets
17:58bitemyappApage43: does Golang even have sets?
17:59Apage43probably not
17:59bitemyappSerious question (in the stdlib)
17:59bitemyapplol.
17:59Apage43not that I can find
17:59TimMchttp://dev.clojure.org/jira/browse/CLJ-373
18:05Apage43bitemyapp: just maps.
18:05bitemyapphttp://www.philandstuff.com/2011/10/25/learning-monads-in-clojure-a-warning.html
18:05bitemyappApage43: sweet bros, just use dem keys.
18:05Apage43and that's part of the language. the stdlib doesn't have any extra collections of any sort.
18:06bitemyappApage43: hnnnnngggggg
18:07Apage43since they'd just be bags of interface{}
18:07Apage43oh, interface{}
18:08bitemyappApage43: great work guys.
18:14TEttingerbitemyapp: https://dl.dropboxusercontent.com/u/11914692/functional-doge.png
18:15nopromptsuch typesafe
18:15TEttingerwow
18:15`cbp¬_¬
18:19bitemyapp`cbp is distressed to be surrounded by such dorks.
18:19bitemyappTEttinger: <3
18:34TEttingersimilarly terrible, https://dl.dropboxusercontent.com/u/11914692/dogejure.png
18:36MorgawrTEttinger: http://doge.ufeff.pw/?n=128 this is how you do it :P
18:36TEttingerthere we go
19:40arrdembitemyapp: Morgawr just out memed you, you gonna take that?>
19:41bitemyapparrdem: I will wait and lurk.
19:41bitemyapparrdem: Prepare yourself...the category theory memes are coming...
19:41john2xoooh shibe. http://github.com/john2x/shibebot
19:41arrdem(inc john2x)
19:41lazybot⇒ 1
19:41arrdem(inc Morgawr)
19:41lazybot⇒ 1
19:42arrdem(inc TEttinger) ; for effort
19:42lazybot⇒ 6
19:42toothpick`(dec arrdem)
19:42lazybot⇒ 5
19:42bitemyappjohn2x: lmfao.
19:45john2xheh. I had to kill the bot, as it was getting way too many downvotes and getting banned too fast.
19:45bitemyappjohn2x: :(
19:46arrdemjohn2x: haha it looks like it was pulling 75% downvotes :P
19:49danenaniadoes anyone have experience with shoreleave? having csrf troubles with ring.middleware.anti-forgery... __anti-forgery-token is defined in my cookies, but not getting added to requests with remote-callback or rpc macro
19:58echo-areaIs it strange if I'm using defrecord but also create a function mk-my-record?
20:00bitemyappecho-area: not at all, Haskellers do something comparable all the time.
20:00echo-areabitemyapp: Thanks
20:00bitemyappmostly so they can constrain the input types to a specific use-case without constraining the type of the record.
20:00echo-areaAnd another question: Is it idiomatic to use Agents with Records?
20:00bitemyappecho-area: egads
20:01echo-areaWhat?
20:01clojurebotWhat is sampling a random integers betwen 2, 12 s..t. P(X = i) = (7-|i-7|)/36
20:01echo-areaWhat does "egads" mean?
20:01bitemyapp$google egads
20:01lazybot[Urban Dictionary: egads] http://www.urbandictionary.com/define.php?term=egads
20:02echo-areaHmm, sorry
20:02bitemyappit's fine.
20:02echo-areaAnd thank you :)
20:02bitemyappnp
20:02bitemyappecho-area: I generally just use maps with agents.
20:03echo-areaYes, but I made a protocol
20:03bitemyappecho-area: well, only way to know is to try it, but make a serious attempt of breaking it.
20:03echo-areaI see. Learn from experience :)
20:05bitemyappecho-area: the reason for my discomfort is that if the record definition gets reloaded or something, the agents will persist stale versions of the record
20:05bitemyappecho-area: it makes interop awkward and generally multimethods + maps suffice for what you'd want to do.
20:05bitemyappmultimethods also let you avoid fucking with your data.
20:07echo-areaAh, that's indeed better. I'll go switch to those. Thank you!
20:07echo-areaI think this is important especially if the data structure is surely going to be changed shortly
20:08bitemyappthat's the easiest time I've ever had convincing somebody not to fuck their data with protocols.
20:08echo-areaGood for both of us :)
20:19arrdembitemyapp: YOU WILL NEVER BREAK ME
20:20seangroveSeems like not all #inst methods are created the same...? Or should I be able to all (.getYear #inst "2013-08-31T23:49:19.000000000-00:00") any time I get #inst back?
20:20seangrove,(.getYear #inst "2013-08-31T23:49:19.000000000-00:00")
20:20clojurebot#<SecurityException java.lang.SecurityException: denied>
20:21seangroveWell, it works if I copy/paste it into the repl, but in other cases it's a java.sql.Timestamp, and I get the error "No matching field found: getDayOfYear for class java.sql.Timestamp"
20:21seangroveWhich is just bonkers, because I think java.sql.Timestamp subclasses java.util.Date, which does have the method .getYear
20:22justin_smithwait, do you want getYear of getDayOfYear?
20:22seangrovejustin_smith: Yes, that could be my problem.
20:23justin_smith,(.getDayofYear (java.util.Date.))
20:23clojurebot#<IllegalArgumentException java.lang.IllegalArgumentException: No matching field found: getDayofYear for class java.util.Date>
20:23seangroveI think I was calling getDayOfYear :P
20:23justin_smith,(.getYear (java.util.Date.))
20:23clojurebot113
20:23seangrovePlease excuse me, and thank you for being nice debugging rubber duckies
20:23justin_smith/quacks.
20:23justin_smitherr
20:24seangroveAlso, upon inspection, getYear seems to be a bit strange
20:24seangrove"Returns a value that is the result of subtracting 1900 from the year that contains or begins with the instant in time represented by this Date object, as interpreted in the local time zone."
20:25justin_smithhysterical raisins
20:25seangroveWhy the arbitrary 1900?
20:25justin_smithfrom back when people wanted to store a year in 7 bits
20:26justin_smithor some kind of madness like that
20:26noonianyou just found the y2k bug :)
20:29arrdemjustin_smith: gotta have that sign bit mon
20:30justin_smith"as we fully intend to have a new language to replace this one in two years, the year field will be represented as a single bit"
20:31arrdemwaaat
20:31justin_smithhyperbolizing the attitude of the '70s - that they didn't need a bigger datatype because people would be upgrading anyway
20:37gwsanother favorite developer pastime: taking opaque identifiers and forcing them into some arbitrary box because, well, "that's what it looks like": http://techcrunch.com/2009/06/12/all-hell-may-break-loose-on-twitter-in-2-hours/
21:10xuserWhat's the purpose of the 'when' here? https://www.refheap.com/20940
21:10justin_smithit only executes the body if pred is true
21:10justin_smithit is like a single arm if
21:10justin_smithwith no else
21:11justin_smithit is weird - I guess in some cases nil or false would be passed in as pred
21:12xuserjustin_smith: yeah, I guess is testing for a nil pred, thanks
21:16xuserjust haven't got to the part in the book where they explain 'when',
21:16justin_smith,(when true :ok)
21:16clojurebot:ok
21:16justin_smith,(when false :ok)
21:16clojurebotnil
21:16xuserjustin_smith: is it a matter of style to use 'when' when there is no else?
21:17justin_smithyeah - though some will also specify that when should only be used for side effects
21:17nooniani've never used when
21:17justin_smith,(when true (print :a) (print :b) :c)
21:17clojurebot:a:b:c
21:17justin_smithwith if you would have needed a do statement
21:18justin_smithnoonian: I got into the habit with common lisp of using when for all my single arm ifs
21:18xuserOk
21:18nooniani guess its nicer than an iff because if you have use an explicit do in an if if you want to have more than one form
21:18justin_smithit can be - like any other macro the main usage is to make your code clear
21:18eggheadoh nice I didn't know when had an implicit do
21:18noonianwell i screwed that sentence up royally
21:37arrdemjustin_smith: why for side effects?
21:37justin_smithit's a style argument
21:37justin_smiththat technomancy for example is wont to make
21:38justin_smithbecause null has an implicit do
21:38justin_smithotherwise, you can use or
21:38justin_smitherr
21:38justin_smithI mean and, of course :)
21:38justin_smith,(and true :hello)
21:38clojurebot:hello
21:38justin_smith,(and nil :hello)
21:38clojurebotnil
21:39justin_smithand do, which is for chaining many statements and only returning the last value, is clearly only for side effects
21:48`cbpbitemyapp: damn it I implement functions which are already implemented but with another name :(
21:48`cbpthis is embarassing
21:49`cbpi'll sweep them under the rug after the next patch....
21:50bitemyapp`cbp: happens to the best of us :)
21:50bitemyapp`cbp: at least you're so productive you forget your own work!
21:50bitemyapp`cbp: also, you know what time it is, right?
21:50`cbpbitemyapp: :-o
21:51bitemyapp`cbp: it's time.
21:51`cbpi think there's another patch t.t
21:51bitemyapp`cbp: hopefully they nerf the spirit fuckers.
21:51bitemyappor huskar.
21:52bitemyapp`cbp: well get the patch going, what's the ETA?
21:52`cbpbitemyapp: wanna play LoL
21:52`cbpi have one guy that doesnt play dota
21:53bitemyapp`cbp: sacrifice him to Molech, then fire up DotA2
21:53`cbp=o
21:54bitemyapp`cbp: why don't they have DotA2?
21:54`cbpbitemyapp: they've never played it nor installed it
21:55bitemyapp`cbp: today is the day.
21:55bitemyapp`cbp: they'd be better get started downloading too :)
21:55bitemyapp`cbp: also we should do voice. Do you typically use mumble, teamspeak, or in-game?
21:55bitemyappI guess in-game is easiest.
21:55bitemyapparrdem: wakie wakie
21:56arrdembitemyapp: wat
21:56bitemyapparrdem: DotA2 time.
21:56arrdemoh r we dotaz
21:56bitemyapparrdem: confiscate a computer
21:56`cbpbitemyapp: skype
21:56arrdemhttp://www.youtube.com/watch?v=0OzWIFX8M-Y
21:56`cbpi have all of those though
21:57arrdembitemyapp: I'm playing on my box. hang on plugging back in & gearing up
21:57arrdems/box/ss9/
21:57bitemyapparrdem: what's an ss9?
21:58`cbpbitemyapp: 30 min
21:58`cbpbitemyapp: i have 2 guys on lol maybe 1 guy on dota
21:58bitemyapp`cbp: tell the two on LoL to skip drinking for a night or two and use the money for DotA2
21:59`cbpi think they avoid dota on principle
21:59bitemyapp`cbp: well they're not friends.
21:59arrdembitemyapp: how are we VOIPing?
21:59bitemyapparrdem: I think cbp wants Skype.
22:00bitemyapparrdem: the thing is, if we're playing DotA2, we can just use in-game.
22:00bitemyapparrdem: which if we don't have a full team of 5, we should do.
22:00bitemyapparrdem: so no need I think.
22:00arrdemgood point that... gimme a minute to pacman -R this cancer and find my USB headset
22:00`cbp1d2
22:00clojurebot2
22:00bitemyapparrdem: what's ss9?
22:01bitemyapp1d1
22:01clojurebot1
22:01bitemyapp1d0
22:01bitemyappAHA
22:01arrdembitemyapp: sorry. samsung series 9
22:01bitemyapparrdem: what gfx chip?
22:01bitemyapp1d9000000000000000000000000000000000000000000000000
22:01bitemyapp1d10000000000000000000
22:01bitemyapp1d10000
22:01clojurebot2434
22:01bitemyapp1d100000000000000000000
22:01bitemyapp1d100000000
22:01bitemyapp1d100000
22:01clojurebot21888
22:02arrdembitemyapp: intel integrated like a bau5
22:02bitemyapphrm.
22:02bitemyapparrdem: that runs DotA2?
22:02arrdembitemyapp: somehow
22:02bitemyapparrdem: Valve are fucking wizards.
22:02arrdembitemyapp: on Linux too...
22:02bitemyapparrdem: that might actually be helping your case.
22:02arrdemgoddamn black magic
22:02`cbpbitemyapp: i thought u played dota more
22:03`cbper lol
22:03bitemyappno
22:03bitemyapparrdem: according to Valve, they were able to make their in-house game engines run better on Linux
22:03bitemyapp`cbp: I only tried out LoL recently, I'm not a fan.
22:03`cbpoh
22:03bitemyappit's a treadmill grinding game, no likey.
22:03arrdemgimme a a min... I gotta figure out how to change my alsa I/O standard device
22:03clojurebotGabh mo leithscéal?
22:04`cbpcasual ;)
22:04bitemyappthat too
22:05`cbpare you trying to play on gentoo or something
22:05bitemyappalso I can't last hit for shit in LoL
22:05`cbpno i was calling you a casual
22:05arrdemclojurebot: ping
22:05clojurebotPONG!
22:06bitemyapp`cbp: oh fuck you I used to play HoN.
22:06bitemyapp`cbp: HoN was briefly the nectar of the MOBA gods
22:06xuseryou guys don't play counter strike? ;)
22:06`cbpi did for a bit
22:06`cbptoo many games though
22:07bitemyappxuser: I got tired of losing. I'm better at more tactical shooters.
22:08arrdemmeh. lemme try a different headset, Arch doesn't like this one
22:08bitemyapparrdem: :(
22:08xuserI just played dota when it all started inside warcraft frozen throne ;)
22:08bitemyappxuser: I used to play it then too
22:08bitemyappI didn't get respectable at the game until HoN though.
22:08arrdemxuser: I'd totally be a rabit MW:O fan if the devs didn't suck
22:09eggheadwhy does this block: (take 300 (reduce + (range)))
22:09eggheadoh nvm
22:09eggheadderps
22:09bitemyappegghead: way2go
22:09`cbpno one saw that
22:09`cbpactually i screenshotted
22:09bitemyapplol `cbp
22:09arrdemegghead: logged chan what up
22:10eggheadnuuu
22:10bitemyapparrdem: what's your Steam account again?
22:12arrdembitemyapp: eradicator5999 or cator5999 I forget
22:14bitemyapparrdem: what kind of bullshit is that.
22:14bitemyapparrdem: sent you my steam name
22:15arrdembitemyapp: I think I got you. there are two of you.
22:16arrdembadass. headset online.
23:41sritchiehey all - do you guys know if it's possible to turn on http compression using http-kit?