#clojure log - Nov 09 2011

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

0:15 jlf: callen: looking forward to it

0:18 spoon16: what is the most appropriate way to make a reference to an external Clojure project? I want to reference https://github.com/alexott/clj-tika

0:21 amalloy: "reference"? if you want to reference it in a blog post that link is good. if you want to do something with it in a program you probably need to be more specific

0:25 spoon16: well… in java you put a library on your class path and in C# you create a reference to an assembly that is placed on the executable path… I get that clojure is running on the JVM but I guess I'm not sure how I make the contents of clj-tika available to my own clojure project. Do I need to compile it somehow and take the resulting JAR and reference it in my Leiningen project.clj somehow?

0:26 maybe there is a blog post that I haven't found that describes this

0:28 I guess i can just use lein to build a jar from clj-tika and import that. Is there a way to pull it in automatically by referencing the clj-tika project.clj in my own project.clj?

0:29 amalloy: spoon16: yes

0:30 just add [clj-tika "1.0.0-SNAPSHOT"] to your :dependencies

0:30 spoon16: does that come from clojars?

0:31 amalloy: you mean, does that cause lein to download a jar from clojars? usually, but in general it causes it to get downloaded from "somewhere"

0:31 leo2007: How to develop a noir website using slime?

0:34 spoon16: if I add clj-tika "1.0.0-SNAPSHOT" to my dependencies it fails to find the library… I installed clj-tika using lein install

0:34 and now it works

0:34 so I guess the best thing to do in a team environment is setup a shared maven repository

0:35 amalloy: well, he may not have pushed it (or that version) to clojars

0:35 www.clojars.org/clj-tika

0:35 spoon16: yeah, makes sense

0:36 do you have any recommendations for a self hosted dependency repo like clojars that I could throw up on EC2?

0:36 we use artifactory at work, but that might be overkill for my three person side project

0:39 stackoverflow says a maven repo is just a specific directory structure that may be exposed over http

0:39 and that Nexus is a good choice

0:40 * leo2007 hopes someone could provide a hint

0:41 zerokarmaleft: leo2007: your question is a little vague

0:49 leo2007: what happens behind the scene when I run `lein swank' in the project root?

0:51 basically, I want `lein swank' to get the website running for an interactive development session using slime.

1:00 zerokarmaleft: perhaps extending lein-noir might make more sense

1:03 duck1123: leo2007: what I do is have my application start the swank server, then I fire everything off with lein run

1:04 zerokarmaleft: duck1123: with an embedded call to swank?

1:04 duck1123: yes

1:05 it has the benefit that the swank session is always there with my namespaces ready and my environment initialized

1:05 I wouldn't recommend that for a library, however

1:06 zerokarmaleft: ah i see, start-repl...neat

1:14 leo2007: duck1123: how did you set it up? by changing project.clj?

1:15 * leo2007 is new to clojure

1:18 callen-bot: testing

1:18 bwahahahahaha

1:19 jlf: herro.

1:19 * leo2007 looks around

1:20 callen-bot: leo2007: problem?

1:21 leo2007: callen-bot: smart guess.

1:21 callen-bot: leo2007: http://www.youtube.com/watch?v=QP_rIAkb_v8 this will improve your day.

1:29 duck1123: leo2007: If you want to call swank from within your project, then swank-clojure has to be part of your runtime deps

1:31 qizwiz: already enjoying noir. I like how the concept of routes is defined within a page and isn't convoluted like the rails architecture

1:31 and since I'm just coming back into the conversation, what does swank within a project get you?

1:31 leo2007: duck1123: If I have lein run, I also want to be able to connect to the swank server for development. But I don't know how to set it up.

1:32 duck1123: leo2007: Here's how I start my app. https://github.com/duck1123/jiksnu/blob/master/src/jiksnu/core.clj

1:32 qizwiz: calling swank from within your server allows you to call lein run and have swank started

1:34 leo2007: BTW, anybody annoyed by Ubuntu? I thinking of moving my env to Fedora.

1:34 callen: leo2007: Debian is fine

1:41 qizwiz: ah, that's handy

1:41 what are the deploy strategies with noir/compojure?

1:45 callen: qizwiz: SCP ALL THE FILES

1:50 qizwiz: callen: alright, I'm in a predominantly rails shop. would there be anything special to setup on the vhost? I presume I'd have to put lein there as well and have all the relevant libraries

1:53 callen: qizwiz: I was being sarcastic.

1:53 qizwiz: I am sorry.

1:53 qizwiz: just have lein and the JVM on the deployment targets, then script the cloning of the appropriate repo and that should get you rolling.

1:54 qizwiz: I am sure there are more sophisticated ways, but that seems easy enough.

1:54 qizwiz: :-)

1:54 thank you

1:55 callen: no worries on the sarcasm. I'm experienced enough with IRC (at least) that I know tough skin is a requirement

1:57 duck1123: if you want to get fancy, pallet is pretty neat. If you're tied to Tomcat, you can produce a war. If you want dead simple you can produce an uberjar and run that

1:58 put most likely, clone the whole project and use lein run

1:59 qizwiz: the issue is that if I build it this way, I take sole responsibility for every facet. So any beacons along the way are helpful

2:01 on the other hand, if I use rails, then there are folks I can lean on if I have to

2:07 amalloy: qizwiz: you might want to try heroku

2:07 while you're playing around

2:07 they just keep a git checkout of your project, and whenever you push to it it does the whole lein dance to start it up again

2:08 afaik the free tier is sufficient to run a single always-on single-host webapp

2:23 tsdh: Is there a way to silence reflection warnings in one specifig block of code? I tried wrapping the code in a (binding [*warn-on-reflection* false] code), but that doesn't help.

2:24 amalloy: tsdh: usually you'd rather just fix the reflection

2:24 tsdh: amalloy: Did you see my answer to your message on the list?

2:25 I have a macro that expands to java calls, and in the expansion the type hints are lost.

2:25 amalloy: oh, i didn't. thanks

2:25 tsdh: amalloy: Would your path help in that case, too?

2:25 s/path/patch/

2:26 amalloy: well, it depends on your issue, i guess. in almost all cases you can work aorund the problem by not type-hinting expressions, and instead hinting let-bindings

2:27 a good practice anyway in macros: yours is incorrect regardless of the macro-metadata patch because it evaluates g multiple times

2:28 if you wrapped it with `(let [^Graph g# ~g] (...use g#...)), then g would be evaluated only once and would be hinted appropriately

2:29 tsdh: amalloy: Yes, but that's ok. A typical macro application looks like (with-traversal-context [g (vsubgraph g #(some-pred))] (do-stuff-with g)), so g is evaluated many times anyway

2:30 amalloy: But I'll try to see if that helps with the warnings.

2:30 amalloy: tsdh: i think you misunderstand my point about g being evaluated multiple times

2:30 consider (defmacro square [x] `(* ~x ~x))

