#clojure logs

2013-01-12

00:00bprM-, will bring you back to where you were before doing M-.
00:02tmciverThose are nice. Now if only I could remember to use them.
00:17technomancynrepl's M-. is kinda broken since you can't do it on a fresh buffer
00:18technomancywho-calls would be nice, but swank's implementation was not very good
00:18headshottechnomancy: upgraded to sun jdk 1.7.0_147, and things seem to work now, i was using sun jdk 1.6.0
00:18frozenlockI miss swank-clojure C-c I :)
00:19technomancyheadshot: weird, 1.6 should work fine
00:20technomancyfrozenlock: I have a WIP to port that
00:21headshotat any rate, this is the bomb. thanks.
00:21frozenlock٩(^‿^)۶
00:22headshotnow see if i can get it to work on osx
00:22technomancyfrozenlock: https://github.com/technomancy/javert
00:22frozenlock"Nothing to see here yet. Move along."
00:22technomancyfrozenlock: no nice client-side UI for it, but operates over stdout
00:23technomancyoops
00:23technomancypushed
00:23technomancyhttps://github.com/technomancy/javert/blob/master/src/inspector/javert.clj
00:27xeqianyone have nrepl's tab completion working for .clj buffers?
00:27xeqionly works at the repl for me atm
00:30xeqihmm, M-tab works
00:30xeqinm, looks like thats how it is suppose to be from the readme
00:31frozenlocktechnomancy: I shall meditate on this. Usually I was just jumping on bean everything I needed to see something.
00:33bprfrozenlock: what was swank-clojure's C-c I?
00:34tomojbpr: this is `C-c I clojure.lang.ISeq`: https://www.refheap.com/paste/5f0da2122eaba374846108061
00:35tomojsupposedly it's navigable, though that never worked for me
00:43bbloomtomoj: thanks again for the help with the reducers stuff. it paid off :-)
00:44bbloomtomoj: the transducers stuff is all polished up and available in this file https://github.com/brandonbloom/fipp/blob/master/src/bbloom/fipp/transduce.clj
00:48frozenlockCould someone explain to me what's the difference between macroexpand and macroexpand-1? They seem to do the same thing...
00:48tmcivermacroexpand-1 only does one level of macro expanding.
00:49frozenlockOh! And I have only have one level... I see...
00:49frozenlockThanks :)
00:49tmcivernp
00:50bbloom,(macroexpand '(-> a b c d))
00:50bbloom,(macroexpand-1 '(-> a b c d))
00:50clojurebot(d (clojure.core/-> (clojure.core/-> a b) c))
00:50clojurebot(clojure.core/-> (clojure.core/-> a b) c d)
00:50bbloom,(clojure.walk/macroexpand-all '(-> x f y z))
00:50clojurebot#<ExecutionException java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.ClassNotFoundException: clojure.walk>
00:50bbloom&(clojure.walk/macroexpand-all '(-> a b c d))
00:50lazybot⇒ (d (c (b a)))
00:50bbloom(> lazybot clojurebot)
00:51bbloomfrozenlock: i think the threading macro is the easiest illustration ^^
00:52tpopeI think it's the worst example ever
00:52tpopeespecially if you're trying to explain ->
00:58technomancywhat HTTP response code would you use for a resource that's not ready yet?
00:58technomancy202?
00:58bbloomtpope: well it demonstrates that macroexpand doesn't walk into subforms, only the first form
00:59headshottechnomancy: 1.1, yeah
01:01amalloyan easier example is probably something like ##((juxt macroexpand-1 macroexpand) '(with-in-str "foo" (read))))
01:01lazybot⇒ [(clojure.core/with-open [s__4498__auto__ (clojure.core/-> (java.io.StringReader. "foo") clojure.lang.LineNumberingPushbackReader.)] (clojure.core/binding [clojure.core/*in* s__4498__auto__] (read))) (let* [s__4498__auto__ (clojure.core/-> (java.io.StringReader.... https://www.refheap.com/paste/8408
01:01amalloybut i had a surprisingly hard time finding a clojure.core macro whose macroexpand is non-trivially different from its macroexpand-1
01:03tpopeamalloy: that's a little better yeah
01:04SgeoOh dear god is someone using clojure.walk/macroexpand-all?
01:26dsyanghey all, my friend and I have decided to buckle up and learn clojure this coming semester in our free time
01:28dsyangit looks like clojure 1.5 is just about to be released, though so I'm not sure if we should use clojure 1.5-RC1 because it's about to be the stable version or stick with 1.4
01:28dsyangthoughts?
01:29tomojI'd go with 1.5.0-RC1, personally
01:29tomojI don't know what would break if anything
01:32dsyangtomoj: thanks! Are there any major features that would change how we would write code? I looked through the changelog on git but honestly the terms don't make sense (yet)
01:33dsyangtomoj: It'd suck to learn one it one way from the books/tutorials online only to learn we should write it another way with 1.5
01:34technomancydsyang: everything in 1.5 is additive
01:34technomancybut the changes are very small
01:34technomancyas long as you avoid stuff written for 1.2 you'll be fine
01:36dsyanghaha that shouldn't be too hard, unless 1.2 was just written a few months ago and development has been blazing fast :P
01:36technomancywell google really sucks at recency
01:36technomancyit will give you lots of out-of-date blagh posts
01:37brainproxydsyang: the Clojure Programming book is great, btw
01:39dsyangtechnomancy: yea I've begun to notice the dates on all the posts... too bad SIO doesn't consider dates
01:40dsyangSEO*
01:41dsyangbrainproxy: thanks for the tip! Any specific reason why it's so great or is it one of those everything-about-it-is-great
01:41brainproxydsyang: it's the best O'Reilly book I've ever read
01:42brainproxymy coworker and I decided to take the Clojure plunge last May
01:42brainproxywe (carefully) worked through the book and all the examples in just under 4 weeks, and came away feeling confident that we had a decent grasp of how to start using the language
01:44dsyangNice
01:44brainproxyit didn't turn us into clj ninjas, but was a great learning tool and I still refer back to it from time to time
01:45dsyangIf you don't mind me asking, what kind of programming background did you guys have going into the book?
01:45brainproxytwo pretty different backgrounds
01:45brainproxyfor me: JavaScript, some Python and Ruby
01:46dsyangMy friend and I are coming at it well-versed at ML-like functional languages but have had not lisp and very little JVM experience
01:46brainproxyfor him: C/C++ freak, strong Java experience
01:47brainproxyneither of us had much functional experience, properly speaking, though I was already favoring a functional style in my JS/coffee programming
01:48brainproxyI had almost zero Java experience before jumping into Clojure, and it hasn't been that bad
01:48brainproxycertainly Leiningen shields you from having to deal with a lot of the Java tooling stuff, e.g. Maven
01:49dsyangnice, yea I took a look at http://jrheard.tumblr.com/post/40024238467/getting-started-with-clojure earlier
01:50dsyangsounds like clojure has some good tooling support
01:50brainproxythat post is okay, though getting started w/ lein can be easier than he suggests
01:50brainproxyi mean "even easier"
01:50dsyangoh?
01:50brainproxyhttp://news.ycombinator.com/item?id=5028165
01:51brainproxyif you're on linux/mac, just wget or curl the master script
01:51brainproxymake it +x and on your path
01:51brainproxythen when you run it the first time, it will bootstrap itself
01:51dsyangwoah
01:51brainproxyas long as you have Java installed already, you're good to go
01:52dsyangnice thanks for that link!
01:52brainproxysure thing
01:53dsyangyou guys didn't have to use IDEs right? I mean, I've heard clojure doesn't need them, but not sure is it easier with IDEs
01:53brainproxywhat editor do you use currently?
01:55brainproxythere is a good plugin for Eclipse called "counterclockwise", but a lot of devs find they get by just fine with Emacs or vim
01:56dsyangemacs
01:56hiredmanhttp://chart.apis.google.com/chart?chxl=0:|0|138|276|414|552|690|828|1:|Other+%E2%80%94+10%25|Clooj+%E2%80%94+3%25|Command-line+REPL+%E2%80%94+26%25|Vim+%2B+vimclojure+%E2%80%94+23%25|Textmate+%2B+textmate-clojure+%E2%80%94+3%25|NetBeans+%2B+Enclojure+%E2%80%94+1%25|IntelliJ+%2B+La+Clojure+%E2%80%94+11%25|Emacs+%2B+SLIME+%E2%80%94+52%25|Emacs+%2B+inferior-lisp+%E2%80%94+6%25|Eclipse+%2B+Counterclockwise+%E2%80%94+18%25&amp;chxs=0,000000,1
01:56dsyangno SLIME though
01:56brainproxyI'm getting a lot of mileage out of Emacs 24 (http://emacsformacosx.com/) together with the "clojure-mode" and "paredit"
01:57dsyangyea I'm using emacs 24 too
01:57hiredmanhttp://cemerick.com/2012/08/06/results-of-the-2012-state-of-clojure-survey/ from the state of clojure 2012 survey
01:57dsyangjust spent all day rewriting my .emacs to not use emacs-prelude
01:57brainproxydsyang: you don't by chance happen to be using bbatsov's "prelude" for Emacs 24?
01:57dsyanghiredman: your link is giving me a 404 :(
01:58dsyangthat's what I was using yes
01:58brainproxydsyang: then you're good to go
01:58brainproxybbatsov/prelude has clojure-mode and the rest of the goodies you need already included
01:58hiredmandsyang: which one? if it is the long one then most likely whatever your url clicker is isn't recognizing the whole url
01:58brainproxyhiredman: any chance you could run that link through bit.ly?
01:58dsyangthe long one, I'll try again
01:59hiredmanbrainproxy: just go to cemericks post if you can't be bothered to copy and paste the whole url
01:59hiredmaneverything is there
01:59brainproxyhiredman: sure, it's just my IRC client makes it cumbersome to copy/paste long things that span multiple lines
01:59brainproxybut I'm on the post now
02:00hiredman5NS
02:00hiredmanpardon me
02:00dsyangbrainproxy: I _was_ using prelude, but it had too much stuff I didn't need and didn't understand so I took it out and added in just the stuff I wanted
02:01brainproxydsyang: i see, well the main things you want are clojure-mode and paredit
02:01dsyangclojure-mode I have, what's paraedit?
02:01brainproxydsyang: http://emacswiki.org/emacs/ParEdit
02:02brainproxyhttp://www.emacswiki.org/emacs/PareditCheatsheet
02:02dsyangah right, my b
02:05dsyangwhat are y'alls thoughts on SLIME?
02:05bprdsyang: all you really need to do to get emacs working is follow the instructions here: https://github.com/kingtim/nrepl.el
02:06bpr(after setting up leiningen)
02:06brainproxythe general consensus seems to be that nREPL is the future
02:06brainproxyi'm still using lein-swank and swank-clojure to good effect (which makes use of SLIME as embedded in clojure-mode)
02:07bprdsyang: if you choose to use nrepl.el take note of: https://github.com/kingtim/nrepl.el/issues/187
02:09Raynesbrainproxy: Get that festering infection out of your emacs immediately.
02:10dsyangbpr: thanks for the heads up, I think i will go with nrepl, am I correct in that networked repls like this are used so clojure doesn't have to restart java everytime you want to evaluate something?
02:10Raynesdsyang: It's so you can have a REPL inside of Emacs, over a network, etc.
02:10RaynesBut yes, you don't have to restart every time.
02:10bpressentially. Lisps typically have a REPL-oriented development flow
02:11dsyangah I see
02:11Raynesbpr: That issue looks to be fixed.
02:11bprkeeping the REPL workflow is the primary motivation for nrepl/slime/etc.
02:11bprRaynes: on master
02:11Raynesbpr: Yes. I use master.
02:11bpri don't believe it has been released to marmalade yet
02:11bprah
02:11RaynesEverybody should use master. Master is great.
02:12Raynes:p
02:12bbloomlife without a repl isn't worth living...
02:12bpr^
02:12frozenlock^
02:12bbloomhow do i teach one of the bots to occasionally say that?
02:12Raynesbbloom: If you ever find yourself without a REPL, I promise to end it quickly.
02:12dsyangmoreso than other REPL-enabled languages? I know when I write python I figure out the function calls in a REPL then write code
02:12brainproxyRaynes: i tried nREPL a few times in recent months, it felt clumsy to me compared to the experience w/ the swank stuff
02:12bbloomRaynes: you're starting to scary me buddy
02:12bbloomscare*
02:13Raynesdsyang: Clojure (and most Lisps) are designed in such a way that you can generally write your whole program in a repl if you want.
02:13Raynes;)
02:13bprdsyang: yes. it's commonly the case that you can write an entire program/feature without shutting down the program
02:14SgeoThis makes me feel bad for trying to like Racket
02:14SgeoDrRacket is a bit too much... "restart it if you want to change the code"
02:14brainproxywhy?
02:14clojurebotwhy not?
02:15SgeoAnd Geiser (for Emacs) sort of mollifies this I guess, but even there, exceptions are fatal
02:15bprhere's a cool demo of what a repl can enable: https://www.youtube.com/watch?v=MTxNnYfWHOw
02:15Sgeo(like in Clojure, but unlike CL)
02:15bprthough that's about clojurescript rather than clojure... similar enough
02:15bbloomi prefer to restart my repl right before any major code push. i generally don't restart it when i'm working locally, but if i move around namespaces or make a lot of changes, and i want to push to a public repo. then i restart the repl to make sure that the code that's actually in the files loads correctly
02:15bbloomoften, i don't even restart my repl when i do that, i just open a second repl and verify there
02:16brainproxyi find I use the REPL to spot-test the functions I've defined in disk-backed .clj files
02:16RaynesGood heavens, so many new changes in nrepl.el!
02:16frozenlockbpr: And now my last productive drop for the night is gone. -_-
02:16RaynesI haven't updated in ages, so this is exciting.
02:16brainproxythat is, I have lein-ring auto-reloading my namespaces
02:16bprfrozenlock: haha
02:17brainproxyand the REPL server is embedded in my web app
02:17frozenlockWait.. is this where the clojure conj videos are? Blip didn't change since last year.
02:18dsyangwow. Thanks for all the great info guys!
02:18brainproxynowadays though I'm starting to put more and more functions inside Datomic
02:18bprfrozenlock: it looks like it is. though i'm not involved with posting clojure vids
02:18dsyangespecially the clojure/emacs stuff
02:18brainproxywhich introduces ... other issus
02:18brainproxybut sure it fun :D
02:18brainproxy*is
02:18dsyangwhat about clojure/vim integration? I ask because my friend that I'm working with is a vim-gal
02:18frozenlockbrainproxy: is datomic open source yet? :)
02:18brainproxyfrozenlock: no... wish it was, maybe one day
02:18bpri guess the new vim hottness is foreplay
02:19Raynesdsyang: vim-foreplay.
02:20tpope;)
02:20RaynesAnd for the sake of the universe and all things holy, don't make any jokes to her about it being called foreplay. She'll never forgive tpope.
02:20brainproxyanyone using vim-foreplay together with angular-strap?
02:20tpopeI'm going to rename it
02:21dsyanghahaha
02:21dsyangno worries, thats one thing I'm not going to mention
02:22jlewisi'm curious, do you vim-foreplay users have a way to keep execution output around in a buffer somehow?
02:22tpopeI spent like weeks fretting over the name, then picked foreplay.vim as a last minute impulse
02:22ToxicFrogWhy did you pick that?
02:22jlewiseven though it's way better of a vim plugin than vim-clojure, i do miss having an extra buffer for the output.
02:22tpopejlewis: I've got a solution like 80% of the way there
02:22jlewisooh, that's exciting!
02:22tpopejlewis: there's a github issue for it. feel free to chime in
02:23tpopeToxicFrog: foREPLay
02:23jlewisi'll check it out
02:23ToxicFrogoh
02:23tpope2am grep repl /usr/share/dict/words
02:23tpopeHOLY SHIT THAT'S PERFECT
02:23tpopecommit, push
02:23brainproxy:D
02:24tpopefireplace.vim was my working name
02:24tpopebecause foreplay isn't in /usr/share/dict/words on os x
02:25dsyangshame on os x
02:25Raynestpope: Fireplace is nice, dude. Why did you use foreplay?
02:26tpopeyou know how your judgement starts to get weird around 2am?
02:26tpopemaybe that's just me
02:26RaynesNo. I wrote laser entirely at 2AM.
02:26RaynesI never do anything unless it is 2AM.
02:26tpopewell I can still code at 2am
02:27tpopealso, change 2am to wakeup time + 16 hours
02:27tpope18 hours
02:27dsyangI think I've committed more between the hours of 2-6AM than 9-5...
02:28Rayneshttps://github.com/Raynes/laser/graphs/punch-card
02:29tpopehttps://github.com/tpope/vim-foreplay/graphs/punch-card *shrug*
02:30tpopenot sure how useful that is, I rebase like nobody's business
02:32bbloomhttps://github.com/brandonbloom/fipp/graphs/punch-card <-- also got a nice 2am spike
02:32bbloomi like this comparing sleep habits game, it makes me feel slightly more like a human
02:36dsyangSpeaking about sleep habits, I need to fix mine before school starts. Thanks for all the help guys!
02:36bbloomi'm sure somebody over in #haskell can lul you to sleep with a lecture about monads
02:37dsyangbbloom: won't help, I'd be fascinated
02:55bprtomoj: SLIME/clojure-swank's C-c I is indeed very neat!
02:57bprtomoj: do you happen to know what the name of the emacs function that implements that is?
03:13amalloybpr: C-h k C-c I, tada
03:14bpramalloy: i don't have slime installed... was trying to avoid installing it
03:22amalloybpr: http://common-lisp.net/project/slime/doc/html/Inspector.html is on the first page of google results for `emacs "C-c I"`
03:22bprhaha
03:22bprtouche!
03:22bprthanks :)
03:23frozenlockhttps://www.youtube.com/watch?v=xyGggdg31mc 40min... to learn that the code will be proprietary :(
05:06tomojhttps://www.refheap.com/paste/66b52069e8fd888cf3f32d457
05:08bbloomtomoj: hmm interesting. what are you using that for?
05:10tomojmostly experimenting with it for ring client middleware
05:14tomojbut I also imagine e.g. writing combinators for reaching into a dominion game state
05:17tomojsometimes I think about improper combinators and wonder if I just want factjor instead
05:17bbloomtomoj: cool. i'm interested to see how it turns out! i really like the idea of working with "paths" in the style of update-in, get-in, assoc-in
05:17bbloomwhich i assume is pretty much all you're doing internally
05:18bbloomit's a surprisingly effective strategy that has some of that magic feel when i first groked the utility of file systems as a programming model
05:19bbloomi hope that you get some cool results! i'm off to bed
06:29juxovechi, is there anything like Acid-state (http://acid-state.seize.it/) for clojure?
06:30juxovecI mean some kind of "database" which seems like normal data structure, where I can do all functions map, filter and so on but is serialized to HDD automatically
06:35sandbagsanyone know of a documentation app for the iPad that has the Clojure reference stuff in it?
06:35sandbagsi have a web link to the clojure docs pages but it's not ideal for searching/browsing
06:36aperiodicwhy not load up the cheat sheet? that seem like it'd be more than handy enough
06:36sandbagsmeh
06:36sandbagsit's okay
06:37sandbagsbut it'd be nice to have something optimised for doc browsing
08:24gmontouCan anyone recommend a good emacs color theme?
08:33Raynesgmontou: I use tomorrow-night.
08:33Raynesgmontou: Solarized is also nice.
08:54hyPiRionI use solarized light and find it delicious
08:54hyPiRionThough I'm a "I use white instead of dark"-kind of develpoer
08:56babilengmontou: I've settled on wombat (on emacs, i tend to use molokai with vim), but there are plenty and you should try a few.
09:06scottjbabilen: tried my wombat+ for emacs?
09:07scottjbabilen: http://jaderholm.com/color-themes/color-theme-wombat+.el if you're interested
09:07babilenscottj: No, I did not. But I /very/ rarely use emacs these days. Either way: Where can I find it? And what is "+" about it?
09:07babilenmerci
09:07scottjbabilen: just a lot more faces than other wombat themes
09:08babilenscottj: Is it on elpa?
09:08scottjbabilen: yeah it's an old version but good enough
09:12hyPiRionOh, seems like Halloway pushed up Clojure RC2 just now.
09:13hyPiRion1.5 that is.
09:21babilenhyPiRion: I don't see it on maven.org -- where did you find it? changelog somewhere?
09:21hyPiRionbabilen: Oh, on github
09:22babilenAh, right :)
09:22sandbagstpope: ping
09:32hyPiRionheh
10:21tpopesandbags: pong
10:46sandbagstpope: hi there ... wanted to talk about foreplay.vim if you've a minute?
10:48bluebat,(+ 1 1)
10:48clojurebot2
10:49tpopesandbags: shoot
10:50sandbagstpope: so, first q... should it work okay with MacVim?
10:50tpopeyes
10:50sandbagsgood start... okay so i updated to the latest MacVim last night, then followed the install instructions for foreplay with pathogen
10:51sandbagsstarted lein repl in my project then opened a .clj file, used :Connect which seemed to work, but :cq seemed to blow MacVim up
10:51tpopeblow up how?
10:51sandbagshowever it died without the usual OSX crash reporter... MacVim just vanished
10:51sandbagsnot sure if you use OSX, but there was no diagnostic report in ~/Library/Logs/Diagnostic Reports either
10:52sandbagsalthough, apparently, Vim may log things somewhere else... but i've struggled to figure out where so far
10:53tpopetry from the command line. symlink mvim to vim, then run that vim
10:53tpopeyou'll at least clearly see a crash
10:54sandbagsnot sure i follow... symlink mvim -> vim right? Does that change how mvim works?
10:54tpopeit makes it spawn in the terminal
10:54sandbagsgotcha
10:56sandbagsokay so it still dies, but there's nothing printed to the console
10:56tpopedoes it look identical to what happens with ;q?
10:56tpopewait, what command are you running?
10:56sandbags";q?" is a vim command? sorry i'm not a Vim expert
10:57tpope:q is how you exit vim
10:57sandbagsah the ; was what confused me
10:57tpope: not ;
10:57sandbagsyes it's as if i had quit
10:57sandbagswith :q
10:57tpopeso what are you typing, exactly?
10:58sandbags":cq" have I done something daft... i thought that was the command to execute stuff in the repl
10:58tpopeno colon
10:58tpope:cq exits vim
10:58sandbagsah damnit
10:58sandbagsyes of course, there's no ":" in your instructions
10:58sandbagsbrain fault
10:58sandbagssorry about that
11:01sandbagsokay, working now ... of :cq i didn't put together that it would do the same as :q ... feel daft now :)
11:02tpopethat's an unfortunate coincidence
11:02tpope:cq is how you quit with a nonzero exit status
11:02sandbagsah
11:04sandbagsso Eval% is working great, the cq console is a bit baffling so far ... do i need to read up on Vim "q:" to understand it?
11:05tpopeyeah
11:05tpopeor start with cqp
11:07sandbagsthx
11:41technomancynrepl.el has as many open issues as leiningen, yikes
12:00dbushenkocemerick, hi! have you a minute? one question about Clojure Programming
12:01dbushenkois anyone here?
12:03cemerickdbushenko: shoot
12:05dbushenkogreat!
12:05dbushenkoI'm helping in translating Clojure Programming to russian
12:05dbushenkoand have the follwing misunderstanding:
12:06dbushenkop.21, sentence: "Vars are defined in Clojure using the def special form, which only ever acts within the current namespace."
12:06dbushenkowell, as I see it, everything what is defined in Clojure, is immutable
12:06dbushenkoso the symbol which I define with def is immutable, not variable
12:06dbushenkoisn't it?
12:07cemerickdbushenko: namespaces are mutable
12:08cemerickWhat def does is intern (a.k.a. map) a symbol to a var within *ns*
12:08dbushenkoso what is "var" in general?
12:08cemerickdbushenko: re: translation: are you working with O'Reilly?
12:09dbushenkono, the translator is working. I'm just helping him, correcting mistakes and so on
12:09cemerickdbushenko: A var is one of Clojure's reference types; it defines a stable, global identity.
12:09cemerickah
12:09dbushenkoso what about def? does it really define a var?
12:10cemerickYes, that is its purpose.
12:12dbushenkohmmm... thanks... I have to read the documentation more precisely
12:12cemerickdbushenko: vars are covered in depth in...chapter 4 IIRC
12:13dbushenkoaha, I see. but the differ from reference types such as ref or atom
12:14dbushenkothey can be rebound, but not changed, aren't they?
12:17cemerickdbushenko: each reference type has its own particular change semantics
12:17cemerickvars can be redefined "forcibly" (via def) or atomically modified (via alter-var-root) or modified in a thread-local way (binding)
12:19dbushenkoso when I define (def a 1), "a" is really a variable?
12:21borkdudedbushenko variable as in subject to change, yes
12:22dbushenkothere is some global misunderstanding, I think. We don't use def-ed vars as variables, say in Java
12:22dbushenkowe don't change them, we just read them
12:23dbushenkothat's why I'm trying to understand whether I can call them "variables" at all
12:23dbushenkosince they are (usually) immutable
12:26AdmiralBumbleBeevariable implies it could be mutated
12:26AdmiralBumbleBeenot that it _must_ be
12:27AdmiralBumbleBeeand for that matter, it simply means a value in modern parlance
12:29dbushenkoAdmiralBumbleBee, so you think, def-ed vars -- are "variables" in the meaning that they could be mutated?
12:30cemerickdbushenko: you shouldn't ever use the word for 'variable' to refer to any clojure reference type
12:30cemerick'variable' implies unrestricted arbitrary mutation
12:31dbushenkoyeah! that's what I really wanted to hear from you! thanks!
12:31AdmiralBumbleBeedbushenko: in clojure world, no
12:31AdmiralBumbleBeesince a var is something specific
12:32AdmiralBumbleBeeI thought I was in another channel
12:32cemerick'var' is a technical term, and should probably be used literally
12:34dbushenkocemerick, great, thanks for your explanations! :-)
12:49dbushenkodoes clojure have any "operator" or all are functions?
12:51borkdudedbushenko clojure has primitives
12:51borkdudedbushenko like let, fn, def etc, they are built-ins
12:52dbushenkobut I can redefine them
12:52borkdudedbushenko and a lot of core functions like + delegate to thing in RT.java
12:53borkdudedbushenko you can't redefine primitives like let, but you can redefine vars, even in clojure.core
12:53dbushenkowell, looks like all of them are defined with "defn"
12:53dbushenkoeven "defmacro"
12:53borkdudedbushenko I mean you can't redefine def itself, but you can redefine what is deffed
12:56borkdudedbushenko with primitive, I actually meant the special forms here: http://clojure.org/special_forms
12:57dbushenkolooks like you are right
12:58dbushenkobut they aren't operators, they are special forms
13:08jmortonDoes anyone have suggestions for a good problem to solve (after finishing the koans and project euler)?
13:10ravsterhello all
13:10dbushenkotry implementing a multithreading version of the 'find' utility. this is nice to see Clojure power in action
13:11jmorton dbushenko: ah, good idea… thanks :)
13:12dbushenkojmorton, btw, ping me if you will get a comparable with 'find' performance
13:12dbushenkoI could reach the performance of my version of find only ten times slower than the original :-(
13:14jmortonalrighty, I'll see what I can come up with today and tomorrow… I'll ping you via github if that's okay
13:14dbushenkogreat!
13:29hitekihi
13:49thearthurlein new is failing for me today complaining about missing dependency lein-newnew
13:49thearthurbut only today? not yesterday?
13:50thearthur$ lein new hello Could not find artifact lein-newnew:lein-newnew:jar:0.3.7
13:51thearthur(lein2 that is)
13:55thearthurnvermind, found the liein issue on this :)
14:03lunamystryHello, I am new to clojure and emacs and I am trying to quickly get going with the brepl .
14:04lunamystryI am actually looking for something like lein cljsbuild auto
14:04lunamystrythrough the brepl though
14:05lunamystryfor some reason lein cljsbuild once/auto just slows my system down and I can't run anything else when its busy running
14:15ivanlunamystry: you might want to nice -n 19 the thing, Closure Compiler uses all your cores
14:31lunamystryI will try it now ivan, I just realised that ClojureScript up and running recommends Oracle's jdk over openjdk so I just installed that
14:32ivanI can't imagine it making a difference for ClojureScript
14:45pppauli'm using lein ring, and when i do `ctrl + c` i still have a program running in the background...
14:46pppaulhow am i supposed to go about killing my server?
14:47lunamystry@ivan thank you for your suggestion. It seems to have worked.
14:48lunamystryI have firefox and lein cljsbuild auto running and clementine running. THIS could not happen before
14:48weavejesterpppaul: ctrl-c should kill it. Which operating system are you using?
14:50pppaulubuntu
14:51pppaulubuntu 12.10
14:52weavejesterpppaul: Odd. Java processes should handle interrupts okay.
14:52weavejesterpppaul: Have you set a :destroy function that might be taking a while?
14:54pppaulno :destory
14:54pppaulno :init
14:55pppaulmaybe i should use those
14:55weavejesterpppaul: Any background threads that might have been started which would cause the app to hang?
14:56pppaulrabbitmq thread
14:57weavejesterpppaul: Maybe that's the issue
14:57pppaulok, i'll look into it (have to fix that code anyway since it's maxing out my cpu)
14:57pppaulthe :destory should kill that thread, i'm guessing
14:58pppaulany special stuff about :destroy?
15:03yogthosweavejester: ping? :)
15:03weavejesteryogthos: what's up?
15:04yogthosweavejester: I was thinking when defining routes, you often end up doing something like (GET "/foo" [bar baz] (handle bar baz))
15:04weavejesteryogthos: That's true
15:04callenwhy does DropWizard have so much...crap?
15:04yogthosweavejester: would it make sense to allow defining routes by doing (GET "/foo" handle) and use whatever the function defines as the destructuring
15:05yogthosI imagine that would involve a bit of macro magic :)
15:05weavejesteryogthos: It's an interesting idea
15:06weavejesteryogthos: I'd need to think about it.
15:06yogthosweavejester: seems like it shouldn't clash with any existing functionality
15:07weavejesteryogthos: It does add an new syntax though
15:07yogthosweavejester: yeah it's a bit different from all the other definitions where it's params then body
15:08weavejesteryogthos: And you can already do something like (defn handle [{{:keys [bar baz]} :params}] …)
15:08weavejesteryogthos: and then (GET "/foo" [] handle)
15:08yogthosweavejester: yeah I guess that isn't too bad, and more idiomatic
15:09yogthosweavejester: was just an idea :)
15:09weavejesteryogthos: Ideas are good
15:09weavejesteryogthos: There's certainly room for improvement
15:10yogthosweavejester: I think it's always good not to rush features in, once people start using something it's impossible to get rid of :)
15:10headshot*cough* rails
15:10yogthos:P
15:10weavejesteryogthos: That's my thought too. However, if you have an ecosystem made out of small libraries, you can always create a new library to try something out
15:11yogthosthe worst thing is when features start interacting in funny ways and then you have the extra mental overhead of keeping track of what does what
15:11weavejesterWhich reminds me about a pull request to Ring someone posted.
15:11yogthosweavejester: what'd they add?
15:11weavejesteryogthos: https://github.com/ring-clojure/ring/pull/36
15:11weavejesterNo description
15:12yogthosyeah first thing I noticed :)
15:12weavejesterGoing to recommend they try it out in a library first.
15:12yogthosyup
15:13yogthoslooks like middleware for supporting locales
15:13yogthosat least it comes with tests, that's a bonus
15:18muhooif you kick off a future to do something for side-effects (i.e. sending an email), how long does java keep it around before gc'ing it?
15:19muhoothe result in this case could be a fairly portly object
15:21callenmuhoo: implementation/tuning specific
15:22callenmuhoo: I'm not trying to be an asshole, you need to be specific.
15:22muhoowell, what i'm curious about is, if "forever, so don't do that" is the correct answer
15:25gfredericksso when I `lein trampoline cljsbuild repl-listen` I get a "listening on port 9000" message and then a report that clojure can't find cljsbuild/repl/listen.clj on the classpath o_O
15:26gfredericksI feel kind of crazy because I swear this worked yesterday
15:33JulioBarrosHaving problems getting dependencies for cemerick's friend. Am getting "Get Authorization Required" when fetching guice. Any ideas?
15:46muhooJulioBarros, maven central problem? google maven archive problem?
15:47muhooguice smells like a google thing
15:47JulioBarrosmuhoo: I don't know where the issue is.
15:47muhoogfredericks: try without tramoline?
15:49muhooJulioBarros: my guess would be that whatever website is hosting guice is screwed up
15:50muhootrampoline often gives me "can't find foo on classspath" errors. i'm kind of used to just beting on it until it works, or just not using trampoline if i'm in a hurry
15:51ravsterI have a map that returns a list. I"m trying to do an unquote-splice to get all the elements of the list out of the list, but am getting unbound-fn errors. what am I doing wrong?
15:52xeqiJulioBarros: I also get that after clearing my ~/.m cache. looks like someone messed up the guice-maven repo
15:53xeqihopefully it'll get fixed sometime, but I don't hold my breath for it to happen today
15:53JulioBarrosxeqi: Do you have a workaround? The friend project.clj has some comments but am not sure what to do about it.
15:53hiredmanwe've had really bad experiences at work with the guice maven artifacts
15:53hiredmane.g. multiple mirrors serving slightly different artifacts, etc
15:54JulioBarros ; the openid4java artifact refers to a now-disappeared guice repo that
15:54JulioBarros ; was previously hosted via google code svn :X
15:54JulioBarroshiredman: yeah the project file has this comment -
15:55JulioBarrosright above the dependency that I believe is failing ... :(
15:55xeqifor my project just using workflows/interactive-form I can add :exclusions [com.google.code.guice/guice] and the tests pass
15:55xeqibut since the comment refers to openid, I think anything in that workflow namespace might not
15:56callentechnomancy: I see your coworkers read logs.
15:57muhoocemerick was going to split openid out at some point
15:58xeqiah, I see the latest project.clj added a different repo for guice
15:58xeqiI think that was suppose to be released as 0.1.3 soon
15:59xeqiJulioBarros: I would expect something like https://www.refheap.com/paste/8472 to work fine
16:00xeqiwith the exclusions and explicit guice dependency
16:00JulioBarrosxeqi: Actually yes, I just tried that and it works for me. Thanks!
16:27e_svedangdoes anyone know if clojure.tools.trace/dotrace works in Clojure 1.4 ?
16:58jjl`hi all, i'm trying to implement an oauth server. does anyone have any experience with libraries that could assist?
17:35kd4joadoes anyone know if it is possible to use slime with clojure-mode 2.x in emacs? if not, how do I go back to 1.x after upgrading using package.el?
17:43technomancykd4joa: you can do it; just install slime-repl from marmalade, launch a swank-clojure server, and run M-x slime-connect
17:44kd4joaI've got that working, but can't interact with the repl from a clojure-mode buffer (C-c C-k doesn't exist, C-x C-e complains about a missing variable)
17:44technomancykd4joa: oh, you'll also need to enable slime-mode inside clojure-mode
17:45kd4joaah yes. of course. thanks! I missed that
17:46technomancyshould probably document that somewhere
17:50kd4joano problem. I should have know that.
18:25tbaldrid_is there a way to pprint records without having them print out as hashmaps
18:25tbaldrid_?
18:26hyPiRiontbaldrid_: You can define a print-method for them
18:26tomojbut pprint won't use print-method by default, will it?
18:26tbaldrid_yeah the only thing is that I have about 20 of them.
18:26tbaldrid_println prints them correctly
18:27hyPiRionoh right
18:27bbloomtbaldrid_: give my new library a try! https://github.com/brandonbloom/fipp
18:27tbaldrid_lol, I was just at the github page
18:27tbaldrid_I'm about to give it a try
18:27tomojI still don't even know how to extend pprint dispatch
18:28bbloompublished it yesterday and @puredanger asked for records, so i added them. only took me 5 minutes
18:28bbloomtomoj: yeah, it's a pain
18:28hiredmanbbloom: ooooh
18:28bbloommy lib is much easier to extend, but i haven't fully documented how nor have i completed the extensibility story that i really want to have
18:28bbloombut i'll take simple defmethod patches in the meantime
18:29bbloomhiredman: oh yeah, you were interested in that lib :-) check it out!
18:30bbloomtbaldrid_: you can see how easy it is to patch by looking at edn.clj
18:30bbloomand let me know how it works out for you
18:37tbaldrid_bbloom: it works great! but I have fairly long class names, where should I go to either a) remove the namespace from the classnames, or b) indent by only 2-4 chars?
18:37bbloomtbaldrid_: https://github.com/brandonbloom/fipp/blob/master/src/bbloom/fipp/edn.clj#L32
18:37bbloominstead of :align, you can use :nest 2
18:38bbloomyou can just defmethod over it for now
18:39ibdknoxbbloom: have you tried this in CLJS at all? :)
18:40ivanbbloom: thank you for printing \n even on Windows, please resist the \r\n infidels
18:41bbloomibdknox: no, but it shouldn't be hard to port. although i do depend on reducers and finger-trees
18:41ibdknoxI thought someone added reducers to cljs
18:41bbloomibdknox: edn.clj is the only really jvm specific stuff because the defmethods are the java interface names
18:41bbloomibdknox: maybe they did, i just didn't look yet
18:42bbloomivan: i'm a show-whitespace sort of guy. the windows users can deal with it.
18:42ivantypo https://github.com/brandonbloom/fipp/blob/master/src/bbloom/fipp/printer.clj#L97
18:42ibdknoxbbloom: yeah they did: https://github.com/clojure/clojurescript/blob/master/src/cljs/clojure/core/reducers.cljs :)
18:43bbloomivan: fixed
18:44tomojis it unsafe to (init-proxy (get-proxy-class bases) mappings) ?
18:44tomojsince this skips some stuff that proxy does
18:44bbloomibdknox: nice. and it looks like wagjo ported finger-tree
18:44tomojlike e.g. "remember the class to prevent it from disappearing before use"..
18:45bbloomibdknox: the algorithm needed a double-list (2-3 finger tree) for the pruning bounded buffer
18:45tbaldrid_bbloom: cool stuff, I re-implemented IRecord's print for my uses, and it works like a charm
18:45bbloomawesome!
18:46bbloomi hope to be able to make it more configurable without having to copy paste & edit method definitions
18:46tomojcould you maybe restrict the print length and level based on the computed layout?
18:46bbloommy plan is to allow namespaced node types, so you could have ::edn/break or something that would be a nest or align based on your preferences
18:47hiredmantomoj: there were issues where the class generated by proxy would get gc'ed before it was used
18:47bbloomtomoj: print length meaning number of items printed in a collection?
18:47tomojyeah, and level the depth
18:48tomojit seems like desirable values for *print-length* and *print-level* tend to vary for varying data, but maybe if you can decide when to bail out based on looking at where the stuff would render, you can avoid fiddling with their values
18:49bbloomibdknox: i'm trying to avoid manually porting all my libs to cljs, instead im trying to just isolate the jvm code. i'm working on a big cljs project, but doing 99% of the development on the JVM and just sending data to the client to do rendering. my only fear is that perf or file size will be a surprise in the browser, but other than that, it's been really pleasant to have this tiny kernel in the browser and be able to do all my work server side. i
18:49bbloom think i'll be able to even do the opposite, where the browser mirror's it's data back to the server and then broadcasts it back down to other browsers for simultaneous multibrowser testing :-)
18:49bbloomtomoj: yeah, i don't have print-length or print-level yet, unfortunately
18:49bbloomthey weren't covered in the literature, although they should be straightforward extensions
18:49tomojwell, they kind of suck anyway
18:50bbloomi was just so mentally exhausted from parsing all that monad mumbo jumbo :-)
18:50tomojfor example, *print-length* 10 might be good for vectors of small ints, but for vectors of huge maps..
18:50ibdknoxbbloom: sounds like some neat stuff
18:50tomojor for a cycle of length 2
18:50tomojthough, nothing we can do about that unless we define a cycle seq type, I guess
18:51bbloomtomoj: again, i decided to punt on those options until i had some time to think about the extensibility and configuration story
18:51bbloomif i can help it, i'd like to avoid a big bag of dynamic vars
18:52bbloomi'd rather have a small map of expansions that get merged in before execution, so that bits and pieces can be customized easily
18:52tomojyeah
18:53tomojhiredman: so if you don't use proxy, you'll maybe experience those issues?
18:58bbloomit's those damn interfaces in clojure core that are driving me nuts! i wish they were protocols
18:58bbloomthey make compat really hard, since you have to extend interfaces at deftype time
19:04bbloomthey also make the extend function practically useless, and that's a real shame, b/c extend is awesome
19:07hiredmanI think hugod was working on a macro that would take an interface and use it as a the basic of protocol (instead of generating one)
19:08hiredmanwhich would not completely solve that, but would be a place to start in "protocolizing" a lot of core
19:14ivanhuh what
19:14ivanuser> (require '[bbloom.fipp.edn :refer (pprint) :rename {pprint fipp}])
19:14ivanIllegalAccessError consl does not exist clojure.core/refer (core.clj:3839)
19:16ivanno doubt I'm having some major PEBKAC and should go sleep
19:18yedianyone know of any music analysis software/libraries
19:18ivanoh, this is what I get for running data.finger-tree master with its lack of consl
19:23bbloomivan: ah
19:23bbloomyeah, that confused me. the released version has consl but it was renamed to conjl
19:23bbloomivan: is there a reason your on master?
19:23ivanno good reason
19:24bbloomivan: heh well then it's not a problem :-)
19:35a|idoes clojure play well on app engine?
19:37technomancybbloom: are you trying to subtly imply that part of the point of fipp is that it doesn't use cl-format? =)
19:38technomancyalso, I have a project called ffip, so I keep reading it as that
19:38bbloomtechnomancy: the real motivation was that i wanted a custom pretty printer for a particular data pattern i had and i had NO FUCKING CLUE how to get pprint-dispatch or cl-format to do what i want
19:39bbloomtechnomancy: heh, sorry about the name similarity :-)
19:39bbloomalso, i wanted to pretty print CSS too :-P
19:39technomancyit happens =)
19:40bbloomand man, it's nice to not have to wait for a pprint of a large structure
19:40bbloomsometimes, i'd pprint something and then 3 seconds later ^c and add a (take 5) :-P
19:40bbloomor a (select-keys ...
19:41bbloomnow i get output immediately and my ^c lets me scroll up and see the first few lines
19:45a|iwhich web framework in clojure is the most full featue one?
19:46a|ithis question i out of date: http://stackoverflow.com/questions/3325033/comparison-of-clojure-web-frameworks
19:46bblooma|i: i think you'll find that the clojure community considers "full featured" to be a miss feature
19:46bbloomer misfeature*
19:46a|ibbloom: why?
19:46a|ibbloom: why do I have to create my own user system?
19:47bblooma|i: you don't
19:47bbloomhere's a popular one: https://github.com/cemerick/friend
19:47a|ibbloom: by full feature I meant something with good plugin support.
19:48bblooma|i: the standard Ring stack has strong middleware support
19:49a|ibbloom: is noir built on top of ring?
19:49bblooma|i: as far as i know, everything in the clojure web world is built on ring
19:49bblooma|i: it's like ruby's Rack or python's WSGI
19:50a|ibbloom: but that doesn't necessarily mean that I can us friend user system with noir, does it?
19:50a|iuse*
19:51bblooma|i: i'm not the expert on this topic. maybe you should summon Raynes :-)
19:52ibdknoxali: you can use friend with noir, but it's not easy. You should look into http://www.luminusweb.net/ as a starting point
19:53bbloomibdknox: i think that's a pipe in his name, which is tricky :-P
19:53ibdknoxoh
19:53ibdknoxsneaky
19:53technomancycalling friend a "user system" is a bit of a stretch
19:53ibdknoxa|i: ^
19:53a|iibdknox: got your message though :)
19:54bbloomibdknox: we can't even handle ell, eye, and pipe. allow me to reiterate my complaint about fancy type setting in CS papers!
19:54a|iibdknox: I'm new to clojure, coming from rails. just wondering if there is en equivalent of rails to ruby in clojure.
19:54ibdknoxa|i: intentionally not
19:54ibdknoxbbloom: lol
19:55technomancyI actually had a really easy time bootstrapping a compojure app on top of GitHub oauth for handling users: https://github.com/technomancy/syme/blob/master/src/syme/web.clj#L75
19:55a|iibdknox: why intentionally? why is that microframeworks are good neough?
19:55bblooma|i: and i don't think that there is an equivalent of rails in *any other language* it's a pretty special framework in terms of breadth, perscriptiveness, popularity, etc
19:55bblooma|i: honestly, if you need to build a CRUD app in a hurry, rails is very likely the right tool for the job
19:55a|ibbloom: sure, but django in python at least tries to be a rails.
19:55technomancydoesn't django predate rails public release?
19:55bbloomtechnomancy: i believe it does, heh
19:56a|ibbloom: my only choice at the moment is app engine. and I can only use python, jvm or go.
19:56algernonI found that composing smaller libraries allowed me to be far more productive, than working within the constraints of a huge framework.
19:57algernon(but maybe I just didn't 'get' rails)
19:58bbloomalgernon: for me, it was a matter of expediency. with rails, you don't think about the "right way" for your particular use case. all use cases are CRUD. you just do whatever the most popular thing is at the time and you'll get an MVP out the door quickly. and, if you're lucky, it will be defacto modular enough to decompose it later
19:59bblooma|i: what are you building?
19:59bbloomneed to know your requirements to make a recommendation
19:59dcjacksonIs there a way to get Leiningen to NOT complain about things like: Could not find artifact postgresql:postgresql:pom:9.2-1002.jdbc4 in central (http://repo1.maven.org/maven2)
19:59bbloomapp engine seems like an odd *requirement*
19:59a|ibbloom: why odd?
20:00bbloomwhy appengine?
20:00a|ibbloom: it's an area profile website.
20:00technomancydcjackson: latest version shouldn't do that
20:00a|ibbloom: it's cheaper to start off.
20:01dcjacksonOk, I will upgrade to that....
20:01technomancya|i: last I checked app engine doesn't allow for threads, so a lot of the interesting stuff about clojure just doesn't work
20:01technomancybut don't listen to me; I work for a competitor =)
20:01a|itechnomancy: I'm open to comptetitors :0
20:01a|i:)
20:01bbloomhe's talking about heroku :-P
20:01ecmendenhalltechnomancy: thanks for sharing that oauth example. That's…surprisingly easy!
20:02bbloomtechnomancy: i'll say it so you don't have to, heh
20:02a|iheroku is really nice, I wish it was cheaper for starters.
20:02callentechnomancy: who do I send happy-grams to at Heroku for fixing my account?
20:03bbloomcallen: i accept all happy-grams on behalf of all parties
20:03callenbbloom: you deserve nuhzink!
20:04callenI actually just switched to using Heroku after using manually dev-ops'd VPSs and Dedis for years.
20:04dcjacksontechnomancy: Upgrading to RC1 did in fact stop to warnings. Thanks!
20:06technomancydcjackson: cool
20:06technomancycallen: heh; what happened?
20:06callentechnomancy: I have an account from back when you guys only did Rails. years ago. Two accounts actually. Both HTTP500'd whenever I'd try to log in.
20:07callentechnomancy: sometime after Christmas, somebody noticed my failing/desperate attempts to log in and fixed the code.
20:07technomancycallen: straight up fixed the code without a support issue opened or anything?
20:07callenso I tried Heroku for the first time with a non-rails-app and I'm actually switching my stuff over.
20:07technomancyheh; fantastic =D
20:07callentechnomancy: well both accounts stopped HTTP 500'ing on login. so yeah, I guess.
20:08callentechnomancy: don't you guys get an email/message whenever your app throws a 500?
20:08callenI do...
20:08callenno support ticket or anything, although I did try pinging you in IRC.
20:08technomancyit was probably related to the remediation for the rails security issue I bet
20:09callentechnomancy: I have a hard time seeing how a broken legacy account is related to that rails security issue. Do you guys just ignore your dashboard app until something is wrong? :P
20:09brainproxyhow can I print the value of exec-path inside emacs?
20:10technomancythe 500 errors get logged, but we typically don't have support guys looking into them unprompted
20:10technomancybut people might have been paying extra attention to legacy rails apps this past week for security reasons
20:11technomancyhard to say without knowing what was broken
20:34tuorHi. I'm learning clojure, using emacs, leiningen, and nrepl. What's the best way get dependencies I add in project.clj reflected in the repl?
20:35ChongLihave you tried nrepl-restart
20:35ChongLi?
20:36ChongLiM-x nrepl-restart
20:37tuorThanks. I tried that unsuccessfully yesterday, but now that I think about it, I had another problem in my project.clj that I didn't discover until later.
20:37tuorI am trying it now.
20:46tuorIt worked after I did "lein deps" in the shell and then nrepl-restart.
20:46ChongLinice
20:46tuorThanks!
20:46ChongLino problem!
21:19bprtechnomancy: I'm working on porting your swank-clojure inspect command over to nrepl. Any thoughts on what you would change/do differently?
21:23tomoj&(map class [(reify) (reify) (reify)])
21:23lazybot⇒ (sandbox8277$eval30037$reify__30038 sandbox8277$eval30037$reify__30040 sandbox8277$eval30037$reify__30042)
21:23tomoj&(map class (repeatedly 3 #(reify)))
21:24lazybot⇒ (sandbox8277$eval30053$fn$reify__30055 sandbox8277$eval30053$fn$reify__30055 sandbox8277$eval30053$fn$reify__30055)
21:24clojurebotmap is *LAZY*
21:24bbloomclojurebot needs his bolts tightened
21:24tomojis there a way to get an instance of a _new_ anonymous class for use with extend?
21:25tomojI'm guessing what I'm trying to do is deeply wrong
21:26bbloomhmm maybe? why do you want to do that?
21:27bprcan the jvm even do anonymous *classes*?
21:27tomojwell, not really anonymous, just anonymous from the clojure perspective
21:28Deece_Is there a function that lists the Java interfaces satisfied by an object?
21:28tomojI have 4 protocols, each with one function. if you implement the first two, the implementation of the third can be derived from the first two. otherwise, you are free to pick and choose
21:28bbloomtomoj: this worked for me https://www.refheap.com/paste/8481
21:28tomojI don't want to create a deftype for every possible combination
21:28tomojyeah, that works
21:28tomojthe problem is that if you put the '(reify) inside a function, it seems auto-memoized
21:29tomojnote my example above
21:29bprDeece_: try ancestors
21:29bbloomtomoj: i don't think it's memoized, such much as it is generated at macro expansion time
21:29tomoj&(let [r #(reify)] (identical? r r))
21:29lazybot⇒ true
21:29tomojoh, I see
21:30bbloomhorror of horrors: you could (eval '(reify))
21:30tomojhah
21:30bbloombut i think you might be better of rethinking your approach :-P
21:30tomojyes.. "deeply wrong" :(
21:31bprDeece_: there's also parents if you only want to see the immediate super-types
21:31Deece_bpr: (ancestors []) returns nil. I'm just tring to better understand the way Clojure uses java interfaces under the cover to implement polymorphism; it'd be good if i could use the REPL to see all the interfaces an object implements. For example, that [] is an instance of clojure.lang.IPersistentStack
21:31tomojI have a macro that works fine, but the function version is tricky
21:31bpr&(ancestors (type []))
21:31lazybot⇒ #{clojure.lang.ILookup clojure.lang.IMeta clojure.lang.APersistentVector java.util.List clojure.lang.IPersistentStack clojure.lang.IEditableCollection java.lang.Runnable clojure.lang.IHashEq java.lang.Comparable clojure.lang.Sequential clojure.lang.IPersistentCo... https://www.refheap.com/paste/8482
21:31bbloomtomoj: the substitutable/derivable implementations thing is an interesting problem, why not just use extend and select-keys ?
21:31Deece_bpr: perfect! thanks.
21:32bprnp
21:32tomojI'm using extend, but what type do I extend?
21:32tomoj(extend (eval '(reify)) ...) would work, like you said
21:33bbloomwhy do you have dynamically generated types at runtime?
21:33tomojer, well (let [x (eval `(reify))] (extend (class x) ...))
21:33bbloomreify isn't dynamically generating a type, it's instantiating one
21:33bbloomreify is statically generating a type.... dynamically at compile time :-P
21:34tomojwell I have 4 protocols, so max 16 combinations (each type either implementing or not implementing each protocol)
21:34tomojoriginally I was manually writing a deftype for each combination
21:35bbloomdo you need a reified type? or would a map and multimethods do fine?
21:39tomojI don't even see why I need multimethods
21:39bbloomdo you need polymorphic dispatch at all?
21:39tomoj{:p1 f1 :p2 f2 :p3 f3 :p4 f4} should work fine afaict
21:40bbloomi'm trying to rewind/replay your decision to create concrete types
21:40bbloomi don't know anything about your use case
21:41dnolenbbloom: btw, looking forward to hanging out at Clojure/West!
21:42bbloomdnolen: yeah, should be fun! it's my first conference speaking gig, so i'm extra excited
21:43TimMcDeece_: And generally you'll want to use class instead of type -- type also includes :type metadata.
21:43amalloybbloom: this whole idea looks nuts
21:43amalloyer, tomoj
21:44brainproxyman, don't know why I waited so long to look into ack-and-a-half, very helpful for refactoring
21:45amalloy$google ack-and-a-half
21:45amalloyoh yes, i think Raynes said he broke $google
21:46tomojamalloy: what's the whole idea? using reify+extend?
21:46tomojworking with things which implement (nearly) arbitrary subsets of 4 related protocols?
21:47amalloymostly reify+extend, i think
21:47tomojoh, yeah
21:47bbloomtomoj: if you really do have exactly 4 protocols and you don't need open extension, then may i suggest a hash-map or a cond block? :-)
21:48bbloomamalloy & brainproxy: upgrade to the_silver_searcher sooo nice
21:48tomojyeah, porting to hash-maps now
21:48tomojthanks
21:48amalloyno thanks. find+grep for me till the day i die
21:52brainproxybbloom: will look into it
21:52tpopeI hate ack
21:52bbloomwhy?
21:52clojurebotwhy is the ram gone is <reply>I blame UTF-16. http://www.tumblr.com/tagged/but-why-is-the-ram-gone
21:52tpopebecause it's whitelist based
21:53tpopeand you have no clue that it's not searching certain files
21:53bbloomtpope: ah, i forgot about that. i fixed that a long time ago, you can add --text to your ackrc
21:53bbloompoof problem solved: anything that `file` would report as text, ack will search
21:56tpopewell that solves one problem
21:57bbloomwhat else? :-)
21:58tpopewell basically, 90% of my searches are inside vim, inside a git repo
21:58tpopeand for that, git grep wins
21:58tpopeI don't get any of the benifits of ack there
21:59brainproxybbloom: nice, there's also an ag.el based on ack-and-a-half, trying it out now
21:59tpopeI just get the burden of maintaining a config file
21:59bbloomtpope: i kinda do wish it just searched anything that git tracked
22:00tpopegit grep does
22:01bbloomfor some reason i've only ever used that to search back in time
22:01bbloomi forget why tho
22:01kd4joacan anyone help me understand why I'm getting this when running "lein midje"? java.io.FileNotFoundException: Could not locate bultitude/core__init.class or bultitude/core.clj
22:01kd4joa(it's been a really bad weekend for clojure dev tools)
22:02TimMcIs bultitude a midje dependency, or one of yours?
22:02kd4joait's not one of mine
22:02kd4joaI've never heard of it
22:03TimMcOK, so presumably midje is trying to pull it in.
22:03kd4joait is a midje dependency
22:04brainproxybbloom: ag.el is working nicely, and the_silver_search is super fast, wow!
22:05bbloomyeah, craaazzy fast
22:05bbloomeven faster, but requires a cron job: http://code.google.com/p/codesearch/issues/list
22:05bbloomuse that if you have a huge static code base to reference
22:05TimMckd4joa: Are you using lein 1 or lein 2?
22:05bbloomalthough the indexer is fast enough to be run quasi-ineractively
22:05bprkd4joa: what version of leiningen are you using?
22:06brainproxynah, most of my projects either don't have that many files or have lots of relatively small files
22:06brainproxyag is going to be nice addition the toolbelt, for sure
22:06kd4joaLeiningen 2.0.0-RC1
22:08bbloomyeah that codesearch thing was made by googlers for googlers :-P
22:09TimMckd4joa: What version of lein-midje are you using
22:11TimMc$latest lein-midje
22:11lazybot[lein-midje "3.0-alpha2"] -- https://clojars.org/lein-midje
22:11kd4joalein-midje 2.0.4
22:13TimMc"Could not locate clj/core__init.class or clj/core.clj on classpath"
22:13TimMcInteresting...
22:14TimMcOh, nvm -- that's a problem with my project.
22:18TimMcOK, reproduced.
22:18TimMcalex_baranosky: Have you tried the lein midje plugin with lein 2.x RC1?
22:19TimMcalex_baranosky: It seems to be failing to find bultitude on the classpath.
22:19alex_baranoskyTimMc: I'm out of the loop re: diem development lately. Brian's done a metric ton of work recently
22:20TimMcok
22:20TimMcbut you're on IRC, and he's not!
22:21alex_baranoskysend a message to the midge google group, maybe?
22:22TimMcIt's probably a leiningen problem. technomancy, any known issues with lein2 RCs and classpaths for plugins?
22:27TimMckd4joa: Try going back to lein 2.0.0-preview10 -- seems to work for me.
22:27TimMcpass that to lein upgrade
22:29kd4joathanks. I'll give it a try
22:31kd4joaTimMc: that worked. thanks again
22:32TimMckd4joa: You may wish to file a bug on leiningen's issue tracker on github.
22:34technomancybpr: I extracted swank-clojure inspect into its own lib here: https://github.com/technomancy/javert
22:34technomancyTimMc: nothing known yet
22:34technomancybultitude is included in the standalone self-install jar though
22:34TimMcHmm, interesting.
22:34technomancyso it's not even possible for it to not be available to plugins
22:36technomancyit could be midje isn't able to add it to the in-project classpath though
22:37technomancyif it's a bug in leiningen I'll hold off on an announcement
22:37kd4joatechnomancy: should I file an issue in github?
22:38bprtechnomancy: cool
22:38TimMcI've got some time to help debug, if you want to point me at anything.
22:40technomancygiven that it's trying to require bultitude and it looks like it's not attempting to put bultitude on the classpath I'd guess it's a bug in lein midje
22:40technomancybut I don't know anything about midje
22:40TimMcHmm... so it may have been accidentally working before. :-)
22:52bbloomhmm i wonder if nrepl has anyway to know the terminal width
22:53bbloomsometimes i make my terminal pretty wide and it would be nice if fipp respected that :-)
22:56TimMckd4joa, technomancy: lein-midje is at fault; needs to inject bultitude into the classpath
22:57kd4joaTimMc: got it. I'll submit the Github issue there then.
22:57kd4joaTimMc: thanks again for the help. I've had a very rough weekend with clojure dev tools.
22:58TimMcIt looks like lein stopped leaking bultitude into the project classpath sometime recently.
23:04devnI want to write a range that does \a..\z
23:04devnany ideas?
23:04bpr&(map char (range 32 58)) ... i think
23:04lazybot⇒ (\space \! \" \# \$ \% \& \' \( \) \* \+ \, \- \. \/ \0 \1 \2 \3 \4 \5 \6 \7 \8 \9)
23:04bprwell, close
23:04devnnono
23:04devnim talking about a library
23:04amalloy~google raynes mutt clojure
23:04clojurebotFirst, out of 4 results is:
23:04clojurebot#clojure log - Apr 10 2010
23:04clojurebothttp://clojure-log.n01se.net/date/2010-04-10.html
23:04devnthat detects the class of the arguments
23:05amalloywell, whatever. you can find it from there
23:05devnso something like defmulti maybe?
23:05devnamalloy: is that for me>
23:05devn?
23:05amalloyindeed
23:05devnamalloy: damn you!
23:06devnyou beat me to it!
23:06amalloyhm?
23:06clojurebotbenchmarking is https://github.com/hugoduncan/criterium
23:06devnhttps://github.com/amalloy/mutt
23:06amalloywell
23:06devni haven't read it yet, but that sounds about right
23:06amalloyRaynes wrote it first. his implementation was so awful i forked and fixed it for him, though
23:06devna more dynamic range
23:06devneither way, cool, and thank you
23:06amalloyit's his project, even if all the code is mine
23:06amalloyyou're welcome
23:06devnsweet sweet ranges
23:06devn<3
23:07Raynesamalloy: My code wasn't awful you fucker.
23:07devnhaha
23:07bprlol
23:08amalloyread the diff and say that again
23:08RaynesYou write it differently and I liked your implementation better. Asshole.
23:08amalloy(i haven't read the diff recently but it was proabbly awful)
23:08devnI think morphin/mutt is a really great way to show people what you can do in clojure without much work
23:08devndoes the range in morphin give up chunked-seq?
23:08Raynesamalloy: The first implementation I did was hilariously broken if you remember right. You helped me fix that and I considered suicide.
23:08devn(in the original implementation)
23:08RaynesI don't think either if the impls did chunked seqs.
23:09devnwhy not? it's already written, why not just dispatch to clojure.core/range if you have args that are [Long, Long]
23:09devnor Long, Long, Long
23:09amalloyi think Raynes was hoping to position it as a replacement for range
23:09bbloomdidn't know about morphin, was considering making something like that at one point! cool stuff
23:09RaynesI haven't looked at that code in a 100 years.
23:09TimMcI was somewhat annoyed when I discovered that (range \a \z) didn't just work.
23:10amalloybecause of what TimMc says
23:10devnsame
23:10bbloomRaynes: not exactly a good day to joke about suicide
23:10TimMc,(range \a \z \u0001)
23:10clojurebot#<ExecutionException java.util.concurrent.ExecutionException: java.lang.ClassCastException: java.lang.Character cannot be cast to java.lang.Number>
23:10TimMcbbloom: Oh, something in the news?
23:10bbloomTimMc: http://news.ycombinator.com/
23:10TimMcI mean, suicide is always a touchy subject to joke about...
23:10devni dont think an enhancement to clojure that allows for \u0001 \u0004 or something would be a big deal
23:10RaynesTimMc, amalloy, devn: We wrote morphin/mutt as a proof of concept and I put a page on Jira that Stuart Halloway told me to put up but nobody cares remotely about ranges apparently.
23:10devni think it would be accepted
23:10Raynesbbloom: Uh, okay.
23:11devnRaynes: fuck that.
23:11Raynesbbloom: I'll go tell the internet to be careful what they say for the next couple of weeks.
23:11devni care about ranges. ranges are used all over god's creation in clojure
23:11amalloy"oh of course X would be accepted to clojure/core" - false for all X
23:11RaynesSeriously, I have no sensibilities. I apologize for it.
23:11TimMcbbloom: Apparently I live under a rock.
23:11hiredmanamalloy: :)
23:11Raynesdevn: Feel free to bring it up again on clojure-dev. Maybe somebody will care.
23:12devnamalloy: hiredman: maybe we just need to put some money in a pot and hire lobbyists?
23:12RaynesI'd still like to see polymorphic ranges.
23:12RaynesIn clojure itself.
23:12RaynesNot necessarily our implementations, but still.
23:12bbloomRaynes: i'd vote for that
23:12bbloomi've wanted char ranges a few times
23:12RaynesI mean, morphin is great and all, but nobody is going to use a lib for that stuff.
23:12RaynesNor should they have to.
23:14devnMy email to clojure-dev is going to be:
23:14devnSubject: Polymorphic Range
23:14devnBody: Well, why not?
23:14hiredman*crickets*
23:14devnim not looking for a laugh, just feedback
23:15devndo i need to spell this out?
23:15bbloomdevn: why not: http://blogs.msdn.com/b/ericgu/archive/2004/01/12/57985.aspx
23:15bbloomevery feature starts with minus 100 points
23:15devnthe quickest way to lose your argument is to oversell your point
23:15bbloomi'd say character ranges are only like plus 30 points :-)
23:16devni don't think i need to create a new wiki or something nutty to sell it. character ranges would be nice. why not?
23:17bbloomdespite the minus 100 points, it does seem rather harmless :-P heh
23:17hiredmanI think bbloom's idea of features starting in the negative is a pretty good explanation of why "why not" doesn't work
23:17devnnothing gets a score unless people discuss it. "why not?" seems like a good starting point for a conversation
23:18Raynesdevn: I have a whole page on confluence about polymorphic ranges. Feel free to also spruce it up if you like, it was written ages ago and, get this, IIRC I'm the only person who has ever actually looked at it despite the fact that Stuart told me that is what I should do to get polymorphic ranges considered for Clojure. ;)
23:18bbloomhiredman: i take no credit for that idea, that was beaten into my head at microsoft because i spent so much time beating it into other people's heads to avoid perpetuating the bloated software thing
23:18devnwtf
23:18bbloomRaynes: yeah, i feel like design pages are where good ideas go to die
23:19bbloomi think implementations and traction are the only things that get respect outside of a rich hickey decree
23:19devnif only polymorphic ranges were useful to datomic...
23:20devnmeh, i don't think it needs to be a core thing
23:20devni think a library is just fine
23:20bbloomcan anyone think of any other types of ranges besides numbers and characters?
23:20hiredmanbbloom: if it has a impl and traction there is generally not a lot of effort to get it in to core
23:20Raynesdevn, bbloom: I did an implementation of character ranges first and submitted it, but it got turned down because it wasn't as long as the range function's definition and wasn't polymorphic, which is why mutt/morphin exists.
23:20devnbut it still gets me going every time i hear someone say they've made a design page for something and received absolutely 0 feedback
23:20devni like it as a library tbqh
23:20devnthat's why i asked
23:20devni was going to write...a library! :)
23:21RaynesYeah, I don't think a single person has ever used this library ever.
23:21hiredman*shrug* there is no interest in the design
23:21devnhiredman: what do you mena?
23:21bbloomwould be nice if we had a wikipage for libraries that exist as better versions of stuff from code
23:21devnmean*
23:21bbloomcore*
23:21RaynesHe means nobody cares about my stuff. ;)
23:22bbloomhell, i have 3 projects alone that would go on that wiki
23:22hiredmandevn: if there is no interest in the design you get 0 comments
23:22hiredmanthe feature expression wiki page has a large trail of comments
23:22bbloomhiredman: & devn: sometimes you need to advertise your design page tho
23:22clojurebothiredman is slightly retarded
23:22Rayneslol
23:22bbloomok seriously clojurebot? wtf lol
23:22devnbbloom: that's true
23:23bbloomi made a few wiki pages that had zero comments until i directed attention to them
23:23devnbbloom: people who get angry about not getting feedback are the same dudes who post once on clojure-dev and never remind anyone
23:23bbloombut i tried pretty hard to avoid being too bothersome about them
23:23devnyeah, well, be bothersome
23:23bbloomalso, it can be hard to ask for feedback intelligently
23:24bbloomyou need to have an understanding of the problem, the solution, the political ecosystem, and the psychology of it all
23:24devnmeh... i think the only problem im hearing is that everyone is too sheepish to request feedback with anything louder than a whisper
23:24bbloomthen you need to be able to articulate all that well :-)
23:24devnwhich sounds like *our* problem, and not rich or stu or some other scapegoat
23:24bbloomdevn: the issue with encouraging people to speak up is that a lot of people genuinely have NO FUCKING IDEA what they are doing as designers
23:25bbloomi still want to know: what other types would you extend the Rangable protocol to?
23:25technomancywhat if someone just made a nice pomegratate wrapper that made it really easy to add a lib with no restarts or nonsense
23:25technomancyjust route around the damage
23:25devnbbloom: keywords! lol
23:25RaynesI never advertised it because I don't want to explain why we should have polymorphic version ranges.
23:25technomancyI guess you would need ns+ to really make it "like being in core"
23:26RaynesIf I have to explain why it's a good thing, it isn't worth it.
23:26RaynesI figured it was fairly obvious.
23:26technomancybut ns+ is great and we should have it anyway
23:26RaynesBut I don't care enough to explain it if it isn't.
23:26bbloomdevn: i realize that you're joking, but for anyone else listening: that's a terrible idea :-P keywords are interned
23:26devn:)
23:27xeqitechnomancy: ns+ ?
23:27technomancyxeqi: https://code.google.com/p/clj-nstools/
23:28technomancy(ns my.ns (:like base.ns))
23:28bbloomi think that only having 2 use cases is insufficient to design the Rangeable protocol
23:28technomancyxeqi: comes close to democratizing namespaces in terms of allowing other namespaces to be "core-like"
23:28technomancyin that their stuff is easy to make available everywhere
23:28technomancyI've been a long-time fan
23:29devntechnomancy: what is the purpose of democratizing namespaces?
23:29bbloomespecially because after? probably should be part of some kind of partial-order protocol :-)
23:30technomancydevn: so we don't have to have this conversation every time someone wants to make useful functionality conveniently accessible?
23:30Raynesbbloom: I agree, which is why I didn't bother doing polymorphic ranges with my first patch.
23:30devntechnomancy: the means to conveniently accessible are still a problem
23:30technomancythere are two advantages to getting something in core. 0) you don't have to add a lib, and 1) you don't have to add an explicit require
23:30Raynesbbloom: Stuart said it should be polymorphic but nobody has yet to tell me of something else that is rangeable.
23:31technomancydevn: a repl-ready pomegranate wrapper would address 0) and ns+ addresses 1)
23:32technomancyright? because when you're considering a library, it has to add N points of value in order to get you to put up with the hassle of pulling in something new
23:32devntechnomancy: so what is the impediment?
23:32technomancyso if you reduce N then you reduce the penalty for adding more libs and make it less important to get things into core
23:33technomancydevn: personally, the things that make me hesitant are having to restart the repl and having to add :require everywhere
23:33technomancymaybe with other people it's different
23:33technomancythat's backwards: when you reduce the penalty for adding libs you reduce N but whatever
23:34devntechnomancy: there is a different solution though, no?
23:34bbloomRaynes: devn: entertainingly:
23:34bbloomPrelude Data.Ix> range ((), ())
23:34bbloom[()]
23:34bbloomPrelude Data.Ix> range (True, False)
23:34bbloom[]
23:34bbloomPrelude Data.Ix> range (False, True)
23:34technomancyanyway, try to think about the reason you want to get it into core; maybe there are other ways to achieve the same goal
23:34bbloom[False,True]
23:34technomancyways that don't involve jira
23:34devnmy friend who hasn't been programming all that long mentioned something earlier that stuck with me
23:34bbloomapparently haskell considers booleans to be instances of Ix, which is basically rangable and apparently false == 0
23:34devni think about the clojure web programming situation right now
23:35devnand he mentioned how rails forces you into a box, but by "box" he meant, you have *some kind* of consistency
23:35devnlike "application.rb", or whatever
23:35devnyou know where it lives because you've seen 100 projects just like it
23:35bbloomtechnomancy: anytime you can bipass jira, you win
23:36RaynesJira had to be the stupidest thing clojure/core ever did.
23:36bbloomi wonder if that's rich's true motivation: it's like an automatic minus 100 to suggest a feature... you need to use jira!
23:36technomancybbloom: the math adds up
23:36devni think the problem we have in clojure has nothing to do with democratizing namepsaces, and everything to do with how shitty clojars is, and how desperate we all are for some kind of rational way to share groups of dependecies
23:36devnif we truly value this "libraries over frameworks" thing, then we still need to find consistency
23:36Rayneshttps://github.com/yogthos/luminus
23:37devnso when you go to src/luminus/*
23:37Raynesyogthos|away: Thank you so very much for using a different design for the website. I was twitching at the old one.
23:38devnwhich file do you expect to contain routes?
23:38Raynes*shrug*
23:38technomancyRaynes: inc
23:38devnthat's a serious problem we have
23:38RaynesI don't think you and I have the same kinds of problems, devn.
23:38Raynes:P
23:38technomancydevn: it should be in :main
23:38technomancyseriously; I have never considered that a problem
23:38RaynesI put routes in views/
23:38devnhere's my main point
23:38RaynesAnd models in /models
23:38devnhear me out here
23:38RaynesEr, models/
23:38RaynesAnd startup stuff in server.clj
23:39RaynesI'm consistent.
23:39technomancyjust start in :main and M-. your way through the project
23:39technomancynavigation is easy
23:39xeqiwheres the messaging queue go?
23:39RaynesNowhere.
23:39technomancyxeqi: nowhere in rails too =
23:39technomancy=)
23:40yogthosRaynes: haha yeah it was pretty fugly :P
23:40devnlisten: you can talk about how easy it is for you, but if you want clojure to grow, i think we need to figure out some kind of common structure. we can say "libraries over frameworks" but ultimately, someone who isn't you is going to have to pick up your shitty legacy code and go to work.
23:40devnand if they have no fucking clue how you organized the project, that's a problem.
23:41devni consult, and every project is different, but they're *similar"
23:41devnin clojure, nothing is the same
23:41devnit's annoying
23:41devnand it costs money
23:41yogthosRaynes: all credit goes to this guy :) http://www.laliluna.de/
23:41bbloomi don't buy this idea that everything is the same even among rails projects, lol
23:41Foxborondevn: i believe there is a little github project to try get a common style guide for CLojure
23:41devnbbloom: it's not the *same*
23:41headshotdevn, any scala?
23:42devnbut it's way closer to similar than compojure and lib-noir
23:42devnway way way closer
23:42Raynesdevn: Careful, you're starting to sound like antares. :p
23:42devnheadshot: no
23:43RaynesWait, no, you already sound like him, implying that we have shitty code.
23:43Raynes:p
23:43devnseriously though. think about it. i don't care if we say "fuck frameworks" but there are trade offs, and i think consistency is definitely one of them
23:43RaynesI would expect that if my code were too bad amalloy would have sent me a pull request by now.
23:43devnit matters for businesses who want to use clojure
23:43devnand we should pay more attention to it
23:43yogthosdevn: the convention I'm going with for routes is to put routes under routes.blah namespaces
23:43RaynesHe is really my net at the bottom of the trapeze.
23:44yogthosdevn: then handler will reference them in all-routes
23:44devnyogthos: yeah, it's just that there appears to be no common convention for that in clojure
23:44devnwhich i think is a real problem
23:44devneveryone uses compojure and lib-noir and yadda yadda, and congratulations, we don't use a framework
23:44devnbut we have common depencies
23:44yogthosdevn: well if one template/framework gets popular it will become the convention I think
23:45devnso let's try and come up with *something* that we all agree is sane
23:45devnand use that for organizing our web projects
23:45yogthoscallen convinced me to go with the routes/views separation
23:45RaynesThis conversation has more snark than technomancy at a Scala party.
23:45devnheh
23:45yogthoswhere views have stuff like layouts, and routes contain routes for specific workflows
23:46yogthoshaha
23:46devnyogthos: so like...let's get people to buy into some kind of general guidelines for project organization
23:46devnbecause ive touched a few clojure codebases lately that were not my own
23:46devnpeople moved on, etc.
23:46yogthosa lot of motivation for luminus is to make something that's more or less standard and gets all the boilerplate out of the way
23:46devnand in every case, these guys had these wildly imaginative ideas about how to organize projects
23:47devnthat is a *problem*
23:47yogthoshaha
23:47devni dont want to spend 3 days figuring out how the hell a project is structured while im trying to deliver value
23:47yogthosmy main concern with project organization is that stuff should be compartmentalized
23:47devnthat's a waste of my time, and my client's time
23:48yogthosI find that's generally a problem I run into with java projects :)
23:48yogthosdiving into twisted mazes of classes and interfaces all alike
23:50yogthosbut yeah back to the original point, I don't there's any way to get everybody to just agree on one standard easily
23:50yogthosit's just going to have happen naturally as people gravitate towards some conventions
23:56bbloomdevn: luckily, clojure namespaces are DAGs, not full graphs
23:56bbloommuch easier to traverse when analyzing code
23:56bprtechnomancy: javert is nearly exactly what i did. lol
23:58yogthosbbloom: it's going to be nice when LT gets support for loading up related functions :)