#clojure log - Oct 14 2013

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

0:01 marco1: Anyone use the worker option in a pedestal aspect? Their example uses regex pattern objs, but I don't think edn supports #"regex"

0:07 Roxxi: cd ..

0:07 ls

0:07 lazybot: bin boot data dev etc proc selinux sys tmp usr

0:07 Roxxi: >.<

0:11 marco1: cd /bin

0:34 muhoo: irc shell

0:35 ~aot is Ahead Of Time compilation

0:35 clojurebot: Ok.

0:36 muhoo: ~aot

0:36 clojurebot: http://i.qkme.me/3vb225.jpg

0:36 muhoo: fack

0:36 brehaut: ~aot

0:36 clojurebot: http://i.qkme.me/3vb225.jpg

0:36 muhoo: ffs

0:36 brehaut: ~aot

0:36 clojurebot: http://i.qkme.me/3vb225.jpg

0:36 muhoo: ~aot is chese

0:36 brehaut: hah

0:36 clojurebot: Alles klar

0:36 muhoo: ~aot

0:36 clojurebot: http://i.qkme.me/3vb225.jpg

0:36 muhoo: ~aot is Ahead Of Time compilation

0:36 clojurebot: 'Sea, mhuise.

0:36 muhoo: -_-

0:37 brehaut: muhoo: you just have to accept that clojurebot is enterprise ready, and no one person can understand how any a feature works ;)

0:38 muhoo: it's on github somewhere, i thought

0:38 brehaut: it is

0:38 muhoo: is that factoid hardcoded or something?

0:38 brehaut: https://github.com/hiredman/clojurebot/

0:38 muhoo: ~hardcoded is aot

0:38 clojurebot: c'est bon!

0:38 muhoo: ~hardcoded

0:38 clojurebot: hardcoded is aot

0:38 brehaut: no, its just a very complex system

0:38 muhoo: ~hardcoded is not aot, says yoda

0:38 clojurebot: Ok.

0:38 brehaut: factoids are a multimap

0:39 and theres an inference engine

0:39 the command pipeline is also built on Arrows

0:39 and its parser is only documented in the fnparse rules

0:40 muhoo: i actually have no idea what you're talking about

0:40 how do you send a message to someone?

0:40 in this bot?

0:40 it has a store-and-forward capability IIRC

0:40 brehaut: i think thats lazybot's $mail

0:41 just to confuse things ;)

0:41 * muhoo gives up

0:42 brehaut: muhoo: http://ro-che.info/ccc/12

0:45 muhoo: wow, that is the geekiest comic i've ever seen

0:45 brehaut: pretty much yeah

0:45 ~arrows

0:45 clojurebot: arrows is http://ro-che.info/ccc/12.html

0:45 brehaut: well lol

0:46 muhoo: http://ro-che.info/ccc/21

0:46 like... talk about a niche audience

0:46 brehaut: hah yeah

0:46 turns out yes, applicative is now a superclass of monad

1:02 lynaghk`: hugod: ping

2:21 frozenlock: Cljs version 0.0-1909 and higher break the domina function node. :-/

2:55 logic_prog: in datomic free edition's in memory databse -- does it somehow survive machien reboots, or is all data lost when the machine reboots?

2:58 rhg135: one small question, for serversockets, i have a series of clients which arent known till runtime and isn]t mutable in a conventional sense (you can]t change it) but its not static either (it depends on who connects), is there an interface more appropriate than ISeq?

2:59 marcopolo2: rhg135: how are you going to be interacting with it?

3:00 rhg135: just loop on it with doseq and dispathing a thread on the new sockets

3:00 since it's .accept returns a socket to the client

3:01 and it blocks till a connection

3:01 something like (repeatedly #(.accept this))

3:02 marcopolo2: yeah ISeq sounds fine to me

3:03 rhg135: ok

3:03 francis: logic_prog: I belive you can persist to disk with free

3:03 rhg135: i wasn't sure since it's indeterminate

3:11 marcopolo2: rhg135: well you could have it wrapped in an atom if you are going to update it's value

3:11 rhg135: i'm thinking of of having a fn that returns (repeatedly #(.accept socket)) since i see no way to implement Seqable on ServerSocket

3:11 marcopolo2: and then calling a thread on each fn?

3:12 rhg135: marcopolo2: i can]t change it (save closing the socket) from the server, only who connects, and yes

3:12 threads

3:13 marcopolo2: why do you need to do multiple accepts on the same socket?

3:13 rhg135: .accept opens a new socket

3:14 marcopolo2: ah okay

3:14 rhg135: thats how servers work, open a new socket per client

3:15 marcopolo2: I wasn't familiar with that interface

3:15 rhg135: in python i used a generator but threading is a pita and it was ugly

3:21 here]s the code https://bitbucket.org/rhg135/jimpy/src/b9f81cf11bb736f5f48d96f8dcabbf39a9516db3/jimpy/server/utils.py?at=newserver#cl-123

3:21 thats essentially the idea

3:22 but id like that server on the jvm

3:23 i don't really like python, but i started writing the client part and the jvm is too slow to start for a client-side lib

3:29 Foxboron: rhg135: i could go like "Hey! There is a LISP on python that complies down too Python AST!"

3:31 rhg135: i did try nodejs, but clojurescript failed me and when i asked here i got no help twice so i just went with python (which i used before clojure and haskell)

3:31 Foxboron: rhg135: check out Hy :)

3:31 rhg135: Foxboron: i saw it but it seemed abandoned

3:32 oh

3:32 Hy?

3:32 TEttinger: check out Shen then

3:32 Foxboron: rhg135: yeah Hy.https://github.com/hylang/hy

3:34 rhg135: Foxboron: the main issue i've had with python is concurrency not syntax

3:35 Foxboron: rhg135: yeah, it is a hell :/

3:35 rhg135: that said, it looks interesting

3:35 any easy way to run a repl?

3:35 Foxboron: "Hey lets make a thread! Just gotta subclass threading.Thread, rewrite run...then..hmm..make it a deamon so it dosnt fuck up..hmm...oh bugs!" \o/

3:35 rhg135: pip install hy

3:35 hy

3:36 rhg135: and i can connect to it from, say, vim?

3:36 Foxboron: rhg135: Sadly no vim plugins yet. I'm actually suppose to be fixing that, along with a nrepl for hy D:

3:37 rhg135: yeah an nrepl'd be nice

3:37 but no biggie

3:37 python is worse for that

3:37 Foxboron: rhg135: it runs, compiles and works along side python code :)

3:38 so its awesome anyway IMO

3:38 rhg135: so it]s just a lisp dialect?

3:38 Foxboron: rhg135: yeah it is.

3:38 rhg135: any special features?

3:39 Foxboron: ayou can import hy directly into python, and vica versa

3:39 and macros

3:39 rhg135: hmm, macros

3:39 Foxboron: been talks about trying to implement some TCO'ish things using generators

3:39 but i am not sure what the status on that is

3:39 rhg135: but concurrency still would be a pita

3:40 Foxboron: rhg135: its still python :/ concurrency is a living hell.

3:40 rhg135: but anyway for the server i do want it on the jvm

3:41 it]s looking as i have to seperate client and server

3:42 idk, but the python vm doesnt feel as if it is meant to run a chat server

3:42 think like freenode, but based on JIM not iRC

3:43 TEttinger: JIM?

3:43 jabber IM?

3:43 rhg135: JIM.HACKPAD.COM


3:43 grr

3:43 caps

3:44 TEttinger: rhg135, looks nice

3:45 rhg135: Nathan is writing one on nodejs

3:45 im not sure whether to trust itll work

3:46 for one the guy likes c++

3:47 and my python one is broken mysteriously

3:53 actually i do know why; it isn't launching new threads until i interrupt the main thread; again python concurrency is a pita

3:58 echo-area: Leiningen told me two checksums about an artifact, but none of which is the same as the on in the maven repo, what could be the reason?

3:59 Could not transfer artifact XYZ from/to REPO (ADDRESS): Checksum validation failed, expected CHECKSUM1 but is CHECKSUM2

3:59 This is the error I get

3:59 TEttinger: well they may have incorrectly hashed their file, or used the wrong checksum for the file

4:00 try a different version?

4:00 which artifact, I can check? lein dependency line?

4:00 echo-area: Of leiningen or what?

4:00 TEttinger: no, the artifact

4:00 echo-area: No, it's a private artifact here

4:00 TEttinger: oh

4:01 well ask whoever made it, he may have done something wrong

4:01 echo-area: And another guy tried maven, got similar warnings about checksums, but one of them at least was correct

4:02 Okay, thanks

4:56 Is it possible to make process of leiningen finding dependencies verbose?

4:59 hyPiRion: echo-area: you could try `DEBUG='y' lein deps :verify`

4:59 echo-area: Thanks

5:28 logic_prog: is there any implementation of frp (functional reactional programming) in clojurescript?

5:28 I'm not looking for a javascript wrapper, I'm looking for a clojurescript codebase to read / learn from

5:28 piranha: logic_prog: http://github.com/tailrecursion/javelin

5:29 logic_prog: ha, was just looking at it

5:29 be nice it was tied into dom elmenets too :-)

5:29 s/it/if it

5:29 piranha: logic_prog: github.com/tailrecursion/hoplon

5:29 :)

5:29 look at the 'dox' branch right now

5:29 there are some docs

5:30 logic_prog: wait what?

5:30 i have to read the examples

5:31 I don't understand https://github.com/tailrecursion/hoplon/tree/dox

5:31 how ishe embedding clojurecript into a web html file?

5:32 this is fucking insane

5:32 by insane I mean genius

5:32 ro_st: at bottom, it's all just text

5:33 logic_prog: https://github.com/tailrecursion/hoplon/blob/master/doc/Design.md is genius

5:33 who is tailrecursion?

5:34 ro_st: Alan Dipert and co

5:34 logic_prog: this person should be renamed michangelo-davinchi-raphael

8:39 maris`: why does clojure print strings from maps without quotes around them ?