2:30 tsdh: amalloy: Yes, I understand your point.

2:31 amalloy: okay

2:31 tsdh: amalloy: http://tsdh.wordpress.com/2011/09/28/defmacro-revisited/

2:31 amalloy: at any rate i'd appreciate an upvote at http://dev.clojure.org/jira/browse/CLJ-865 to make sure this gets some attention, if you have permissions to do that

2:35 tsdh: amalloy: Hm, using a gensym for ~g indeed erases all reflection warnings. I don't understand why, though...

2:36 amalloy: tsdh: presumably vsubgraph is a macro in your program?

2:36 tsdh: amalloy: No, a function returning a proxy object.

2:36 amalloy: hm

2:37 &(let [x '(vsubgraph blah)] (meta (second `(foo ^List ~x))))

2:37 lazybot: ⇒ {:line 1}

2:37 amalloy: &(let [x '(vsubgraph blah)] (meta (second `(foo ~ ^List x))))

2:37 lazybot: ⇒ {:line 1}

2:38 amalloy: well. i don't quite understand how it all works, but syntax-quote followed by unquote winds up discarding a lot of metadata

2:39 i suspect my patch wouldn't help you here, given what lazybot is telling me

2:39 tsdh: Ok, I'm happy that it works now.

2:39 And you have your upvote.

2:39 amalloy: *chuckle* thanks

2:40 tsdh: amalloy: I have an instance of that particular issue as well, where I need to type hint the returned object of a `case'.

2:40 amalloy: aha. well that would certainly help

2:41 tsdh: ping hiredman (after the conj, i guess) if you want an explanation of the case we just discussed - i think he knows what's going on

2:41 tsdh: amalloy: Ok, thank you.

2:45 amalloy: But using a let doesn't work in all cases, too.

2:45 &(let [^java.awt.Image i (java.awt.image.BufferedImage. 10 10 1)] (.getWidth i))

2:45 lazybot: ⇒ 10

2:45 amalloy: $javadoc java.awt.Image

2:45 lazybot: http://download.oracle.com/javase/6/docs/api/java/awt/Image.html

2:45 tsdh: amalloy: Hm, here it issues a reflection warning that the call to getWidth cannot be resolved.

2:46 amalloy: tsdh: Image doesn't have a getWidth method

2:46 only BufferedImage does, apparently

2:46 tsdh: amalloy: Sure it has.

2:46 amalloy: abstract, thought.

2:46 amalloy: http://download.oracle.com/javase/6/docs/api/java/awt/Image.html#getWidth(java.awt.image.ImageObserver) takes an argument

2:47 there is no (.getWidth foo) method, only (.getWidth foo bar)

2:47 tsdh: Argh!

2:47 amalloy: tsdh: but you could fix that case simply by removing the typehint altogether

2:47 tsdh: Yes, stupid me. :-)

2:48 amalloy: the compiler knows without being told that (BufferedImage. foo) will yield a BufferedImage object. it only had trouble because you said "Wait! Be careful! That could be any kind of Image!"

2:52 tsdh: I see. In the real code, it was infact that getWidth() in Image (and there I really have an Image gotten from ImageIcon.getImage()) has an ImageObserver argument. Now it gets it. Before, I simply was lucky that the underlying instance was in fact some Image subclass.

2:53 amalloy: ImageObserver looks ridiculous to me

2:54 but c'est la vie - you have to live with java's crazy decisions

2:55 tsdh: Yep

4:09 ktsuji: ?

4:09 exit

4:20 jli: wrapping "dosync" around atom accesses/updates doesn't do anything, right?

4:20 well, doesn't do anything for coordination

4:30 Chousuke: jli: yes. dosync only affects refs and agent sends

4:31 jli: cool

4:40 Blkt: good morning everyone

4:49 jli: where IS everyone

4:49 conj :(

4:54 clgv: how can I create a function in a macro and call it in the code the macro returns? something like this: (defmacro bla [x, fname](let [f (fn [args] (println args) x)] `(defn fname [& ~'args] (~f ~'args))))

4:55 ok. I could literally add the definition of f

4:56 ok thats working. I asked too early^^

4:57 DerGuteMoritz: clgv: you should use gensym for the function name though

4:57 clgv: DerGuteMoritz: actually I should use ~ in front of it ;)

4:59 that works: (defmacro bla [x, fname](let [f `(fn [args#] (println args#) ~x)] `(defn ~fname [& ~'args] (~f ~'args))))

5:01 DerGuteMoritz: alternatively, what should also work is something like (def foo (let [f (fn ...)] (fn [...] (f ...))))

5:02 so you won't clutter the namespace

5:03 clgv: ^

5:03 clgv: DerGuteMoritz: it was a minimal example of something bigger, where the macro is really needed

5:03 DerGuteMoritz: clgv: I mean expand to something like that

5:04 I'm typing from my phone right now so typing all that interpunctuation is a bit hard, thus only the expansion :-)

5:07 just use def instead of defn so you can extend the local scope of your fn with let

5:08 hmm thinking about it: doesn't defn always create a top-level binding?

5:09 so closing over defn like you originally did should also work, no?

5:10 clgv: yes defn always creates a root binding

5:10 in fact that doesnt matter, since the macro directly expanded in a toplevel defn ;)

5:10 DerGuteMoritz: hm ok but your original implementation with let over defn didn't work?

5:11 oh I missed a quote there

5:12 well try expanding to `(let ... (defn ...))

5:12 should work from what I understand

5:18 clgv: I said it's already solved ;)

5:18 DerGuteMoritz: sure, just curious

5:22 are you expanding to two defns now?

5:25 bobnodes: hi

5:26 how do I do subqueries in ClojureQL?

5:28 clgv: DerGuteMoritz: no. It's similar to the defmacro statement I posted last

5:30 DerGuteMoritz: clgv: ah I see!

5:47 to all German users: there is also a #clojure-de channel now. so if you are interested in talking to local Clojurians, feel free to join :-)

6:23 sorry German users, I just discovered there already is #clojure.de :-)

6:23 clgv: right ;)

6:23 DerGuteMoritz: hehe

6:28 kzar: technomancy: I tried what you said last night but it now fails to push to Heroku "Heroku push rejected, error fetching custom build pack". (I did `heroku config:add BUILDPACK_URL=http://github.com/heroku/heroku-buildpack-clojure.git`.)

8:48 kephale: is there something like the theading macro that provides a reference to the thing being threaded?

8:48 ,(let [thing {:a 7} thing (assoc thing :b (dec (:a thing)))] thing)

8:48 &(let [thing {:a 7} thing (assoc thing :b (dec (:a thing)))] thing)

8:48 lazybot: ⇒ {:b 6, :a 7}

8:49 clgv: kephale: there were articles about something like that, but afaik there is nothing in core or contrib

8:49 kephale: clgv: aw… i have some ugly let statements like that which have 4-5 steps of updating the same map

8:50 clgv: kephale: how about 'update-in ?

8:50 (-> my-map (update-in [:key1] f param1) (update-in [:key2 :nested-key] g param2 param3)) ?

8:55 hugod: kephale: if update-in isn't sufficient, you might be interested in arg->> in https://github.com/pallet/thread-expr/blob/develop/src/pallet/thread_expr.clj#L269

8:55 or arg-> even

8:55 kephale: clgv: i'll keep that strategy in mind. when hacking things together it has been a lot faster to use that re-definition strategy with let. however, i think using -> plus update-in would work in most if not all of the situations

8:55 hugod: oOoo

8:57 clgv: hugod: thats a nice one

8:57 kephale: though i must admit, it would be wonderful to be able to use %1 %2

9:15 clgv: I still wonder why (if-not pred? then else) is defined as (if (not pred?) then else) and not as (if pred? else then)

9:19 lucian: clgv: probably no particular reason

9:19 clgv: lucian: would be more efficient, wouldnt it?

9:20 lucian: i'm not sure it matters

9:20 clgv: why introduce a 'not when it's a macro anyway...

9:20 lucian: it'd be one less function call, maybe. depending on what clojure compiles it to and how the jvm jit decides to inline

9:21 kephale: yeah, you'd hope that it is just compile-time overhead

9:21 clgv: well, 'not is a function using 'if ^^

9:22 lucian: clgv: submit a patch

9:23 eiro: some korma user ? i would like to know if it's possible to deploy a schema defined in clojure

9:23 clgv: lucian: not that easy with clojure.core ;)

