#clojure log - Jan 07 2010

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

0:07 mebaran151: maven is my new best friend

0:11 replaca_: mebaran151: but have you read: http://kent.spillner.org/blog/work/2009/11/14/java-build-tools.html ?

0:13 mebaran151: replaca_, oh yeah, I hate pom.xml's, but lein makes maven positively beautiful

0:20 I'm actually scared of anything that references archetypes in all due seriousness

0:23 has anyone here ever used jbuildr for build files

0:23 when I played with scala it was a passable a build tool

0:26 JonSmith: archetypes?

0:26 i'm not familiar with those

0:28 replaca_: mebaran151: no, I've never used that. I do enjoy leiningen, but I think it's going to have to grow in flexibility

0:29 * hiredman smashes compojure

0:29 JonSmith: why you smashing compojure?

0:29 hiredman: because it uses that stupid immigrate macro

0:29 and a single segment namespace

0:29 and FileUpload

0:29 (FileUpload is not allowed into appengine)

0:30 JonSmith: oo

0:30 hiredman: I fixed it, but now I need to figure out how to get a pom and upload to clojars

0:30 I wonder if I can recover the pom.xml from someone else's compojure jar

0:31 JonSmith: probably

0:31 hiredman:

0:31 I was hoping for "Yes! here's how …"

0:31 mebaran151: hiredman, you could use lein?

0:31 the lein file just has all the dependencies

0:31 JonSmith: http://bitbucket.org/jimdowning/hello-mvn-clj/src/tip/pom.xml

0:31 i googled you one

0:32 don't ask me how it works

0:32 mebaran151: *pom.xml

0:32 JonSmith: http://jimdowning.wordpress.com/2009/07/30/compojure-maven/

0:32 that too

0:33 hiredman: mebaran151: the compojure project predates lein

0:33 mebaran151: nah I know

0:33 but if you know the deps

0:33 usually building the pom is pretty easy

0:33 JonSmith: hmm wait

0:33 mebaran151: the pom.xml lein pom builds is actually just the dependency stanzas

0:33 JonSmith: what i googled is not useful

0:33 oh well

0:34 mebaran151: http://github.com/ozzilee/compojure/blob/maven/pom.xml

0:34 this should probably do it

0:35 hiredman: ahah

0:35 mebaran151: that's all the deps you need

0:35 hiredman: the poms are stored in the local maven repo

0:35 I am not looking for deps

0:36 I am just trying to publish the jar to clojars

0:36 ^-

0:36 mebaran151: does clojars use the pom.xml for anything?

0:36 *else

0:36 hiredman: clojurebot: thanks

0:36 clojurebot: Pardon?

0:36 mebaran151: I thought it just used it for the dependency checking

0:37 I didn't think lein and clojars it built used maven directly to run the compile cycle

0:37 hiredman: I am not trying to build compojure

0:37 I just want a copy in the repo that isn't brain dead

0:49 replaca_: ~seen technomancy

0:49 clojurebot: technomancy was last seen quiting IRC, 228 minutes ago

0:49 replaca_: I'd love to write a plugin for his program, but it makes me want to set my hair on fire

0:59 hiredman: replaca_: :P

0:59 * hiredman is sort of banging on an appengine plugin

1:01 replaca_: hiredman: everything that's supposed to make your life easier seems to make it harder in some way. I copied the lein-swank plugin, but the :use is giving me " java.lang.IllegalAccessError: eval-in-project is not public (autodoc.clj:1)"