8:40 (print {:s "hi"})

8:41 omg pprint does it correctly :-)

8:41 augustl: is there a way for a multimethod to have the same body for different dispatch values, other than extracting the body to a separate function?

8:42 hoeck: maris`: (prn {:a "hi"})

8:43 maris`: print prints for human consumption, prn prints `readably` (for the clojure reader)

8:45 augustl: you could also modify you dispatch function

9:04 mpenet: I just upgraded to the latest nrepl and it now wont launch. Anyone had issue recently?

9:04 issues*

9:05 jack in works but I end up in a broken repl (I also use nrepl-ac btw, I ll try without it)

10:02 CookedGr1phon: hey, I'm building an app on android and midje doesn't work properly on the device, so I want to exclude all my test files from the build which goes onto my device

10:03 I made a separate midje profile in my project.clj

10:03 but I can't seem to stop it trying to build the test/* folder's contents

10:03 I have set :source-paths and test-paths appropriately, but it's still doing it. Any ideas?

10:04 mdrogalis: CookedGr1phon: Not sure, sorry. :/

10:13 CookedGr1phon: mdrogalis: very odd. I have moved them to another directory not named test/ and it works fine

10:13 mdrogalis: CookedGr1phon: Huh, interesting.

10:30 Morgawr: does anybody know of any academic papers/studies on clojure and its concurrency models? Some references I could have that aren't just Hickey's talks on youtube or clojure.org articles or random blog posts? (not that they aren't interesting, it's just that I read them all already :P )

10:35 mdrogalis: Morgawr: Maybe look up some stuff on Multiversion Concurrency Control and Snapshot Isolation? Obviously not exactly Clojure, but the underlying stuff is the same.

10:36 Morgawr: mdrogalis: yeah, thanks. I was mostly looking for Clojure-related stuff but that's certainly a good stepping stone. Gotta write a position paper about an academic study/paper I wanted to write about clojure performance and concurrency model

10:37 so I gotta find good excuses to present to my tutor :P

10:38 CookedGr1phon: I feel I should probably plug my colleague's new book at this point :P http://pragprog.com/book/pb7con/seven-concurrency-models-in-seven-weeks

10:39 which should give a nice overview, and a lot of the examples are clojure based

10:44 mdrogalis: CookedGr1phon: Looks worth a read. :)

10:44 si14: lynaghk: ping

10:44 Morgawr: CookedGr1phon: will check it out ;)

11:00 scape_: Little confused by simpledateformat parsing: (.parse (java.text.SimpleDateFormat. "mmddyyyy") "04121985") ;results in #inst "1985-01-12T05:04:00.000-00:00"

11:01 (.parse (java.text.SimpleDateFormat. "yyyymmdd") "19850322") ;results in #inst "1985-01-22T05:03:00.000-00:00"

11:01 what am I doing wrong with month?

11:03 andrewmcveigh|wo: scape_: months are usually MM

11:03 scape_: mm = minutes

11:04 scape_: aha

11:04 thank you

11:04 andrewmcveigh|wo: np

11:20 hardliner_: scala or clojure?

11:20 bbloom: surely you must realize that's trolling in either #scala or #clojure, right?

11:22 drguildo: does anyone have any idea what would prevent the nrepl prompt appearing when i do nrepl-jack-in?

11:23 i've tried disabling all the hooks in my init.el but it didn't help

11:24 gfredericks: bbloom: your last night fipp idea that I just saw is quite interesting; thanks :)

11:24 AimHere: drguildo, might you have a (-main) function in your project and it's trying and failing to compile it?

11:27 RoboClaudio: Hello hello everyone!

11:27 drguildo: AimHere, i doubt it, it's done it with every project i've tested including "lein new test"

11:27 hardliner_: hello

11:27 RoboClaudio: I'm having a blast learning clojure right now, and I'd like to introduce the language to a friend of mine who is not a programmer

11:27 hardliner_: is it true that the creator of clojure is hikki?

11:27 gtrak: gfredericks: did you ever write up those macro-generating macros you were messing with somewhere?

11:27 francis: R

11:28 RoboClaudio: any recommendation for a resource? Something like "clojure for non programmers"

11:28 francis: RoboClaudio: Clojure was the first language I learned. I reccomend 4clojure

11:28 RoboClaudio: I do believe that clojure would be a good first language, this friend is smart, and he would like to contribute to my clojure projects

11:28 francis: oh great

11:29 francis: Sorry for misspelling ect. ect. Not on my native keyboard layout right now

11:29 hardliner_: francis: do you use qwerty?

11:29 francis: hardliner_: colmak

11:29 RoboClaudio: francis: you really never had any sort of C, or ruby or anything like that before? How much to you use Clojure now?

11:30 francis: RoboClaudio: I program clojure everyday

11:30 RoboClaudio: I tried out other languages first, but settled on clojure. It was the first language I learned beyond some VERY basic programs.

11:31 RoboClaudio: That's very comforting. I personally use Haskell, Go and JS for work, but Clojure (with some love for core.typed) for personal stuff, and I think it's great.

11:32 francis: RoboClaudio: How do you like haskell?

11:32 RoboClaudio: francis: which sort of applications do you work on?

11:32 francis: RoboClaudio: Webapps

11:32 RoboClaudio: nothing fancy

11:33 RoboClaudio: francis: I really like haskell, especially within teams. The purity and type safety make very good guards for large programs.

11:33 tbaldridge: have you tried using Clojure for "large programs" ?

11:34 RoboClaudio: francis: great, thanks so much for the feedback, you're comforting my feeling that clojure is good for beginners.

11:35 tbaldridge: I didn't have the chance, I only use Clojure within side projects, and haven't wrote anything bigger than a few thousands loc :(

11:36 endou: RoboClaudio: I feel think you can do pretty much in a few thousands loc with clojure, what's your opinion on that?

11:37 tbaldridge: RoboClaudio: it might be something to investigate. I've found that the claims of "type safety guard against poor programming" to be a fairly weak argument. In practice, I very, rarely hit problems that typing would help with.

11:38 RoboClaudio: endou: true, but working alone removes my ability to judge how it is with teams. So far I'm personally very satisfied, especially because of the readability of my programs. I don't have to go through beautifiers and the like, it's just clear.

11:38 tbaldridge: And I find that the restrictions (even) Haskell's type system put on the programmer are bit restrictive.

11:38 xeqi: tbaldridge: I like it as a set of unit tests I don't have to write

11:39 tbaldridge: xeqi: perhaps, but with Haskell, can you have the option to use these "tests" on only half your code?

11:40 pandeiro: how do i get nrepl to show eldoc-like documentation inside a clojure buffer?

11:40 RoboClaudio: tbaldridge: I understand, but I found this (& purity) to be quite helpful when I could jump in a project without spending too much time making sure I don't break everything. I'm far from being a Haskell guru but I could get up and running very fast at work

11:40 pandeiro: and how do i kill a lein repl :headless process?

11:41 xeqi: tbaldridge: Haskell's type system can affect the semantics of the program, so no

11:41 RoboClaudio: typed clojure seems to be a very good middleground between the funny language for hacking and the tough thing you can use at work

11:42 convincing my previous boss of using clojure on a project was incredibly hard

11:43 tbaldridge: do you have the chance to use clojure at work?

11:44 tbaldridge: Yes I do, and I only have a passing familiarity with Haskell, so I am biased.

11:44 Perhaps someday I'll go and learn me some Haskell for great good.

11:45 RoboClaudio: haha this is the book that got me into it!

11:45 tbaldridge: did you have to convince your boss or was it a clojure shop?

11:46 scriptor: RoboClaudio: how did you convince your boss in the end?

11:46 tbaldridge: RoboClaudio: I work for Cognitect, so I was hired to work on Clojure in the first place.

11:47 bbloom: tbaldridge: surely somebody had to convince relevance back when they were predominently a rails shop ;-)

11:48 francis: RoboClaudio: Is there any reason that haskell isn't a lisp other than some ill-defined notion of readability. Or, is there anything to be gained by using syntax other than sexps?

11:48 RoboClaudio: scriptor: I lamentably failed, because of the lack of static typing and the sources of help in the local language (I live in Japan)

11:48 tbaldridge: that sounds great!

11:49 tbaldridge: bbloom: well the full story is here: http://www.infoq.com/presentations/Clojure-tips Basically Stu went out looking for a language that solved his complaints with Ruby and Java.

11:49 scriptor: francis: it's a descendant of ML, so you'll have to ask why that didn't use sexp's

11:49 bbloom: tbaldridge: cool

11:50 francis: scriptor: You wouldnt happen to know the answer to that would you?

11:50 scriptor: part of the reason may be that it's heavily based on mathematical notation

11:50 RoboClaudio: scriptor was faster

11:50 ambrosebs: RoboClaudio: hopefully Typed Clojure is good ammunition for next time.

11:51 RoboClaudio: ambrosebs: I left that company since then, and I do believe it's going to be way easier with the current one.

11:52 ambrosebs: RoboClaudio: good :)

11:52 RoboClaudio: oh yeah :)

11:52 mdrogalis: ambrosebs: You should take your $30k and put it all on black.

11:52 What could go wrong?

11:53 ambrosebs: mdrogalis: what does that mean?

11:54 RoboClaudio: he's probably referring to the gamble of using something as new as typed clojure

11:54 * in a corporate environment

