#clojure logs

2011-11-08

00:03amalloytechnomancy: i (despite my general stance against :private meta) used refer-clojure in my namespace so i could (defn- meta ...). doesn't bother consumers if it's private, of course
00:03tensorpuddingugh, i can't get anything done while swank-clojure isn't working
00:05tensorpuddingwell, lein swank works
00:47tensorpuddingso many hours, and i only have 350 lines of code
00:47tensorpuddingwell at least it does stuff
01:18tashafahello
01:18tashafais this thing working?
01:19tashafa?
01:21brehautyes
01:22cemericktashafa: Tunde?
01:24tashafacemerick:
01:24tashafawhats up
01:24cemerickNot much.
01:24cemerickI should be sleeping.
01:24tashafasame here
01:25tashafaI was actually looking for the clojurescript channel
01:25cemerickHow have you never gotten settled with irc in general, anyway? ;-)
01:25tashafaI did at one point
01:25cemericktashafa: there isn't one, really
01:26tashafajust fell off after that job search debacale
01:26tashafa:-/
01:26cemerickah
01:27cemerickThe Clojure jobs are coming along pretty decently these days, actually.
01:27tashafayeah i see them everywhere
01:28tensorpuddingdoes clojure have a newsgroup
01:28cemerick~google group
01:28clojurebotFirst, out of 416000000 results is:
01:28clojurebotMinistry Resources | Group
01:28clojurebothttp://group.com/
01:28cemerickugh
01:28cemerickclojurebot: google group
01:28clojurebotFirst, out of 416000000 results is:
01:28clojurebotMinistry Resources | Group
01:28clojurebothttp://group.com/
01:28tensorpuddinggoogle groups aren't the same
01:28cemericktensorpudding: I don't think so, no
01:28tashafahmm... how do you set flags in regexes again?
01:29tashafathat's how much I have fallen off
01:29amalloytashafa: i think you have to use j.u.regex.Pattern/compile
01:30tashafanot #"(?:i)[a-z]" ?
01:30cemericktashafa: (?i)
01:30tashafathanks for the response btw amalloy
01:30amalloytashafa: (?i) works, but isn't exactly the same as setting a flag for a whole regex
01:30amalloy$javadoc java.util.regex.Pattern compile
01:30lazybothttp://download.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html#compile(java.lang.String)
01:31cemerickamalloy: how does it differ?
01:31amalloycemerick: http://download.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html#CANON_EQ
01:31amalloyie, it doesn't differ for the specific case of ?i
01:31amalloybut for flags in general it may
01:32tashafaI'm actually trying this out in clojureScript
01:32cemerickah
01:33cemericktashafa: You're probably SOL in that case.
01:33brehautif it passes them through to javascript regexps, then i dont think those flags would work
01:33brehautdoes clojurescript let you access the RegExp constructor?
01:33tashafait does recognize #"..." regex literal
01:33amalloybrehaut: i think the js regexes are about as perl-compliant as java's, so (?i) ought to work
01:34cemerickYeah, that's just dropping the regex in /regex/
01:34tashafalooking at source it does account for flags
01:34tashafahttps://github.com/clojure/clojurescript/commit/a201e9d8dec84ac0bca5b51c714b3179ed7444c8
01:34brehautamalloy: i doubt it
01:34tashafabut this is a while ago
01:35cemerickamalloy: flags are appended to the // literal
01:35brehautbut if you can do the equivalent of new RegExp("[a-z]", "i") then you're ok
01:35cemericke.g. /foo/i
01:35amalloycemerick: well, those are pattern-global
01:36amalloyie, if you can't do /TeST(?i)ing/, that's not so nice
01:36amalloybut apparently you can't. stupid javascript
01:37brehautmost likely javascripts regexps are equivalent to the perl regexps supported by java back in 1995
01:37brehaut(just like the Date class)
01:38amalloytashafa: http://www.regular-expressions.info/javascript.html has a good list of what's missing from js regexes
01:39tashafahttp://www.regular-expressions.info/javascript.html
01:39tashafasorry
01:39tashafaright click on terminal
01:39cemerickI'd trust this more: https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Regular_Expressions
01:39cemerick(just from a reference perspective)
01:40amalloycemerick: no doubt yours is more authoritative, but over the years that site has served me well and is easier to absorb
01:40tashafabut I'm erroring on the clojure compiler
01:41amalloynooo, the compiler hates errors!
01:41tashafaerror is "java.util.regex.Pattern.error (Pattern.java:1713)"
01:43tashafacompiler.clj says...
01:43tashafa(defmethod emit-constant java.util.regex.Pattern [x]
01:43tashafa (let [[_ flags pattern] (re-find #"^(?:\(\?([idmsux]*)\))?(.*)" (str x))]
01:43tashafa (print (str \/ (.replaceAll (re-matcher #"/" pattern) "\\\\/") \/ flags))))
01:43brehautoh boy. 10 generations deep sierpinksi triangle is grinding emacs to a halt
01:43tashafasorry im being stubborn
01:44tensorpuddingcreating automata in your emacs?
01:45leo2007what exactly is 'reflective invocation'?
01:46brehautleo2007: if the compiler doesnt know what the type of something is, then it has to dig around in the objects metadata to find a matching method. that digging around is called reflection, and the invocation is invoking the method
01:46amalloymostly it's slow, amirite?
01:47brehautlol
01:47leo2007brehaut: thanks.
02:45tsdhHi. After coming back from holidays, M-x clojure-jack-in errors with 'error in process filter: clojure-eval-bootstrap-region: Search failed: "(run-hooks 'slime-load-hook) ; on port"'. Indeed, there's no slime-load-hook. What's the matter?
02:45clojurebot,(let [testar (fn [x y] (cond (= (reduce + (filter odd? (range 0 x))) y) (str y " is an square perfect")), :else("nao eh") )] (testar 10 25))
02:46tsdhI've updated clojure-mode from 1.11.1 to 1.11.3, so maybe that's part of the problem.
03:21tsdhtechnomancy: Hm, with respect to the clojure-jack-in error: one thing is that this function searches for "(run-hooks 'slime-load-hook) ; on port", but in swank-clojure-1.4.0-SNAPSHOT.jar's slime.el, there's only "(run-hooks 'slime-load-hook)" without "; on port".
03:41Blktgood morning everyone
03:55tsdhHi Blkt
04:00ejacksonmorning good people
06:08kephaleraek: ping?
06:10raekkephale: pong
06:11kephalehuzzah. i was looking into adjusting the size of the thead pool and ran into one of your posts
06:12kephalei have a piece of code that is parallelized with agents and pcalls. is there a way to define a global (newFixedThreadPool maybe) to get the code to run as single core?
06:13kephalewithout performing a lobotomy on the code
06:23raekkephale: have you looked at this? http://download.oracle.com/javase/6/docs/api/java/util/concurrent/Executors.html#newSingleThreadExecutor()
06:24raek(def pool (Executors/newSingleThreadExecutor)) (.submit pool #(println "hello!"))
06:24clgvkephale: nope. I checked that. itÄs a pity you cant adjust that poolsize. maybe a patch for this is due. The Java ThreadPoolExecutor supports setting core- and maxpoolsize
06:25kephaleraek: no, i have not.
06:25clgvraek: yeah, you have to do that manually. pmap, pcalls etc dont support it
06:25raekyes
06:26raek.invokeAll is very similar to pcalls, though
06:26kephaleclgv: arg.. i was worried about that. it looks like it could be done fairly easily on the java side of clojure
06:26kephalewell, the agents are the bigger deal, there is just 1 pcalls call, so that could be handled manually if necessary
06:26clgvkephale: yeah it's pretty easy. thats why I wondered why nobody had done it yet
06:28kephaleraek, clgv: ty, i might poke around at medusa
06:29clgvclgv: you would just have to store the ExecutorService in the Agent Implementation as ThreadPoolExecutor and write a function to be able to set both numbers
06:30kephalethe agents are more of a hack to avoid some of the hangs that you get when pmapping with a large function
06:30clgvkephale: not really. pmap and the other p* just suck^^
06:31clgvagents are pretty good
06:31kephaleclgv: how does medusa-pmap compare?
06:31clgvkephale: you have a link to it?
06:32kephalehttps://github.com/amitrathore/medusa/blob/master/src/org/rathore/amit/medusa/core.clj
06:32kephaleit is based on futures, so it feels like it should be a bit smoother
06:33kephalewell, medusa-futures
06:33clgvpmap is also based on future afair (in source)
06:33clgvthe direct medusa-pmap looks fine: build all futures at once and returning a lazyseq that derefs them
06:34clgvthats how I would have liked pmap^^
06:34kephaleok, i might just bite the bullet and get my scalpel
06:35clgvI dont know why they add uuids - maybe for supervision and status reports
06:37kephalefor the preempting maybe
06:41clgvok. I like the medusa-pmap definition, but I dont know what to think about the environment of it ;)#
06:47kephalegood point. i actually have no use for the supervision. maybe i'll just copy their style of pmap
06:48clgvkephale: you can just use a ThreadPool and submit your futures there like their pmap does
06:49kephalemmm… now if there was a simple way to override agent/send/await with a custom threadpool everything would be hunky-dory
06:50kephalethe proper thing to do would be reverting back to pmap, but i'm kind of lazy
06:50clgvkephale: I dont think you need a custom one. the one that is used is fine, but you need access to setCorePoolSize and setMaxPoolSize
07:00kephaleclgv: no luck with (.setCorePoolSize clojure.lang.Agent/pooledExecutor 1) (.setMaximumPoolSize clojure.lang.Agent/pooledExecutor 1)
07:24clgvkephale: yeah. it's private, isnt it?
07:27kephalepublic in ThreadPoolExecutor
07:36clgvI meant clojure.lang.Agent/pooledExecutor
07:37clgvoh no. it's final that is
07:39clgvwhat does it do when you change pool sizes?
07:40kephaleno error or anything, but the cpu usage doesn't change (still using multiple cores)
07:41clgvkephale: I thought it will finish the already started jobs and then reduce the number of worker threads
07:43clgvkephale: see here http://download.oracle.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html#setCorePoolSize%28int%29
07:43kephalewell, just to be certain nothing weird was happening i am using lein run and putting those calls right before i call the function that uses agents
07:44kephalein fact, those calls are the first things to be evaluated
08:16bhenryeasiest way to determine if a date is within two other dates?
08:19ejacksonbhenry: the clj-time library has functions for this
08:41kephaleclgv: fyi, the simplest work around (given that i only care about single core or not) is ((if use-single-core atom agent) …), ((if use-single-core swap! send) …) and that takes care of all the cases (aside from disabling await's)
08:42clgvkephale: nice^^
08:57mdeboarde/die
09:29curious_xoxotaWhat was that function to generate [[1 2] [1 3] [10 2] [10 3]] from [1 10] and [2 3]?
09:35clgvcurious_xoxota: cartesian-product?
09:35mdeboardcurious_xoxota: What clgv said, you want http://richhickey.github.com/clojure-contrib/combinatorics-api.html afaik
09:35lazybotNooooo, that's so out of date! Please see instead http://clojure.github.com/clojure-contrib/combinatorics-api.html and try to stop linking to rich's repo.
09:36mdeboardunless that's been rolled into--
09:36mdeboardOh thanks lazybot
09:36mdeboard:)
09:36mdeboard(inc lazybot)
09:36lazybot⇒ 2
09:36curious_xoxotathanks :)
09:36mdeboard$google
09:36lazybotNo search term!
09:36mdeboard$google combinatorics api
09:37lazybot[combinatorics API reference (clojure-contrib)] http://richhickey.github.com/clojure-contrib/combinatorics-api.html
09:37mdeboardSee :-|
09:37mdeboardlazybot you naughty monkey
09:37mdeboard(dec lazybot)
09:37lazybotYou want me to leave karma the same? Fine, I will.
09:38clgv(- lazybot 10)
09:38clgv(dec lazybot 10)
09:38lazybot⇒ -1
09:38clgv(dec lazybot 10)
09:38lazybot⇒ -2
09:38mdeboardweird
09:38mdeboard$google lexicographic permutations
09:38lazybot[Permutation - Wikipedia, the free encyclopedia] http://en.wikipedia.org/wiki/Permutation
09:39mdeboard(inc cemerick)
09:39lazybot⇒ 6
09:39mdeboardFor dat podcast
09:39cemerickFYI: Mostly λazy Episode 0.0.1: Sean Corfield, Clojure Contrib, and "real world Clojure" http://wp.me/p1Y10D-c #podcast
09:39mdeboardhttp://mostlylazy.com/2011/11/08/episode-0-0-1-sean-corfield-clojure-contrib-and-real-world-clojure/
09:39cemerick(first and last promo of it here)
09:39cemerickmdeboard: well, make sure you listen before praising me on it ;-)
09:39cemerickBut, thanks anyway. :-D
09:40mdeboardI was looking for it this a.m. so I could listen on the drive in to work
09:40mdeboardalas
09:41mdeboardcemerick: Downloading now. There's a dearth of in-depth technical podcasts; have been looking forward to this
09:41cemerickI can't say it's in-depth and technical
09:42cemericke.g. I almost certainly won't be going se-radio-style on the implementation details of hash array map tries
09:42ejacksonthats a relief
09:42mdeboardcemerick: Oh I don't mean like that
09:42mdeboardMore like devops cafe
09:42cemerickThe conversation seancorfield and I had was actually more about libraries and community than anything else.
09:43cemerickejackson: are you guys on the ground yet?
09:43ejacksontomorrow
09:43ejacksonlanding 3pm ish in Raleigh
09:44ejacksoncgrand and I, having not yet met, have an elaborate plan involving funny hats and orange sneakers....
09:45clgvah clojure conj is this week. dont forget to put your slides online ;)
09:46mdeboardI'm curious if/how rhickey will top Simple Made Easy
09:47mdeboardAlso hoping dnolen's pred matching talk goes up as well.
09:47mdeboardAre these going up on InfoQ or what
09:47zerokarmaleftsussman's talk also went up on infoq
09:48zerokarmaleftdon't know for sure if *everything* from strangeloop will be posted
09:48mdeboardI mean from ClojureConj
09:48mdeboardthis weekend
09:48mdeboarddnolen is delivering a talk on predicate matching which I am assuming will be a more polished/updated version of the talk I saw on Vimeo on the same topic to the NYC Clojure user group
09:50ejacksonI'm sure somebody will point a video camera at the stadium.
09:50ejacksonalthough they didn't last year
09:51TimMcAwkward timing for the Conj vis-à-vis the November 8 elections.
09:51ejacksonsorry, they did, but not everything, I don't think
09:52cemerickejackson: The video was unusable for some.
09:52ejacksonlike your good self....
09:53cemerickYeah, me, Laurent, and S. Sierra got no video love.
09:53cemerickMight have been another, but I don't remember.
09:53ejacksonanyway, the precedent is good
09:54TimMc(dec lazybot I don't think it reads the rest of the line
09:54TimMc(dec lazybot or perhaps it does)
09:54lazybot⇒ -1
09:57ejacksoncemerick: I think you should repay the favour to certain gentleman who nagged you into being Podcast-in-Chief..... Somebody should be Vlogger-in-Chief....
09:59cemerickejackson: crap, who was that?
10:00cemerickThe blur of tweets dissipates rapidly.
10:00ejacksonfogus, no ?
10:00cemerickEch, anyway, I'm not anything-in-chief. :-)
10:01cemerickYeah, fogus was in there, as was Alex Miller and Aaron Bedra.
10:01cemerickCouple others, too.
10:01cemerickI'm not sure why that plurality suddenly popped up.
10:01ejacksonyes, some parenthesis wielding mob
10:01ejacksonor other
10:02curious_xoxotaI'm taking two sets, and for every element of one, mapping with an operation to the other set. In the end, I join the sets. I'm getting memory errors with this algorithm: do you think this implementation is too inefficient, or there might be a bugw
10:02curious_xoxota*bugw -> bug?
10:02TimMccurious_xoxota: Example input and output?
10:03TimMc(I don't understand the first sentence.)
10:03mdeboardDitto, can you post a snippet or summat
10:04curious_xoxotahttp://454a56951ea463a7.paste.se/
10:04curious_xoxotaOne of the sets has like 10000 pairs of numbers, like [1 2
10:04curious_xoxota(sorry, enter in an awkward position)
10:05curious_xoxota[1 2], and the other is smaller, with like 300 elements at most
10:05redingerTimMc: Vote early, vote often
10:06mdeboardcurious_xoxota: Just out of curiosidad, why did you overwrite conj?
10:06mdeboardor rather, use conj as a temp var
10:07Chousukethere's nothing obvious about that code that leaks memory :/
10:07TimMcredinger: That's hard if you're out of state! If i had gone to the Conj, I wouldn't have been able to vote today.
10:07redingerTimMc: No absentee voting for you?
10:07curious_xoxotamdeboard: for 'conjunto', or set, in portuguese
10:08curious_xoxotamdeboard: poor choice, I agree :)
10:08mdeboardcurious_xoxota: oic
10:08Chousukefeels sort of weird to see non-ascii characters in identifiers :P
10:08TimMcredinger: Is "traveling" a valid excuse? Some states are pretty restrictive on who they'll give an absentee ballot.
10:08ChousukeI'm too used to coding in English
10:09Chousukeif I try to use Finnish identifiers it just looks weird
10:09curious_xoxotaI think it's pretty neat to be able to use them. You can define a function named ♥!
10:10redingerTimMc: Gotcha. In NC, we don't even need a reason for absentee voting.
10:11mdeboardredinger: So much military in NC, they have to be flexible that way (lived in NC for 8 years as a Marine).
10:11mdeboardnot that you needed me to tell you that...
10:12TimMcaha
10:12mdeboardanyway curious_xoxota besides normal troubleshooting steps I can't give any help. What is the error you're getting?
10:13curious_xoxotamdeboard: out of memory. Lemme run the code to get the precise error
10:13TimMcChousuke: Greek identifiers at the bottom: https://github.com/timmc/CS4300-HW4/blob/master/src/timmcHW4/tri.clj#L98
10:14TimMcWhy not use the same identifiers as in the original equations? :-)
10:23ChousukeTimMc: yeah, I guess that's useful. Most people who would understand Clojure code can probably read at least a couple greek letters :P
10:32lambdanautI've got a function "recurseThis" that takes an x and does something to that x. I want another function "find" that takes that x and puts it back into "recurseThis" over and over until x satisfies some condition, like being equal to 1.
10:33lambdanautCan I do this in clojure? I'm basically just trying to avoid explicit recursion
10:34raeklambdanaut: sure. (defn find [f x done?] (loop [x x] (if (done? x) x (recur (f x))))
10:34raekor you could use 'trampoline'
10:36lambdanautThanks raek!
11:05mefestotechnomancy: ping
11:10mefestotechnomancy: fyi, i pushed wabbitmq 0.1.5 with your commits to clojars. thanks! :)
11:24carkis it possible to do a lein uberjar which would not include clj sources ?
11:34dnolenany opinions on fixing the behavior of instance? in CLJS, http://dev.clojure.org/jira/browse/CLJS-98
11:34raekI remember seeing an article about JVM garbage collector implementations (with pretty pictures) on hacker new a while ago. anyone happen to know which one I'm looking for?
11:36cemerickcark: :omit-source https://github.com/technomancy/leiningen/blob/stable/sample.project.clj#L159
11:37carkah thanks cemerick !
11:38carklooks like you gave me the way to find my own answers concerning leiningen too
11:38carkthanks
11:38raek(found it: http://sdoulger.blogspot.com/2011/05/very-interesting-article-regarding-gc.html)
12:14TimMcraek: neat link
12:44cemerickraek: that's a weak reblog
12:44cemerickhttp://blog.dynatrace.com/2011/05/11/how-garbage-collection-differs-in-the-three-big-jvms/ seems to be the authentic one
12:48technomancymefesto: cool
12:48technomancyj.io.Serializable is new in 1.3, right?
12:49technomancyor rather, support thereof
13:00TimMcredinger: Wait, never mind -- I was confusing Tuesday with Thursday. >_<
13:05technomancycemerick: heh; *con*trib?
13:06technomancyso what's the weather like in Raleigh
13:13kzarAnyone know how to check if your app is running locally or on heroku progmatically? I wanted to set the mode flag to :prod when I see it's on heroku
13:14technomancykzar: want to try the lein 1.6.1.1 preview? then you can just check for LEIN_NO_DEV.
13:15kzartechnomancy: how does that work?
13:16technomancykzar: heroku config:add BUILDPACK_URL=http://github.com/heroku/heroku-buildpack-clojure.git
13:16technomancyfeel free to msg me if you have any issues
13:19kzartechnomancy: What does the buildpack do? Also how do I use the preview version of lein? Is LEIN_NO_DEV an enviroment var?
13:20cemericktechnomancy: ?
13:20technomancykzar: when you do git push, it compiles a "slug"; basically a tarball of the project and all its deps. setting this config just puts you on the latest version of the part that builds the clojure slug, which uses lein 1.6.1.1.
13:20technomancycemerick: just the pronunciation =)
13:20licensergeez why does emacs hate me?
13:21technomancykzar: yeah, LEIN_NO_DEV is an environment var
13:21cemericktechnomancy: I never noticed!
13:21kzartechnomancy: Cool so I don't even have to mess with Lein on my laptop, just run that command to tell Heroku to use the new version
13:22cemerickI did notice that I can't maintain a consistent pronunciation of leiningen, nevermind a correct one. :-P
13:22kotaraklicenser: Because it's not vi. ;)
13:22technomancykzar: yep. currently it's using 1.5.2 by default, but we'll push the upgrade out to everyone soon.
13:22cemerickgood to see you kotarak :-)
13:22licenserbut how can emcas know I used VI today ? you think it's jalous?
13:23kzartechnomancy: Cool beans, thanks for the tip. I have to run but I'm going to try that out tomorrow morning and I'll let you know how I get on
13:23kotarakcemerick: thanks. :) the pronunciation of leiningen is quite easy, btw. ;)
13:23technomancysure, no problem
13:23kotaraklicenser: might be. Those diva types are difficult.
13:23licenser:.(
13:24kotaraklicenser: And this “foreign editing”… tstststs
13:24cemerickkotarak: I *can* pronounce it properly, it just often doesn't come out as intended.
13:24cemerickIt should come naturally, given part of my heritage, I suppose. All that Russian getting in the way, perhaps. :-P
13:25kotarakcemerick: hehe, globalization is difficult.
13:25cemerickkotarak: now that you're here, your prize is having me bug you about vimclojure (+ nrepl) ;-)
13:26kotarakcemerick: honestly I just thought about it this afternoon.
13:27kotarakcemerick: vim allows to call into native libraries. That would allow a C(?) client library for nrepl to be used directly.
13:27cemerickso the scripting approach was a dead end, huh?
13:27kotarakcemerick: however I don't have the time, nor the (in particular Windows) experience to implement something like that. :|
13:27cemerickThe jark guys have an ocaml nrepl client brewing that might suit your needs.
13:27kotarakcemerick: yeah, kind of. Never really worked.
13:28technomancyhm... now immutant has its own "lein new" command as well. need to keep people from reinventing the wheel.
13:29kotarakcemerick: a native version would have the advantage of eliminating the “fork/spawn the client” step. I would expect this to be much faster.
13:29technomancyhah
13:29technomancytouché
13:29kotarakWhether OCaml can do that? hmmm….
13:29cemerickkotarak: ocaml can compile down to a very small/fast native executable just about everywhere, so…
13:30cemerickI don't actually know anything about it, short of it basically in a working state.
13:30cemerickWindows may be problematic, but that's typical.
13:30kotarakcemerick: OCaml is quite nice, and yes, windows is a problem… as usual.
13:34kotarakThe jark site is down? Hmm...
13:34Raynestechnomancy: ibdknox and I have been working on Spawn. Problem is, we want it to remain a library, and you don't like dependencies because of packaging issues.
13:34cemerickkotarak: yeah, I just msg'd Issac about it.
13:35cemerickkotarak: here's the ocaml client: https://github.com/icylisper/jark-client
13:35technomancyRaynes: I think this is a case where wider sharing and standardization would justify it
13:36technomancyalso considering it's probably more than a page =)
13:38ibdknoxwhat'd I miss?
13:38technomancyibdknox: how are you finding spawn?
13:39ibdknoxtechnomancy, Raynes basically rewrote it so that it makes a bit more sense :)
13:40technomancyheh; gotcha
13:40cemerickspawn?
13:40ibdknoxcemerick, project templating as a library
13:40ibdknoxcemerick, with both lein and cake plugins
13:40RaynesThere are still a few bugs because resources are the bane of my existence, but… getting there.
13:40cemerickah-ha
13:40cemerickthat's a swamp :-|
13:40technomancycemerick: do tell
13:40RaynesA deep, dark swamp.
13:40ibdknoxresources suck
13:41technomancywait, what's wrong with resources?
13:41Raynestechnomancy: Go list files under the same directory structure in 6 different jars.
13:42technomancyyou don't want to just require a manifest?
13:42cemericktechnomancy: defaults are hard to get right, defaults across contributors or types of projects are even harder to get right and keep halfway coherent, and discovery of these sets of defaults is really hard to get right, especially once more than 3 people are producing them.
13:42cemerickJust remembering my encounters w/ archetypes — which surely had their own baggage, but there seems to be some hard problems in general.
13:43ibdknoxcemerick, well, you can add your own templates very easily, so I suspect there will be packs of templates that people will build
13:43technomancycemerick: yeah, I'm definitely interested in hearing about the issues
13:43ibdknoxcemerick, and that is *separate* from spawn
13:43ibdknoxwhich is important
13:43cemerickibdknox: see, I'm already confused. :-P
13:43cemerick;-)
13:43ibdknoxhaha
13:43ibdknoxbasically lein plugin install spawn
13:44ibdknoxlein plugin install noir-templates
13:44ibdknoxlein spawn heroku-project my-cool-site
13:45cemerickfair enough — what happens when there's 200 different template plugins?
13:45RaynesThere isn't really an issue with anything but template discovery. We already require that template (genome) definitions have a specific directory structure (spawn/genome/foo.clj and spawn/genome/foo/ for template files). Mostly, we want to be able to dynamically list and access all of the genomes whether or not they are in jars and we want to list them. I just haven't had time to work out how to do that yet.
13:45ibdknoxeh, if there are, there are
13:45ibdknoxcemerick, they tend to be specific to the problem you're solving
13:45cemerickibdknox: absolutely
13:46RaynesWe also want to repeat ourselves because we just woke up and want to repeat ourselves.
13:50technomancyRaynes: literally spawn/genome, or spawn/$GENOME ?
13:50technomancycemerick: you don't think distributing them as maven artifacts solves the namespacing issue?
13:50technomancyactually the real problem with pulling in spawn is that it's a circular dependency =\
13:50cemerick(The short upshot is almost no one uses archetypes. It's impossible to find the one you want; but if you do (often going only by the name, e.g. there's a partial list here: http://docs.codehaus.org/display/MAVENUSER/Archetypes+List), chances are it's ill-maintained or helpfully adds bugs to your project from the start.)
13:51cemerickwell, that was helpful
13:51cemerick(The short upshot is almost no one uses archetypes. It's impossible to find the one you want; but if you do (often going only by the name, e.g. there's a partial list here: http://docs.codehaus.org/display/MAVENUSER/Archetypes+List), chances are it's ill-maintained or helpfully adds bugs to your project from the start.)
13:51technomancy(though a 5-line shell script would probably suffice for packaging purposes in spawn)
13:52technomancycemerick: what makes them hard to find? is it just that the nice UI on search.maven.org is a relatively recent development?
13:53cemericktechnomancy: it's that there are often multiple archetypes with minute (yet subtly important) differences, so an artifact id is a pretty narrow peephole through which to determine whether one is right v. another. Nevermind differences in terminology, etc.
13:54technomancycemerick: so the standard clojars-mosh-pit issues apply, but apart from that would it be fair to say it's more of a social issue than a technical one?
13:54cemerickThe only times I've used them, I ended up trying two or three, finally found the one I needed, and then discovered a week later I was suffering from a bug in the generated descriptor for something-or-other.
13:54licenserCan anyone tell me why clojue-jack-in dies with this: "error in process filter: progn: Symbol's value as variable is void: /Users/licenser/\.lein"
13:54technomancylicenser: what version of clojure-mode?
13:55technomancythere's a bug we just fixed last week where unexpected junk on lein's stdout could interfere with the bootstrap
13:55licensertechnomancy: your version from git (1.11.2)
13:55licenserohh sneaky :)
13:55licenserthat might be it
13:55technomancylicenser: that was sooooo last week. =)
13:55licenserheh
13:56licenserweeh :D
13:56licensernow I just get the version mismatch thingy :(
13:57cemericktechnomancy: I wouldn't say that.
13:58licensertechnomancy: you are my hero!
13:58licenserthanks mate :)
13:58technomancyheh; np
13:58cemerickIf the only interaction the user can provide is are coordinates, then yes. However, I can imagine spawn (or whatever appropriate bit) making it possible for template authors to provide interactive guidance to help find their templates when appropriate. It'd be a bit of a random walk, but a series of Y/N questions could make the selection process more of a conversation between the user and N different template authors about what mak
13:58cemerickeach option distinctive.
13:59wastrelmy glasses are dirty
13:59licenserwastrel: ask technomancy he is great at helping people :P
13:59licenserperhaps he has fixed that in a patch last week too ^^
14:00technomancyhave you tried increasing your font size?
14:02technomancycemerick: I almost want to hope that the smaller, more tightly-knit nature of the clojure community would help avoid overlap.
14:02technomancybut there are like five rabbitmq clients, so I'm thinking no.
14:02licensertechnomancy: I'd like to ask you on a thought of mine about lein if I am not disturbing you too much?
14:02cemerickhah :-)
14:02technomancylicenser: sure, what's up?
14:02cemerickalso, +5 years, how small and tightly-knit is it, etc.
14:04licenserI found a strange idea in the erlang world about build tools: make the tools 'executable' part of the project. So allow leiningen to be shipped as part of the git repository, that way every project always has the 'right' version of leiningen
14:04licenserhave you ever thought about that?
14:05licensercemerick: we just have to scare away all potential newcomers - we can get a few CL'ers to help with that
14:05technomancylicenser: actually I think you could do that already
14:05technomancylicenser: lein will automatically perform self-install now if it notices its uberjar is missing
14:05licensertechnomancy: I did it just required a bit hackery
14:05cemerickthat's just a submodule, no?
14:06kotaraklicenser: gradle has something similar IIRC.
14:06technomancycemerick: you should only need a submodule if you wanted a snapshot rather than a release
14:06licenseras making ./lein use $PWD/.lein instead of $HOME./lein as it's root
14:06technomancylicenser: what was needed?
14:06licensermostly that
14:06licenserI think only that
14:07technomancyI don't understand
14:07licenserso if lein would like check of $PWD/.lein exists and take it istead of $HOME/.lein all would be for free
14:07cemericktechnomancy: I think the benefit of a submodule would be zero install…
14:07technomancylicenser: oh, you want to make sure user-level plugins don't conflict?
14:08cemerickNot that I'm actually advocating submodules. :-P
14:08technomancycemerick: right, the benefit of not using submodules is that you would get to not use submodules. =)
14:08cemerickTantalizing syllogism, that is.
14:08licensertechnomancy: yap that and also as cemerick pointed out - really zero install, plus the fact that different projects can use different versions of lein
14:08technomancysubmodules praemium sum est
14:08licenserand with that entirely different versions of clojure too
14:08technomancylicenser: using ~/.lein will actually not conflict
14:09technomancybecause each version's self-install is its own uberjar in ~/.lein/self-installs
14:09technomancythe only thing that's shared is ~/.lein/init.clj and user-level plugins, which I think in most cases you do want to share
14:09licenseryes but I'd have to edit the lein sh to switch between versions (i.e. clojure versions)(
14:10licenserhad a lot of fun with different clojure versions :P
14:10technomancyoh, are you trying to run lein on clojure 1.3? that's probably not going to work.
14:10licenserit is working great
14:11licenserhad to self upgrade a few libraries on the project side but it works
14:11technomancyoh, wow; interesting.
14:11technomancyis this 1.6.2-SNAPSHOT?
14:11licenserthere is a working lein uberjar on the github page for lein-clojurescript
14:12technomancyI guess if you did it on a per-project basis it wouldn't be a big deal since you'd be responsible for plugin breakage yourself
14:12licenserhttps://github.com/bartonj/lein-clojurescript
14:12licensertechnomancy: exactly my point :)
14:12licenserthat is why this semi lein lives in ./line and not global lein
14:12technomancythough honestly I think for clojurescript using eval-in-project with an in-memory clojure 1.3 project is cleaner
14:12technomancysomeone on the mailing list tried that and said it worked for him
14:13licenserthen I figured, hey that is actually a nice thing, reminds me of rebar from erlang
14:13licenserand then I figured that it is like only 3 lines in the lein sh to make lein work globally and locally
14:14licensercemerick: aside of being confusing? :P
14:14cemericklicenser: Or, not existing.
14:14licenseryes which is quite confusing
14:14cemerickheh
14:14cemerickyeah
14:14licenserso I still don't understood the entire concept of clojurescript
14:15licenserbut what I got working works great :OP
14:15licenserso it was a darn hard thing to translate foo.bar() -.-
14:15licensergeez
14:24tashafaclojurescript is the future.
14:24tashafafor me at least :)
14:25licensertashafa: it is certnely darn nice but it has a lot of pitfalls
14:25cemerickI love the vision. I need some trains running on time though.
14:25tensorpuddingi don't much understand the point either
14:25tashafawhat pitfalls?
14:25licenserlike foo.bar() for example
14:25ibdknoxcemerick, what?
14:25ibdknoxlol
14:26tensorpuddingyou still need to compile it to javascript for it to be useful
14:26tensorpuddingwhy not just write the javascript?
14:26cemerickibdknox: hrm?
14:26ibdknoxcemerick, you need some trains running on time?
14:26licensertensorpudding: I like clojure better
14:26cemericktensorpudding: that's like saying, why not write Java if you're going to run on the JVM.
14:26tensorpuddingit's not like javascript devs are in short supply
14:26ibdknoxtensorpudding, actually, they are
14:26licensertensorpudding: neither are java devs :P
14:27cemerickIn any case, just because you can sling more mess doesn't make the mess go away.
14:27licenseribdknox: no they are not, good js devs are in short sypply
14:27ibdknoxtensorpudding, try hiring a javascript person who doesn't suck right now
14:27cemerickibdknox: basic infrastructure services. I'm a releases broken record. :-P
14:27tashafaI've been using it on theis project of mine. and the advantages over javascript is godsend
14:27ibdknoxcemerick, I really want a cljs release too :(
14:27tashafaand I do a lot of javascript
14:28ibdknoxI hate javascript so much
14:28tensorpuddingwho knows, maybe dart will kick javascript to the curb
14:28tashafajavascript is my first love
14:28tensorpuddingokay, that's not going to happen
14:28tensorpuddingbut it'd be funny to think about it
14:28ibdknoxI spent 6 hours yesterday finding out that IE9 has broken Dom replacement
14:29ibdknoxa very simply set of steps will cause a reference to a dom element to be destroyed, while in every other browser it's fine lol (including IE8 and 7)
14:29cemericktalk about a swamp
14:29ibdknoxunfortunately, that's something cljs doesn't fix
14:29tashafaare you using jquery?
14:30zodiaktashafa, I prefer my first loves not to be abusive relationships ;)
14:30tashafazodiak: hahaha
14:30ibdknoxtashafa, I was, the repro I have to prove it's an IE9 bug doesn't
14:30technomancythe browser is giving ORMs a run for their money for the title of "the vietnam of computer science"
14:30technomancy"the vietnam war of computer science" rather
14:30licenserORMs?
14:30clojurebotspecial forms are http://clojure.org/special_forms
14:30tensorpuddingi like web dev
14:31technomancylicenser: object-relational mappers
14:31licenserah
14:31cemerickORBs -> ORMs -> browsers, huh?
14:32ibdknoxtensorpudding, I love the web. Web dev is terrible
14:32tensorpuddingwhat's wrong with it?
14:32ashafatechnomancy: I think browsers already have that title
14:32tensorpuddingi mean, if you ignore noncompliant browsers
14:32ibdknoxyou can't ignore that
14:32ibdknoxunless you don't care about users
14:33technomancyashafa: was specifically referring to http://blogs.tedneward.com/2006/06/26/The+Vietnam+Of+Computer+Science.aspx
14:33ashafathe scene has to be the worst
14:33zodiakibdknox, web dev is fun, if you ignore IE ;)
14:33tensorpuddingit seems easier to me to make an acceptable cross-platform experience with web than with anything else
14:33ibdknoxzodiak, and JS in general ;)
14:33technomancy"Designed for curl 7.20."
14:33zodiakibdknox, touche sir, touche
14:34licensertechnomancy: sure that your JS is curl compatible? :P
14:34ibdknoxfor example, there is no sensible date handling for JS
14:34ibdknoxdate.js does terrible things with timezones
14:34technomancytensorpudding: well the nice thing about developing CLI applications is that windows users typically don't want to use your programs anyway.
14:35ibdknox(inc technomancy )
14:35lazybot⇒ 1
14:35clojurebotNo entiendo
14:35ibdknoxgr
14:35ibdknox(inc technomancy)
14:35lazybot⇒ 19
14:35licenser(inc technomancy)
14:35lazybot⇒ 20
14:35ashafaI've learned when it comes to dates in JS its bext to roll your own. keep it constrained to what exactly it needs to do
14:35licenserwait tachnomancy has state?!?!
14:35ashafabest*
14:35licenserEVIL!
14:35licenseryou are mutating mate!
14:36technomancyit's ok; /me is an identity
14:36ibdknoxI keep nearly talking to tech-otter
14:36technomancyat least, I think I am
14:36technomancybut that should be good enough
14:36tensorpuddingmost people on mac don't want to use CLI apps either
14:36technomancyheh
14:36licenser(technomancy 1)
14:36ibdknoxtensorpudding, not true, the vast majority of devs are on macs now ;)
14:36licensertensorpudding: not true!
14:37cemerickI wonder if I'll have the brass to not support IE in my next app.
14:37dnolen_tensorpudding: ClojureScript is a much more expressive language than JS in IMO (fn [] ...) vs. function(){...}, as well cutting down ceremony for things which are tedious in plain JS (namespacing)
14:37tensorpuddingi as a linux user don't necessarily want foo to be a CLI app
14:37licensertensorpudding: are you thread safe?
14:37BronsaCLI is faster
14:37tensorpuddingCLI is more esoteric
14:37tensorpuddingless visual
14:37cemerickSounds like CLI is web scale.
14:37ibdknoxit is.
14:37ibdknoxvery web scale
14:37licenserthe best reason for Cli is - it follows the unix principle - lets you chan programs
14:38tensorpuddinga tool for devs, not users
14:38licensertry that with a GUI
14:38ibdknoxI'm working on the web scale CLI framework for Clojure
14:38ashafadnolen_: being able to do #(let [x ($ %2)]...)) is just pure ectasy
14:38TimMclicenser: s/chaining/clipboard/
14:38tensorpuddingwhats that $
14:38tensorpuddingis that from jquery or something
14:38ibdknoxjquery
14:39licenserTimMc: wait you want to say chaining is the same as a clipboard?
14:39dbushenkohi all!
14:39ashafa(def $ (js* "$"))
14:39tensorpuddingyou can use jquery with clojurescript?
14:39licenserhi dbushenko
14:39tensorpuddingthat's pretty convenient
14:39dbushenkois there a way to override a method of a java class except using proxy?
14:39TimMclicenser: Clipboard is the GUI substitute for chaining. :-)
14:39ibdknoxsort of
14:39licenserTimMc: but it is not nearly the same
14:39dnolen_tensorpudding: you can use any JS lib from ClojureScript. There's a couple of things that need fixing for it to be ideal tho.
14:39TimMcof course
14:40ashafatensorpudding: yes you can
14:40licenserno of cause not :P chaining allows for scriptability and automation clip boarding allows for a tennis arm
14:42tensorpuddingexcluding web stuff, what user apps use clojure?
14:43ibdknoxnot many
14:43ibdknoxthere are a few swing apps out there
14:43cemericklooks like overtone's new tooling uses swing
14:43technomancyit's not very common to distribute JVM-hosted programs to the user in any language
14:43ibdknoxClojure lends itself more naturally to server/computational applications
14:44ibdknoxovertone has new tooling? :D
14:44tensorpuddingright, i forgot
14:44tensorpuddingthe clojure gui choice is swing isn't it
14:44cemerickibdknox: http://overtone.github.com/blog.html
14:44cemericktensorpudding: or swt
14:45tensorpuddingwhich one looks less atrocious
14:45dnolen_cemerick: if Feb 2010 is considered new ;)
14:45ibdknoxcemerick, those are old mockups
14:45technomancypretty much all the JVM gui options end up deep in uncanny valley territory
14:45cemerickdnolen_, ibdknox hah, didn't notice the post dates :-(
14:46technomancylicenser: care to join #leiningen to discuss this pull request?
14:50Raynestensorpudding: http://github.com/daveray/seesaw is a good library for working with Swing.
14:50loomcoretensorpudding: check out guiftw, can be used with both swing and swt
14:50ibdknoxI need to look more into my embedded webkit idea
14:51Raynesloomcore: FIGHT! FIGHT! FIGHT!
14:51carkhow about making a web server with embedded jetty, then run it inside xulrunner ?
14:51carkwhile we wait for webkit inside the jvm
14:52tensorpuddingit was a metaphorical question, i have no desire to add to the list of java gui apps
14:52cemerickcark: that's what I've done via swt most recently
14:52brehautjvm is getting webkit?
14:52tensorpuddingwhat would jvm do with webkit?
14:52cemerickjavafx has a webkit view, no?
14:52carkbrehaut: it was supposed to, for 1.7 .... but no webkit =(
14:53tensorpuddingwhich java?
14:53carkcemerick: swt has a webkit ?
14:53ibdknoxcark, you can already embed webkit using swt
14:53ibdknoxyes
14:53carkmhh and how portable is it ?
14:53ibdknoxit requires webkit to already be on the machine
14:53dbushenkotensorpudding, I've found clojure as a really good tool for scientific applications
14:53cemerickcark: it uses the native browser: webkit on mac, IE vN on windows
14:54ibdknoxcemerick, you can force it to use just webkit
14:54carknice i need to investigate that
14:54ibdknoxwhich of course fails if it can't find it
14:54cemerickibdknox: oh, I didn't know that
14:54carkbecause swing is so annoying to work with
14:54cemerickgood to know.
14:54dbushenkotensorpudding, it allows me to really, really fast check some hypothesis, try new functionality or investigate a java library
14:54tensorpuddingit makes sense if your libraries are java i guess
14:54dbushenkoyep
14:54dbushenkousually they are
14:55tensorpuddingi'd be worried about introducing a java dependencies if they weren't
14:55tolstoyFolks, when I test the first example in: http://clojure.org/concurrent_programming, it seems that all the "tasks" run in the same thread!
14:55tensorpuddingdependency, even
14:55tolstoyDoes't Executors/newThreadPool actually create a pool of threads?
14:55dbushenkowell, that's your choice. Either clojure+java libs, either whatever which won't let you get results as fast
14:56tolstoynewFixedThreadPool
14:57ibdknoxcemerick, have you ever used the webview? I'm curious how you interop
14:58Raynestensorpudding: I wrote a purty swing app once.
14:58dbushenkoRaynes, btw, that's what I'm doing right now: a swing app :-)
14:58Rayneshttps://github.com/Raynes/tallyho
14:58RaynesIt actually didn't look terrible.
14:59cemerickibdknox: sure. Run jetty, have the web view connect to the auto-negotitated port, and you're good to go. IIRC, I didn't do anything fancy for interop aside from having a particular handler that would open up a file browser and such.
14:59drguildohow do i add a jar file to the clojure classpath?
14:59ibdknoxaw
14:59tensorpuddingthere's no way that a swing app could look pretty
14:59brehautdrguildo: use leiningen
14:59dbushenkodrguildo, just copy it to your libs/ directory
14:59cemerickSWT allows you to install additional protocol handlers, so you could do clj://(+ 1 2) to do evaluation or something.
14:59Raynestensorpudding: They're really only as ugly as the look and feel.
14:59fdaoudRaynes: no screen shots?
14:59dbushenkoif u are using leiningen
14:59ibdknoxcemerick, so I'm still going to have to write a noir app to drive it
14:59Raynesfdaoud: I'm looking for it.
14:59ibdknoxcemerick, oooh cool
14:59drguildoi'm not using leiningen
14:59tensorpuddingokay
14:59drguildoi want to mess with the classes in the repl
14:59cemerickibdknox: that's speculative, never bothered with it.
14:59tensorpuddingso it's the look&feel that's ugly
15:00drguildoi tried -cp but it doesn't work
15:00cemerickBut yeah, it's a ring app in the background in any case.
15:00cemerickI *think* my thick client days are over though.
15:00dbushenkodrguildo, but that's the way it should work
15:00cemerickCan't imagine needing to build one again.
15:00dbushenkodrguildo, a year ago I did that manually
15:00ibdknoxcemerick, well for a dev env...
15:01cemerickah
15:01Raynesfdaoud: http://raynes.me/hfiles/tallyho1.png The menubar was removed right after that was taken when daveray pointed out that I could throw a native! call in and it would put the menubar where it's supposed to go on OS X.
15:01drguildoi think i know what i might be doing wrong
15:01fdaoudtensorpudding: also, on linux, swing fonts are ugly no matter what the look and feel
15:01tensorpuddingdidn't think about fonts
15:02ibdknoxcemerick, otherwise, I pretty much agree.. that's why I focused on Noir first :) And soon Pinot again
15:02cemerickibdknox: Ironically, you may end up finding that using Eclipse RCP will be the best prototyping sandbox for your purposes. SWT + executable and packaging settled for all platforms, reasonable utilities, etc.
15:02drguildoyeah, it was my fault
15:02cemerick(that is, the RCP, *not* the IDE)
15:02drguildoi was running it from some batch file i'd created
15:03ibdknoxcemerick, yeah, I'll have to look at what the editor in eclipse can support
15:03fdaoudRaynes: no offense, but when you said "purty", I was expecting..something..a little more..elaborate..
15:03drguildoso i just called java directly and added the jar to the -cp as well as the clojure jar
15:03Raynesfdaoud: I never complained it wasn't simplistic. ;)
15:03RaynesEr...
15:04RaynesI never claimed.
15:04drguildogoodbye computer friends
15:05ibdknoxcemerick, do you know if it will support drawing non-text objects?
15:05danlarkinyou're too young for coffee!
15:06fdaoudRaynes: fair enough :)
15:06danlarkinit'll stunt your growth
15:06ibdknoxcemerick, the code editor that is
15:06Raynesdanlarkin: Man. This Conj stuff. I haven't slept longer than 5 hours in like 3 weeks. That's what I'm too young for.
15:06cemerickibdknox: I don't know yet. That's of prime interest to me given my desire to provide the option to get e.g. images from REPL evaluations displayed inline.
15:07ibdknoxcemerick, indeed.
15:07RaynesToo young for so many responsibilities that I have to sacrifice sleep in favor of them.
15:07danlarkinRaynes: staying up is a young man's game
15:07fdaouds/3 weeks/4.5 years/
15:07cemerickI almost always want them outside of the IDE, but it's too obvious of a desire elsewhere.
15:07fdaouds/Conj stuff/having kids stuff/
15:08RaynesI like to pretend that I have more to do than everybody else.
15:08ibdknoxcemerick, I'd want them in, just because I rarely need to do anything fancy with them, I just want to see it real quick
15:08RaynesIt makes me feel better about whining about it
15:08fdaouddon't you have a book to write?
15:08fdaoud;)
15:08RaynesYep.
15:09cemerickibdknox: stuff that's 5000px wide isn't friendly in a REPL interaction panel. ;-)
15:09fdaoudso more ammo for you to say you've got more to do than the next guy.
15:09ibdknoxcemerick, fiiiiine, I make simple 500px things ;)
15:09cemerick:-P
15:09brehautcemerick: you need a bigger repl panel :P
15:10cemerickbrehaut: was looking at the new thunderbolt LCDs the other day. It just might happen.
15:10brehautcemerick: awesome :) i need to get one of the non-thunderbolt LCDs before they disappear
15:11fdaoudbrehaut: thanks for the articles you posted on your blog. I particularly appreciated the clojure web stack one.
15:11brehautfdaoud: thanks :)
15:12brehautfdaoud: it needs to be updated for ring 1.0.0 and clj 1.3
15:12ibdknoxand Noir ;)
15:12brehautibdknox: fine
15:12brehautwhats another thousand words
15:12ibdknoxlol
15:13fdaoudbrehaut: I didn't know ring had a 1.0 release
15:13ibdknoxit nearly does
15:13brehautfdaoud: it doesnt yet; its got 1.0.0RC1 out
15:13ibdknoxI think it's still RC
15:13TimMclicenser: Bah, with enough mouse jockeys in India, you can have effective scriptability. :-P
15:13licenserTimMc: teehee
15:14licenserthen again they might miscopy and paste, they are sloppy like that
15:14fdaoudok so I'm not behind in the news
15:14fdaoudibdknox: is using hiccup required with noir?
15:14ibdknoxfdaoud, not at all
15:14licenserany in canter users around?
15:14fdaoudwriting html in clojure code just is not for me.
15:14brehautfdaoud: you can use enlive with noir
15:15ibdknoxyou can use anything
15:15brehautibdknox: but why would you when there is enlive ;)
15:15TimMc s/India/Georgia/ apparently these days
15:15licenseryou can use indian mouse jokes that copy and paste your html from frontpage express
15:15ibdknoxlol
15:15ibdknoxbrehaut, I want to make enlive simpler
15:16brehautibdknox: i want to remove deftemplate and create a wrap-enlive-render middleware
15:16fdaoudI don't want to use enlive either
15:16ibdknoxfdaoud, you can use anything that generates a string
15:17fdaoudI just want to respond in json. ibdknox: I'm sure that's not a problem with noir, right?
15:17brehautibdknox: or seq of strings?
15:17ibdknoxfdaoud, yeah, no problem (noir.response/json) will even do the work for you
15:17arohneris there a clojure fn for (.isBound (var foo))?
15:17fdaoudibdknox: great, thanks!
15:18tensorpuddingi felt pretty proud of myself when i finally "got" enlive
15:19gfredericks$findfn (var +) true
15:19lazybot[clojure.core/== clojure.core/distinct? clojure.core/boolean clojure.core/var? clojure.core/< clojure.core/= clojure.core/> clojure.core/>= clojure.core/<= clojure.core/bound? clojure.core/ifn?]
15:20gfredericksarohner: clojure.core/bound? looks like a good candidate
15:20ibdknoxI don't understand what findfn is doing there?
15:20gfredericksibdknox: it passes (var +) to a bunch of functions and reports the ones that return true
15:20ibdknoxthat's awesome
15:20gfredericksibdknox: yes.
15:21Raynesibdknox: You tell it what the input will be and what the output should be and it tries every single function until it gets the output you want.
15:21arohneris that in a library anywhere?
15:21Raynesarohner: findfn? No, but I'm moving it to one. Already working on it.
15:21gfredericksit all runs on a VM in Raynes's head
15:21RaynesUnfortunately, amalloy sucks at writing code, so it's a little more difficult than I originally thought.
15:21ibdknoxis that a bot only thing?
15:22RaynesBut it'll happen.
15:22ibdknoxwhoops
15:22ibdknoxanswered
15:22ibdknoxRaynes, I want that :D
15:22ibdknoxlet me know when it's in a lib
15:22gfredericks$findfn 3 6
15:22lazybot[]
15:22RaynesKay
15:22Raynes$findfn 3 3 6
15:22lazybot[clojure.core/+ clojure.core/unchecked-add clojure.core/+' clojure.core/unchecked-add-int]
15:23TimMcRaynes: Let me guess, it is written entirely in juxts?
15:23RaynesTotally.
15:23TimMc$findfn 1
15:23lazybot[clojure.core/* clojure.core/*']
15:23brehautTimMc: im sure theres a handful of to-fix in there too
15:23TimMchmm
15:23gfredericks$findfn 2
15:23TimMc$findfn 1
15:23lazybot[]
15:23lazybot[clojure.core/* clojure.core/*']
15:23TimMc$findfn 0
15:23lazybot[clojure.core/+ clojure.core/+' clojure.core/release-pending-sends]
15:23ibdknoxlol
15:23TimMc$findfn ""
15:23lazybot[clojure.core/with-out-str clojure.core/print-str clojure.core/pr-str clojure.core/str]
15:24gfredericks$findfn false
15:24lazybot[]
15:24gfredericks$findfn true
15:24lazybot[clojure.core/thread-bound? clojure.core/bound? clojure.core/and]
15:24TimMcaw
15:24gfredericks,(or)
15:24clojurebotnil
15:24gfredericksah
15:24TimMcaha
15:24TimMcOK, one more.
15:24gfredericks$findfn nil
15:24lazybot[clojure.core/dosync clojure.core/import clojure.core/prn clojure.core/refer-clojure clojure.core/print clojure.core/with-loading-context clojure.core/newline clojure.core/comment clojure.core/or clojure.core/load clojure.core/shutdown-agents clojure.core/await clo... https://gist.github.com/1349043
15:24TimMcthere we go
15:24gfredericksRaynes: thanks for letting us come over and play with your toys
15:24Raynes:p
15:42jcromartieOT: does anybody here use Adium for IRC?
15:43amalloybrehaut: findfn predates my induction into the cult of Useful
15:44amalloyso no to-fix
15:44brehautso purely juxt then
15:44amalloy&(nth #(iterate juxt identity) 1000) ;; this is the whole source
15:44lazybotjava.lang.UnsupportedOperationException: nth not supported on this type: sandbox6471$eval11065$fn__11066
15:44amalloy&(nth (iterate juxt identity) 1000)
15:44lazybot⇒ #<core$juxt$fn__3775 clojure.core$juxt$fn__3775@bbe161>
15:45brehautlol
15:45brehaut&((nth (iterate juxt identity) 1000) 1)
15:45lazybotjava.lang.StackOverflowError
15:45di-csuehsjcromartie: yes.
15:45brehautlazybot has a small stack
15:46brehaut&((nth (iterate juxt identity) 10) 1)
15:46lazybot⇒ [[[[[[[[[[1]]]]]]]]]]
15:46amalloy$findarg map % [1 2 3] [2 3 4]
15:46lazybot[clojure.core/unchecked-inc-int clojure.core/unchecked-inc clojure.core/inc clojure.core/inc']
15:48jcromartiewhat sorcery is this!?
15:48jcromartiereminds me of Smalltalk's method finder
15:50TimMcamalloy: findarg! That's what I was asking you about a while ago.
15:51amalloyTimMc: well, it exists but i always forget the syntax and/or that it exists
15:51amalloyso now you know
15:52amalloyjcromartie: i wrote it when i heard someone bragging about the smalltalk method finder
15:52jcromartieamalloy: nice
15:52jcromartieamalloy: source?
15:52fdaoudibdknox: quick yes/no question, does noir have anything to facilitate i18n?
15:53ibdknoxfdaoud, not explicitly. seancorfield has post about how he handled it though
15:53ibdknoxa post*
15:53amalloyjcromartie: don't judge too harshly. i wrote it only like four months into learning clojure
15:53ibdknoxfdaoud, http://corfield.org/blog/post.cfm/real-world-clojure-i18n-resources
15:53amalloyand it's kinda tangled up with the rest of lazybot's clojure plugin (Raynes is working on factoring it out, i think): https://github.com/flatland/lazybot/blob/develop/src/lazybot/plugins/clojure.clj#L147
15:53RaynesI'll have it pushed to Github and released in like 15 minutes.
15:54amalloynice
15:54fdaoudibdknox: thanks!
15:54jcromartieamalloy: I'll be gentle
15:59Raynesibdknox, TimMc, amalloy, etc: https://github.com/Raynes/findfn
16:00TimMcsweeeeet
16:00TimMcgonna add that to my REPL's default bindings
16:00RaynesI've used a couple of 1.3-only things, fyi.
16:01RaynesLike the new inline def docstrings and ^:dynamic.
16:11arohnerwhat was the name of the library that's all about retrying functions?
16:11arohnernamed after a person, I think
16:11Rayneswalton?
16:11scgilardirobert bruce
16:12arohnerscgilardi: thanks
16:12gfrederickswhat're "inline def docstrings"?
16:13Raynes(def foo "I like bar" 0)
16:13gfrederickswell it's about time.
16:13Raynes;)
16:14gfredericks#^{:doc "why did I have to type four punctuation marks in a row to wah wah wah"}
16:14gfredericksand so instead I leave my defs undocumented :)
16:16gabemcHey, question about java interop: I have the libvirt jar bindings for java,
16:16gabemcbut when I try to import one of the main classes via (import '(org.libvirt Connect)), I get a class not found exception.
16:16fdaoudok here's a dumbass question: where is clojure 1.3.0 for maven? http://build.clojure.org/releases/org/clojure/clojure/ only has 1.3.0-alpha4
16:17Raynesfdaoud: http://search.maven.org/#search%7Cga%7C1%7Cclojure
16:17gabemcfdaoud: It's on apache's main repo site.
16:17fdaoudohh, geez
16:17fdaoudsorry
16:18Raynesfdaoud: I hope it didn't seem condescending to point you at a search page.
16:18gabemcfdaoud: I actually just had the same question myself, not 20 minutes ago. I just knew where to look first.
16:18RaynesI just didn't feel like clicking the top search result and linking you to that instead.
16:19fdaoudso if I was using org.clojure/clojure-contrib/1.2.0 before, now it should be..?
16:19gabemcDoes anybody know why the URLClassLoader wouldn't load a particular java class from clojure?
16:19brehautfdaoud: http://dev.clojure.org/display/design/Where+Did+Clojure.Contrib+Go
16:19fdaoudRaynes: not at all, I'm just grateful for people offering to help
16:19gabemcIt does have JNI bindings inside the class, if that matters (never done JNI before, so I don't know).
16:20Raynesfdaoud: clojure 1.3.0 and whatever specific libraries you need from contrib that are still around (but migrated to their own libraries individually, per the link above).
16:20fdaoudgabemc: thanks
16:20fdaoudRaynes, brehaut: thank you, much appreciated
16:21RaynesNo problem. We get off on your happiness.
16:21fdaoudawesome, makes me want to pay it forward.
16:22brehautfdaoud: tangentally related: http://mostlylazy.com/2011/11/08/episode-0-0-1-sean-corfield-clojure-contrib-and-real-world-clojure/
16:22duck1123quick, run up to a stranger and tell them where they can find the 1.3.0 release of clojure
16:23fdaoudbrehaut: good stuff
16:24fdaoudduck1123: I would but I'm still stuck on trying to convince strangers (ok friends) to even try clojure
16:24brehautfdaoud: they are pretty strange if they dont want to try clojure
16:24fdaoudnot easy when they just can't seem to get past the !@&*?! parens thing
16:25duck1123fdaoud: if they won't learn clojure for you, then they're not real friends
16:25RaynesDid somebody say… TRY CLOJURE!?!?!?! http://tryclj.com
16:25jkkramer]\
16:25jkkramer]
16:25brehautfdaoud: the parens are one lexeme to the left! the world is ending!
16:25jkkramersorry, cat
16:25fdaoudthere was the inversion of the sequence of function calls, but that got resolved with -> and ->>
16:25fdaoudso there is some hope
16:27brehautfdaoud: it takes time, no need to rush them
16:28fdaoudbrehaut: yeah. they're just not as excited about fp as I am.
16:29gfredericksRaynes: yes, somebody did.
16:30brehautfdaoud: then dont go at the FP angle ;)
16:31brehautfdaoud: what about clojures more flexible approach to objects and polymorphism?
16:31amalloybrehaut: c'mon, like three lexemes
16:31amalloyfoo . bar ( vs ( .bar foo
16:32brehautamalloy: fine. if they are die in the wool java programemrs
16:32arohnerwhat's the best way to figure out why a clojure process isn't exiting?
16:32amalloyheh. die in the wool. i can just see someone suffocating, covered with sheep
16:33brehautamalloy: the dangers of keggers in shearing season
16:33amalloyarohner: kill -9. you won't find out anything valuable, but you'll have vengeance
16:33arohneramalloy: :-)
16:33gfredericksfdaoud: I'm personally a fan of the data structures and seq abstraction
16:33manutterarohner: hmm, profiler? If you let it sit and spin for a while, I'd think there'd be a noticeable spike wherever it's getting stuck.
16:34jkkramerarohner: tried (shutdown-agents)?
16:34jkkramerassuming you're using agents or futures
16:34manutterwell, try shutdown-agents first, of course :)
16:34manutterthen the profiler
16:34amalloyyeah, it's probably the agents
16:35brehautsecret agents skulking in the background
16:35arohnerI have the profiler running, but what should I be looking for? live, non-daemon threads?
16:35fdaoudbrehaut: true, but you know, when they can't get past the parens thing.. I don't insist
16:35fdaoudgfredericks: +1
16:35duck1123I'm getting an odd error trying to use langohr. https://gist.github.com/1349315 anyone know what's going on here?
16:36brehautfdaoud: if they dont have a reason to want to get past them, they likely never will
16:36manutterarohner: I'm just thinking that if you've got something stuck in a loop, the longer you let it hang, the more time it will spend being stuck
16:36manutterso look for code that gets a bigger chunk of the profile the longer you leave it hung up.
16:36arohnermanutter: my cpu usage is essentially 0%
16:37callentechnomancy: http://www.readwriteweb.com/hack/2011/11/groveio-hosted-searchable-irc.php mother. fuck.
16:37duck1123calling .getBody outside of the defn works, but not inside
16:37amalloymanutter: seems like blocking is more common than spinning
16:37manutterhrm, well, I'm not a guru debugger, maybe my idea is just not helpful
16:37fdaoudbrehaut: probably. after a while I just stop trying. I don't have anything to gain anyway, it's just the urge to share the joy.
16:37brehautfdaoud: totally familiar with that :)
16:37manutterif the profiler isn't helping then try something else
16:38jcromartiefdaoud: I have a friend who resents it when I post clojure code at him, just because it's clojure
16:39fdaoudgfredericks: along the same lines, I am happy about not having dumb model objects or a !?>#*! orm to mirror every last table in the database.
16:39fdaoudjcromartie: yikes. why the hate?
16:39gabemcso, no thoughts on the loader issue?
16:40jcromartiefdaoud: dunno, he thinks I'm evangelizing when it's really just what I'm writing code in. but I have tried to sell him on persistent data types, concurrency, etc.
16:41fdaoudjcromartie: sounds like he reached the point where you say clojure and he just plugs his ears and says "la la la la la"
16:42fdaoud(like me with scala)
16:43jcromartiefdaoud: hah, I guess so
16:46technomancycallen: huh; interesting
16:46technomancycallen: I was kinda surprised nobody offered that as a hosted service
16:47jhixtonclojure noob here.. is there a better way to do this? https://gist.github.com/1349340
16:49amalloyjhixton: that looks reasonable
16:49amalloyi hate the names args and args-, though
16:49gfredericksfdaoud: yeah I definitely don't miss all the background-oop-magic that the rubyists are fond of.
16:49amalloysomething like names and values would be clearer
16:49technomancy_,((partial zipmap :thread :posts) [1 2])
16:50clojurebot#<ArityException clojure.lang.ArityException: Wrong number of args (3) passed to: core$zipmap>
16:50technomancy_,((partial zipmap [:thread :posts]) [1 2])
16:50clojurebot{:posts 2, :thread 1}
16:50jhixtoncool
16:50technomancy_works too
16:50jhixtonamalloy: good point on the names
16:50tensorpuddinghooray for partial functions
16:50amalloy&((comp (partial zipmap [:thread :posts]) list) 1 2)
16:50lazybot⇒ {:posts 2, :thread 1}
16:51fdaoudgfredericks: like Uncle Bob said re Rich Hickey's talk: "Rails is easy, it is not simple."
16:51gfredericksindeed
16:58fdaoudlater all, thanks for being such an awesome community
17:00gfredericks(inc us)
17:00ibdknoxlol
17:00gfredericksdangit lazybot
17:01brehautgfredericks: i think its confused because 'us' isn't a known symbol; perhaps you should try a keyword if you are jsut going to make stuff up
17:01gfredericksbrehaut: it's always let you make stuff up
17:02goodieboyi'm having a hard time getting noir to run in tomcat
17:02ibdknoxgoodieboy, include your views explicitly at the top of server.clj
17:02goodieboyi cloned this project (https://github.com/rathwell/noir-tomcat-test), created the uberwar, put the warfile in tomcat's webapps dir... and get this:
17:02goodieboyibdknox: ok let me check on that...
17:02callentechnomancy: it'll be paid and proprietary
17:02callentechnomancy: should I eat their lunch?
17:03callentechnomancy: I could make a fully integrated service that did what they purport to offer.
17:03technomancycallen: dooooo iiiiit =)
17:03callentechnomancy: trivially.
17:03technomancycallen: did you see the hubot installer?
17:03goodieboyibdknox: here's the error: java.io.FileNotFoundException: /var/lib/tomcat6/webapps/tomcat-test-0.1.0-SNAPSHOT-standalone/WEB-INF/classes/public (Is a directory)
17:03ibdknoxgoodieboy, that happens when there are no routes defined
17:03callentechnomancy: I've been poking around hubot's source, not specifically familiar with what you're talking about though.
17:03goodieboyhmm
17:03ibdknoxgoodieboy, war's are much more complicated than jars
17:04ibdknoxgoodieboy, at the top just do (:require [my.view.ns1] [my.view.ns2])
17:04ibdknoxgoodieboy, and it'll be good to go
17:04goodieboyibdknox: ok i'll try that
17:04callentechnomancy: I'll be honest, I don't like it when people try so hard to "profit" off of what is scarcely a service.
17:04clojurebotOk.
17:04callentechnomancy: and likely doing so by reusing a piped chain of OSS
17:04ibdknoxwhy?
17:04clojurebothttp://clojure.org/rationale
17:04callentechnomancy: it's most UI :\
17:05technomancycallen: there's a site where you can click a couple buttons and it'll install hubot on a free heroku dyno
17:05ibdknoxI think you dramatically underestimate the difficulty of running a business
17:05callenibdknox: I work for a startup, try me.
17:05ibdknoxlol
17:05callenibdknox: climbing Mt. Everest is hard, but it doesn't feed anybody.
17:05callenibdknox: difficulty doesn't define utility. Don't conflate the two.
17:05technomancynot sure why I can't find the link now
17:05ibdknoxcallen, when did I ever say it did?
17:06callentechnomancy: http://visuallounge.techsmith.com/2011/11/dev_corner_-_installing_hubot.html
17:06callenibdknox: that was the implication. Why would I care otherwise how difficult it is to run a business after what I expressed?
17:06ibdknoxcallen, you said you could replicate their company trivially
17:06ibdknoxcallen, you're a designer then?
17:06technomancycallen: no, there's a site where it's all "what would you like to call it, and what's account info" and bam; push-button bot service
17:07callentechnomancy: that's pretty impressive.
17:09callenibdknox: the problem I have, is that they're going to charge for it as if it's some sort of novel business collab application
17:09callenibdknox: when the only value they've introduced is made a new web IRC client.
17:09ibdknoxcallen, they're going to charge for it because they did work.
17:09technomancyhttps://hubot-factory.herokuapp.com/
17:09callenibdknox: hosting an ircd has been a commodity service for decades.
17:10ibdknoxcallen, there's absolutely nothing wrong with that.
17:10callenibdknox: I repeat, difficulty doesn't translate to utility.
17:10ibdknox?
17:10callenibdknox: some people would rather praise every daisy as if it were unique and special. I'd rather cull the useless.
17:10ibdknoxcallen, repeating a statement that is not related to our current argument is not actually a valid debate tactic.
17:10callenit's pertinent to what you said.
17:11callenyour inability to recognize it as such has no bearing on that.
17:11ibdknoxrofl
17:11callenlabor doesn't mean value.
17:11ibdknoxcallen, alright man.
17:11callendo you comprehend that?
17:11callenthat was the core fault of marxism.
17:11technomancy~gentlemen
17:11clojurebotYou can't fight in here. This is the war room.
17:11ibdknoxyou're a genius. I'll leave you be. :)
17:11cemerickHow did we get on the topic of Marxism? :-P
17:11technomancyI don't think I've gotten a chance to use that one here yet
17:11technomancy~botsnack
17:11clojurebotthanks; that was delicious. (nom nom nom)
17:11ibdknoxcemerick, I'd love to know myself.
17:12callenit shares a fallacy that he was expressing.
17:13ibdknoxcallen, The only statement I made is that replicating their work is non-trivial, because you underestimated the fact that creating a business of any kind if significant work.
17:13ibdknoxcallen, you argued an entirely different point
17:13ibdknoxthis reminds me very much of the NS fiasco the other night.
17:13callenI don't care about the business side
17:13callenI care about product.
17:14callenI don't want to replicate their sales funnel or CRM database or their support infrastructure
17:14callenI want to make them irrelevant and unnecessary to people that know what they're doing./
17:14callenthere's a very simple, easy to understand distinction that I just made
17:14callenif that's too hard grasp, I don't think textual forms of communication are your cup of tea.
17:14cemerickibdknox: There's a fiasco every night these days. :-/
17:15ibdknoxcallen, woah now.
17:15callenibdknox: in future, if you don't have anything positive to say, don't speak to them.
17:15ibdknoxwow
17:15callenibdknox: I wasn't talking to you originally.
17:15brehautthere was a fiasco about namespaces?
17:15ibdknoxyou're talking in IRC dude
17:15callenibdknox: then don't expect me not to react.
17:15ibdknox...
17:15ibdknoxjesus christ man
17:15seancorfieldtoo many negatives :)
17:16ibdknoxI'm sorry I hurt your feelings.
17:16ibdknoxI'll try to be nicer next time.
17:16callenit's not about feelings, I just find people being intentionally obtuse frustrating.
17:16ibdknoxyou just completely belittled someone else's work
17:16callenyou can't serious suggest you didn't understand the concept of "difficulty/effort != utility", right?
17:16ibdknox...
17:16ibdknoxhaha
17:16ibdknoxok
17:16cemerickI've always preferred being acute, myself.
17:16ibdknoxI'm done :)
17:17callenI don't care how difficult it was for them to make.
17:17ibdknoxI apologize to the rest of the channel for this nonsense
17:17callenI'm slicing off one aspect of the utility they're providing it and reimplementing that.
17:17Raynesgfredericks: I wouldn't bother.
17:17RaynesIt isn't a very interesting argument.
17:17ibdknoxgfredericks, it really isn't
17:17callennot at all.
17:18gfredericksaw, but it looks like conflict!
17:18gfredericksokay. I'll try to stay positive...
17:18ibdknoxhahaha
17:18aperiodicit's not even really a flameway
17:18aperiodics/flameway/flamewar/
17:19technomancyRaynes: so the problem with spawn is really about getting a full listing of known genomes?
17:19technomancynot about figuring out the content of any specific genome?
17:19gfredericksman why svn gotta be so slow.
17:20amalloygfredericks: git-svn, commendations for everyone?
17:20gfredericksamalloy: I don't trust eclipse to know what's going on
17:20gfredericksamalloy: and I'm not sure git-svn is any faster for the checkout-update stuff
17:21amalloy"I don't trust eclipse to know what's going on" - popular sentiment
17:21gfredericksamalloy: I also don't trust eclipse to tell me when it can't figure something out :)
17:23Raynestechnomancy: Yes, everything else works fine right now.
17:23technomancygotcha. yeah, I had to reimplement that for lein help; it was kind of a pain
17:24RaynesIt's just listing all of the genomes that is the problem because they can be spread out in a number of jars/not in jars, etc.
17:24technomancycan't you delegate that to the build tool though? does it need to be part of spawn itself?
17:24RaynesI'd like it to be in spawn itself, because it'd mean duplicating code in every build tool that uses it.
17:24RaynesPlus, spawn can be a standalone tool without any build tool intervention.
17:25RaynesLike marginalia and the like.
17:25technomancyoh, didn't realize that
17:25technomancydoes tools.namespace still have that annoying warn-on-reflection bug?
17:25RaynesI haven't seen them spew.
17:27amalloytechnomancy: so it looks like lein supports some kind of :debug option in project.clj, but i don't immediately see what it does or what its value is supposed to be
17:27technomancyamalloy: stuarthalloway asked me to add it
17:28technomancyhe said the compiler may look for that system property at some point
17:28amalloyso you take it and set it as a system property or something?
17:29technomancyyup
17:29amalloycake recently added a :debug flag (true/false), and i'm findnig that lein blows up if it sees that
17:29amalloywhich is reasonable, and i think i argued for cake using a less-global-sounding flag
17:29technomancyo_O
17:31amalloybut whatever value i give for :debug, lein swank fails with https://gist.github.com/1349493
17:31amalloyand lein repl times out on connecting to the socket, presumably because creating the socket failed with a similar error
17:32technomancyoh bugger, it's looking for a string
17:32technomancythanks for the heads up
17:33amalloytechnomancy: incorrect. even with a string i get the same error
17:33TimMccallen: I think they're selling a *pretty* web interface, as well as support.
17:33amalloyit's not the true in :debug true that fails; it's some other boolean
17:33technomancyamalloy: right, I mean the property-setting function is expecting a string, and get-jvm-args is forcing it to a boolean
17:33ibdknoxTimMc, oh god... why?? why would you do that?
17:34callenTimMc: quite right.
17:34ibdknox....
17:34amalloyk
17:34ibdknoxhahahaha
17:34callenTimMc: I'm cherry picking the database access, API, indexing, essential non-necessity of an IRC client per se while maintaining compatibility with the multitude of IRC bots out there, etc.
17:34technomancynice to catch that kind of thing before people actually start using it =)
17:34callenTimMc: I started with an IRC bouncer that had a database API, it is growing.
17:35technomancyisn't most of what you're paying for with a hosted service like that just someone to blame when it goes down?
17:35callenwell, I'm starting with the bouncer.
17:35callenand trying to keep it modular.
17:35TimMctechnomancy: Yup.
17:35callentechnomancy: you can accomplish the same thing for less money
17:35callentechnomancy: by making a re-deployable heroku application
17:35TimMccallen: Make sure to put in some drop-shadows, otherwise you are neglecting a core feature. :-P
17:35callentechnomancy: let them blame heroku is if it breaks.
17:36Raynescallen: He works for Heroku. :p
17:36callenRaynes: why do you think I said that?
17:36RaynesI wasn't entirely sure you knew.
17:36callenTimMc: the web client would come last after the core functionality is there, but sure. Hypothetically my conceptualization of it would allow for your own ircd if you desired.
17:36amalloytechnomancy: cool beans. in the mean time cake will use a different name so we can support this :debug thing
17:37technomancyamalloy: yeah, presumably you would want :debug to flip this property if it ever gets used.
17:43technomancyRaynes: is defgenome actually necessary?
17:43technomancyit looks like the kind of thing that should either be a defn or just a def map
17:43Raynestechnomancy: Not at all.
17:43callendefuniverse
17:43callen[:deities]
17:43Raynestechnomancy: We added it because it cut back on a bit of code duplication. It's just a wrapper around the other stuff.
17:46technomancycan't it just be reduced to a defn that calls build-filesystem?
17:46technomancyalso, it's not really a filesystem. =\
17:46ibdknoxtechnomancy, I wanted to start over, but we tried to build into what was already there
17:46ibdknoxtechnomancy, we left most of the names
17:47technomancyunderstandable
17:47Raynestechnomancy: Keep in mind that I didn't write this.
17:47RaynesI just tried to make it usable.
17:49technomancysure, it's not diplomatic to just rip everything out
17:50amalloyman, filesystem? i don't think i can ever use spawn, now
17:51ibdknoxlol
17:56aperiodictechnomancy: is there a reason why compilation happens before fetching deps when running `lein uberjar`?
17:59aperiodictechnomancy: it'd be convenient if it were the other way around, since then i wouldn't have to run `lein deps` beforehand if there are changes in the dependencies that are needed to get the project to compile
18:26technomancyRaynes: so the main changes have been around using clostache instead of a custom templater?
18:28technomancyaperiodic: for me it always does deps before AOT, can you give a simple repro case?
18:31callenanyone here use a triple-monitor setup with Linux? I have one and I'm trying to put something together that is a little nicer.
18:31callenI ask here because the people here are smarter. :\
18:31technomancyxmonad?
18:31callenooh, good call.
18:31callenthey're pretty dead though.
18:32callenat least whenever I check in.
18:32technomancyno, I meant to ask if that is what you're using
18:32aperiodictechnomancy: will do this evening
18:32callentechnomancy: yes.
18:33callentechnomancy: the fact that I'm using xmonad isn't totally material to the GPU/driver related problems I'm having, but all the same. The nvidia driver on Ubuntu 11.10 appears to be totally boned for multi-monitor.
18:35Raynestechnomancy: It was using stringtemplate before. I switched it over because I didn't want to clone and work on an hg repo to update the library to 1.3
18:36jweissis it possible for pr to operate on an object to print something (in my case, i've stored the original form in the meta, which i want to print), without actually evaluating it? i'm thinking a delay object
18:39jweissbah, clojure.lang.Delay cannot be cast to clojure.lang.IObj
18:45dmi3yHi, guys! I recently started learning Clojure. Can somebody help me to understand why my 'Hello World' program behaves weird?
18:45brehautdmi3y: put your code up on a gist or similar
18:45dmi3ysure
18:46dmi3yhttp://pastebin.com/LBG36Ct6
18:46dmi3yThe question is, why the printed string contains space characters after it got trimmed?
18:46amalloywhenever someone asks for help with hello world, the answer is "you didn't mean to use ((foo"
18:47amalloythough it looks like not in this case
18:47amalloy$javadoc String trim
18:47lazybothttp://download.oracle.com/javase/6/docs/api/java/lang/String.html#trim()
18:48amalloy&(.trim "\t\nfoo\t\n")
18:48lazybot⇒ "foo"
18:48brehautdmi3y: just to be pedantic, it contains _white_space characters, but no space characters (it contains new lines and tabs)
18:49amalloydmi3y: if it's printing \n, that's because the text contains the two-character sequence \ followed by n, not the single newline character
18:49amalloy&(.trim "\\t\\nfoo\\t\\n")
18:49lazybot⇒ "\\t\\nfoo\\t\\n"
18:49amalloy&(println (.trim "\\t\\nfoo\\t\\n"))
18:49lazybot⇒ \t\nfoo\t\n nil
18:49dmi3yah, ... I see now
18:50dmi3ynot clear why it has doubled backslashes though
18:50technomancycallen: oh, gotcha. yeah I learned to stick with Intel graphics long ago
18:50amalloydmi3y: that's not what's happening. it has a single backslash and an n
18:51amalloyto write that in a string literal you would have to type two backslashes, because \n is an escape meaning "replace this with a newline character", but input string has actual backslashes and ns, so what would happen in string literals is not relevant
18:52dmi3yok, that's clear
18:54dmi3yaccording to javadoc for String the trim() method should return a copy of the string, with leading and trailing whitespace omitted.
18:54callentechnomancy: intel graphics works great if you only want one or two monitorsd.
18:54callentechnomancy: they don't have anything that supports three.
18:54technomancycallen: I actually use synergy for extra displays these days
18:55callennot...quite what I had in mind.
18:55callenxmonad handles the problem of expanding my workspace
18:55callenit's unified and quite nice
18:55callenI just want to have three "views" into that.
19:01naeuanyone in here at the Sheraton Raleigh Hotel tonight?
19:01callennaeu: yes but I'm busy stashing the body.
19:02callennaeu: I can catch you later for a drink if you want.
19:02naeucallen: do you plan on eating the body?
19:02callennaeu: only if I can find some worcestershire.
19:02naeugood luck with that
19:02RaynesA1. It's that important.
19:03naeuI might head out for some food in a bit
19:03naeuthe #clojure_conj twitter stream seems earily quiet
19:03callenRaynes: hahahaha
19:04Raynesnaeu: Give it a day or so.
19:04alexbaranoskynaeu: I wish!
19:04naeuRaynes: naturally :-)
19:04alexbaranoskynaeu: I'm leaving after work tomorrow night
19:04naeuperhaps it's a lull before the storm
19:04naeubut there must be a few stragglers about
19:04alexbaranoskyflight's in around 8:33 roughly
19:05naeualexbaranosky: nice - how many hours is your flight?
19:05alexbaranoskyI saw Ambrose tweeting about looking for folks earlier today
19:05alexbaranoskymaybe DM him on twitter?
19:05alexbaranoskyflight is realy quick... like 1.5 hours or something
19:05naeualexbaranosky: already one step ahead of you there :-)
19:05alexbaranoskyfrom Boston
19:05naeualexbaranosky: ah, you're lucky
19:05naeui was 8 and a bit from London
19:05alexbaranoskyflight back is longer
19:06alexbaranoskythat'll do it
19:06alexbaranoskydo you work in London?
19:06naeuCambridge
19:06alexbaranoskycompany I work for is based out of London
19:06naeu(which isn't far from London)
19:06naeuoh nic
19:06naeue
19:06alexbaranosky(Thanks I had no idea)
19:06callenCambridge is sorta close to London
19:07callennot exactly an enjoyable bus-ride
19:07callenit's half-way to Bath anyway.
19:07technomancyhttp://achewood.com/index.php?date=08052004
19:08naeuok, Aaron is hacking in the hotel bar
19:08naeui'll go find him :-)
19:08alexbaranoskytake it easy
19:08naeucatch you later
19:08naeuhave a good flight everyone
19:09callentechnomancy: apropos.
19:10technomancycallen: it's my super power
19:10technomancyability to find apropos comics
19:11callen,apropos-comic London
19:11callenhrm.
19:11amalloytechnomancy: mine too, but there are so few comics about apropos. really it's just $ man apropos
19:11callen~apropos-comic London
19:11callenaw come on.
19:11technomancycallen: it's there ^ what more do you want?
19:11callenthe bot needs this functionality.
19:11technomancyheh
19:11callenI'm serious.
19:11callenI know how you could make it too.
19:12amalloyclojurebot: apropos-comic is <reply> technomancy, come quick! someone wants a comic!
19:12amalloyi think clojurebot may have passed out
19:12callenthat's cheating!
19:12amalloy~ping
19:12technomancyoutsourcing affects everyone these days
19:12brehautamalloy: perhaps its currently aboard a flight to the conj and has lost wireless?
19:17clojurebot#<CompilerException java.lang.RuntimeException: Unable to resolve symbol: apropos-comic in this context, compiling:(NO_SOURCE_PATH:0)>
19:17tolstoyAnybody here have experience with CongoMongo? Seems that (destroy! :collection {:key "value" …. }) doesn't delete. No docs. Not sure I understand the code.
19:28tolstoyPhew! User error! $gte is apparently more meaningful than gte$.
19:29callenclojurebot: that was slow.
19:29callenclojurebot: were you GC'ing or what? yeesh.
19:54jcrossley3technomancy: we needed some immutant-specific files included in a new project. how should we have created them with lein without reinventing a wheel?
19:55technomancyjcrossley3: was just looking at that earlier today
19:55technomancyhttps://github.com/ibdknox/lein-spawn is the best bet so far
19:56jcrossley3is there an example of its use somewhere? it's not clear how we would integrate with it.
19:57jcrossley3i guess i should start with "what is spawn?" :)
19:57technomancyyeah, zero docs and more macro magic than I would like right now unfortunately
20:00technomancywow, found a crazy bug.
20:00technomancyapparently the reader will happily read spawn genomes with their crazy {{whatevs}} syntax
20:01technomancyand it won't throw an exception until you try to print it (!)
20:02technomancy,(do (read-string "{{whatevs}}") nil)
20:02Raynestechnomancy: Man, there isn't any macro magic. You don't even have to use that macro if you don't want it.
20:02RaynesIt's just there because it seemed like an easier way to write quick genomes.
20:02brehautRaynes, technomancy: what is this project?
20:03technomancyRaynes: sure, but all the examples use it
20:03RaynesWell, why not?
20:03technomancyit just could be more obvious, that's all.
20:04RaynesIt definitely needs documentation. And a lot of things. But that's why it hasn't seen a release yet. :p
20:04technomancybrehaut: spawn, for templated project output
20:04RaynesI'll have more time to work on it after the conj.
20:04brehautah right
20:05Raynestechnomancy: Anyways, I'll iterate through the API and see what I can improve when I get a chance.
20:06RaynesI'll consult with you when I do, because we can probably come up with better ideas together.
20:06RaynesI'm off. Got packing and stuff to do.
20:06technomancyok, sounds good
20:06technomancyso why is it that the reader happily accepts "{foo}" ?
20:07brehaut,(read-string "{:foo}")
20:07brehautwrong bot clearly
20:07jcrossley3Raynes: where's the source for spawn?
20:07technomancybrehaut: it explodes when you try to print it, but not when read
20:07brehauttechnomancy: thats real curious
20:08amalloy&(= (read-string "{x}"))
20:08lazybotjava.lang.RuntimeException: Map literal must contain an even number of forms
20:08amalloytechnomancy: fixed in 1.3 i think
20:09amalloycuz lazybot had such an error in his config file, in a setting nobody ever used, and it went unnoticed until Raynes ported to 1.3
20:09technomancyah, so it's not my fault then
20:09technomancywhew
20:09aperiodicjcrossley3: looks like https://github.com/levand/spawn
20:10jcrossley3aperiodic: thx
20:10amalloyi reserve the right to discover you wrote the map-parsing code in 1.2, though, so don't relax just yet
20:11technomancyclojurebot: who is to blame?
20:15amalloyuhoh. i bet you've taught him a meaning for "who" now, technomancy
20:15technomancyamalloy: a while ago he had a feature where he would select a nick at random from the channel residents
20:42brehautmoogatronic: http://brehaut.net/blog/2011/l_systems
20:43moogatronicbrehaut: awesome!
20:43brehautmoogatronic: if you have a url you want me to link to, i can update it
20:43moogatronica url?
20:44brehauti mentioned you in the first para or something; but i had no url to reference
20:44brehaut(twitter, github etc)
20:44moogatronicah
20:44moogatronic@damionjunk
20:44moogatronici see you didn't use comp and partial in this version.
20:45technomancybrehaut: how about some syntax highlighting?
20:45brehauttechnomancy: working on it
20:45moogatronicI spent a lot of time reading about those. pretty cool.
20:45technomancybrehaut: squeaky wheel, I know
20:45brehauttechnomancy: heh :) i looked into some of the suggestions you made; the js one looks good, but currently breaks all my archives.
20:48moogatronicI appreciate seeing your turtle. I was about to msg you to ask what you'd suggest, regarding state / etc.
20:49brehautmy turtle is pretty poor; im not super sharp on java2d
20:49brehautbut it should provide a starting point
22:02eyerisThe clojure-mode README says I can install from the marmalade package repository and provides some emacs lisp to evaluate in order to do so
22:02eyerisI have elpa installed but when I evaluate the clojure-mode installation code I get the error Symbol's value as variable is void: package-archives
22:08eyerisNevermind -- I have emacs 23. I just pulled package.el from emacs 24 and now it works
22:11calleneyeris: o rerry?
22:12calleneyeris: that would be the first time I've heard of package.el fixing something rather than breaking.
22:13eyerisWell it satisfied that clojure-mode install code
22:14eyerisHowever the clojure-jack-in command is still not available, despite being in clojure mode
22:14calleneyeris: sounds like an old clojure-mode.
22:14calleneyeris: get an up-to-date one.
22:15eyerisYeah, for some reason the last time I started emacs it didn't recompile the newly installed clojure-mode
22:16eyerisI think that's probably because I had the traditional slime package installed too
22:16callenhrm.
22:22qizwiztrying to play with some of the web frameworks in clojure. my first exposure to both clj/lein.
22:22callenqizwiz: use Noir.
22:22tensorpuddingqizwiz, which ones?
22:22qizwiznoir
22:22callentensorpudding: it doesn't matter, he should use Noir.
22:22callenSee?
22:23tensorpuddingnoir is pretty good
22:23qizwizbut I'm having a problem getting past the lein plugin install...bit
22:23tensorpuddingplugin?
22:23qizwizper the "Getting Started" in the page
22:24qizwizlein plugin install lein-noir 1.2.1
22:24tensorpuddingoh
22:24tensorpuddingi didn't do that
22:24tensorpuddingwhat does lein-noir do?
22:24qizwizgetting this error: Exception in thread "main" java.io.FileNotFoundException: /Users/jhill/.lein/plugins/lein-noir-1.2.1.jar (No such file or directory)
22:25qizwizwhich seems like its something obvious, but given these are the first few minutes I've ever looked at any of it, has me a bit stumped
22:25tensorpuddingwell, it isn't fetching it first, which is what you probably need
22:25tensorpuddingdid you run lein deps?
22:25qizwizno sir. I just installed using homebrew on my mac
22:26tensorpuddingoh
22:26tensorpuddingwhat version of lein is that?
22:26qizwiz1.6.0
22:27qizwizhere's the complete line: Leiningen 1.6.0 on Java 1.6.0_26 Java HotSpot(TM) 64-Bit Server VM
22:27qizwizlein deps says "couldn't find project.clj..."
22:27qizwizso clearly I have some more reading to do :-)
22:28brehautqizwiz: just to check, you are running the lein deps command in a directly that has a project.clj with read perms right?
22:29duck1123qizwiz: you might need to do lein new <projectname>
22:30qizwizok, just did that
22:30duck1123now cd into that project and do everything from there
22:30duck1123you'll want to edit that project.clj file to specify your deps
22:31tensorpuddingoh
22:31tensorpuddingyou need to generate a new project to run lein deps
22:31tensorpuddingsorry
22:31tensorpuddingi'm somewhat new to this
22:31tensorpuddinglein plugin install is supposed to fetch from somewhere
22:31tensorpuddingmaybe somehow there was a bug that made it think that it had fetched when it hadn't?
22:31tensorpuddingoh lag
22:32duck1123plugin install puts it in a special directory outside of any project, for everything else, you want to have a project to work out of
22:32tensorpuddingyes, lein plugin doesn't require you to have done anything
22:32tensorpuddingwhich means that your behavior is a bug
22:33tensorpuddingi haven't used lein-noir but you don't need it to use noir in your project
22:33tensorpuddingall you need to do is create the project with lein new, then edit the project.clj to include noir as a dep
22:33tensorpuddingthen run lein deps, and it'll fetch noir for you and put it in your project
22:33qizwiz`I'm not afraid to go spelunking through the code. what exactly is lein? where can I look at its innards?
22:34tensorpuddinghttps://github.com/technomancy/leiningen
22:34tensorpuddingi had some issues with using lein from packages too
22:34qizwiz`well, yeah...but its on my machine now, so...
22:34tensorpuddingpeople here told me to just copy the lein script and run it
22:35tensorpuddinguh
22:35tensorpuddingi guess it could be stored somewhere by homebrew?
22:35tensorpuddingthe script itself is surely on your path somewhere
22:35qizwiz`well, lein in /usr/local/bin is just a shell script
22:36duck1123I'd trust homebrew over apt, but still it's easy enough to wget and chmod
22:36tensorpuddingbut it's just a shell script that calls java with the right arguments on ~/.lein/self-installs/
22:36tensorpuddingwhere there's a standalone .jar file
22:36qizwiz`would it have mattered that I actually installed lein BEFORE I installed clojure?
22:36tensorpuddinginstalling clojure is not really necessary
22:37qizwiz`really?
22:37tensorpuddingwhen you run lein deps it installs a new .jar of clojure for you
22:37tensorpuddingand it allows you to keep disparate versions
22:37brehautqizwiz`: installing lein _is_ installing clojure; it manages its dependancy on the compiler service itself
22:37duck1123lein deps == installing clojure
22:37tensorpuddingthe "system" clojure is totally ignored when you use lein
22:37qizwiz`interesting. so it's just using java behind the scenes?
22:38tensorpuddingclojure is written in java
22:38tensorpuddingit's just a big .jar
22:38tensorpuddingand clojure libraries are just .jars
22:38qizwiz`right
22:38tensorpuddingand if you want you can use lein to create an uberjar, which containes clojure and all the libraries and your program, and give it to anyone with /usr/bin/java and they can run it
22:39tensorpuddingone of the upsides of write-once-run-anywhere
22:39brehautqizwiz`: leiningen manages your classpath for you; the classpath is where the jvm goes looking for code. in particular, the classpath for a given lein project only inclludes things in the project.clj's dependancies (and dev dependancies)
22:40tensorpuddinglein allows you to be blissfully unaware of java
22:40tensorpuddingon the package front, that is
22:40qizwizthe hair and the fire bit :-)
22:41duck1123what's this... java that you speak of?
22:41tensorpuddinggood luck getting by without ever directly using java classes
22:41brehautduck1123: its the dark brown liquid used as fuel for converting specs in to clojure code
22:42tensorpuddinglein is actually an uberjar apparently
22:42duck1123bah! I don't think I've ever naturally called it that. that's coffee
22:42qizwizjust on a whim, I did "lein install noir 1.2.1" and it started downloading a bunch of stuff
22:42tensorpuddingjava is an island
22:42tensorpuddingit's in indonesia
22:42brehautduck1123: well its coffee of a particular origin; im partial to el salvador myself
22:43duck1123My coffee comes from Kroger. (or occasionally Meijer)
22:44tensorpuddingi'm sure that they get their beans on the same markets that everyone else does
22:44tensorpuddingqizwiz, aren't you lucky that lein handles deps for you
22:45moogatronici've been making espresso lately with Indian Mysore beans. =)
22:45qizwizwell, that was cool and all, but I still don't know where to begin. (apologies for my absolute n00bishness)
22:45brehautmoogatronic: thats quite an uncommon origin
22:45amalloyqizwiz: fwiw, lein install noir isn't going to do anything interesting. it just "pre-fetches" the same stuff lein deps would have
22:46qizwizwhere does it put it?
22:46moogatronicbrehaut: I was roasting for a while, but in my town now, we have about 5 roasters, one of them a clear notch above the rest. He always has great varietals.
22:46amalloy~/.m2
22:46moogatronicI usually just ask him for what's new.
22:46duck1123qizwiz: using emacs? try lein swank, else lein repl
22:47qizwizof course I'm using emacs :-)
22:47amalloyi think getting swank configured can wait until he's figured out how to fetch dependencies :P
22:47brehautmoogatronic: i think theres about three main roasters in my town; i live about 100m from the best, and they have a great range of Cup of Excellence single origin roasts :)
22:48moogatronichaving access to good coffee is an essential aspect of living!
22:48duck1123amalloy: I thought he had the dependencies and was looking for the next step
22:49tensorpuddingwell, once you have your deps installed, you can start writing code, and then building it
22:49tensorpuddingbut it might be more instructive learning clojure by starting a repl and playing around
22:49tensorpuddingrepl being short for read-eval-print-loop
22:49tensorpuddingwhat people like calling interpreters nowadays, though clojure isn't interpreted
22:49tensorpuddinglein repl gives you one
22:49tensorpuddingqizwiz, then you want swank-clojure
22:49qizwizI'm here now: https://github.com/technomancy/swank-clojure#readme
22:50tensorpuddingyes, you just install the plugin, then run M-x clojure-jack-in from inside a clojure-mode buffer
22:50qizwizbah! same error with "...plugin install"
22:51tensorpuddingthat's weird
22:51tensorpuddingbut lein deps works fine?
22:51qizwizCopying 1 file to /Users/jhill/tmp/myproject/lib
22:52qizwizthat's all it says
22:52tensorpuddingyes, that means it's working
22:52tensorpuddingbut plugin not working is weird
22:52duck1123remove the homebrew version, and installit as per the readme
22:53amalloy(inc duck1123)
22:53qizwizyeah, that was my thinking
22:54tensorpuddingreally a shame though
22:57amalloythe shame is that...to use a program you should install it the way it asks to be installed, instead of by a recipe cooked up by some crazy guy on the internet?
22:58callenI've never understood why people would use homebrew for things that are updated frequently.
22:58tensorpuddingpackage maintainers aren't crazy guys on the internet
22:59tensorpuddingmaybe you've only used the janky ones that osx has
22:59brehautevidence points to the contrary
22:59callentensorpudding: are you aware of how homebrew works?
22:59tensorpuddingno
22:59tensorpuddingnot particularly
23:00callentensorpudding: if you send a pull request for a new package, they'll accept it, no questions asked.
23:00qizwizdo I need to blow away my .lein and .m2 directories?
23:00tensorpuddingthat's crazy
23:00callentensorpudding: so the lein package is likely literally, "some crazy guy on the internet"
23:00amalloycan't hurt, qizwiz
23:00callentensorpudding: well it's called HOMEBREW
23:00tensorpuddingsorry
23:00tensorpuddingpackage maintainers aren't *all* crazy guys on the internet, just the ones for mac
23:00callentensorpudding: there we go.
23:00duck1123qizwiz: probably not needed, but it's not like you've customized it. kill it and start anw
23:00qizwizyep, that was the issue
23:01tensorpuddingwith respect to the persistance of macports and homebrew, it's just not very good
23:01callentensorpudding: persistence*
23:01amalloydoesn't homebrew make /usr/local/bin writable w/o privs? gives me the willies
23:02tensorpuddinghow is that possible?
23:02tensorpuddingunless osx itself lets just anyone with admin rights write to /usr/local/bin
23:02brehautevery package management system that does system wide installs freaks me out
23:02amalloysudo chmod
23:02tensorpuddingmy god
23:02tensorpuddingare you serious
23:02tensorpuddingwhy hasn't this thing been targetted with malware yet
23:02amalloyor actually i think sudo chown
23:02amalloywhich is slightly less crazy
23:03callenamalloy: Mac users aren't usually aware of unix conventions.
23:03duck1123amalloy: Are you sure about that, I thought it put it somewhere user-local
23:03qizwizand now lein plugin install "just works" :-)
23:03callenduck1123: it can do either way, but the /usr/local/bin install will do what they described.
23:04duck1123of course, it didn't work for me and I had to install it with sudo
23:04callenthe /usr/local/bin is the default last I checked.
23:04qizwizwithout even being in a directory with project.clj
23:04amalloyduck1123: https://gist.github.com/323731 line 112ish
23:05amalloychgrps it to admin (so anyone who *could* sudo is in the group), and gives it g+rwx
23:05tensorpuddingit'd be saner if they had some curated free database, with a fancy gui selector which builds and installs for your system, or something
23:07duck1123The only development I do on my mac is in my ubuntu vm or over ssh
23:07tensorpuddingrunning a vm just to do dev, i tried that
23:07tensorpuddingfor like a month on my windows laptop
23:08tensorpuddingvery frustrating
23:08brehautSome people, when confronted with a problem, think "I know, I'll use a global package manager." Now they have at least two problems
23:08tensorpuddingmore frustrating than getting windows as a usable dev platform
23:08tensorpuddingglobal package managers are imperfect
23:08tensorpuddingbut it's better than installing everything by hand, from source
23:09qizwizalright, alright. I get it. I shouldn't have trusted homebrew
23:09brehautits system wide installation that is the antipattern, not source or binary distribution
23:10qizwizholy crap, that's really cool. finally got noir up and running
23:10brehautqizwiz: congrats :D
23:10tensorpuddingi think ideally you'd have the ability to choose
23:10qizwizis it difficult to hook it up to say mysql?
23:10tensorpuddingqizwiz, check out korma
23:11tensorpuddingit's by the same guy
23:11tensorpuddingisn't it?
23:11amalloybrehaut: a global package manager isn't bad for end-user programs; it's mostly just dreadful for development tools
23:11brehautqizwiz: its not. you have three main options. clojure.java.jdbc, korma (which is built on top) and clojureql
23:11duck1123I just started porting my application that uses clj-record over to korma today
23:12duck1123I think I'm going to like it, but I'm not very far yet
23:12amalloyeg, i'm quite happy to have apt managing the stuff i don't want to care about, like my window manager
23:12brehautqizwiz: korma is promising but new, its got some pretty major omissions atm and some cracker bugs
23:12qizwizI have this project that's literally thousands of tiny microsites done in php that I wanted to refactor and since I have a bit of freedom to play with different technologies, I thought I"d try something in clojure
23:12callencracker...bugs?
23:12amalloybrehaut: $tr nz en cracker?
23:12brehautserious
23:12callenbrehaut: I second that tr.
23:13tensorpuddingwhat exactly do you mean by cracker bugs
23:13brehauti dont want to scare anyone off korma because i think it has a lot of potential, but it is very young
23:13tensorpuddingas in, it's vulnerable to some kind of exploit?
23:13amalloytensorpudding: given the huge latency you seem to have tonight, you might want to just wait for someone else to ask the questions you come up with
23:13brehautno i mean that the straight forward operation according to the documentation contains show stopper bugs that will impede your development process.
23:14callenit will not impede
23:14callenit will centipede.
23:14tensorpuddingthe documentation being the tutorial?
23:14qizwizhrmm...doesn't compojure promise to be rails-ish in it's ability to server database-backed sites?
23:14brehautthe documentation being the page labled 'docs' on the site
23:15brehauthttps://github.com/ibdknox/Korma/issues?sort=created&amp;direction=desc&amp;state=open
23:15tensorpuddingwhich covers a small portion of the actual stuff
23:15brehautqizwiz: compojure is analogous to sinatra, not rails
23:16tensorpuddingi tried using compojure, it was a bit more complex than noir
23:16brehautqizwiz: perhaps you want to read http://brehaut.net/blog/2011/ring_introduction; it doesn't cover noir but you'll get a good understanding of noir from webnoir.org
23:16callenCompojure tried too hard to lispify everything
23:16duck1123The problem with clojure web development is it's built up of so many tiny little projects that it's impossible to cite any sing one as what makes clojure web dev awesome
23:16callenthe S-EXP => HTML templating system made my eyeballs explode
23:16brehaut(if you can excuse me blowing my own trumpet)
23:16callenduck1123: Noir?
23:16tensorpuddingcompoure has templating?
23:17callentensorpudding: go look again. You'll see.
23:17brehauttensorpudding: your comment about compojure vs noir is absurd; noir is built on compojure. its at a different level of abstraction, not complexity
23:17callenduck1123: web dev isn't necessarily supposed to be a strength for Clojure. It's capable of being great at it, but I don't think the community is trying to cater to people who can't spin their own solution.
23:17tensorpuddingbrehaut, that sounds better
23:18tensorpuddingit was cruder
23:18callenduck1123: impressively facile libraries are for Ruby coders.
23:18brehautcallen: compojure seperated out its templating over a year ago; that is now hiccup and its not tied to compojure
23:18callenbrehaut: I'm old, so sue me.
23:18duck1123I don't use noir because I have my own framework that acomplishes the same function for me
23:19callenbrehaut: my initial exposure to it was enough to scare me off.
23:19brehautcallen: medicine used to be drilling holes in peoples heads; i hear thats gotten better too.
23:19qizwizincidentally, I just realized the irony of criticizing a package manager while being very greatly helped (thank you) to install another
23:20callenbrehaut: after that trepanation, I'm staying at home.
23:20callenbrehaut: good to know though.
23:21cgrayare rationals planned for clojurescript at any point?
23:21tensorpuddingwhat is clojure's strength?
23:22duck1123concurrency was the original goal
23:22tensorpuddingi was watching a video about that, to try and figure out how it works in clojure
23:23tensorpuddingbut i really don't like videos for learning, and i discovered too late that the video was kinda old
23:23callentensorpudding: sophisticated backend data processing and machine learning is a common theme, but of course people use it for all sorts of things.
23:23callentensorpudding: the aforementioned is the primary business-case I see IRL
23:24amalloyduck1123: i would have guessed "minimization and management of state". concurrency falls naturally out of this, but you also get great benefits in single-threaded code
23:24callentensorpudding: cascalog would be a good canonical example.
23:24calleneither way, it's not trying to compete with PHP/Python/Ruby at being a facile way to make yet another CMS>
23:24callenI think that much should be obvious.
23:25duck1123callen: those will come in time
23:25tensorpuddingwhy do you say facile?
23:25callentensorpudding: cucumber.
23:25tensorpuddingwhat do you consider a non-facile way to make a web application?
23:25callenI think the whole question is boring.
23:26callenyour question is malformed anyway.
23:26callenso the answer to your question is 'mu'
23:26callencucumber was a serious answer to your question.
23:26duck1123you think the web is boring?
23:26qizwizfeh. I'm still at the office and want to go home, but I don't want to lose the thread. I've never though of persisting an irc session, but it seems I want to now
23:26tensorpuddingcucumber is what?
23:27duck1123cucumber is a BDD framework for writing "test" in english
23:27duck1123I use cucumber to test my site
23:27callenduck1123: let him use Google next time.
23:27tensorpuddingwait, that ruby framework cucumber?
23:27callenit's not English.
23:27qizwiztensorpudding: yeah, that ruby framework cucumber
23:27callenduck1123: I've done web dev long enough that it's pretty boring/easy. Only scaling is all that interesting and that's a different problem/question.
23:29callenduck1123: porting bad libraries to Clojure from Ruby is the devil's work. Don't.
23:30duck1123I didn't port it, it was already done. I just used what was there as an easy way to do full integration tests
23:30callenclearly I need to finish building that flamethrower then.
23:31callenand find the servers holding that repo.
23:31amalloyqizwiz: get a bouncer
23:31callenqizwiz: I'm writing an IRC bouncer. I have a better idea: remote server + GNU Screen + irssi
23:31amalloyor, just leave now while the conversation isn't about anything useful
23:31callenqizwiz: failing that, what amalloy said.
23:31qizwiz:-)
23:32qizwizI'm sure erc has some way to interact with a bouncer. searching furiously now
23:34amalloyqizwiz: you don't need to "interact with" a bouncer. you just connect to it like any other irc server
23:35amalloythe design is that you start your bouncer as a persistent irc client on some other server, and then you connect to it as a server; it does the forwarding and message-saving
23:36jlfhmm, it'd be nice to populate the backlog upon connection to the bouncer though
23:36callenjlf: my bouncer will do that.
23:36callenjlf: if you want it to.
23:36jlfo rly?
23:36callenjlf: yessir.
23:36jlflink?
23:37callenjlf: in progress ;_;
23:37jlf:)
23:37callenjlf: writing it in Clojure, have logging and connectivity working
23:37callenjlf: working on database backend, indexing/searching, and client-side right now.
23:37jlfnice
23:37callenjlf: started last week, haven't had a lot of time to work on it.
23:39callenjlf: I'm actually having trouble with the client-side because I'm not familiar with what is traditional for IRC Bouncer <=> Client interaction.
23:39callenwhat would seem simple to me, might not seem simple to others.
23:39callenbut it is functionality I want
23:40duck1123Is there anything I can do (aside from liberal use of printlns) to trace what namespaces are loaded and when?
23:40callenI don't think namespaces are a good subject here.
23:40jlfcallen: does erc expose an interface for "put this in your backlog"?
23:41callenjlf: I don't know anything about that, but it doesn't matter, the bouncer acts as an intercept between the server and the client
23:41callenjlf: I can fake it and add timestamps or whatever else and "replay" the backlog into the client.
23:41callenjlf: and let the user set how much backlog they want.
23:41duck1123On one of my machines, requiring one of my nses doesn't complete, and I'm trying to find out why
23:41jlfoh, the timestamps are specified by the server?
23:41callenjlf: I'll have an "admin" console for business use too.
23:41callenjlf: no, I record local time for the bouncer.
23:41callenjlf: again, optional, but it's there for a reason.
23:41callenjlf: technically, I actually record epoch, it just outputs local.
23:42jlfyeah i meant server from erc's perspective -- iow, do the timestamps come from the bouncer or does erc apply them?
23:42callenjlf: No damn clue, but my understanding of what server output looks like leads me to believe "erc"
23:43callenjlf: if you want a "historical" view of the full logs, you would hypothetically use the bouncer's database API I provide
23:43callenjlf: the backlog is just that, it's not supposed to be a canonical representation.
23:43callenjlf: some people actually hate inline timestamps that double on top of the client's timestamp.
23:43callenjlf: that's why I'm making bouncer provided timestamps optional.
23:43hiredmanduck1123: there is a :verbose flag (might not be hwat it is actually called) you can pass to :use and :require
23:44qizwizznc appears to work well enough
23:44qizwizI'll be back shortly
23:44hiredmanit is :verbose
23:44callenmy bouncer is really just one piece of a whole toolchain.
23:44callenI'm not trying to replace ZNC
23:44hiredman(require '[foo :as bar :verbose])
23:44callenI'm trying to replace Hipchat.
23:44duck1123hiredman: do you know if it's recursive?
23:44jlfcallen: *nod* will your bouncer be able to be deployed on heroku as a free app?
23:45callenjlf: yeah, I'm sure technomancy could help me to that end.
23:45hiredmanduck1123: yes
23:45hiredmanit sets a binding
23:45callenjlf: the end-game for this is something a lot better than just a bouncer though. :)
23:45jlfthat'd be sweet for those of us with flaky dsl
23:45qizwizwell, I just did this: http://www.emacswiki.org/emacs/ErcZNC
23:45hiredman*loading-verbosely*
23:45callenjlf: once I have something useable, I might be tapping you for feedback :P
23:46callenin the meantime, I'm off to worship the Iron God