9:24 mdeboard: eiro: Korma doesn't do any table creation

9:24 $google clojure lobos

9:24 lazybot: [budu's Profile - GitHub] https://github.com/budu

9:24 eiro: ok thanks

9:24 lucian: clgv: that's sad

9:24 mdeboard: eiro: https://github.com/budu/lobos

9:25 eiro: wow. i'll read about it

9:25 thanks again

9:25 mdeboard: np

9:26 kephale: clgv: fork clojure, do your fix, rename it clgvojure and tout how it is more efficient than clojure : P

9:27 clgv: kephale: lol, actually I wanted to know if there is a reason to the current definition :P

9:31 lucian: :*

9:32 wrong window

9:32 mdeboard: lolll

9:32 Iceland_jack: lucian: ;* you too

9:32 lucian: Iceland_jack: why, thank you

9:32 Iceland_jack: :)

9:37 lucian: bah, i'm almost incapable of using for loops in python anymore

9:38 it's clojure's fault that i'm using so many comprehensions now

9:40 clgv: lucian: you can be glad then that you dont have to use c++ or similar ;)

9:43 lucian: three comprehensions and no loops. i'm being convertet, it seems https://bitbucket.org/lucian1900/blag/src/ff43c43bf394/models.py#cl-25

9:50 mdeboard: lucian: comprehensions are still loops

9:51 lucian: mdeboard: sure, but they return expressions

9:51 instead of mutating sequences

9:52 mdeboard: Oh, you mean generator expressions

9:52 not (list) comprehensions

9:53 lucian: mdeboard: both list and generator comprehensions are geared towards creating new sequences as expressions

9:53 mdeboard: List comprehensions return lists, they're just geared toward aping the Haskell syntax for looping

9:54 generator expressions are nice though

9:54 lucian: sure,but they still don't mutate the existing lists. they return entirely new lists

10:00 mdeboard: Yeah but I'm just saying, list comprehensions really aren't functional at all. It's just instantiating a class and populating it from the processed contents of another class instance. it doesn't return an expression that gets evaluated lazily like generator exprs.

10:00 zerokarmaleft: https://twitter.com/#!/fakerichhickey <= lol who's doing this?

10:03 mytrile: Hey, guys. Not Clojure question, but I don't know how to find a solution. I'm running Aquamacs, but it seems that when I want to save a file it doesn't do it