11:54 mdrogalis: ambrosebs: A patently bad idea. 'putting it all on black' means betting all your money on a 50/50 chance in Roulette.

11:54 ambrosebs: heh

11:54 mdrogalis: RoboClaudio: Nope. Just being dumb. D:

11:54 RoboClaudio: mdrogalis: got me :p

11:54 mdrogalis: I literally meant you should gamble with it.

11:54 :)

11:54 ambrosebs: you will never see me in a casino ;)

11:55 scriptor: imagine how much good one night in vegas could do for clojure

11:55 mdrogalis: I went in one once. Good God, I wanted to hand out flyers about the odds on slot machines.

11:55 Do you people even know what you're doing?!

11:55 Hah, scriptor

11:58 RoboClaudio: I was in a hospital last week, and as I was in emergency room, I had no access to my computer & cell phone. I wrote some clojure code on paper for some side project to kill boredom.

11:58 When I got home, I just typed my code in, and it just worked. That thing made my coworkers laugh and wonder about how cool is clojure.

11:58 mdrogalis: Your parens balanced?

11:58 RoboClaudio: F*CK YEAH

11:59 mdrogalis: Human-paredit mode.

11:59 RoboClaudio: trust me, you have time in the hospital

11:59 I had to stay in the same bed all day, couldn't even walk

11:59 well, I still can't, but now I'm at home

12:00 scriptor: I never close my parens when I'm coding on paper

12:00 it's like a god-awful mishmash of python and lisp

12:00 RoboClaudio: coworkers tell me I could have done this with Haskell, and I wouldn't have to worry about those parens

12:00 scriptor: Aww

12:00 :)

12:02 tbaldridge: I have to admit, talks like this scare me away from Haskell http://www.infoq.com/presentations/molog It's a 30 minute talk about all the nasty hacks they had to do to get a half-working version of miniKanren. Something that's about 200 lines of scheme.

12:05 RoboClaudio: well I have to say Haskell is far from being a convenient language for everything. I'm lucky enough to have used it only in projects where it made sense

12:05 bbloom: tbaldridge: part of the problem is trying to get the logic variable hackery past the type checker

12:05 tbaldridge: the result is very limited type checking :-/

12:05 RoboClaudio: ohh

12:06 bbloom: tbaldridge: I enjoyed the "Oleg's permission" bit. If Oleg says you can bypass the type system, then you're good!

12:07 ambrosebs: bbloom: that's gold

12:07 scriptor: can typed clojure do any sort of type inference yet?

12:08 bbloom: ambrosebs: did you see that thing about "rational types" with negative & fraction types to go along with sum & product types?

12:08 ambrosebs: bbloom: no what is that?

12:09 scriptor: it never will

12:09 scriptor: gotcha

12:09 bbloom: ambrosebs: www.cs.indiana.edu/~sabry/papers/rational.pdf‎

12:10 * RoboClaudio just realized that ambrosebs is... ambrosebs

12:10 ambrosebs: bbloom: wow!

12:10 arrdem: RoboClaudio: welcome to #clojure, where you get to lurk with library & tool developers :D

12:11 RoboClaudio: arrdem: Right, or the people making my life better.

12:11 tbaldridge: That's the nice thing about #clojure, all the cool kids hang out here.

12:11 bbloom: ambrosebs: i haven't managed to make any sense of it yet. what makes you say wow so quickly? :-P

12:11 scriptor: I think rich hickey even shows up here from time to time

12:11 ambrosebs: bbloom: it's more "wtf"!

12:11 bbloom: haha

12:12 arrdem: scriptor: Rich I think is 2nd or 3rd for all time messages sent to #clojure

12:12 ambrosebs: bbloom: what the hell is a fractional type

12:12 scriptor: interesting

12:12 ambrosebs: :)

12:12 scriptor: must've had a ton of discussion here in the olden days

12:12 arrdem: scriptor: but I haven't de-aliased for away nicks yet

12:14 bbloom: ambrosebs: i dunno but sabry is generally worth attempting to understand :-)

12:15 indigo: http://fc04.deviantart.net/fs70/f/2012/229/a/6/rich_hickey_by_emareaf-d5bevsm.png wat

12:17 benmoss: indigo: apparently drawn with https://github.com/ema-fox/artengine

12:17 thus the tribute

12:18 rishisadhir: Can someone let me know why (use 'seesaw.core) brings up a FileNotFoundException? All the code examples online seems to just be able to 'use it without any issues.

12:18 xeqi: does anyone know any oss projects using clj-webdriver?

12:18 indigo: Haha

12:19 clgv: rishisadhir: that definitely works if you have specified the dependencies in your project.clj correctly before you fired up the repl

12:19 rishisadhir: Thanks clgv

12:23 seangrove: xeqi: We use it for some functional tests

12:23 srruby: I'm transforming a parse tree created by instaparse. So far I've been using postwalk to "edit" the tree. I'm thinking maybe I should use refs as some of the nodes need to be pointers to other nodes. I'm also looking at zippers. Currently I've been able to do what I want with postwalk, but some of my code looks clumsy. Any advice ? Thanks, John

12:26 xeqi: seangrove: do you start a jetty server as part of your test suite to run against?

12:27 arrdem: srruby: what are you trying to get out of the parse tree?

12:27 xeqi: I've got example of doing that using clj-http and some libs that only talk http. Was hoping to find one that did it for clj-webdriver

12:28 writing a blog entry, so collecting references

12:30 srruby: arrdem: The source is a textual dsl for music notation. I need to transform the parse tree to a similar legacy json format. There are some calculations involving assigning rhythms to beats and notes. I also need pointers in a few places.

12:37 noidi: xeqi, we're using clj-webdriver as well. we deploy the application to a production-like environment and then run the tests against it.

12:38 so there's no special test server. the end-to-end tests test server provisioning and the deployment process as well as the application itself.

12:43 Morgawr: how do I use clojure.core.reducers? I tried using (require '[clojure.core.reducers]) in my repl just to test stuff but it says "cannot find the namespace" or something like that

12:43 do I need to import something specific with lein? I thought they were shipped with the clojure core

12:43 like strings

12:44 okay

12:44 I'm an idiot

12:44 I wrote "reuducers" instead of reducers

12:44 nevermind =_=

12:44 unsymbol: :3

12:44 * Morgawr needs more sleep

12:46 hardliner_: is clojure for hikkikimories?

12:46 wedr: hardliner_: yep

12:48 hardliner_: wedr: when you go out from home last time?

12:49 unsymbol: til : hikikomori :)

12:50 arrdem: is there a better way to achieve this sort of result? https://www.refheap.com/19800

12:51 wedr: hardliner_: today, cause im working as consulter

12:51 hardliner_: wedr: so you are not hikkikimori

12:51 wedr: hardliner_: no, im not

12:51 hardliner_: wedr: they are sitting at home

12:51 all the time

12:51 wedr: im wannabe hikkimori

12:51 hardliner_: he-he

12:52 why?

12:52 clojurebot: hardliner_: because you can't handle the truth!

12:52 * arrdem gets to work on that ~votekick plugin

12:52 hardliner_: why?

12:52 clojurebot: why is startup slow is busy compiling the `for` macroexpansion

12:52 wedr: hardliner_: cause i hate consulting

12:52 hardliner_: i want work remotely

12:52 hardliner_: wedr: go software development

12:52 wedr: hardliner_: im software developer

12:52 hardliner_: and consultant?

12:53 wedr: hardliner_: yes, java enterprise and so on

12:53 you know

12:53 Morgawr: mm.. weir

12:53 weird

12:53 I did (reduce + (map inc (range 1 1000000))) and it took like 14 seconds

12:53 mtp: what is enterprise

12:53 Morgawr: then I did (reduce + (r/map inc (range 1 1000000)) and it didn't complete, not sure if I ran into a deadlock or it was just very slow

12:53 (waited like 10 minutes)

12:54 this is not normal, is it?

12:54 hardliner_: wedr: i'm c++ monkey

12:55 rasmusto: arrdem: (if (pred map) (update-in map path arg ...) map) ? doesn't seem like you'd have to wrap it in a function

12:55 wedr: mtp: http://en.wikipedia.org/wiki/Enterprise_software

12:55 arrdem: rasmusto: the reason to wrap it is so that I can use it in ->

12:55 rasmusto: that's the real question.. mid -> conditional updates.

12:55 rasmusto: arrdem: okay, looks reasonable then

12:55 arrdem: see also cond->

12:56 hardliner_: wedr: do you have dress code?

12:56 arrdem: rasmusto: oh right. we have that as of 1.5...

12:56 Morgawr: http://www.morgawr.eu/p/1381767636.png the last command seems to either block or explode in computational time to something very unreasonable...

12:56 * arrdem curses clojuredocs.org

12:56 rasmusto: arrdem: seem better than making a function that works only for -> (and not ->>)

12:57 arrdem: 1.20 is NOT the latests: warning!, use 1.30 docs instead

12:59 Morgawr: http://www.morgawr.eu/p/1381767851.png oh well, looks like it finished :D .... :(

13:06 llasram: Morgawr: FYI, you might consider using a text paste service like refheap.com instead of images...

13:07 arrdem: llasram: but he's trolling for our IPs...

13:07 Morgawr: arrdem: lol

13:07 llasram: I find it easier when I'm not pasting code

13:07 sorry

13:07 (I have a script that takes screenshot and uploads it automatically)

13:08 arrdem: Morgawr: refheap.el?

13:08 Morgawr: arrdem: I know I could use a paste service but using paste tool for structured text that doesn't have anything directly to do with code feels weird to me

13:08 but yeah, I'll do that in the future, sorry

13:09 * Morgawr is going to fill everybody with lots of pastebin (just kidding)

13:09 mtp: reading a screenshot of text is weird to the rest of us

13:10 arrdem: mtp: <fighting pants> SPEAK FOR YOURSELF SAH </fighting pants>

13:10 Morgawr: mtp: point taken

13:11 mtp: flashbacks to tech-support days, with Word docs full of screenshots of terminals

13:11 Morgawr: sounds like PTSD :P

13:12 mtp: maybe

13:12 :)

13:27 bitemyapp: technomancy: I enjoyed your OCaml write-up, thanks for doing that :)