1:01 :-(

1:02 hiredman: eval-in-project must not be public then


1:02 replaca_: if only it were that simple!

1:03 "(defn eval-in-project ...)"

1:03 lein-swank uses the same :use and compiles fine

1:05 hiredman: are you sure the version of lein you are using matches the tree you are looking at?

1:05 replaca_: the history says it's never been private

1:06 but that's where I fell into the well - I couldn't get leiningen to build/install/use from source

1:06 but it should be ok cause I copied from lein-swank and that compiles fine in my world

1:07 (and runs too)

1:08 hiredman: hmmm

1:08 do you really need evl-in-project?

1:08 (evil) eval

1:08 replaca_: well, that's kind of the point of the plugin

1:08 hiredman: eh?

1:08 replaca_: (as it is with many plugins in leiningen, I would think)

1:09 well, it's loading code in the project which means it needs the projects classpath, etc.

1:09 hiredman: I see

1:09 replaca_: that *seems* to be leiningen's mechanism for doing that

1:11 it's not exactly doing an eval underneath, it's much scarier: it's consing up an ant job that executes clojure -e with your code.

1:12 hiredman: yeah

1:13 replaca_: autodoc uses ant, too, so maybe the problem is there (though I can't see why it would be)

1:17 hiredman: replaca_:where does the exception popup? I can :usr and :only eval-in-project just fine

1:18 works for me :(

1:27 replaca_: argh! It just needed a "lein clean"!

1:27 * replaca_ dips hair in kerosene

2:15 replaca: indeed it is, but not *quite* ready for prime-time. RSN, though!

2:16 hiredman: you here?

2:16 hiredman: yessir

2:16 replaca: how do you get the info from clojars? is there an api/webhook?

2:17 hiredman: screenscrape

2:17 :(

2:17 replaca: ack!

2:17 we gotta get that fixed up

2:18 clojars needs to be telling us a *lot* more

2:19 at least the data from the pom

2:20 hiredman: something, but if I have to write another rss polling something or other I will cry

2:20 replaca: it's all about webhooks, baby!

2:21 rss is tech of the past :-)

2:21 like the steam engine

2:21 hiredman: I wrote an rss -> webhook thing and promptly discovered github uses atom

2:21 :(

2:23 replaca: bummer. github supports webhooks directly, but the project owner has to enable it for you which is kind of lame

2:23 hiredman: yeah

2:23 replaca: (that's how autodoc works)

2:24 anything I can browse, I ought to be able to hook

2:30 hiredman: someone needs to write a pubsub node in clojure

2:33 replaca: yeah, that would be a fun project. something along those lines is somewhere on my roadmap if I ever get out of the formatting and documenting game :-)

2:34 time to walk the dog and get some sleep

2:34 see y'all in the AM.

3:33 LauJensen: Morning team

4:53 erohtar: ,(def p (promise))

4:53 clojurebot: DENIED

4:53 calvini:

6:01 adityo: good afternoon folks

6:02 ,(doc cond)

6:02 clojurebot: "([& clauses]); Takes a set of test/expr pairs. It evaluates each test one at a time. If a test returns logical true, cond evaluates and returns the value of the corresponding expr and doesn't evaluate any of the other tests or exprs. (cond) returns nil."

6:03 adityo: for cond how can i give a final clause i.e if nothing else then this..like t in Common Lisp

6:07 got it

6:08 simply use tru

6:08 true

6:17 Chousuke: adityo: use :else. it's the idiomatic "always true" thing.

6:19 adityo: Chousuke: thanks will try it out

7:18 tcrayford: is there a way to have variable arity in a macro?

7:46 cemerick: tcrayford: macros can have multiple arities just like other fns

7:46 if the arity really is variable, and you're essentially parsing the arguments, then use rest args

7:48 defn`: hmmm -- off topic but, does anyone know if it's possible to use HTML frames without a src="blah.html", and instead to render html within that frame?"

7:49 i want to do something like [:frame {:name "top"} (html [:h1 "hello world"])] in compojure

7:49 but im not sure it's even possible

7:50 i dont remember the last time i used frames, heh

7:51 cemerick: defn`: No, I don't think you can do that -- you'd probably have to populate the frame's document using js.

7:51 defn`: yuck

7:51 back to the drawing board...

7:53 lol god this domain name is weird: internet.com

8:02 it's like...really? the internet.com, eh?

8:27 JonSmith: defn: you would want to use a div for that

8:28 then you can use CSS to position it etc.

9:22 seths: if this is too lazy please let me know, but entering a ticket for a single character typo on clojure.org seems too much

9:22 on http://clojure.org/macros

9:22 The link to Java interop needs an o

9:22 currently is http://clojure.org/java_interp

9:39 ordnungswidrig: hey all

9:40 jasapp: mornin'

9:43 ordnungswidrig: does anybody know of a fully decentral database. Decentral in a sense of gti/darcs?

9:43 chouser: seths: that's not in git, so the process is a bit different. as in, no process. :-) Thanks for the report.

9:45 seths: fixed

9:46 ohpauleez: ordnungswidrig: RMDBS or Keystore?

9:47 chouser: rdf something?

9:47 ohpauleez: ordnungswidrig: you might want to take a look at CouchDB

9:48 not sure what you want, but I think you're just looking for a distributed storage system

9:48 seths: chouser: thx

9:48 ohpauleez: LauJensen: I like the recent changes to Best In Class

9:50 ordnungswidrig: ohpauleez: I know couchdb which is not so bad. Bad I was looking into existing db (rdbms or keystore) based on a decentral basis like git/darcs that support branching / tag / joining. Especially like darcs based on a "patch theory" / "operational transformations"

9:51 jasapp: how close does couch's sharding come to what you're looking for?

9:52 ordnungswidrig: jasapp: no very close. If you look at darcs vcs every change is recorded, a "patch" and depending in the changes recorded in different branches you can merge the branches seamlessly. In couch you have a different merge model.

9:53 jasapp: gotcha, I'm not very familiar with darcs

9:54 ordnungswidrig: jasapp: is an interesting model which fits the idea of fp and persistent datastructures rather well. (No wonder, it comes from the haskell guys).

9:56 jasapp: I wonder if you can define a model say a relational data model and define operations ("patches" in darcs speak) on it, e.g. insert, update columns, delete, add/remove foreign keys. And for those operations you define inversation and commutation and you'll get undo, merging "for free". (As long as to patches commute)

10:02 ohpauleez: ordnungswidrig: this already sort of happens, patch theory is applied and has been applied in a lot of places

10:03 A session, commits, and rollbacks happen as a transaction, which can be applied, and aborted

10:03 if you represent the transaction as a diff of the current state, you have what you're looking for

10:04 I don't know of any DB that does that, most likely for performance reasons, but it could be cool

10:04 You're basically looking for a distributed delta store

10:05 AWizzArd: I might have something available in January

10:08 ordnungswidrig: AWizzArd: I think we chatted about that some time ago, right?

10:11 arj_: I'm wondering if I need to have a dosync around some code that I want to make sure that it reads the same values of a ref

10:12 chouser: arj_: yep

10:12 arj_: ah, so you can shoot yourself in the foot (concurrency wise :))

10:12 chouser: outside a dosync, derefing a ref is a "flying read" -- you get whatever you happen to get

10:12 arj_: thanks

10:12 ohpauleez: reads happen for free, and you'll get the value at read time, if you want to lock out the read, you'll need a dosync

10:12 gah, chouser beat me, I was looking away

10:12 chouser: of course you could also deref once an put it in local, then just use that local.

10:13 if you only care about the state of a single ref, that is. If you want a consistent snapshot of 2 or more refs, you'll need a dosync.

10:14 arj_: yeah

10:14 makes sense

10:14 chouser: But again, if you're not going to also update a ref, you can get the values in a dosync, put them in locals, and then do your work outside the dosync.

10:14 this would help reduce the amount of work done if the transaction has to be retried.

10:15 but yeah, you get it. So I'll stop talking now.

10:15 :-)

10:16 arj_: :D

10:16 thanks for all the help!

10:22 praptak: Is there a reason for using doto with methods and functions only?

10:23 ordnungswidrig: can I use deftypes with multimethods?

10:24 like multimethods in clos?

10:25 Ankou: hi, is there something like prxml which returns the xml-string instead of just printing it?

10:25 AWizzArd: ordnungswidrig: yes, some time ago we talked about it. I had a bit time to work on my db, and next week i will even have a lot of time for it.

10:26 the-kenny: Ankou: You can wrap the xml-stuff in a (with-out-string)

10:26 ,(doc with-out-string)

10:26 clojurebot: excusez-moi

10:26 jasapp: ,(doc with-out-str)

10:26 clojurebot: "([& body]); Evaluates exprs in a context in which *out* is bound to a fresh StringWriter. Returns the string created by any nested printing calls."

10:27 jasapp: I kept looking for with-out-string the other day :)

10:28 Ankou: okay, thanks

10:36 chouser: praptak: I don't understand your question.

10:42 praptak: chouser: The docstring mentions only "methods and functions", not "forms". Does that mean that you cannot use macros?

10:42 , (doc doto)

10:42 clojurebot: "([x & forms]); Evaluates x then calls all of the methods and functions with the value of x supplied at the from of the given arguments. The forms are evaluated in order. Returns x. (doto (new java.util.HashMap) (.put \"a\" 1) (.put \"b\" 2))"

10:46 Chousuke: you can use macros.

10:47 chouser: ,(macroexpand '(doto foo (if (then-this) (else-that)) (-> fn1 fn2 fn3)))

10:47 clojurebot: (let* [G__6169 foo] (if G__6169 (then-this) (else-that)) (-> G__6169 fn1 fn2 fn3) G__6169)

10:47 chouser: praptak: yeah, the docs could be made a little less ambiguous there I guess.

10:48 praptak: Thanks for the info.

10:55 scottj: These 7 lines http://pastie.org/770219.txt appear to be the bottleneck in my program, any ideas on a faster way to do that same thing? (get records out of maps and sum up one key grouped by another key)

10:58 ohpauleez: scottj: if you change it to apply +, you might see an increase

10:58 the other way is to use agents and partition it

11:07 Licenser: scottj: did you try it with update-in?

11:08 and what kind of collections are your maps and how big are they??

11:11 chouser: scottj: you could try using transients for the map you're building.

11:12 scottj: you could try doing the :name lookup once: put it in a local to use twice.

11:16 the only other thing I can think of is to try to use primitive numbers for 'result' and the adding, but that might not really work. Unless you're on 'new' using a deftype, (:amount match) is boxed anyway.

11:17 jasapp: is there an easy way to tell if something is getting boxed?

11:18 * Licenser came up with http://pastie.org/770269

11:18 jasapp: or some guidelines for understanding when things get boxed?

11:19 chouser: not very easy. I think the best I've got so far is repl-utils expression-info

11:20 jasapp: currently collections can't store primitives and literal numbers are boxed.

11:20 Chousuke: well, currently always on function boundaries, unless it's inlined.

11:20 chouser: ah right, and function boundaries

11:21 mebaran151: collections in Java box Integers too right?

11:22 I remember failing to make a List<int> a long time ago

11:22 jasapp: pardon, function boundaries?

11:22 mebaran151: when you pass a value to a function, it gets boxed to Object

11:22 chouser: I think so. Generics don't work on primitives, and it's too much trouble to specialize all the containers for primitives. ...until macros and cinc anyway. :-)

11:23 mebaran151: right, and return values from functions are boxed as well.

11:23 mebaran151: but you really only need primitives in tight loop recurs, where they don't get unboxed

11:23 I always felt dealing with primitives was a bit of code smell

11:23 how do you know if you should be using int or long

11:23 chouser: maybe it's easier to state it the other way -- only locals, java interop, and things that expand to those at compile time can be primitive.

11:24 jasapp: interesting

11:24 mebaran151: if you have a tight loop, you probably wouldn't want to make it lazy anyway

11:25 Chousuke: with macros you could generate all the overloads for primitives in a few lines of code, but it would bloat the interfaces horribly :/

11:25 mebaran151: I'm not sure it would be worth it anyway

11:25 a sufficiently smart compiler shouldn't make the programmer worry about boxing and unboxing

11:26 Chousuke: As I understand it, invokedynamic is supposed to solve exactly that problem, but it remains to be seen how well it'll succeed.

11:26 mebaran151: I've looked at the reflected invoke methods

11:26 they're a doozy

11:29 I wonder if it would really be so simple: I get the feeling that lists assume they contain pointers: I wonder what would happen if they suddenly contained something that wasn't a pointer like an int or long

11:32 mithraic: Are there Clojure method invocations that have to use reflection?

11:32 Or is it guaranteed not to happen unless you go about it yourself?

11:32 AWizzArd: no, when you call Clojure functions then jvm reflection is not needed

11:33 bowyakka: hi all, what is the status of clojure functions and other forms with regard to serialisation

11:33 mithraic: Coming from Scala, reflection is used for invocation for structural types, since they're not of a particular known class.

11:33 chouser: I believe rhickey plans for at least vectors to be able to hold longs and doubles.

11:35 mithraic: Calling Clojure fns never requires reflection or type hints. Java method calls (both static and instance) may require reflection at runtime if insufficiently hinted at compile time.

11:40 bowyakka: for reference I am using clojure to play with oracle / tangosol coherence, when I run the following http://gist.github.com/271354 I get an exception. I am figuring this is happening as part of serialisation, do clojure fn's support sialisation ?

11:40 mebaran151: bowyakka, nope

11:41 bowyakka: hahah easy question then

11:41 from vauge memory of other lisps, is it possible to print out a fn's original forms, I could kludge serialisation this way ?

11:42 chouser: bowyakka: yes, probably.

12:16 jasapp: does anyone know what the emacs command is to view the source of a function?

12:16 I thought it was C-c C-spc

12:17 the-kenny: jasapp: M-.

12:18 jasapp: strange

12:19 thanks

12:19 the-kenny: You're welcome

12:19 jasapp: do you know which mode provides that?

12:20 I was looking at the normal slime cheatsheet I have, and it says C-M-. is supposed to lookup source

12:20 the-kenny: I think the functionality is located in slime

12:20 jasapp: hmm, ok

12:21 the-kenny: (I want to hack on this feature... but it's a bit complicated)

12:21 jasapp: got some cool ideas?

12:22 the-kenny: There's a TODO.org in swank-clojure ;)

12:26 mithraic: I see the Google Group; there's not also a mailing list?

12:27 chouser: mithraic: there is not. You can set up your Group account to gateway to email.

12:27 mithraic: Cool, thanks. Also: Is it considered polite or inpolite to post a job offer to the group?

12:27 jasapp: it's been done in the past

12:27 chouser: it's happened a few times now -- haven't heard any complaints :-)

12:31 djork: please do :)

12:32 jasapp: indeed, you'll be hearing from me

12:32 * the-kenny thinks some people here would like to do a job in clojure

12:33 jasapp: who would have guessed? :)

12:35 pjackson: mithraic: based in the US?

12:35 mithraic: yeah, i think we'll probably prefer someone local to NYC if possible, but we'll see

12:35 it's a medium-term gig, a few months

12:35 chouser: ,(instance? java.util.List [])

12:36 clojurebot: true

12:36 chouser: yay!

12:37 cemerick: mithraic: who's "we"?

12:39 mithraic: http://wirelessgeneration.com, working on http://www.nytimes.com/2009/07/22/education/22school.html

12:45 hmm, i might not be supposed to say publicly that we're the ones with that contract. So ~~waves hands~~

12:49 pjackson: Maybe I can make some money from Clojure: mithraic, give me $100 or I'll tell your boss what you just did.

12:50 * the-kenny wouldn't say it for just $50

12:50 pjackson: Damn.

12:50 Out bid.

12:50 mithraic: heck, i'll not say it for free (from now on). So you're totally boxed out :)

12:58 _schulte_: I'm having trouble providing optional arguments w/o code duplication, for example in the following http://gist.github.com/271411 is there an easy way to avoid re-writing the body?

13:00 hiredman: _schulte_: usually the way it is done is the single arg body calls the two arg body

13:01 technomancy: _schulte_: heyo!

13:01 _schulte_: hiredman: perfect, thanks

13:01 technomancy: hey there!

13:02 Chousuke: you can also define a local helper function and use that

13:02 technomancy: long time no see

13:02 Chousuke: eg. (letfn [(helper [params] ...)] (defn del-sec ...))

13:02 _schulte_: yea, stopped working and back to school, I just found a way to force clojure into my research assistantship so I may start showing up around here

13:03 technomancy: awesome

13:03 _schulte_: I'm thinking about having a seattle Clojure meeting maybe in february.

13:03 _schulte_: Chousuke: you can have a letfn outside the defn? I wouldn't have thought of that

13:03 Chousuke: _schulte_: sure. it just creates a closure :)

13:03 _schulte_: technomancy: I'm living in albuquerque now :)

13:03 technomancy: just get together and hack/chat

13:03 oy

13:04 _schulte_: did you move for school?

13:04 _schulte_: technomancy: yup

13:04 Chousuke: scottj: it's one way to have "private" helper functions without actually defining them as private vars.

13:04 technomancy: _schulte_: well don't let clojure pull you in too deeply or you'll have to find another maintainer for rinari. =)

13:05 _schulte_: technomancy: already done :) figured it was best since I haven't used it in months

13:05 Chousuke: scottj: you can also make a local atom or other mutable thing using let, though that's not so idiomatic

13:05 technomancy: _schulte_: oh nice, who is it?

13:05 _schulte_: Chousuke: I thought letbound variables were immutable

13:06 Chousuke: _schulte_: letbound *values* are immutable, but if the value is one of the reference types, then it obviously is mutable :)

13:06 _schulte_: technomancy: purcell and flavorjones on github

13:07 Chousuke: ah thanks, clearly I'm still adjusting to some of this clojure-specific stuff

13:07 Chousuke: (let [a (atom 1)] ...) <- the binding a is immutable, but the value a points to may change.

13:07 _schulte_: technomancy: they've been handling patches and maintenance for a couple of months now

13:08 Chousuke: _schulte_: that said, a defn inside a let is not that common, but it's sometimes useful. :)

13:08 _schulte_: Chousuke: sweet, good to know

13:09 technomancy: recently all my open-source efforts have been going into http://orgmode.org/worg/org-contrib/babel/ for Emacs org-mode

13:09 hiredman: the occasional big honking letfn

13:24 cemerick: cgrand: in the mood for an enlive bug report here, or should I file an issue on github?

13:27 travisbrady: this question is maybe a little silly but, what new stuff does one learn by learning clojure/lisp? other langs i've used: python, haskell, php, java, perl

13:29 gregh: clojure has some practical implementations of modern ideas around concurrency that you may not have encountered before

13:29 knuckolls: i'm a bit of a clojure noob myself, but software transactional memory style concurrency is not represented in that list

13:30 cemerick: travisbrady: macros aren't represented in that list

13:31 the-kenny: Yeah, lisp-macros are really cool.

13:31 arohner: travisbrady: you'll adopt a more FP style, learn about the evils of global mutable state, and start to think about things at a higher level of abstraction. Or not, depending on how much haskell you've done

13:31 the-kenny: You'll miss them in other languages

13:31 arohner: clojure is a lot more practical than haskell, though

13:31 _schulte_: travisbrady: if you don't already have experience with the "functional programming" or with the "code is data" aspects of lisp they are both important to know and will change the way you program in any language

13:32 knuckolls: so I haven't quite passed the macro hump yet as far as lisps are concerned. I don't get why they're so handy.

13:33 arohner: knuckolls: have you every wanted to write a function in say, python, that looked like:

13:33 the-kenny: -> and .. are verh handy macros.

13:33 arohner: def foo(body): try: body(); catch exceptA; catch exceptB?

13:34 gregh: knuckolls: http://www.defmacro.org/ramblings/lisp.html is a good introduction

13:34 (it's a bit slow to start but a worthwhile read)

13:34 knuckolls: gregh: cool thanks

13:34 arohner: yeah i have

13:34 arohner: macros could help?

13:34 travisbrady: _schulte_, arohner, cemerick: yeah, the functional stuff i've hit on with Haskell, but I'm really interested in macros

13:36 arohner: knuckolls: yes, you can write a macro to do that seamlessly in clojure

13:36 the-kenny: ,(macroexpand-1 '(-> 1 inc inc inc))

13:36 clojurebot: (clojure.core/-> (clojure.core/-> 1 inc) inc inc)

13:36 the-kenny: ,(-> 1 inc inc inc)

13:36 clojurebot: 4

13:36 travisbrady: currently I don't even really know what one can do with macros, but a lisp hacker i used to know said they were the single most eye opening and interesting thing he'd encountered in a programming language and he'd used haskell, ml, java, perl, c, etc etc

13:37 knuckolls: the-kenny: yeah that helps. i see how -> would come in handy

13:38 _schulte_: I think small domain specific languages are another place where macros shine, like the common lisp html generation language http://weitz.de/cl-who/#example

13:38 gregh: "macros" are the last item on http://www.paulgraham.com/diff.html too

13:39 the-kenny: knuckolls: when is also implemented as a simple macro :)

13:42 chouser: travisbrady: onlisp is what made me realize I had to learn a language with macros

13:42 the-kenny: There are some basic syntactic constructs called "special forms" and any other syntactic construct is implemented as a composition of them, mostly as a macro.

13:47 _fogus_: I had used macros in CL before, but it was "On Lisp" that really hammered their power home.

13:47 chouser: custom query language, adding continuations to a language that didn't have them, ... probably other examples I've forgotten.

13:48 knuckolls: I started on lisp about a year ago but didn't finish it at the time. I believe i've been convinced to pick it back up

13:48 cgrand: cemerick: still there?

13:48 knuckolls: thanks.

13:49 cemerick: cgrand: yeah -- just posted to the group, tho

13:49 polypus: _fogus_: i've been perusing the pdf a bit. it's high time it was reprinted. $224 on amazon. even better would be a clojure "port"

13:50 cemerick: cgrand: would you have any interest in a pom file for enlive? I've got one sitting right here. :-)

13:50 _fogus_: polypus: Hmmmm... I vaguely recall someone starting that... can't remember the name

13:50 polypus: huh, sure they weren't just porting the examples?

13:51 chouser: there's bad stuff in there too, of course.

13:51 anaphora?

13:51 ~anaphora?

13:51 clojurebot: <rhickey> anaphora == bad

13:51 _fogus_: polypus: They were totally porting only the examples, and it's out of date. http://blog.fogus.me/tag/onlisp/

13:51 cgrand: cemerick: I have a lein project.clj here but I haven't kept up with leiningen developments this last month

13:53 _fogus_: What are the other arguments against anaphora besides that they do not nest?

13:53 cemerick: cgrand: We've been using clojure-maven-plugin very successfully so far.

13:53 I don't think we'll ever be using lein. *shrug*

13:53 polypus: _fogus_: well that, and norvig's paradigms book are way up on my reading stack

13:54 cgrand: cemerick: ok thanks for the report, I'll look at it

13:54 _fogus_: polypus: I love PAIP. Get to it sooner rather than later if you can.

13:54 polypus: wil do :)

13:54 cemerick: cgrand: np. I notice that scraping is now the headline feature, which is sort of funny.

13:54 cgrand: cemerick: ok, send me the pom.xml

13:55 cemerick: cgrand: by email, or pull req?

13:55 cgrand: email unless you already have it on github

13:56 yeah, I think there are more people using enlive for scraping rather than for templating

13:57 cemerick: cgrand: I haven't pushed it yet, but I've already got it forked, etc.

14:03 mebaran151: anybody here ever do any authorize.net stuff and know a good Java wrapper?

15:00 scode: Any idiomatic way to slurp a stream? (slurp ...) only takes a filename. If not, does it sound like a good idea to suggest adding a (slurp-stream s) to go with (slurp fname)?

15:00 the-kenny: scode: mh.. maybe something in duck-streams? Wait

15:00 scode: Or else just having (slurp ..) accept a stream, given that (slurp) is not likely to be used in cases where extreme performance matters

15:01 the-kenny: scode: Try slurp* from clojure.contrib.duck-streams

15:01 Looks like it supports InputStreams

15:01 hiredman: stream like an inputstream?

15:02 the-kenny: ,(use 'clojure.contrib.duck-streams)

15:02 clojurebot: nil

15:02 scode: the-kenny: sounds sensible. any thoughts on whether it would be appropriate to have core slurp support it?

15:02 the-kenny: ,(with-in-str "foobar" (slurp* *in*))

15:02 clojurebot: "foobar"

15:03 the-kenny: scode: Personally, I would like to see slurp* as the default slurp.. but it isn't a big issue to write slurp* instead of slurp :)

15:03 scode: the-kenny: No issue for me (I have no trouble dpeending on -contrib), but it feels like a useful thing to support in core since slurp is heavily geared towards convenience anyway.

15:04 ah

15:04 the-kenny: slurp* assumes it's a stream it seems.

15:04 the-kenny: scode: Yes, that's how I think about it.

15:04 scode: the-kenny: I'd not want what with slurp though.

15:04 I'd want it to support both.

15:04 Or else have a separate one for slurping streams.

15:04 the-kenny: scode: slurp* supports almost everything

15:05 urls, files, sockets, readers

15:05 scode: Hmmmm.

15:05 Oh!

15:05 (reader ...) does that for it.

15:05 Sorry!

15:05 My bad.

15:05 the-kenny: Yes

15:07 scode: the-kenny: Thanks!

15:08 the-kenny: You're welcome :)

15:59 cmbntr: hi, anybody a idea how to handle classifier dependencies with leiningen?

15:59 something along http://gist.github.com/271563 would be nice...

16:35 AlexS_: Can anyone help with a leiningen swank problem?

16:36 I am trying to run lein on a new machine. It seems to be pulling done the dependencies including swank-clojure-1.0.jar and the lein-swank jar but I am getting an error: "swank is not a task"

16:37 the-kenny: AlexS_: Are you trying to run "lein swank"?

16:37 AlexS_: the-kenny: Yes

16:38 the-kenny: AlexS_: You need lein-swank for that, not only swank-clojure

16:38 lein-swank is the leiningen-plugin

16:38 AlexS_: But if you're using swank-clojure in emacs, you can also do M-x swank-clojure-project without "lein swank"

16:38 that's how I use it

16:39 AlexS_: the-kenny: I think I do have the plugin. The lein-swank jar is in my libs directory after running "lein deps"

16:39 the-kenny: ohh my bad. I read too fast. hm..

16:43 neotyk: the-kenny: how did you set it up so swank-clojure-project works?

16:43 the-kenny: it never connects for me

16:43 the-kenny: neotyk: Standard layout in leiningen, add swank-clojure to the deps in lein, "lein deps" and then run swank-clojure-project

16:43 It's dead-easy

16:44 neotyk: shit it did work this time

16:44 the-kenny: neotyk: heh, that's good :)

16:44 neotyk: now the-kenny tell me how you made it work on my machine ;)

16:44 the-kenny: neotyk: Magic :)

16:45 neotyk: the-kenny: thanks and kudos

16:45 the-kenny: np

16:46 lpetit: hello emacs users. In a nutshell, do you use a modified version of paredit.el, for clojure ? I mean, I cannot see paredit.el handling maps {} (and also not sets #{} for deletion too). I'm currently porting the definitions of paredit.el to clojure, so I would like to work with the most clojure-specific version of paredit.el ...

16:47 the-kenny: lpetit: It's relative easy to add handling for { and [ to paredit.. the definitions how to handle parentheses is mapped in some var and you can just add new definitiond to it. I've done that

16:47 (and I copied & renamed some functions)

16:47 lpetit: ok, but you do not answer my question :-)

16:48 the-kenny: lpetit: Yes, I'm using a modified version :)

16:48 But it's a bit buggy

16:48 lpetit: Do you know of an "official" modified version e.g. provided by technomancy ?

16:48 the-kenny: hm.. no, sorry

16:49 stuartsierra: There is a clojure-specific version of paredit somewhere.

16:49 lpetit: I also intend paredit.clj (the name of my project) to correctly handle sets, e.g. if you have "#{}|" (pipe for the cursor position) and hit delete, then you will get "" and not "#" (and would also take care of that for selections)

16:49 stuartsierra: Or a hook in clojure-mode that automatically fixes paredit when it's loaded.

16:50 lpetit: stuartsierra: ok, I'm asking because while I'm porting commands, I'm thinking of clojure-specific stuff too (see above), and if a modified version were around with other interesting ideas for clojure, I could cross-check ideas

16:53 I guess I'll have to wait for technomancy then.

16:53 Ok, time to go to bed here, cu

16:54 * the-kenny would like to see a patched paredit.el which works with [] and {}, and also in the repl

16:54 the-kenny: (Mine is broken in the repl :()

16:54 stuartsierra: Didn't that used to be part of clojure-mode?

16:55 the-kenny: paredit?

17:06 stuartsierra: The fixes to paredit.

17:06 That is, didn't clojure-mode, at one time, include hooks to fix paredit for Clojure?

17:07 the-kenny: hm.. don't know. I'll take a look,

17:07 stuartsierra: Looks so

17:08 stuartsierra: hm.. But only for {}

17:08 stuartsierra: But I think that is missing from the version on ELPA

17:08 the-kenny: No

17:08 stuartsierra: oh, ok

17:08 the-kenny: *installing paredit from elpa

17:09 technomancy: the latest paredit beta works without tweaks on {} and []... I'm trying to talk the author into doing a release soon.

17:09 stuartsierra: Ah, ok.

17:10 technomancy: thanks for the update

17:10 the-kenny: technomancy: Ah, nice :) Does it work in the repl without bugs?

17:10 technomancy: the-kenny: as far as I know, yeah

17:11 the-kenny: technomancy: If I use paredit from elpa, does the tweaks work? Looks like you're checking for version >= 21, but elpa's version is 20

17:12 technomancy: sorry, I don't remember. paredit is like the one elisp lib I still install by hand.

17:12 the-kenny: technomancy: ah ok

17:12 Then I'll do that too :)

17:13 alexyk: liebke: how do you deal with (def var blah) in files which are prone to be compiled under e.g. lein compile?

17:14 I'm rewriting them as (defn varname+ [prevvar] body) and then place a comment ;; (def var (varname+ prevvar))

17:14 for repl'in'

17:14 and it gets old quickly

17:15 the sequence of readily available var values is the equivalent of an R console environment for data mining

17:15 the question is, is there a nice way to macroify it

17:16 (defn a+ [x] (* 2 x)) ; (def a (a+ 3))

17:16 the-kenny: technomancy: no.. [] is broken in the repl with paredit-beta.el too :(

17:19 alexyk: so, how can I write a macro which, depending on whether it's in repl, will do a defn var+ ... and (def var (var+ ...)), otherwise just (defn var+ ...) ?

17:19 what's a good convention to suffix a defn solely devoted to defining a var without the suffix?

17:21 Licenser: good evening my lispy friends :) how are your parensethes tonight?

17:22 technomancy: the-kenny: wups; you're right. they're matched on input but not enforced for deletion.

17:22 the-kenny: Some repl-with-paredit issues, but else I'm fine :)

17:22 * alexyk wonders why Germany comes online en masse around midnight its time

17:22 technomancy: strange

17:22 the-kenny: technomancy: Exactly

17:23 Licenser: alexyk: because our days here are filled with eating potatos and sourkraut and we've to iron our lederhosen all day long

17:23 the-kenny: Licenser: Hah :D

17:24 alexyk: Licenser: and when do you brew sauerkraut then?

17:24 Licenser: alexyk: between 6-9 in the morning but only on suttardys with a prime number as date

17:25 alexyk: also, there should be some time allotted for schnapps and sausages, didn't see that accounted for

17:25 the-kenny: Another one!

17:25 ordnungswidrig: re

17:26 to the german (speaking) clojurists: are there any local user groups?

17:26 Licenser: tach ordnungswiedrigkeit, how was your sauerkraut today?

17:26 alexyk: yeah, when I see a pattern, it's there, and there's some ordnung to it

17:26 the-kenny: ordnungswidrig: None that I'm aware of.

17:27 Licenser: ordnungswidrig: not that I know of, sadly

17:27 but we should make one!

17:27 ordnungswidrig: hmm, that was what I thought of. What about registering the locations of interessted people?

17:27 * the-kenny votes for Cologne

17:28 * Licenser votes for the capitol

17:28 Licenser: no not Munic and not Brussel :P

17:28 somnium: clojureliga!

17:28 alexyk: somnium: aha! did git pull on congomongo, popped eyes

17:29 * ordnungswidrig votus for southern germany

17:29 alexyk: what's the scoop?

17:29 somnium: alexyk: ?

17:29 alexyk: somnium: yeah, what's the main changes? want to try and wonder what to expect

17:29 somnium: alexyk: leiningen now, trying to strip the binaries out

17:29 Licenser: so we managed to be perfectly evenly spread around germany? That is actually quite a extraordenary event

17:29 alexyk: somnium: did you implement :really-only in fetch? :)

17:29 the-kenny: Licenser: Looks so

17:29 * ordnungswidrig votes for a clojure user group in… leiningen!

17:30 somnium: alexyk: hmm, would you settle for skip and limit for now? :)

17:30 Licenser: berlin in the capital :P

17:30 * the-kenny looks at google maps

17:30 alexyk: somnium: allright :)

17:30 somnium: alexyk: been caught up with a js-compiler project

17:30 the-kenny: ordnungswidrig: Leiningen near Frankfurt?

17:30 jasapp: so we can write map reduce functions in clojure?

17:31 alexyk: somnium: I thought yegge had enough js stuff in his blog :)

17:31 somnium: alexyk: congomongo is on a as-I-need-new-features basis atm :)

17:31 ordnungswidrig: the-kenny: there is anything _near_ leiningen?

17:31 Licenser: somnium: a js-compiler? as in compiling java script and running in clojure?

17:31 alexyk: somnium: yeah, but, should I upgrade for speed?

17:31 somnium: Licenser: yeah, in fact it works, but horribly documented atm

17:31 the-kenny: ordnungswidrig: Not really :D

17:31 Licenser: somnium: where can I sign up?

17:32 I did that in ruby and was trying to get something like that working in clojure

17:32 somnium: I ported compojure's html-dsl on top of dojo with it

17:32 the-kenny: ordnungswidrig: But Leiningen would be ok for me :)

17:32 somnium: scrytica on github

17:32 ordnungswidrig: leiningen wouldn't be any more central than berlin or stuttgart :-)

17:32 somnium: planning to announce once I get some derent examples in order

17:32 the-kenny: ordnungswidrig: But it would be awesome :)

17:33 Licenser: heh

17:33 technomancy: maybe if you can't make it there you could host a showing of the Naked Jungle at the meeting instead: http://en.wikipedia.org/wiki/The_Naked_Jungle

17:33 ordnungswidrig: the-kenny: in a way, yes. They surely would wonder why a clojure user group meeting would be there

17:33 the-kenny: ordnungswidrig: We could write a poster with "install" and stick it next to the town sign

17:34 somnium: Licenser: ah, backwards

17:34 Licenser: http://de.wikipedia.org/wiki/Mittelpunkt_Deutschlands <- we should meet there

17:34 somnium: Licenser: writing clojure and compiling to javascript

17:34 Licenser: aww that is booring :P

17:34 jasapp: somnium: for map reduce?

17:34 somnium: jasapp: for whatever you want

17:34 jasapp: hmm

17:35 Licenser: we could do like ... camping ... there

17:35 ordnungswidrig: Licenser: to easy, not clojure related :-) Anyway we should consider the point of germany which is reachable fastest for any inhabitant.

17:35 the-kenny: ordnungswidrig: We should write a small web-app which calculate the best point for every registered german user

17:35 In clojure, of course

17:36 Licenser: göttingen looks kind of central

17:36 I've that implemented already

17:36 somnium: wow, you guys are organized

17:36 Licenser: it returned "Berlin"

17:36 (defn best-place-in-germany [ & _] "Berlin")

17:37 ,(member:defn best-place-in-germany [ & _] "Berlin")

17:37 clojurebot: java.lang.Exception: Unable to resolve symbol: member:defn in this context

17:37 Licenser: ,(defn best-place-in-germany [ & _] "Berlin")

17:37 clojurebot: DENIED

17:37 alexyk: for some reason, my German studies recently stumbled upon Otto Widdenen, and it occurred to me that he used his simple U-9 skillfully so scuttle 3 big ships, in the same way careful use of small Clojure may defeat some behemoth languages. Just a random association of the day.

17:37 ordnungswidrig: Licenser: epic cheating fail

17:37 alexyk: so the meeting my be held in Kiel

17:37 Licenser: ordnungswidrig: actually an epic copy and paste fail ;)

17:37 ordnungswidrig: or büsingen.

17:38 Licenser: alexyk: I'm not entirely certain submarine tactics apply to clojure, diving never protected me from a stack overflow at least

17:39 alexyk: Licenser: need a longer snorkel then

17:39 Licenser: alexyk: I'm scuba diver I don't need no norkels

17:39 ordnungswidrig: bad hersfeld is considered the center regarding the autobahn connections. I know many parcel services have their central hub there (amazon ships from there as well afaik)

17:39 Licenser: ordnungswidrig, the-kenny: How about erfurt

17:40 ordnungswidrig: Licenser: as long as an ICE stops by there, I'm in

17:40 hehe, hagelberg?

17:40 http://twitter.com/technomancy/status/7494992839

17:40 Licenser: it's just an idea, after all the university there is kind of well known for IT and the CCC has something to do with it too when I remember right

17:41 erfurt has a ICE stop, just looked at dahn.de

17:42 ordnungswidrig: I worry that it's more about the people that can organize a location in infrastructure than the geographic location. An CS department which is in clojure could be a help

17:43 Licenser: *nods* Yes that is always hard if noone is there who can do that :(

17:43 so we're back to the point of a city where someone of the participants lives?

17:43 ordnungswidrig: hmm, meetup.com does anybody know this?

17:43 somnium: alexyk: ah, it might be a touch faster, I made a couple small changes to ClojureDBObject (ArrayLists -> Array) and use c.l.RT to create maps/vectors

17:44 alexyk: somnium: what about the "new" branch, is it in sync and ahead of the master still?

17:44 somnium: alexyk: but it seems you've been straining your harddrive more than your jvm

17:44 ordnungswidrig: akkording to meetup.com they is one person from magdeburg

17:44 Chousuke: alexyk: it hasn't replaced master yet.

17:44 alexyk: somnium: a single scan of a simple collection takes an hour, it's the main bottleneck now

17:45 Licenser: ordnungswidrig: never looked at ti

17:45 ordnungswidrig: meetup.com does not accept openid -> fail

17:45 alexyk: Chousuke: I mean somnium's own new for congomongo, relying on the clojure's new

17:45 somnium: alexyk: new still has an old version of CDBO atm

17:45 Chousuke: alexyk: ah.

17:45 alexyk: somnium: good to know, I'll wait until the merge

17:45 somnium: alexyk: Ive decided to be content with 1.1 and just wait for 1.2 rc for development

17:45 Licenser: ordnungswidrig:

17:46 alexyk: somnium: that's supposed to bring deftype and protocols into master, right?

17:46 Licenser: the-kenny: #clojure.de (no reason to bother everyone here with our discussion - I think it is kind of specific ;)

17:46 somnium: alexyk: yeah

17:46 alexyk: indeed, for now Clojure lacks Scala's suffix-artifact-version convention, and managing branches of clojure and all its related paraphernalia seems too much

17:47 in maven repos

17:47 or anyhow

17:47 somnium: alexyk: you could try just pulling clojure-db-object and mongo-java-driver off clojars, they should just drop in and work

17:47 chouser: Clojure's using branch name for "artifact" now

17:48 unless I'm misunderstanding the point

17:48 somnium: alexyk: mongo-java-driver was bumped to 1.1 so will need the new one

17:49 ordnungswidrig: the-kenny: well, #clojure.de is fine but let's announce this once a day in #clojure, right?

17:49 alexyk: chouser: so how's the new branch called in maven?

17:49 the-kenny: ordnungswidrig: Okay :)

17:52 alexyk: what I mean w.r.t Scala is the convention to name branch-depending things like, something-2.8.0-SNAPSHOT in the artifact, and version stays numeric, amnd groupId is org.scala-tools or something. This way you can easily use ${scala.version} in the pom.xml properties and in every relevant product

17:53 somnium: alexyk: I think its org.clojure/clojure "1.1.0-new-SNAPSHOT"

17:53 alexyk: somnium: that's a problem, branch pushed into version number. But still workable.

17:53 somnium: alexyk: I dont know a thing about maven

17:53 <3 leiningen

17:54 alexyk: somnium: repo is still maven, and namespace/versioning too

17:54 bbl

18:17 Licenser: acutally a question, is there a way to make a function cache it's results (yes I know that would be a yes) BUT only a limited number of them?

18:18 the-kenny: Licenser: hm... you could simply define a custom version of memoize. It's trivial

18:18 Licenser: I know, just wanted to get sure not to reinvent the wheel ;)

18:45 konr: Do you currently use SLIME with both Clojure and CL? If so, how? I used to add sbcl to the slime-lisp-implementations list, but it doesn't work in the current version, as slime doesn't define it.

19:07 technomancy: konr: slime from CVS doesn't work with clojure

19:08 konr: technomancy: I'm usint everything from ELPA

19:08 *using

19:09 technomancy: oh, then I don't know, sorry. I know some people have gotten it to work with the elpa version.

19:12 the-kenny: I think a big issue are the missing *.lisp-files for the elpa-version.

19:12 So you have to install the by hand

19:14 technomancy: oh yeah, for CL you still have to install swank by hand

19:14 elpa only contains elisp files

19:15 the-kenny: I know, I know.

20:03 mebaran151: I'm trying to wrap netty for a project I'm doing and I'd like to make a reusable clojure netty wrapper

20:03 anybody have any suggestions or ideas what would be an idiomatic wrapping?

20:05 also working around a library with annotations would be useful too

20:11 Licenser: hmm in repl is there a way to unbind a symbol?

20:15 somnium: ,*ns*

20:15 clojurebot: #<Namespace sandbox>

20:16 somnium: ,(ns-unmap 'sandbox '+)

20:16 clojurebot: nil

20:16 somnium: ,(+ 2 2)

20:16 clojurebot: java.lang.Exception: Unable to resolve symbol: + in this context

20:17 somnium: ,(use 'clojure.core)

20:17 clojurebot: nil

20:18 Licenser: somnium: you broke clojurebot!

20:19 somnium: Licenser: I put him back!

20:19 Licenser: ,(- 2 2)

20:19 clojurebot: 0

20:19 somnium: ,(+ 2 3)

20:19 clojurebot: 5

20:20 mebaran151: ,(+ 2 2)

20:20 clojurebot: 4

20:20 mebaran151: poor clojure bot

20:21 somnium: not sure what happens if you unmap his ns fns

20:21 Licenser: somnium: I was about to ask what haoppens if you unmap use :P

20:22 somnium: Licenser: give it a shot! :P

20:22 Licenser: no I don't want to ^^

20:22 somnium: clojurebot: <3

20:22 clojurebot: <3 is ♥

20:23 Licenser: heh

20:24 but I fear it might work

20:31 chouser: you could still do clojure.core/use

20:33 _schulte_: and idea what could be causing the error running "lein deps" w/incanter? http://gist.github.com/271790

20:35 liebke: _shulte_: the incanter-full jar didn't get uploaded to clojars, just the meta data. I haven't figured out why yet

20:35 _schulte_: liebke: ok, thanks

20:36 liebke: I've tried a couple times, but it isn't working for some reason

21:07 durka42: bah

21:07 i hate cryptic errors about anonymous functions

21:15 mebaran151: durka42, I often end up binding my anonymous function in a let just to get better debug messages

21:15 durka42: ah, if only i had known which anonymous function it was :)

21:15 it was the defmulti dispatch function

21:16 i should have just gone through the program and named all the #() fns

21:23 Licenser: wow I'm impressed the data classes are really fast!

21:23 somnium: Licenser: data classes?

21:23 Licenser: structures sorry

21:24 somnium: like deftype?

21:25 Licenser: nono like structs, lists vectors and stuff

21:26 somnium: ah, well, everything seems fast when you spend a lot of time with ruby :P

21:26 Licenser: oh go die :P

21:28 but still I'm impressed like

21:28 iterating through a 2k list, mapping over everyting and changing stuff within it is greatly fast

21:40 hrm is there something like reset the slime clojure thingy? or reload the project?

21:43 somnium: Licenser: I usually run swank-clojure-project again to wipe out the image, like that?

21:43 Licenser: yea kind of aside of being somewhat uncompfortable :P

21:43 it behaves very oddly

21:44 it's nice for mini projects but as soon as I've more then one file and they require eachother they behave very oddly

21:44 like reloading something via use does not reload it

21:44 somnium: do you use slime-compile?

21:45 Licenser: no what does it do?

21:45 somnium: (or whatever its called, C-c C-k)

21:45 Licenser: Sorry started out with emacs like 2 days ago :P

21:45 somnium: it compiles the current buffer, so you dont have to reload anything

21:46 unless you've added new vars, then you have to (use 'whatever)

21:46 Licenser: oddly that (use didn't reloaded stuff for me

21:47 somnium: maybe (use 'whatever :reload) then

21:48 Licenser: ah okayn that is a good hint :D

21:48 Getting used to emacs is really hard -.-

21:48 somnium: Licenser: since you're experimenting with emacs I would recommend trying inf-ruby (by matz) while youre there

21:49 (its slow, but still pretty cool) :P

21:49 Licenser: is it in the ELAP thingy?

21:49 somnium: yeah

21:49 Licenser: good cause I've no clue how to add anything else :P

21:50 sad thing is most of the stuff where you can read up shows simple things but as soon as it gets more complex it does not work too well any more :/

21:51 somnium: well, elisp is just an older, less attractive cousin clojure

21:52 Licenser: I mean simple things like 'how the heck to get a buffer back' :P

21:52 somnium: Licenser: Im sure in a week you'll have emacs tying your shoelaces for you in the morning

21:53 Licenser: actually not :P

21:53 somnium: Licenser: C-x C-b should give you a list

21:53 Licenser: are you using ido?

21:54 er, emacs-starter-kit?

21:54 Licenser: if I'd find something better I'd toss EMCAS in the can burn it berry it, burn the place I berried it and freaking a bunker over it so I'd never ever have to see it again

21:54 somnium: long story short, I tried, isn't working so no :P

21:54 the sugestion of the #emacs channel regarding my problem was 1) that is not supported, 2) Buy a new keybard

21:54 somnium: hmm

21:55 and C-h b?

21:55 how about M-x list-buffers?

21:55 sry

21:55 M-x list-buffers

21:56 Licenser: emacs is an elisp repl that grew a text editor

21:56 Licenser: that wasn't the problem :P problem was that AquaEmacs does not read the .emacs.d directory

21:56 somnium: thatll do it :)

21:56 Licenser: thanks ^^

21:56 somnium: maybe try carbon?

21:57 Im on ubuntu, so ... I have less choice?

21:57 Licenser: I tried that one, it does not work togehter with all the mac key bindings :P

21:58 and especially not with a german keyboard

21:58 so #emacs suggested to buy a english keyboard -.- way thank you

21:58 I killed swank :D

22:00 somnium: hmm

22:00 Licenser: heh I seem to have a hand for braking things -.-

22:01 no I just had to wait 5 min :D

22:03 somnium: Licenser: you can rebind everything, I use dvorak so I hacked on a bunch of things and keep .emacs under git

22:04 Licenser: somnium: I know I know, you can do anything with it but I just want an editor :P

22:04 somnium: Licenser: though I wonder if 'buy a new keyboard' isnt better advice at this point O.o

22:04 Licenser: heh

22:04 I do have an english keybard does not save the issue of OS X keys

22:08 defn`: 'lo all

22:08 somnium: Licenser: aquamacs + english keyboard is also broken?

22:09 Licenser: no aquamax works with both

22:09 but not with the .emacs.d directory for config files :P

22:09 somnium: odd, but no clue about aquamacs, sry

22:09 Licenser: don't worry

22:10 I'm not going to code amy more for tonight, it's too f*ing frustrating right now

22:10 somnium: Licenser: you dont have an actual file called .emacs in your home dir do you?

22:11 Licenser: YEs I do, and I know that I've to remove it to get .emacs.d working but aquamax ignores emacs.d even if there is no .emacs file

22:11 somnium: ok, nw :)

22:11 nm

22:12 Licenser: it's horrible and gets worst with every houre I think :/

22:26 mebaran151_: Licenser

22:26 if you're not an emacs junkie

22:26 try netbeans

22:26 it's surprisingly good

22:34 defn`: mebaran151: too late, he left

22:49 mebaran151: ah poor dude, busy fighting the 80's

22:53 chouser: pop quiz!

22:54 Which of Clojure's classes has instances that print with undecorated round parens, and yet does not implement clojure.lang.ISeq?

22:57 somnium: clojure.lang.Cons?

22:58 Licenser: somnium:

22:58 chouser: somnium: reasonable guess. but no.

22:58 ,(isa? clojure.lang.Cons clojure.lang.ISeq)

22:58 clojurebot: true

22:58 somnium: bah, I used instance :/

23:01 chouser: ,(seq? (cons 1 '(2)))

23:01 clojurebot: true

23:01 chouser: :-)

23:05 somnium: I used instance on both classes :/

23:09 chouser: is this a trick question? it prints readably as ( ... )?

23:10 chouser: no trick.

23:11 (-> x (conj 1)) ;=> (1)

23:11 defn`: anyone seen _ato lately?

23:11 chouser: (seq? x) ;=> false

23:11 defn`: alternatively, does anyone know if liebke's compojure works with the renamed org.clojure/clojure "1.1.0-master-SNAPSHOT" in lein?

23:12 chouser: somnium: ...though reading that back in will of course create an object of a different type -- PersistentList instead of the type that was printed.

23:13 liebke: defn`: that's why I uploaded compojure, to get a copy that worked with the renamed clojure-master

23:13 defn`: awesome liebke

23:13 thanks

23:14 liebke: i cant seem to find it on clojars

23:14 is it org.clojars.liebke/compojure "0.3.1"?

23:16 liebke: defn`: org.clojars.liebke/compojure 0.3.1-master

23:16 yeah, search doesn't work very well

23:16 I usually browse the repository directly now: http://clojars.org/repo/org/clojars/liebke/compojure/0.3.1-master/

23:17 defn`: liebke: i didn't even know that existed

23:17 thanks

23:20 chouser: no more guesses for my pop quiz?

23:20 I suppose I could give a hint.

23:21 replaca: chouser: hang on, I'm working...

23:29 hmm, I'm thinking that it's a PersistentQueue, but I can't figure out how to make one

23:29 the repl blanches at my attempts saying it can't match the constructor

23:30 chouser: replaca: you win!

23:30 replaca: did you examine the .java sources?

23:31 somnium: ah

23:31 replaca: of course.

23:31 somnium: it implements IPersistentList

23:31 chouser: ,(conj (clojure.lang.PersistentQueue/EMPTY) 1)

23:31 clojurebot: (1)

23:31 chouser: ,(seq? (clojure.lang.PersistentQueue/EMPTY))

23:31 clojurebot: false

23:31 replaca: ahh, I was trying to invoke he constructor directly

23:31 mebaran151: why is PersistentQueue so private anyways

23:32 replaca: *he => the

23:32 mebaran151: it seems like something general useful, worth having a function like (queue) or something

23:32 right there in core

23:33 every now and again I see this question come up and I wonder why its hidden

23:33 chouser: rhickey has said things about wanting to avoid abuse by people who want some kind of workflow control, like a BlockingQueue

23:33 somnium: a list is its own seq, a queue is a list, a queue is not a seq

23:33 chouser: so putting off making it "more public" until a more complete queue abstraction or story is in place. I guess.

23:34 somnium: chouser: is there a story to the not-a-seq detail?

23:36 defn: omg the #python channel is brutally stupid

23:36 so glad to be back here...

23:37 knuckolls_: are [org.clojure/clojure "1.1.0-master-SNAPSHOT"] and [org.clojure/clojure-contrib "1.0-SNAPSHOT"] the most up to date?

23:37 somnium: chouser: nm, just remebered the original question

23:39 replaca: hmm, that's interesting. It looks like Rich took okasaki's original idea, but because we have O(1)-ish append vectors, he was able to skip the reverse step

23:39 if I'm reading the code right

23:42 mebaran151: he really is a master craftsman

23:42 defn: Think: Bob Vila

23:43 although I wouldn't trust Rich to do redo my crown molding

23:43 mebaran151: now on an even more craftsmen-y level, does anybody have a favorite authorize.net library

23:43 I have to write some payment code

23:58 defn`: mebaran151: sorry, no ieda

23:58 idea*

Logging service provided by n01se.net