10:03 clgv: zerokarmaleft: lol, what`

10:03 mdeboard: nice try, fake rich hickey

10:05 lucian: mytrile: try #emacs

10:05 mytrile: lucian: ok

10:06 lucian: They'll kill me there

10:06 lucian: mdeboard: do you only see laziness as a requirement for being functional?

10:08 Chousuke: lazy evaluation has good synergy with functional programming but that's it :P

10:09 TimMc: ngoc?

10:09 mdeboard: lucian: obviously not, but I completely fail to see how a list object in Python has any relation to a functional paradigm.

10:09 lucian: Chousuke: that's my view as well

10:09 mdeboard: not a list object, a list comprehension

10:10 mdeboard: in case you didn't realise, list comprehensions don't mutate the original list

10:10 zerokarmaleft: TimMc: no idea

10:10 lucian: mdeboard: they are exactly as functional as generator comprehensions, just not lazy

10:11 theignorati: why is swing so confusing

10:11 lucian: theignorati: because enterprise. can you afford to use one of the wrappers?

10:11 theignorati: maybe, which one should I look at?

10:11 mdeboard: lucian: List comprehensions are immediately evaluated to an object with mutable state. How is that functional?

10:12 lucian: mdeboard: because they create a new list from an old list, without mutating the original one

10:12 theignorati: there was a thing called seesaw

10:12 mdeboard: That is a stretch.

10:13 lucian: theignorati: this https://github.com/daveray/seesaw

10:14 theignorati: I'm mostly having issues with the layout, will that help?

10:14 lucian: theignorati: it's a DLS-ish thing. probably not without rewriting everything to use ut

10:15 mdeboard: i guess i disagree. looks like a map with an optional filter to me :)

10:15 mdeboard: lucian: It's just syntactic sugar under the hood

10:15 lucian: mdeboard: i know, but it acts the same way

10:31 kzar: cemerick: Do you know what clutch's get-database expects when given a string? I'm passing it the cloudant URL with "/dbname" appended but I'm getting this error: "IOException CouchDB Response Error: 400 Bad Request com.ashafa.clutch.http-client/get-response (http_client.clj:70)". The url is structured like this: https://user:pass@server.cloudant.com/dbname. (I never had any problems before when I was passing get-dat

10:31 abase a map of the settings.)

10:32 cemerick: kzar: which version of clutch?

10:33 kzar: cemerick: [com.ashafa/clutch "0.2.5-SNAPSHOT"] (Reason why I'm trying to use a URL now is that's how Heroku does it.)

10:33 cemerick: kzar: you should at least be on the 0.2.5 release :-)

10:34 kzar: cemerick: Oops, let me try that

10:34 cemerick: kzar: I don't think that'll change anything, just saying.

10:34 it looks like that should work

10:36 kzar: cemerick: When I put the URL in my browser it works too

10:36 cemerick: String URLs were sort of 2nd-class citizens in clutch <= 0.2.5

10:36 mjwhitt: time to travel ... to the conj!

10:36 cemerick: Not the case in 0.3.0, FWIW.

10:37 redinger: mjwhitt: Happy travels! See you soon

10:37 zerokarmaleft: mjwhitt: have a safe trip

10:37 cemerick: kzar: I'm prepping for my conj talk, so can't really try to replicate the issue. Maybe send a message to the ML so I can take a look later/

10:37 ?

10:37 mjwhitt: thanks

10:39 kzar: cemerick: Hmm no worries, sorry to nag you. I figure it's worth trying 0.3.0 snapshot see if that helps

10:40 cemerick: kzar: No worries. :-) 0.3.0-SNAPSHOT should absolutely work — but there are some API changes compared to 0.2.x http://groups.google.com/group/clojure-clutch/browse_frm/thread/36e3bbe52851c6dd

10:40 kzar: definitely report your experience with 0.3.0-SNAPSHOT there if you have a chance

10:42 kzar: cemerick: Bugger OK lol, will do!

10:43 cemerick: kzar: yeah, sorry for that; had to make the break to enable various future enhancements

11:04 duck1123: bah, korma doesn't allow you to define an entity named databases because it doesn't quote it's names

11:05 ahh, I figured out how to get around that

11:10 schnorrer: speaking of korma, does it allow making outer joins?

11:15 duck1123: I think it might only support left joins via the entities, but I'm sure you could use the bits to construct better queries

11:15 I'm just getting started on porting my clj-record code over

11:16 schnorrer: I must be doing something wrong then

11:18 duck1123: I think the biggest problem with korma is it's going to make me want to naked-use it, but that will just take discipline.

11:20 kzar: cemerick: I've replied but it didn't show up in google groups, not sure why. Anyway here's the gist about my problem with 0.3.0-snapshot https://gist.github.com/1351873 . I know you're busy, not asking you to look at it now!

11:22 cemerick: kzar: just (get-database "clutch_test_db")

11:22 (proper documentation perpetually 'coming soon' :-P)

11:22 pyr: multimethods don't support multiple arities, right ?

11:22 kzar: cemerick: Well the point was that it fails when you give it a map, what if you want to set more options like a password?

11:23 melipone: hi! how do I get the classpath in clojure? I recall seeing that somewhere ...

11:23 pyr: ,(System/getProperty "java.clas.path")

11:24 or something to that effect

11:25 cemerick: kzar: either have a URL with the authentication info in-line, or do e.g. (assoc (com.ashafa.clutch.utils/url "clutch_test_db") :username "foo" :password "bar")

11:25 pyr: &(System/getProperty "java.class.path")

11:25 lazybot: java.security.AccessControlException: access denied (java.util.PropertyPermission java.class.path read)

11:25 pyr: heh, figures

11:25 kzar: cemerick: gotya OK thanks

11:27 cemerick: kzar: there's a URL record in the utils namespace, but it's a little low-level to create directly. Adding some defaults into its map factory function seems like a good idea.

11:28 pyr: so yes, multimethods can accept multiple arities

11:30 i'm still not sure how the best way to interact is with a non-threadsafe java object instance is

11:30 agents are supposedly fine

11:30 but they can induce race conditions

11:30 (between send and deref)

11:30 so they're only fine for cumulative operations

11:36 schnorrer: uhm, korma seems ignoring the join type param for now

11:36 every time I get a left join

11:38 (select ... (join :right ...)) results in a left join, too

11:52 ADWong: Quick question: If I have a data structure that looks like this, [[1 2 3] [4 5 6]] how can I convert it to [1 2 3 4 5 6]?

11:52 TimMc: ADWong: The answer is *not* flatten.

11:52 :-)

11:53 ADWong: You can (apply concat ...), or avoid producing such a datastructure.

11:53 (for and mapcat being good at that)

11:55 konr: is there already a (between x 1 10) to avoid using (and (> ...) (< ...))?

11:55 ADWong: TimMc: Thanks for the quick response. Is there anything inherently wrong with the flatten function?

11:56 Oh never mind. I see why it doesn't work. Thanks again.

11:56 tensorpudding: you'll need to vec too

11:57 TimMc: ADWong: flatten is bad if you don't know what the elements of your vectors might be.

11:57 It's kind of overkill too.

11:58 fronx: konr: (find-doc "between") says: "No."

11:58 tensorpudding: using (apply concant ...) will return a list

11:59 ADWong: tensorpudding: I think apply concat is the way to go. Flatten really flattens everything. I only want to flatten the first "layer".

11:59 TimMc: ADWong:Do you need the result to be a vector, or just any ol' collection?

12:00 konr: Why do you want that?

12:00 ADWong: TimMc: Any collection will do.

12:01 TimMc: cool, no need for vec then

12:01 konr: TimMc: to avoid adding more lines. Wrote my own now :)

12:01 ADWong: Even if I needed it as a vector couldn't I just (vec …. ) it after wards?

12:01 TimMc: konr: you know that (< 1 x 10) is valid, right?

12:02 konr: TimMc: oh, i didn't know that! Thanks

12:02 TimMc: konr: it's pretty fantastic

12:02 (I didn't read your original question properly at first...)

12:03 ADWong: Yeah, that's what tensorpudding was saying.

12:14 rfgpfeiffer: clojurebot: seen rfgpfeiffer

12:15 hiredman: ~ping

12:18 duck1123: Does anyone know if in korma there is a simple way to query across relationships? ie A has many B, i have an A and I just want the sequence of B

12:19 rfgpfeiffer: konr: are you the konrad who wrote clojure.algo.generic?

12:19 konr: rfgpfeiffer: nope!

12:19 tensorpudding: i'm trying to find that ants demo that rhickey made but i can't find it

12:20 the links for it seem to all be dead

12:20 probably because it's from 2008

12:22 duck1123: tensorpudding: https://gist.github.com/1093917

12:28 tensorpudding: is this still valid clojure code?

12:28 thanks for the link

12:28 duck1123: no idea

12:37 gfredericks: interop question: I need to generate a bean-style java class with getters and setters. Is the simplest way to do that with a macro that defs a custom protocol with the getter and setter methods and then a type to go with it?

12:42 or maybe just gen-class...

12:52 duck1123: gfredericks: the macro would have to know how you're storing state, that would make it a bit difficult

12:52 if you find something, I'd like to know

13:04 TimMc: ditto

13:10 gfredericks: duck1123: TimMc: it seems like an easy implementation either way: e.g., for the deftype route the macro caller gives a list of field names, which the macro makes the fields of the deftype

13:10 for gen-class you can have a "state" variable; I forget the details of that, but I figure that would work too. Maybe I'm not understanding the difficulty?

13:22 TimMc: gfredericks: I think the difficulty is that we don't know *why* you need a bean, so it's hard to say what the best implementation is.

13:25 gfredericks: well I'm hooking into this java interface that for the most part is just a function wrapper, so I have to implement a method. The bean part comes in because if I want my method to be customizable I have to provider setters for fields, which the java will populate before calling the primary method

13:25 so as a caller of the macro, I'd supply a list of field names and an implementation of the primary method

13:25 so as long as the field names are visible from the body of my method, I don't care how the macro accomplishes storing the state

13:26 TimMc: So, a bunch of one-time setters.

13:26 in place of a constructor

13:26 gfredericks: yeah, I think if they were one-time it would probably work

13:26 TimMc: yep. actually now that you mention it I probably have to provide an empty constructor, so does that rule out deftype?

13:27 duck1123: I could certainly see a dsl to make defining bean-style objects nicer

13:27 TimMc: and it will only be hammered on in one thread?

13:27 gfredericks: TimMc: I would expect so

13:27 TimMc: ,(find-doc #bean)

13:27 clojurebot: #<ExecutionException java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.ClassNotFoundException: bean>

13:27 TimMc: ,(find-doc #"bean")

13:27 clojurebot: -------------------------

13:27 clojure.core/bean

13:27 ([x])

13:27 Takes a Java object and returns a read-only implementation of the

13:27 map abstraction based upon its JavaBean properties.

13:28 duck1123: you need some sort of defbean

13:28 TimMc: yup

13:28 gfredericks: and the ability to implement interfaces as well

13:31 duck1123: Times like this, I wish google wave had worked out, it would be nice to throw up a clojure code block and work out a mock-up

13:31 gfredericks: I think there's an interactive multiuser pastie somewhere...

13:33 TimMc: Maybe I should throw up an Emacs server... :-)

13:33 gfredericks: maybe this is it: http://collabedit.com/sxm4t

13:33 TimMc: ssh + screen + Emacs + swank

13:34 duck1123: If you could set it up so that you could re-load the vm at the press of a button, that'd be neat

13:35 and/or just lock down all permissions appropriately

13:35 TimMc: duck1123: follow the link!

13:37 patchwork: So, when I get a compile error, how do I know where that happened? The error is specific, but the stacktrace only shows clojure.lang.Compiler errors

13:38 TimMc: duck1123, gfredericks: Ugh, buggy

13:39 half my keystrokes from the Chat Here were ending up in the main edit area

13:40 patchwork: Usually it tells you what file and line number were at fault.

13:40 patchwork: TimMc: that is what I would think

13:41 gfredericks: TimMc: yeah it's definitely not the slickest thing...

13:41 TimMc: patchwork: What message are you getting?

13:41 patchwork: Unable to resolve symbol: this in this context

13:41 [Thrown class java.lang.RuntimeException]

13:41 theignorati: how do I transform a list into a Java array of strings?

13:41 patchwork: I will gist the stacktrace

13:42 duck1123: (into-array String

13:42 theignorati: thanks

13:42 patchwork: https://gist.github.com/1352421

13:42 TimMc: ugh this thing is so broken

13:42 patchwork: There are two entries from the backtrace that refer to my app, but they both refer to line 1

13:43 which does not have anything referencing "this"

13:43 gfredericks: TimMc: okay, not using chat :)

13:43 patchwork: Is this because I am using swank possibly? I have run into this before

13:44 TimMc: gfredericks: The DSL should say ^String foo and be done with it -- get and set can be created by the macro.

13:44 gfredericks: Or... if you have an interface that demands a getX, is that going to be a problem?

13:45 gfredericks: TimMc: definitely. I didn't write that code

13:45 TimMc: haha, it was duck!

13:45 gfredericks: oh that duck

13:45 duck1123: that was earlier ideas I was throwing out

13:45 TimMc: k

13:46 gfredericks: I like the metadata for type hints. I personally will just use Objects

13:46 duck1123: I tried to set up a wave, but am incapable of copying the link and pasting it into emacs, it seems

13:46 gfredericks: google wave still exists?

13:46 duck1123: yes

13:47 it's a lot slower now

13:47 they must have taken all the servers away

13:48 gfredericks: I would have set up a terminal for us by now, but I don't use emacs so I'd be embarrassed

13:48 TimMc: haha

13:48 also Emacs isn't multiuser

13:48 by default

13:48 gfredericks: tmux

13:48 TimMc: multicursor, that is

13:49 gfredericks: oh

13:49 I've never used a multicursor text editor

13:49 that would be nifty.

13:49 TimMc: you have now

13:49 There is a multicursor Eclipse plugin that syncs over XMPP.

13:49 gfredericks: collabedit: the way of the future

13:49 duck1123: it's multi cursor if you each were connected to the same emacs server

13:49 TimMc: Off to a meeting... :-/

13:49 gfredericks: TimMc: seeya

13:49 TimMc: duck1123: Oh, nice. Didn't know that.

13:49 gfredericks: thx for codez

14:18 #clojure is boring during conj.

14:19 Raynes: gfredericks: I'm sitting in Atlanta waiting on my flight. :>:

14:19 * mefesto wishes he was going this year

14:20 gfredericks: Raynes: I'm sitting in my office not going to clojure conj. Which is ironic because I'm close enough to drive there.

14:20 duck1123: I wish I was at the conj

14:21 gfredericks: I was there last year. I'm just too busy at the moment.

14:21 duck1123: I couldn't talk my boss into paying, and can't afford to send myself

14:21 gfredericks: what's the syntax for accessing a public field on an object?

14:22 mefesto: gfredericks: (.field obj) i think?

14:23 gfredericks: well if it doesn't work I'll find out eventually

14:23 mefesto: ,(.x (java.awt.Point. 1 2))

14:23 clojurebot: 1

14:24 gfredericks: (inc mefesto) ; for knowing an example in the std library

14:24 (dec lazybot) ; for not handling karma

14:24 lazybot: You want me to leave karma the same? Fine, I will.

14:24 gfredericks: lazybot: go away. nobody wants you here.

14:26 bhenry: anyone here at the sheraton already?

14:26 TimMc: devn: Did you get shelter for the 9th yet?

14:26 bhenry: i want to know if there's a way for conj goers to get around the 10 dollar per day internet charge

14:27 TimMc: bhenry: Yeah, go to an Econolodge. -.-

14:27 The cheap hotels have the best wifi.

14:27 s/wifi/internet access/

14:27 bhenry: timmc okay i'll map it.

14:27 TimMc: heh

14:27 bhenry: this entire block is under construction

14:28 TimMc: Seriosuly though, they should be providing complimentary wireless for a con.

14:29 gfredericks: hotels are weird.

14:29 I'm not sure where they got the idea to make internet access really complicated.

14:30 you'd think they could at least do it as well as coffeeshops.

14:30 TimMc: Expensive hotels charge for internet because their clients are mostly suits who can get reimbursed for travel expenses.

14:31 gfredericks: yeah! we're the 99%!

14:31 s/yeah! we're the 99%!/good point

14:31 TimMc: They nickel and dime all their customers because they *can*.

14:32 Cheap hotels don't, so they have to provide some perqs for free.

14:32 also I am back from my meeting

14:32 gfredericks: how'd it go?

14:33 TimMc: boring

14:33 But there was some construction work going on outside.

14:48 cemerick: Who needs hotel wifi when there's 4g and tethered phones?

14:49 :-P

14:50 TimMc: I need to get a data plan...

14:50 gfredericks: I only have 200mb/mo

14:50 devn: I'm grandfathered in still under the unlimited AT&T data

14:51 + jailbroken iphone = win

14:51 gfredericks: this month I unintentionally used 180mb on the first day

14:51 devn: I'm surprised. I've heard of people getting nastygrams for using too much data under ATT, but I've done 16GB in the course of a week and never heard a peep

14:55 tensorpudding: 16 GB on your phone?

14:55 that seems pretty excessive

14:55 albino: the jar files are kind of big

14:55 TimMc: all that IRC'ing

14:56 tensorpudding: which ones?

14:56 they do add up

14:57 clojure by itself is 3 megabytes

14:59 TimMc: Biggest object in my .m2 is a 570 MB SDK.

15:00 but everything else is way smaller

15:05 * gfredericks is tired of seeing ^:dynamic 1.3 warnings from his dependencies

15:05 tolstoy: gfredericks: So far, I've seen them in webnoir. With the recent update, I only see one, so it's getting better!

15:05 gfredericks: tolstoy: I'm too lazy to even figure out which library is generating them.

15:06 but I'm not too lazy to complain about it!

15:06 or meta-complain about my own complaints!

15:06 tolstoy: Heh.

15:06 duck1123: it's gotten a lot better, I switched to 1.3 really early. I only have like 3 left

15:07 I just wish the var warnings were fully qualified

15:08 tolstoy: Over in the Scala world, the community seems to have gotten better at dealing with upgrades. More likely, lib writers are tired of complaints. :)

15:08 This whole splitting apart of contrib seems really promising.

15:09 Oh, whatever. I just like Clojure a whole lot.

15:09 gfredericks: is there a list somewhere of what clojure 1.4 is going to be about?

15:09 duck1123: it's a big pain now, but a good thing in the long run

15:15 kencausey: I'm feeling really stupid but I can't figure out how to access something like the javadoc function in 1.3.

15:16 TimMc: it moved

15:16 repl utils or something?

15:16 clojurebot: Where did contrib go?

15:16 clojurebot: well... it's a long story: http://dev.clojure.org/display/design/Where+Did+Clojure.Contrib+Go

15:17 TimMc: hrm, don't see it

15:17 kencausey: Are you sure it's contrib? It is in the offical API docs and I can see it in the clojure.jar

15:18 Or am I misinterpreting the list of namespaces on the left of http://clojure.github.com/clojure/index.html ?

15:20 gfredericks: TimMc: duck1123: this seems to work and I believe is sufficient for my needs: https://gist.github.com/1352844

15:30 duck1123: gfredericks: Make it a library. I might have use for that somewhere

15:30 kencausey: OK, I don't quite get this, maybe my problem is something is screwed up either with my lein or swank install or something. If I do the basic java -cp clojure.jar clojure.main startup I can use the doc command. But if I clojure-jack-in (within emacs) while in a buffer that holds a project.clj that references [org.clojure/clojure "1.3.0"] and I try doc in the resulting slime connection I get "unable

15:30 to resolve symbol: doc in this context"

15:30 gfredericks: duck1123: come up with a clever name for me

15:31 brehaut: kencausey:(use 'clojure.repl) ?

15:33 duck1123: gfredericks: (musical.fruit/defbean) ?

15:33 gfredericks: duck1123: what's musical.fruit?

15:33 kencausey: brehaut: I will try that, out of desperation I just wiped my lein install and am refreshing it, thanks.

15:34 brehaut: kencausey: alternatively i think C-c C-d does the lookup for you

15:34 gfredericks: wait hmm

15:34 kencausey: brehaut: Thanks but this doc reference is just an example of an overall problem and not really my focus.

15:34 brehaut: kencausey: the slime repl is different to a lein repl

15:34 kencausey: OK, great, more repl types/contexts ;)

15:34 duck1123: I'm a big fan of naming projects in Lojban. dembi.core/defbean

15:35 brehaut: kencausey: the lein repl brings in a bunch of useful namespaces by default; the slime one doesnt appear to

15:36 hiredman: well, lein repl uses clojure.main/repl

15:36 gfredericks: duck1123: would a more broadly scoped class-generation library be more useful?

15:36 kencausey: That's OK, really I was trying to figure out how to refer to the appropriate namespaces and nothing seemed to be working

15:36 hiredman: the sawnk repl doesn't

15:36 which is kind of a drag

15:37 duck1123: gfredericks: probably.

15:38 kencausey: OK, well at least doc is now working in the swank repl, I have no idea what went wrong there before. Continuing...

15:38 gfredericks: duck1123: thank you for alerting me to lojban.

15:38 duck1123: .ui

15:39 kencausey: OK, so back to javadoc for a moment. Am I wrong in thinking that clojure.java.javadoc is in the clojure.jar?

15:39 (again this is for 1.3)

15:40 if it is should I not be able to refer to the javadoc function as clojure.java.javadoc.javadoc ?

15:42 scottj: you have to require it first I think, then it's clojure.java.javadoc/javadoc maybe

15:42 raek: kencausey: clojure.java.javadoc/javadoc

15:43 after running (require 'clojure.java.javadoc)

15:43 (it is included in clojure since version 1.2)

15:43 kencausey: raek: Thanks, my stupidity, among other things, involved that /.

15:45 cemerick: devn, gfredericks: I downloaded xcode over sprint 4g some months ago. Faster than my home wifi. I think it was in the GB area.

15:46 scottj: I think xcode is ~3-4GB

15:46 cemerick: whatever it was; sprint ate it up

15:54 kencausey: OK, correction. As I mentioned before I reinstalled lein but I also wiped the previously created project and created it anew. Of course lein set it up for 1.2.1 which I failed to notice so my previous mentioned success was with 1.2.1, not 1.3.0 as intended. Changing it to 1.3.0 now requires that I (use 'clojure.repl) to have doc at hand, but it works once that is done.

17:08 gfredericks: is maven really slow about downloading stuff, or do I have unrealistic expectations?

17:09 brehaut: gfredericks: its simulating the java experience for you

17:09 for each resource

17:09 gfredericks: I swear it takes it ten seconds to get an xml file.

17:10 brehaut: gfredericks: exactly. it starts a new jvm

17:10 gfredericks: brehaut: it can't really be that dumb can it?

17:10 brehaut: gfredericks: its sad that it wasnt obviously a joke :(

17:10 gfredericks: inorite

17:11 tensorpudding: is maven what lein uses?

17:11 gfredericks: yeah

17:11 I'm currently getting a full eclipse treatment

17:13 for some reason it's not very straightforward for me to get eclipse to update a snapshot :/

17:13 brehaut: eclipse is a system i want to like and use but never can

17:14 gfredericks: I never use it unless I have to

17:14 it's definitely nice for browsing java code.

17:15 brehaut: yeah gigantic doesnt begin to describe it ;)

17:15 i have high hopes for ccw though

17:16 gfredericks: I generally can't get into GUI stuff, since it's never clear how to script things, if it's even possible

17:17 brehaut: gfredericks: i generally cant get into the idea that something that is 25 years old is the highest point for a developers text editor ever ;)

17:17 (i nevertheless use emacs, but still)

17:17 gfredericks: brehaut: text hasn't changed all that much in 25 years :P

17:17 agumonkey: yesterday I discovered how to create menus in emacs, then I remembered the pain to build the simplest menu plugin in eclipse.

17:17 gfredericks: it's still strings of characters...

17:18 brehaut: gfredericks: but the text we edit isnt :P

17:18 gfredericks: brehaut: as programmers we have less of a need for GUIs because we can automate just about anything we can imagine

17:19 TimMc: It's nice to have things automated for you.

17:19 brehaut: gfredericks: im not talking about gui or not, it just suggesting that emacs and vi arent the greats though in text editing ;)

17:19 TimMc: I suppose you could technically hitch a headless Eclipse to Emacs...

17:20 duck1123: I'd like to see a clojure-based text editor that copies everything good about emacs as closely as possible

17:20 clooj isn't quite there

17:20 gfredericks: I suppose "automated" and "graphical" are orthogonal?

17:21 brehaut: gfredericks: probabl

17:21 gfredericks: so why do GUIs exist? so people can use mice?

17:21 and have information arranged in complex ways?

17:23 on second thought, I have to go.

17:23 * gfredericks goes

17:25 clojurebot: Cool story bro.

18:03 arohner: with midje, is it possible to specify only some of the arguments when testing called count?

18:05 duck1123: arohner: you can use the anything checker

18:05 arohner: duck1123: right, but I want to specify some of the arguments, but not all of them

18:07 duck1123: I haven't gotten that advanced with midje yet, but cant you mix and match them?

18:08 (provided (called 2 anything) => 1 :times 1)

18:08 arohner: oh, didn't try that. I will. Thanks

18:13 duck1123: doesn't appear to work

18:15 duck1123: drats. I figured that would. What's the error?

18:16 arohner: "You claim the following was needed, but it was never used"

18:16 then lists the fn I provided

18:40 https://github.com/marick/Midje/wiki/Checkers-within-prerequisites seems to have instructions for how to do this

19:31 goodieboy: could someone recommend a simple way to get http authentication into my noir/compojure app?

19:33 zodiak: goodieboy, ring-basic-authentication ?

19:35 goodieboy: zodiak: yep exactly, thanks!

19:35 zodiak: goodieboy, not a problem. fwiw, I started off doing noir, and then I found that ring is almost as simple :)

19:36 goodieboy: zodiak: i've had that question/thought in my head too.

19:36 duck1123: if you don't need the level of abstraction that noir provides, you don't have to use it

19:36 brehaut: even if you want to stick with noirs level of abstraction, its worth the small amount of time it takes to learn ring and its associated tools

19:37 zodiak: agreed :)

19:50 goodieboy: yep, agreed

20:44 moogatronic: high latency free hotel wifi. =)

20:49 mjwhitt: woah woah woah, free hotel wifi?

20:49 all I found was ones that tried to get me to pay

20:50 my android phone with unlimited data = free wifi for me ;)

20:59 pdk: ,(* 40 9)

20:59 clojurebot: 360

21:08 TimMc: ,(+ (* 13 28) 1)

21:08 clojurebot: 365

21:09 brehaut: TimMc: are you an accountant?

21:09 TimMc: and thus my proposal for 13 4-week months and one holiday

21:09 brehaut: What?

21:09 mjwhitt: clojurebot's most used as... a calculator

21:10 brehaut: TimMc: bean counters like to use a 13 month year because it makes monthly salary payments more managable

21:11 bhenry: brehaut: but then quarters are a pain.

21:11 brehaut: bhenry: thats their problem, not mine

21:11 goodieboy: how do i select a random element from a vector?

21:11 brehaut: ,(rand-nth [:a :b :c])

21:12 clojurebot: :b

21:12 brehaut: goodieboy: ^

21:12 goodieboy: brehaut: awesome thanks!

21:12 brehaut: what about shuffle?

21:13 brehaut: ,(apropos shuffle)

21:13 clojurebot: ()

21:13 bhenry: ,(first (shuffle [:a :b :c]))

21:13 clojurebot: :a

21:13 bhenry: ,(first (shuffle [:a :b :c]))

21:13 clojurebot: :c

21:13 brehaut: oh. missed a quote. thanks bhenry

21:14 goodieboy: perfect

21:17 brehaut: goodieboy: do you know about apropos ?

21:17 and find-doc

21:17 goodieboy: brehaut: no

21:18 brehaut: goodieboy: apropos returns a list of symbols that match a query

21:18 ,(apropos 'part)

21:18 clojurebot: (partition-by partition-all partial partition)

21:18 brehaut: you can pass symbols, strings, regexps etc to it

21:18 (doc find-doc)

21:18 clojurebot: "([re-string-or-pattern]); Prints documentation for any var whose documentation or name contains a match for re-string-or-pattern"

21:18 brehaut: but you dont want to run find-doc in irc

21:19 bhenry: brehaut: what namespace is apropos in?

21:19 brehaut: (source apropos)

21:19 goodieboy: brehaut: nice, very nice

21:19 brehaut: ,(source apropos)

21:19 clojurebot: Source not found

21:19 brehaut: bah

21:19 bhenry: ,(meta apropos)

21:19 clojurebot: nil

21:19 bhenry: humbug

21:19 brehaut: ,clojure.repl/apropos

21:19 clojurebot: #<repl$apropos clojure.repl$apropos@1c06a6d>

21:20 bhenry: cool

21:20 good to know

21:20 brehaut: i think find-doc is in there too

21:20 the only surprising one is javadoc which is in clojure.java.javadoc

21:21 also, in 1.3 doc knows about special forms (although its documentation is brief)

21:21 ,(doc let*)

21:21 clojurebot: I don't understand.

21:22 brehaut: &(doc let*)

21:22 lazybot: ⇒ "Special: let*; "

21:22 brehaut: thats particular brief.

21:31 whats up with nthnext, and how does it differ from drop ?

21:31 (aside from argument order)

21:33 aha, laziness

21:37 TimMc: ,(doc ffirst)

21:38 clojurebot: "([x]); Same as (first (first x))"

21:38 TimMc: It's caar :-D

21:38 brehaut: :)

21:38 TimMc: naughty

21:38 brehaut: at least theres no ffnfnnfnfirst

21:38 TimMc: there had better not be a ##(doc fffirst)

21:38 lazybot: java.lang.RuntimeException: Unable to resolve var: fffirst in this context

21:39 TimMc: good

22:14 mjwhitt: user=> (super-first "first" [1 2 3])

22:14 1

22:14 user=> (super-first "ffirst" [[4 5 6] 2 3])

22:14 4

22:14 user=> (super-first "fffirst" [[[7 8 9] 5 6] 2 3])

22:14 7

22:15 muah ah ah

22:15 </super lame clojure>

22:15 callen: mjwhitt: you're sick.

22:15 mjwhitt: I appologize

22:15 hehe

22:15 callen: mjwhitt: take some medicine.

22:15 brehaut: mjwhitt: looks like a narrow reinterpretation of zippers?

22:15 callen: mjwhitt: also, it's a birthday tomorrow!

22:16 mjwhitt: this is the first day I have ever actually written any clojure myself

22:16 so it's a "hey I did *something*" day

22:16 brehaut: mjwhitt: congrats

22:16 callen: mjwhitt: well done sir. too bad you can't make a reader macro to intercept functions of the form [f]+irst

22:17 so, how often do ex-CL'ers bitch about that here?

22:17 mjwhitt: yeah, that's what I wanted to do at first, especially since I'm used to ruby / method-missing / metaprogramming

22:17 callen: mjwhitt: Clojure has a way of approaching and doing DSLs

22:17 mjwhitt: and I think it's fairly elegant, but it ends up looking like arbitrary data modelling your problem in the form of S-Exps

22:18 mjwhitt: this is as compared to when I wrote a matlab dialect in CL for somebody

22:18 mjwhitt: and I mean that quite literally. he had a repl where he could enter most valid matlab expressions and get a sensible answer. I bet that code was still faster than R.

22:18 mjwhitt: I don't like Ruby DSLs, tbqh.

22:18 mjwhitt: heh, interesting

22:18 callen: mjwhitt: it's not powerful enough to be worth the sacrifice you get in uniformity.

22:19 mjwhitt: if I'm going to pick one, I'd rather pick Clojure or CL

22:19 Clojure being more uniform, CL being absurdly powerful but nobody can read each others' code.

22:19 never got the hang of scheme macros.

22:20 mjwhitt: yeah, I'm attempting to warm up to clojure

22:20 callen: mjwhitt: been learning it for 1.5-2 years. I still feel like a fucking moron. I think you're smarter than me.

22:20 mjwhitt: I use ruby almost exclusively at work

22:20 haha

22:20 ieure: Sucks, bro.

22:20 callen: mjwhitt: my brain was broken by CL and a couple other languages, that combined with my *_* @ invoking Java code has made me slow at getting proficient in Clojure.

22:21 mjwhitt: I do Python, Java, C/C++, Pig, and JavaScript at work.

22:21 mjwhitt: most of the Java is hadoop code.

22:21 ieure: I know right?

22:22 ieure: I've been writing Scala. Language is alright, but the tools are a shitshow.

22:22 jodaro: i was just getting into some scala today

22:23 digging through finagle

22:23 callen: ieure: that's about what I guessed. I don't like a lot of things about it.

22:27 the reason I'm not interesting in Scala is largely the same reason I wasn't interested in Scala

22:28 being an industry standard is going to make me wile away the hours I spend at home on something.

22:28 is not*

22:28 brehaut: i assume that argument was less circular in your head than when you typed it out

22:28 callen: the second scala was supposed to Java

22:28 the fact that I equate the two in my head is represented in the mistake.

22:28 that was more illustrative than I intended.

22:31 it...may be tea time...

22:32 mjwhitt: it's bed time for me... time to dream of parenthesis

22:32 I'm looking forward to talks tomorrow

22:32 jodaro: heh

22:32 callen: mjwhitt: parentheses

22:33 mjwhitt: whoops, see... I need sleep

22:33 hehe

22:33 jodaro: will there be stuff on the interwebz streaming from the conj?

22:33 callen: Verizon claims my iPhone has used 1.7TB this month

22:33 I...doubt their claims.

22:34 jodaro: for us poor bastards that couldn't make it?

22:34 callen: I mean, I know I stream a lot of music, but it's not FLAC.

22:34 jodaro: I'm sure there will.

22:34 brehaut: jodaro: i havent heard anything about it happening

22:34 jodaro: i recall that google chipped in for the clojurescript presentation bandwidth as a special thing

22:35 jodaro: but i imagine a number of the presentations will be recorded and posted after the fact (like they were last year)

22:35 callen: they support CLJS even though it's going to buttfuck Dart?

22:35 that's pretty funny.

22:36 jodaro: looks like the twitters can't decide behind #clojureconj and #clojure_conj

22:36 callen: I don't think underscores are all that common in hashtags, not sure why people would do that.

22:37 Can you pull up a regex of hashtags on Twitter?

22:37 ieure: Because people is dumb.

22:40 jodaro: or at least or them together

22:40 callen: jodaro: Twitter has smarter coders than most, but I doubt making their fellow coder happy was a high priority for that interface.

22:40 jodaro: pity.

22:40 jodaro: I could write a mash-up that implemented the aforementioned :P

22:41 jodaro: in Scala?

22:41 callen: HAW HAW

22:41 you're hiiiilarious son.

22:41 don't quit your day job >:<

22:41 jodaro: heh

22:41 callen: more likely, Noir // Flask.

23:19 semperos: I've been getting my head around logic programming, been converting some "regular" functions into ones that return goals

23:20 I'm trying to understand the "right" way to make relations out of simple functions that return boolean values that, unlike nilo or emptyo, can't be unified with a simple Clojure datastructure

23:20 https://gist.github.com/1354083

23:20 is an example, where I have a function that depends on a call to Java function which returns a boolean

23:21 I do (== (visible? foo) true) to return a goal, but I've not seen any examples of unifying on true

Logging service provided by n01se.net