13:28 technomancy: how would you feel about a Haskell compare-contrast for grench? (not your labor, mine)

13:37 technomancy: bitemyapp: that'd be interesting. I wonder if it would create confusion for users though.

13:38 bitemyapp: technomancy: it'd be a semi-private/quiet experiment. Between the two of us, I think I've done more Haskelling and I want to compare contrast.

13:38 technomancy: I look at either potential result as a win, either Haskell does well and that's cool or I get a new cudgel for tormenting puffnfresh with.

13:39 technomancy: seems like a lot of work to go to for just a throw-away program, even though I'd certainly be interested in reading a write-up. but if it's something you'd have fun with then go for it =)

13:40 bitemyapp: technomancy: I wanted something not-Clojure to do. my head rattles from the parens inside if I turn too quickly.

13:51 technomancy: you forgot the firstworldproblems hashtag there buddy =)

13:52 bitemyapp: technomancy: haha, too true.

13:52 technomancy: the reason for the head-rattling is I've been doing Clojure at work and at home, so I'm more clj-inundated than usual.

13:53 rasmusto: I really like pprint/print-table, but I want to make it parsable, is there something in edn for me?

13:58 bitemyapp: Alright Timbre, this shit: "java.lang.NullPointerException: null" is getting old.

13:58 Morgawr: mm.. I'm trying to write a map with some heavy computation and I want it to be realized (non-lazy), I try (time (doall (map myfunction mycoll) nil)) in the repl because I don't want it to print any values (too cluttered) and it finishes right away

13:59 isn't doall supposed to enforce realization?

13:59 technomancy: bitemyapp: did you try the paaaaaatch?

13:59 Morgawr: oh

13:59 bitemyapp: technomancy: oh frick.

13:59 Morgawr: nvm I realized the problem

13:59 rasmusto: Morgawr: what was the problem?

13:59 Morgawr: (doall (myfun) nil) means that it doesn't actually enforce (myfun)

13:59 bitemyapp: technomancy: let me give it a whirl. What's the most direct way, checkout?

13:59 rasmusto: oh, the nil was returned right away?

13:59 Morgawr: rasmusto: yea

14:00 rasmusto: gotcha

14:00 Morgawr: because the second form of doall takes [n coll]

14:00 to realize 'coll' n times

14:00 technomancy: bitemyapp: lein install from a checkout

14:00 Morgawr: but it was seeing 'coll' as 'nil' :P

14:00 (do (doall (mymap)) nil) is what I needed

14:00 (I know it's ugly but it's just some quick repl hacking to test stuff)

14:00 llasram: Morgawr: Or `dorun`?

14:00 rasmusto: Morgawr: uh, I thought doall just took a lazy seq in an implicit do?

14:01 bitemyapp: technomancy: the good news is, I have my repro because I just nailed this error in production, so I have a regression I can poke at.

14:01 well, fake production. Not real production.

14:01 you get my meaning -_-

14:02 Morgawr: llasram: derp

14:02 llasram: thanks for the tip, I didn't even know that :P

14:02 rasmusto: you can pass a number to doall to specify how much of the sequence you want to realize

14:03 rasmusto: Morgawr: ah, didn't see that

14:10 Raynes: bitemyapp: I don't see the problem.

14:10 bitemyapp: Obviously null.

14:11 What part of null do you not understand? null.

14:11 bitemyapp: Raynes: the hilarious part is it swallows all my logging information from Timbre, making it impossible to know what broke.

14:11 thanks Obama.

14:12 Raynes: I bet it's running better than the convernemtn.

14:12 wat how did that happen

14:12 government

14:12 scriptor: interesting typo

14:19 llasram: Raynes: You may want to get that stroke looked at

14:19 Raynes: llasram: Indeed.

14:20 llasram: Raynes: Do you happen to use the Dvorak keyboard layout?

14:20 Raynes: llasram: I barely use the qwerty layout.

14:20 llasram: hah

14:21 Raynes: I'm the second fastest typist in Geni at the moment, yet nobody understands how I even manage to produce words given that I type with like two fingers on each hand.

14:21 scriptor: what's your typing speed?

14:21 Raynes: 110-115ish

14:21 technomancy: the supple fingers of youth

14:22 arrdem: yall type so fast...

14:24 dnolen: this is a pretty tricky/fun performance enhancement ticket for ClojureScript http://dev.clojure.org/jira/browse/CLJS-619

14:25 bitemyapp: technomancy: yes, that fixed it.

14:25 Raynes: I do 80-90 WAM typically, 100-105 if I'm paying attention.

14:26 technomancy: now I have useful stacktraces again.

14:26 Raynes: bitemyapp: My typical speed is something like 85-95.

14:26 bitemyapp: But if I care, I can hit 110-115 pretty easily.

14:26 bitemyapp: welp. pushin' this to quasi-prod so I can know wtf is going on.

14:26 Raynes: I don't think I could crack 110 unless I practiced. I don't type properly (home row)

14:27 Raynes: bitemyapp: What I was just saying is that I don't do that either.

14:27 I don't do anything even remotely resembling that, in fact.

14:27 My hands literally hover above the keyboard.

14:27 I hunt and peck, but at 200 miles per hour. :P

14:27 (and without looking at the keyboard, of course)

14:28 technomancy: isn't that just pecking then?

14:28 Raynes: Sure. My fingers still hunt.

14:28 noncom: when you do that does it look like that? : https://www.youtube.com/watch?v=8T7FKrJvgCk

14:28 bitemyapp: my fingers hunt some, but they hover in orbits on the left and right-hand sides so that I have easier access to symbols.

14:29 jonasen: dnolen: I don't really understand what you mean in CLJS-619. What do you mean with IFn implementations for different arities? Doesn't IFn already support that?

14:29 Raynes: noncom: Not really.

14:30 dnolen: jonasen: it does not, IFn is a fiction at this point - it just emits .call and .apply methods

14:30 technomancy: bitemyapp: thanks for the report; will try to get a release out today.

14:30 dnolen: jonasen: with the obvious perf hits around & args

14:31 jonasen: dnolen: what's the alternative?

14:31 dnolen: jonasen: IFn implementors have .cljs$core$IFn$_invoke$arity$ for each arity

14:32 jonasen: since it's a bear to implement all 20 arities, I think it may be ok to use JS prototypes here to get default implementations

14:32 jonasen: this means calls collections as functions will get much, much, much faster

14:32 jonasen: and it would be possible for multimethods to not be so slow

14:32 bitemyapp: technomancy: aweeeessssooome. Thank you :)

14:34 pandeiro: how can i kill a repl process started with lein repl :headless?

14:34 jonasen: so ([42 43] 1) would emit <persistent-collection>..cljs$core$IFn$_invoke$arity$1(1)

14:36 dnolen: instead of cljs.core.PersistentVector.fromArray([42, 43], true).call(null, 1);

14:36 dnolen: jonasen: yep

14:36 jonasen: dnolen: I think dart does this?

14:37 dnolen: jonasen: and that will get even faster when we emit constant tables w/ pre-allocated data structures

14:37 so (if (#{1 2 3} 1) ...) could be very fast

14:38 Raynes: bitemyapp, noncom, technomancy: https://www.youtube.com/watch?v=5ZWxIyxxtis

14:38 In case you care.

14:39 dnolen: jonasen: re: multimethods, currently 100X slower than Clojure JVM

14:39 bitemyapp: Raynes: yeah, you type a lot like I do.

14:39 jonasen: dnolen: I haven't really looked at how multimethods work... But I'm a happy user of them :)

14:40 Raynes: bitemyapp: But on a better keyboard! :D

14:40 :p

14:40 jonasen: so making them faster +1 from me

14:40 bbloom: dnolen: is anything blocking the constant tables any more? we have the :constant? flag and we have the keyword table. can't we just glue those together pretty easily?

14:42 bitemyapp: Raynes: I type on a fairly flat wired apple keyboard. I've grown accustomed to these things.

14:43 dnolen: jonasen: they are pretty simple, at least the ClojureScript implementation - skimming the source, there's a lot of room for improvement.

14:44 bbloom: we never actually merged in the :constant? work in your branch

14:52 bbloom: dnolen: *scratches head* really? it's been a while, i forgot heh

14:53 Raynes: bitemyapp: I'm fairly accustomed to my macbook keyboard, but I <3 my das.

14:53 bbloom: dnolen: ooooh yeah, heh

14:53 arrdem: upvotes for the das!

14:53 Raynes: bitemyapp: You should consider getting a CM quickfire rapid.

14:53 bbloom: ok, well i guess i need to bring that up to date at some point

14:53 Raynes: It's super cheap (if you care about that), but is mechanical and doesn't suck.

14:53 My flatmate got one of those recently. Enjoys it quite a bit, I hear.

14:53 bitemyapp: Raynes: I've gotten so used to the low-travel Apple keyboards that I don't know if I'd want to do that except as a gaming keyboard.

14:54 bbloom: dnolen: ah but f80956 did make it in

14:54 technomancy: I'm kind of afraid that once my mechanical keyboard arrives I'll just be filled with disgust at everything else

14:55 Raynes: bitemyapp, technomancy: It's really easy to go from a good keyboard to a shitty apple keyboard.

14:55 bitemyapp: technomancy: which did you get?

14:55 Raynes: In my experience anyways.

14:55 arrdem: technomancy: it isn't so much disgust at anything else.. you just miss the feel when not using it.

14:55 bbloom: dnolen: https://github.com/brandonbloom/clojurescript/commit/b02b07fe888ffc8554469148cb35afdceabcd348 doesn't seem too scary if that would help :-P

14:55 technomancy: bitemyapp: ergodox

14:55 bitemyapp: I've owned mechanical keyboards before, I just don't own one right now.

14:55 technomancy: too hardcore for me.

14:55 dnolen: bbloom: yep, that's the bit that's missing

14:56 technomancy: arrdem: going from my thinkpad to a macbooklike chicklet filled me with disgust though

14:57 arrdem: technomancy: idk. I can still type on my friends macbooks and my Samsung Series 9, I just miss the clicking feeling to the point that I've been known to lug a Das around campus with me.

14:57 technomancy: I got rid of my series 9 =(

14:57 arrdem: Q_Q

14:57 technomancy: you traded up to a Crackbook Air didn't you, trator.

14:58 technomancy: arrdem: not a chance. got my old thinkpad repaired.

14:58 jonasen: dnolen: bbloom: I read the log from a couple of days back when you were discussing cljs "static fields" with cemerick... I just want to mention that I support your side of the argument: https://groups.google.com/d/msg/clojure-dev/Ge5uEqlUcJk/E-PnFQ9lefoJ

14:59 bbloom: jonasen: ::thumbs up::

15:00 dnolen: jonasen: yes I remember

15:00 jonasen: that's why I pinged you when I changed it, I realized you were right because otherwise identifying namespaces is more complicated in CLJS.

15:01 jonasen: we can special case the convention for deftypes, but it just seems like a JVMism to me, not a Clojure-ism.

15:02 jonasen: dnolen: I think it's important to follow clojure semantics as close as possible but _not_ interop semantics

15:02 bbloom: dnolen: i get a test failure on master right now

15:02 jonasen: interop is obviously different between platforms

15:02 bbloom: dnolen: Error: Assert failed: (= (-> s reader/read-string .valueOf) (-> s reader/read-string pr-str reader/read-string .valueOf))

15:03 under V8. out/core-advanced-test.js:1090

15:03 dnolen: bbloom: hrm, running them, tests pass for me.

15:03 bbloom: i did a clean & a bootstrap, then ran them & get that

15:04 dnolen: bbloom: trying

15:06 bbloom: no failing tests, clean + bootstrap

15:06 bbloom: on 09488be2?

15:06 dnolen: bbloom: yes

15:06 bbloom: odd....

15:07 dnolen: bbloom: or a bug, that's an #inst test

15:09 bbloom: dnolen: #_ing it out: all the other tests pass for me

15:09 gphilippart: hi

15:09 jonasen: dnolen: bbloom: I haven't been able to run the test suite for a long time and I have not been able to figure out what the problem is. I've got a special testing branch where I have commented out https://github.com/clojure/clojurescript/blob/master/test/cljs/cljs/core_test.cljs#L1725-L1726

15:10 dnolen: jonasen: so that line causes tests to not run for you?

15:10 gphilippart: Can anyone give me a hand on a simple atom probem ?

15:10 bbloom: dnolen: run ${V8_HOME}/d8 and tell me what version you've got

15:10 gphilippart: don't ask to ask. just ask

15:10 dnolen: version 3.22.11 (candidate)

15:10 I built a couple of days ago

15:10 gphilippart: yeah, right

15:10 bbloom: dnolen: hmm, i've got

15:11 gphilippart: I expect reset! to respect lazyness but (reset! commands (cycle (concat (repeat 6 "UP") (repeat 6 "DOWN")))) realizes the lazy seq that comes out of (cycle x)

15:12 jonasen: dnolen: core_test.cljs doesnt compile for me with #queue literals. But the weird thing is that #queue [1 2 3] works in script/repljs

15:12 gphilippart: where commands is an atom of course

15:12 bbloom: jonasen: have you run script/boostrap ?

15:12 jonasen: bbloom: yes

15:12 bbloom: and script/clean? :-)

15:13 jonasen: bbloom: yep, several times :)

15:13 bbloom: *shrug*

15:13 i'm updating my v8 now

15:13 seeing if that helps my issue

15:14 amalloy: gphilippart: no it doesn't

15:14 bbloom: dnolen: anyway. i remembered the other thing that is blocking the constants table for data structures....

15:14 amalloy: perhaps your repl is realizing the sequence in order to print it for you

15:14 dnolen: jonasen: seems like a reader problem maybe? what version of tools.reader is in your lib directory?

15:14 bbloom: dnolen: it's the fact that all the deftypes get mixed in with their implementations. we'd have to sort all the deftypes to the top, basically

15:14 b/c the fields/constructor needs to come before the constants table

15:14 jonasen: so #queue [1 2 3] works in script/repljs but _not_ script/repl

15:14 bbloom: which is needed throughout the bootstrapping process

15:15 dnolen: jonasen: seems like a classpath thing?

15:15 bbloom: we already emit constant_table.js in the right place

15:15 after the standard lib, before all user libs

15:16 oh

15:16 jonasen: dnolen: Yes, probably. Does #queue literals work for you in script/repl?

15:16 gphilippart: amalloy : seems I'm bitten by the repl realizing lazyseqs.

15:16 how do you know it's still lazy ?

15:17 dnolen: bbloom: oh you're talking about making it work for user deftypes too ... lower priority I think.

15:17 amalloy: gphilippart: because it would be absurd for it not to be. that is just not how things work

15:17 reset! doesn't have any magical properties that reach inside of objects and somehow make them non-lazy; it just sets a pointer

15:18 bbloom: dnolen: hmmm… i didn't consider differentiating core and user deftypes…

15:18 dnolen: jonasen: yes #queue [1 2 3] works for me in repljs

15:19 gphilippart: amalloy : yeah it sounded absurd to me as well, yet my ring handler blocks on this call. I might have missed something.

15:19 jonasen: dnolen: it works for me to in repljs, but not in repl (i.e., script/repl)

15:20 dnolen: jonasen: which is the Clojure repl, why should it work there?

15:20 jonasen: dnolen: ok, just wanted to check

15:21 dnolen: jonasen: compile-file* in compiler.clj binds reader/*data-readers* to tags/*cljs-data-readers*

15:21 jonasen: where reader is tools.reader

15:23 pandeiro: anyone use ring-middleware-format? besides setting the Accept: header what must a request do to trigger the automatic response serialization?

15:24 noonian: pandeiro: you should get response serialization on any route that you wrapped with wrap-format-response, if you don't specify one it should default to json I think

15:32 bitemyapp: If I find the person responsible for putting this: ["[]"] - in my schema, I'm going to beat them to death with a banana.

15:33 pandeiro: noonian: i am doing something like (-> (site (context root [] my-routes)) (wrap-restful-format)) - do i need to call wrap-format-response? i thought it was included in wrap-restful-format

15:34 jonasen: dnolen: I can compile core_test.cljs from the repl using cljs.compiler/compile-file*. I can also read #queue literals in script/repljs. But I can not read #queue literals when running script/test..

15:34 noonian: pandeiro: wrap-restful-format does both, but if you wrap routes with wrap-response that are supposed to return html and not json I've encountered problems

15:35 so I switched to using wrap-restful-params for everything, and only wrap-restful-response on the actual routes I am returning non-html data from

15:35 dnolen: jonasen: hmm weird ... maybe we need to setup that binding around analysis as well?

15:35 bbloom: dnolen: jonasen: ugh. v8 takes forever to compile. how do people actually write software like this?

15:36 dnolen: bbloom: yeah forever

15:36 bbloom: IMO, 1 second is the upper bound for how long ANYTHING should take to compile

15:36 gphilippart: amalloy: I put a very simple ring app (20 lines) here : https://github.com/gphilipp/gilles-elevator/blob/master/src/gilles_elevator/core.clj. When I go to localhost:8081/reset, the browser returns the whole realized list, and the CPU goes wild. It's just a reset!. What's the issue ?

15:36 dnolen: bbloom: trying compiling Mercury sometime, 8 hours or something like that

15:37 erg updated nrepl, stopped worked

15:37 nrepl.el

15:37 amalloy: ring is trying to interpret the result of your reset! as a valid ring response

15:37 technomancy: bitemyapp: https://github.com/mmcgrana/clj-stacktrace/tree/0.2.7

15:37 arrdem: dnolen: yeah melpa's nrepl is b0rken

15:37 noonian: pandeiro: for instance you can return a sequence of strings and ring renders it as html, if you call wrap-restful-response that will be converted to a json array, at least if its a vector

15:37 dnolen: arrdem: how to fix?

15:38 arrdem: dnolen: idk. I wound up pulling nrepl from my packages and `git clone`ing the master. that worked.

15:38 dnolen: another fix is to use the marmalade version.

15:38 pandeiro: noonian: gotcha.. and the middleware should work fine with (context "foo" [] foo-routes), right? right now i'm getting 0-length responses for some reason

15:38 arrdem: dnolen: but that's only 0.2.0, not 0.2.3 which is Master ToT

15:38 amalloy: try reading the ring SPEC to see what a ring handler is supposed to return

15:39 $google clojure ring spec.md

15:39 lazybot: [ring/SPEC at master · mmcgrana/ring · GitHub] https://github.com/mmcgrana/ring/blob/master/SPEC

15:39 technomancy: melpa =\

15:39 bbloom: dnolen: ok, on latest V8: tests run

15:39 bitemyapp: technomancy: thank you :)

15:39 noonian: pandeiro: that usually means you need to wrap it in ring.util.response/response

15:39 dnolen: bbloom: ok good to know

15:39 bbloom: all the JS engines on the bleeding edge are crazy finicky

15:39 pandeiro: noonian: huh b/c the ring-middleware-format README says just return a clojure data structure

15:40 dnolen: bbloom: they've on failed inexplicably at one time or another

15:40 they've all

15:40 bbloom: heh

15:40 noonian: pandeiro: basically, handlers need to return maps, otherwise format-response is looking in the :body key presumably, and getting nil for the value

15:40 pandeiro: noonian: ah ok

15:40 compojure magic confused me there

15:40 noonian: pandeiro: yeah, the :body should contain a clojure datastructure, maps to json objects, vectors to arrays, etc

15:41 gphilippart: amalloy : thx, I wrapped my call into a do block, and return a "reset everything" string.

15:41 seems to do the trick

15:41 I get it now

15:44 dnolen: arrdem: grr, still not working for me, I get a hung process when using nrepl.el

15:44 arrdem: dnolen: the brand new one from github?

15:46 dnolen: arrdem: yeah, HEAD is busted, I git reset back to the 0.2.0 commit

15:46 arrdem: dnolen: ... weird that's not the behavior I'm seeing. I'm sitting at a4f90f2d25985396e760e6c889d9dcb19deddeca happily.

15:47 dnolen: arrdem: yeah, well at least it's working for me now, thanks for the help

15:47 arrdem: ugh someone is gonna have to figure out what's going on here eventually...

16:15 al-maisan: hello there! I get "Exception in thread "async-dispatch-916" java.lang.AssertionError: Assert failed: No more than 1024 pending puts are allowed on a single channel. Consider using a windowed buffer." when using core.async with a lot of go routines .. ist this a hard limit..?

16:16 BobSchack: pretty much https://github.com/clojure/core.async/blob/master/src/main/clojure/cljs/core/async/impl/channels.cljs#L57

16:17 tbaldridge: al-maisan: yep, pending puts/takes create a unbounded buffer (a bad thing), Use a larger buffer, or use a windowed one.

16:18 or at least without that assert they create a unbounded buffer.

16:18 al-maisan: will try a larger buffer .. thanks tbaldridge and BobSchack !

16:20 amalloy: i wouldn't just increase the buffer size without at least examining why you need more than 1024 buffered writes. it seems more likely to be a bug in your code than a limitation you're really bumping up again

16:21 like, two thousand different go blocks all writing to the same place? doesn't sound good

16:26 pepijndevos: Should I use core.monad or protocol-monads?

16:28 al-maisan: amalloy: I actually forgot to set the buffer size in first place

16:28 amalloy: pepijndevos: i don't think core.monad exists. algo.monad?

16:28 al-maisan: amalloy: I have a program that spawns 50K go routines that all write results to the same channel

16:29 pepijndevos: amalloy, yes.

16:29 tbaldridge: al-maisan: that's going to be a bit of a problem for several reasons. but, what do you need 50k go blocks for?

16:29 pepijndevos: everyone at eeuroclojure seems to tak about the state monad

16:30 so while I'm in my place with proper wifi, I though i'd check it out

16:30 lynaghk: si14: pong

16:30 amalloy: pepijndevos: i would for sure not use algo.monad. i probably would learn haskell rather than try to use protocol-monads, but at least protocol-monads is conceptually sound; last i checked, it doesn't violate the monad laws

16:30 pepijndevos: haha

16:31 I did some haskell actually

16:31 but yea, the prevailing opinion seems to be that most advanced monads only make sense with a type system

16:32 I just have some clojure code that I think could benefit from the state monad, so I want to try that

16:32 amalloy: i'm inclined to agree, but don't have enough experience that you should take my opinion seriously

16:32 al-maisan: tbaldridge: just kicking the tyres of core.async .. I have similar code working in golang

16:32 pepijndevos: what a stunning amount of documentation...

16:33 amalloy: that's jimduey for you, pepijndevos

16:33 monads also suffer from lack of TCO, because you end up with a lot of nested calls to bind that could be optimized but aren't on the jvm

16:33 al-maisan: tbaldridge: what is a more "reasonable" number of go routines to be used with core.async?

16:33 tbaldridge: al-maisan: yeah, the reasoning for the limitation is that a) it's mostly pointless. Very few people need to do that in production. 2) it normally indicates a flaw in the logic of the program.

16:34 al-maisan: tbaldridge: err .. how about embarrassingly parallel problems?

16:35 tbaldridge: al-maisan: use reducers. core.async is a concurrency library, not a parallelism library. Or just spin up X number of threads/gos where X is the number of CPUs. Any more than that, and you're going to kill performance due to book keeping.

16:35 pepijndevos: amalloy, ouch... that *might* be a problem

16:35 meh, probably not

16:35 tbaldridge: Notice how very few (if any) raytracers spin off a thread for every pixel. They spin up CPU+2 threads and then process the pixels in blocks

16:35 al-maisan: ok, will look at reducers .. thanks tbaldridge !!

16:38 bitemyapp: pepijndevos: I like that people use the opportunity to go to a Clojure conference and be surrounded by Clojurians to talk about things Haskellers do :)

16:38 AimHere: Isn't gossipping about people of other languages exactly what Clojurians do?

16:38 At least in conferences

16:39 They get some Scala dude in to talk about Scala. They get Byrd and Friedman to talk about Kanren and Prolog, they all bitch about Java

16:39 muhoo: there's been a weird envy/cross-pollination between haskell and clojure for a while

16:40 al-maisan: tbaldridge: yeah, ideally I'd like to fire up all the tasks in separare go routines and let the run time take care of things

16:40 tbaldridge: the golang runtime is handling huge numbers of go routines just fine

16:40 scriptor: muhoo: both ways?

16:40 muhoo: scriptor: mostly one way AFAICT

16:40 dnolen: al-maisan: the problems you'll encounter with your approach is no different than in core.async, Erlang, Haskell sparks, etc

16:40 tbaldridge: al-maisan: so does core.async, the problem is putting all the values into the channel. But like I said, you'll get better performance by doing things slightly differently

16:41 al-maisan: for instance, spin up 10 gos to do processing, then use one more go to spool items into the channel.

16:42 al-maisan: thanks for the suggestions tbaldridge .. will try that

16:42 dnolen: al-maisan: here's a simple go program that breaks down

16:42 https://gist.github.com/swannodette/6981382

16:42 easily portable to core.async, Erlang, Haskell where it will also ... break down

16:42 * al-maisan looks

16:46 pepijndevos: the tests and source code arn't terribly helpful to understand how to use the state monad.

16:46 al-maisan: dnolen: I am clojure rookie and just trying to replicate what I had working in golang very nicely (https://github.com/freizeit/exercises/tree/master/cj-a-store-credit/golang)

16:47 dnolen: just experimenting with core.async at this point ..

16:49 dnolen: when I spawned 50K go routines (all writing to the same result channel) in golang the runtime handled that just fine .. hence my questions whether that would be the case in core.async as well

16:49 but never mind

16:50 * al-maisan looks at http://clojure.com/blog/2012/05/08/reducers-a-library-and-model-for-collection-processing.html

16:51 dnolen: al-maisan: yes I understood what you're trying to do. But my gist shows precisely where allowing unbounded queues behind the scene allows things to fall apart.

16:51 al-maisan: sure .. point taken

16:51 dnolen: al-maisan: core.async could also allow it, but it does not - different philosophy

16:51 al-maisan: gotcha

16:52 tbaldridge: al-maisan: since it's an artificial limit, we don't mind removing it at some point, but we haven't seen a good use case yet.

16:56 coventry: bitemyapp: "git blame --retribution=banana-beat-down"

16:56 mercwith1mouth: lol

16:56 bitemyapp: coventry: it's unconscionable.

16:57 meanwhile, I'm knee-deep in nested-reduce-hell.

16:57 can't figure out how a root binding got ghosted out of existence by all my (next (reduce ...)) calls.

17:00 Somewhere out there a Haskeller is mocking me mercilessly.

17:01 muhoo: i saw a post recently by a guy who listed all the reasons why using a queue is a bad idea.

17:01 googled, haven't been able to find it. but it was basically "yeah, nice hammer, too bad that's not a nail"

17:02 tbaldridge: muhoo: WHERE!?! someone is wrong on the internet....

17:02 Morgawr: man, I just read http://swannodette.github.io/2013/07/12/communicating-sequential-processes/ this... hell, I've always seen you guys talk about core.async but never really cared about it... it's amazing :V

17:02 bitemyapp: muhoo: in what use-case?

17:02 muhoo: RabbitMQ has solved a goodly number of problems for something I'm working on right now.

17:02 dnolen: Morgawr: it's pretty cool

17:03 Morgawr: dnolen: yes

17:03 muhoo: tbaldridge: bitemyapp: wish i could find it. there was a list of cases where, if you are doing x, y, or z, you don't want a queue

17:03 bitemyapp: there are some aspects of queues I find awkward/annoying, I can't say I'd be upset if it just turned into a lazy-job-processing database coll instead.

17:03 Morgawr: definitely going to use this for my next gamedev challenge in clojurescript :P

17:03 tbaldridge: bitemyapp: the more I use RabbitMQ the more I love it.

17:03 bitemyapp: muhoo: that sounds...really useful. Please save the links you find next time :P

17:03 tbaldridge: I'm...not really there with you on that. More like familiarity breeding contempt. It's still useful though.

17:04 RMQ technically does its job fine, I just find the semantics of how AMQP based queues work annoying at times.

17:04 tbaldridge: explain?

17:05 bitemyapp: tbaldridge: listing my grievances is more like a blog post or a skype call than a drive-by on IRC.

17:05 it might elucidate the matter quickly that I'm using it as a job queue, not a message queue though.

17:06 tbaldridge: bitemyapp: well let me know when that happens. For what I use it for (durable, reliable, messaging) it seems to work well, but there are many tasks I would not use it for.

17:06 bitemyapp: usually whenever I mention that I'm using RMQ as a job queue, people go, "ohhhh" at my grumpiness surrounding it.

17:10 I'm just going to start adding types to my program until it makes sense.

17:11 tbaldridge: rofl, that's going on twitter.

17:11 dnolen: Morgawr: this is a pretty cool writeup of using core.async to do a Dots clone http://rigsomelight.com/2013/08/12/clojurescript-core-async-dots-game.html

17:12 Morgawr: a good one a pong variation http://ragnard.github.io/2013/10/01/clojurecup-pong-async.html

17:12 Morgawr: and I heard weavejester was talking about core.async for games at EuroClojure

17:13 Morgawr: dnolen: daamn so much to read, thanks! :P

17:15 bitemyapp: tbaldridge: you laugh, but it'll probably help.

17:16 I hope.

17:18 hfaafb: is there a web interface that compiles cljs to js

17:18 to sate curiosities

17:18 muhoo: hfaafb: cljsfiddle?

17:18 scriptor: to see the resulting js?

17:19 dnolen: hfaafb: http://cljsfiddle.net

17:19 hfaafb: thanks :)

17:19 dnolen: hfaafb: http://himera.herokuapp.com/index.html also

17:20 hfaafb: note neither are particularly informative since the JS we generate is optimized for further processing by Google Closure Compiler

17:20 scriptor: how do you check the version of cljs you're running?

17:20 dnolen: scriptor: there's no way to do that at the moment

17:20 scriptor: is the herokuapp one otherwise up-to-date?

17:20 hfaafb: ahh do any of these show the resulting js?

17:22 xeqi: does cljsfiddle let you write macros?

17:22 jonasen: xeqi: no

17:23 dnolen: hfaafb: in Himera you can always just wrap your expression in an (fn [] ...)

17:24 jonasen: xeqi: with some sandboxing and custom cljs it would probably be possible

17:24 dnolen: hfaafb: so (fn [] some-expr)

17:24 jonasen: xeqi: but I haven't experimented with that at all yet

17:24 xeqi: jonasen: np, I was just going to raise concerns about sandboxing

17:26 hfaafb: much appreciated dnolen

17:26 benmoss: hfaafb: also no, not really. you can sorta see it if you look at the EDN response on cljsfiddle

17:27 oh, better answer :)

17:28 jonasen: I could (should?) add a tab where you can see the generated js... that would probably be a useful feature

17:28 in cljsfiddle that is

17:28 dnolen: jonasen: it would be useful for debugging yes, I had to use the DOM inspector to debug

17:33 hfaafb: the CLJS version Himera uses is pretty cold now, cljsfiddle very up to date.

17:34 bitemyapp: Okay, so today's lesson was: maintain symmetry in nested reductions.

17:34 tbaldridge: done without types ^^ just thinking :P

17:36 dnolen: jonasen: oh rad, you keep improved cljsfiddle, console much appreciated

17:36 s/improved/improving

17:37 jonasen: dnolen: yes, its not finished yet :)

17:37 letslearn: hello, i hope it is ok to ask n00b questiosn here. I am going through the clojure koans series and am kinda tripped up with the functions portion. The one i am having trouble with is this one specifically

17:37 "Higher-order functions take function arguments" (= 25 ((fn [f] (f 5)) (fn [n] (* n n))))

17:38 I am not certain what is happening here. It is that - ((fn [f] (f 5)) is returning 5 ?

17:40 So, to prove that, I tried (= (fn [f] (f 5))5) in the repl and it gave me false. So, I am confused

17:41 AimHere: letslearn, (fn [f] (f 5)) takes a function and applies it to 5

17:41 letslearn: applies it to 5?

17:41 AimHere: letslearn, So ((fn [f] (f 5)) inc) would increase 5

17:41 letslearn: oh

17:42 jonasen: dnolen: I'm also planning to implement C-x-e (etc) key bindings so you can do "emacs-like" interactive development... Paredit is another thing I'd like to add but I'm hoping idbknox will implement that (and release it) for lighttable.

17:42 AimHere: The function being passed happens to be one that squares the number that's passed to it

17:42 scriptor: applies it = called with

17:42 AimHere: Yes

17:42 Sorry

17:42 scriptor: f applied to 5 = f is called with 5

17:42 dnolen: jonasen: C-x-e would be slick

17:42 letslearn: aah ok

17:42 scriptor: just clarifying

17:42 letslearn: thank you! AimHere and scriptor

17:42 dnolen: jonasen: did kovasb do a stand alone paredit thing? or least bits of it?

17:43 s/did/didn't

17:43 AimHere: ,(apply #(* x x) 5)

17:43 jonasen: did he?

17:43 clojurebot: #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: x in this context, compiling:(NO_SOURCE_PATH:0:0)>

17:43 AimHere: ,(apply #(* % %) 5)

17:43 jonasen: for codemirror?

17:43 clojurebot: #<IllegalArgumentException java.lang.IllegalArgumentException: Don't know how to create ISeq from: java.lang.Long>

17:43 AimHere: Gah

17:43 dnolen: jonasen: oh I was thinking of this - http://github.com/achengs/subpar

17:43 hyPiRion: ,(apply #(* % %) [5]) ;?

17:43 clojurebot: 25

17:44 jonasen: dnolen: Thanks! I'll definitely take a close look at that!

17:44 letslearn: ok

17:46 , ((fn [f] (f 5)) -) ; ?

17:46 clojurebot: -5

17:46 letslearn: thanks Aimhere, i think i get it now

17:47 bitemyapp: core.typed ended up being too noisy to be helpful in my use-case. Look forward to seeing it improve though.

17:54 mgaare: nrepl.el is broke

18:54 technomancy: why does lein-cljsbuild tell everyone to use hooks?

18:58 Raynes: technomancy: Too much phonics?

19:00 technomancy: undoubtedly

19:03 bitemyapp: I love it when I forget to comment my cond/case :elses so I remember what the fuck I was assuming at that point in time about the :else case

19:47 Morgawr: mm.. I'm trying to connect to an nrepl from lighttable and it's not working :(

19:48 I open the connect bar, add connection to nRepl (started from lein repl in my project), input localhost:<port> where port is the one provided by lein nrepl

19:48 rasmusto: Morgawr: is the project using clojure 1.5.X?

19:48 Morgawr: yes

19:48 1.5.1

19:48 it just says "connecting...." forever

19:48 rasmusto: that was the first thing that I ran into, idk what you're seeing, hm

19:53 can I use edn/read-string and (with-out-str (clojure.pprint/pprint somestuff)) safely?

19:53 Morgawr: uff, can't get it to connect ;_;

19:54 bitemyapp: Morgawr: I've never had any trouble in Emacs :)

19:54 rasmusto: well, if lighttable can't connect, can nrepl.el connect at least?

19:54 Morgawr: mmm.. I don't think it's an LT problem... when I kill the nrepl from the command line the "connecting..." is dropped

19:54 so maybe it's a problem from leing, idk

19:55 do I need to add some special flag to lein or somethnig?

20:02 does it have to be started in :headless mode from lein in order to be able to connect locally from LT?

20:03 rasmusto: Morgawr: that shouldn't matter.

20:04 Doesn't LT fire up its own repl if there isn't one running?

20:04 Morgawr: yes it does

20:04 but I want to connect to my own nrepl

20:09 rasmusto: i wonder if its a leiningen .nrepl-port thing

20:09 technomancy: if .nrepl-port gets written, you should be able to connect

20:10 you can always test with `lein repl :connect` to see whether it's a client issue or not

20:15 Morgawr: technomancy: ehh, I did "lein repl :connect <port>" and it worked

20:15 but inside LightTable it doesn't

20:16 I really don't know why, it's so annoying

20:17 technomancy: yeah, no idea, sorry

20:24 rasmusto: Morgawr: what version of leiningen are you using?

20:26 Morgawr: 2.1.3

20:28 rasmusto: I'm on 2.2.0, and I can connect to a new repl using LT

20:29 Morgawr: that might be the thing, how do I update lein?

20:29 rasmusto: lein upgrade

20:30 hmm, it looks like .nrepl-port and target/repl-port are both created with this version, I'm not sure what 2.1.3 did

20:30 Morgawr: rasmusto: ok, trying now :)

20:32 nah, still no good :(

20:32 rasmusto: you restarted the repl, right?

20:33 Morgawr: rasmusto: yeah ofc

20:33 rasmusto: :) just making sure. I've missed doing that personally

20:33 hrm, and you have both a .nrepl-port and target/repl-port file?

20:34 bitemyapp: arrdem: you watch SC2!?

20:34 Morgawr: rasmusto: where should I look for them?

20:35 rasmusto: Morgawr: on the machine that you're running the repl on

20:35 Morgawr: yeah but which folder :P in the lein project or in lein root?

20:35 rasmusto: oh, I guess I didn't understand, how are you attempting to connect to the repl with lt?

20:35 the root of the project where you run `lein repl`

20:35 Morgawr: I just run LT -> connections -> add connection from nRepl -> localhost:port

20:36 rasmusto: ah, okay. hrm

20:36 Morgawr: but yeah, it's not a big deal, I found a better way with dealing with this

20:36 by using the integrated LT repl

20:36 I was having a problem with an infinite loop (main game loop) so I just spawned that in another thread

20:36 and now it works perfectly :P no need for remote repl

20:39 rasmusto: Morgawr: hm yeah, I'm having some issues with the remote repl thing too

20:40 arrdem: bitemyapp: you bet your drones I do

20:41 bitemyapp: arrdem: do you play too?

20:42 arrdem: bitemyapp: I'm not competitive but I do play.

20:42 bitemyapp: arrdem: I've been thinking about getting back into it.

20:42 rasmusto: that game stresses me out

20:42 bitemyapp: rasmusto: that sounds about right.

20:42 arrdem: bitemyapp: I had a lot of fun back in HS playing 2v2s with a Masters buddy of mine

20:42 bitemyapp: arrdem: want to do 2v2s sometime?

20:42 arrdem: bitemyapp: but I never really enjoyed 1v1s

20:42 bitemyapp: I'm down.

20:42 bitemyapp: I love 2v2s.

20:42 arrdem: what region do you play on?

20:43 rasmusto: i need too much coffee to sustain 100+ apm, and my strategy goes out the window at that point

20:43 arrdem: bitemyapp: NA

20:43 rasmusto: lol I've made 116 before, but I _feel_ like I'm flying at that point.

20:43 bitemyapp: arrdem: how should I ping you to play later?

20:43 arrdem: rasmusto: my normal max is about 85-90

20:43 rasmusto: i have inflated zerg apm too, so I cheat

20:44 bitemyapp: I have the most experience with Zerg, but playing Z really burns my tail.

20:44 arrdem: zerg APM is _not_ inflated.

20:44 bitemyapp: I need to finish switching to something else.

20:44 arrdem: bitemyapp: please please please be Protos

20:44 muta/ling/bling is my specialty

20:44 hydra/roach is my alternate

20:44 rasmusto: arrdem: its not? I thought that auto-repeat on unit building counted

20:44 bitemyapp: arrdem: P is my second best race an the one I was trying to transition to. We can do ZP 2s.

20:44 and*

20:45 arrdem: what tier are you?

20:45 * technomancy suppresses his "starcraft talk -> /mode +q" instinct

20:45 bitemyapp: technomancy: kekekekekekeke

20:45 arrdem: bitemyapp: sounds good. I just finished midterms as you can tell by my ranting about church numerals. email me later and we can get something going.

20:45 bbl lock picking

20:45 scriptor: time to make a clojure lounge channel

20:45 arrdem: technomancy: my appologies

20:46 rasmusto: scriptor: clounje

20:46 bitemyapp: rasmusto: ew

20:46 arrdem: scriptor: #clojure is the #clojure-offtopic

20:46 technomancy: arrdem: no this is legit; I just had a bad pattern match

20:46 scriptor: though I guess #emacs is pretty loungy

20:46 rasmusto: #emacs is where I go for politics

20:46 it hasn't worked out too well so far...

20:47 arrdem: technomancy: you should explain that in english... IRC modes are one of the many things I don't grok yet.

20:48 bitemyapp: arrdem: http://www.dslreports.com/faq/8037

20:48 rasmusto: bitemyapp: what isn't on dslreports.com?

20:48 arrdem: bitemyapp: ah. that's what I thought it meant.

20:48 technomancy: arrdem: just that I thought for a moment it was that "everyone in this room is terrible. please help me write a starcraft clone in clojure" troll

20:49 and I was getting an itchy trigger finger

20:49 bitemyapp: LOL

20:49 I actually totally forgot about that guy.

20:49 arrdem: HUEUEUEUE

20:49 bitemyapp: arrdem: wrong game, that BRs ruined Dota/Dota2/HoN/LoL not SC2.

20:49 rasmusto: he's probably laughing on the way to the bank as we speak

20:49 arrdem: bitemyapp: I think in his 48hrs chord equaled my cloutjure score...

20:49 bitemyapp: in SC2 they can't hide behind their teammates so they get face-smashed back into the MOBAs.

20:50 arrdem: http://cloutjure.com/ ?

20:50 scriptor: I wish EE/RoN style RTS's

20:50 someone should make one in clojure

20:50 arrdem: bitemyapp: yeah... the DB has scores but the website doesn't

20:51 ok. phew.

20:52 { "#clojure" : { "nick" : "chord", "posts" : NumberLong(719) } }

20:52 bitemyapp: wtf is a NumberLong?

20:52 arrdem: bitemyapp: mongodb weirdness

20:52 * bitemyapp scowls at arrdem

20:52 arrdem: bitemyapp: hey. we didn't have time to get neo4j working.

20:53 bitemyapp: I practically DDoS'd our server and was still looking at 8hrs too slow to input the data.

20:54 technomancy: oh dear; is that to get around JSON's being coupled to JS broken numerics?

20:54 wait no; I actually don't want to know the answer

20:54 bitemyapp: arrdem: you know I work on Korma, got a RethinkDB client started, and have been doing Datomic at work right?

20:54 technomancy: the answer is yes, btw.

20:54 arrdem: technomancy: yeah... sadly that answer is yes.

20:54 bitemyapp: arrdem: there are a number of things you could do to avoid using MongoDB :(

20:54 arrdem: bitemyapp: no I did not. you should teach me to use a DB that sucks less.

20:55 bitemyapp: arrdem: I would be happy to. I should actually finish the Korma Clojure Cookbook chapter

20:55 arrdem: then you could be one of my test subjects for the chapter.

21:47 dobry-den: I read that you should only throw Exceptions for external catastrophies, not for known hazards like user-input error.

21:47 Then what do you do when your library user's input was invalid?

21:48 technomancy: dobry-den: IMO there are places it's fine to throw for user error

21:48 stuff like users trying to access things they don't have permissions for

21:49 I wouldn't do it for badly formatted input though

21:50 dobry-den: technomancy: Compass' compiler produces an error "Cannot determine position of: <user-input>" and I'm wondering how that translates. Do you generally subclass your own Exception named after your library?

21:50 hyPiRion: I think Instaparse throws, actually.

21:51 technomancy: dobry-den: no; definitely don't subclass exception

21:51 use ex-info

21:51 hyPiRion: In general, you just throw ExceptionInfo or RuntimeException.

21:52 dobry-den: thanks

22:57 scanlonman: Hey everyone, I just began 4clojure.com and am on problem 23 (http://www.4clojure.com/problem/23). Basically, the question wants me to reverse a sequence without using reverse or rseq

22:57 My question is -- is that possible to do in a method with only one argument?

22:57 All of the solutions I was thinking of had two arguments with a bootstrap method containing one argument

23:03 Raynes: It is indeed possible.

23:05 brehaut: ,(partial reduce +)

23:05 clojurebot: #<core$partial$fn__4190 clojure.core$partial$fn__4190@23578d>

23:05 brehaut: ,((partial reduce +) [1 2 3])

23:05 clojurebot: 6

23:06 brehaut: ,((partial reduce + 0) [1 2 3])

23:06 clojurebot: 6

23:10 brehaut: scanlonman: ^ is a hint for you

23:10 scanlonman: Thank you!

23:11 brehaut: you might also find http://clojure.org/data_structures contains useful information

23:15 scanlonman: Are there any other recommended guides to learning Clojure? I've mostly just been using 4clojure and googling some methods when I need to find something out

23:15 I've googled around a bit and found the Clojure cheat sheet and Clojure in 15 minutes which were pretty useful

23:15 brehaut: that is the recommended method

23:15 scanlonman: Okay thanks!

23:15 Just need to get in the functional programming mindset :)

23:15 brehaut: the clojure.org website contains a lot of useful information but many beginners find it a bit overwhelmingly terse

23:17 danlentz: brehaut: just like clojure :)

23:17 brehaut: danlentz: i dont buy it. i have to type partial out in full!

23:18 danlentz: I have the hardest time remembering to shorten substring to subs

23:18 brehaut: you can jsut use .substring if you prefer

23:18 Raynes: Nothing wrong with it, in fact.

23:28 danlentz: i come from common-lisp where long symbols like 'multiple-value-bind are the norm

23:29 nice when reading code, excruciating at times to type

23:30 brehaut: doesnt CL also have caaddaaddr

23:31 danlentz: with clojure's terse syntax I find I am able to make mistakes much more efficiently than in C

23:31 CL

23:31 brehaut: i suspect that is familiarity more than anything

23:32 danlentz: y it was a dumb joke I was just kidding

23:32 brehaut: oh ok

23:34 danlentz: regarding CXXX..R I forget how many are defined by the standard. I think it is up to 10 A's and D's

23:34 brehaut: oh really? i thought it was jsut a reader macro expanding it out

23:35 danlentz: You'd have to be quite insane to actually use them, but at times there are a few notable ones like CADDR CDADDR that you find turning up more frequently

23:36 nope they are functions

23:36 brehaut: thats something of a relief

23:38 danlentz: there is a book called let-over-lambda by doug hoyte that goes over the implementation of a very elegant macro that will define the CXR functions to any depth you want

23:39 is really just an example of the macro writing technique, not a suggestion you them in practice

23:39 brehaut: right

23:39 i think ive read a bit of that book. it gets very macros very fast

23:40 danlentz: hoyte does things with macros I never even imagined

23:41 really strange new concepts like 'sub-lexical scope' is one off the top of my head

23:42 it took me several years to digest the whole book -- starting at "I don't understand a damn thing in this book!"

23:56 tsantos: Is there an equivalent to (some pred coll) where it's sorta the opposite so it would be more like (matches? item pred-1 pred-2…)? I'm not sure I'm making this clear...

23:57 coventry: tsantos: Something like (some (every-pred p1 p2 ...) coll)?

23:57 danlentz: tsantos: any?

23:58 tsantos: well, I'm just interested to see of item passes any of the predicates

23:59 (or (string? elem) (keyword? elem) (symbol? elem)) works but I was wondering if there was a simpler way of putting it.

Logging service provided by n01se.net