2010-01-07
| 00:07 | mebaran151 | maven is my new best friend |
| 00:11 | replaca_ | mebaran151: but have you read: http://kent.spillner.org/blog/work/2009/11/14/java-build-tools.html ? |
| 00:13 | mebaran151 | replaca_, oh yeah, I hate pom.xml's, but lein makes maven positively beautiful |
| 00:20 | mebaran151 | I'm actually scared of anything that references archetypes in all due seriousness |
| 00:23 | mebaran151 | has anyone here ever used jbuildr for build files |
| 00:23 | mebaran151 | when I played with scala it was a passable a build tool |
| 00:26 | JonSmith | archetypes? |
| 00:26 | JonSmith | i'm not familiar with those |
| 00: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 |
| 00:29 | JonSmith | why you smashing compojure? |
| 00:29 | hiredman | because it uses that stupid immigrate macro |
| 00:29 | hiredman | and a single segment namespace |
| 00:29 | hiredman | and FileUpload |
| 00:29 | hiredman | (FileUpload is not allowed into appengine) |
| 00:30 | JonSmith | oo |
| 00:30 | hiredman | I fixed it, but now I need to figure out how to get a pom and upload to clojars |
| 00:30 | hiredman | I wonder if I can recover the pom.xml from someone else's compojure jar |
| 00:31 | JonSmith | probably |
| 00:31 | hiredman | … |
| 00:31 | hiredman | I was hoping for "Yes! here's how …" |
| 00:31 | mebaran151 | hiredman, you could use lein? |
| 00:31 | mebaran151 | the lein file just has all the dependencies |
| 00:31 | JonSmith | http://bitbucket.org/jimdowning/hello-mvn-clj/src/tip/pom.xml |
| 00:31 | JonSmith | i googled you one |
| 00:32 | JonSmith | don't ask me how it works |
| 00:32 | mebaran151 | *pom.xml |
| 00:32 | JonSmith | http://jimdowning.wordpress.com/2009/07/30/compojure-maven/ |
| 00:32 | JonSmith | that too |
| 00:33 | hiredman | mebaran151: the compojure project predates lein |
| 00:33 | mebaran151 | nah I know |
| 00:33 | mebaran151 | but if you know the deps |
| 00:33 | mebaran151 | usually building the pom is pretty easy |
| 00:33 | JonSmith | hmm wait |
| 00:33 | mebaran151 | the pom.xml lein pom builds is actually just the dependency stanzas |
| 00:33 | JonSmith | what i googled is not useful |
| 00:33 | JonSmith | oh well |
| 00:34 | mebaran151 | http://github.com/ozzilee/compojure/blob/maven/pom.xml |
| 00:34 | mebaran151 | this should probably do it |
| 00:35 | hiredman | ahah |
| 00:35 | mebaran151 | that's all the deps you need |
| 00:35 | hiredman | the poms are stored in the local maven repo |
| 00:35 | hiredman | I am not looking for deps |
| 00:36 | hiredman | I am just trying to publish the jar to clojars |
| 00:36 | hiredman | ^- |
| 00:36 | mebaran151 | does clojars use the pom.xml for anything? |
| 00:36 | mebaran151 | *else |
| 00:36 | hiredman | clojurebot: thanks |
| 00:36 | clojurebot | Pardon? |
| 00:36 | mebaran151 | I thought it just used it for the dependency checking |
| 00:37 | mebaran151 | I didn't think lein and clojars it built used maven directly to run the compile cycle |
| 00:37 | hiredman | I am not trying to build compojure |
| 00:37 | hiredman | I just want a copy in the repo that isn't brain dead |
| 00:49 | replaca_ | ~seen technomancy |
| 00:49 | clojurebot | technomancy was last seen quiting IRC, 228 minutes ago |
| 00:49 | replaca_ | I'd love to write a plugin for his program, but it makes me want to set my hair on fire |
| 00:59 | hiredman | replaca_: :P |
| 01: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)" |
| 01:01 | replaca_ | :-( |
| 01:02 | hiredman | eval-in-project must not be public then |
| 01:02 | hiredman | … |
| 01:02 | replaca_ | if only it were that simple! |
| 01:03 | replaca_ | "(defn eval-in-project ...)" |
| 01:03 | replaca_ | lein-swank uses the same :use and compiles fine |
| 01:05 | hiredman | are you sure the version of lein you are using matches the tree you are looking at? |
| 01:05 | replaca_ | the history says it's never been private |
| 01:06 | replaca_ | but that's where I fell into the well - I couldn't get leiningen to build/install/use from source |
| 01:06 | replaca_ | but it should be ok cause I copied from lein-swank and that compiles fine in my world |
| 01:07 | replaca_ | (and runs too) |
| 01:08 | hiredman | hmmm |
| 01:08 | hiredman | do you really need evl-in-project? |
| 01:08 | hiredman | (evil) eval |
| 01:08 | replaca_ | well, that's kind of the point of the plugin |
| 01:08 | hiredman | eh? |
| 01:08 | replaca_ | (as it is with many plugins in leiningen, I would think) |
| 01:09 | replaca_ | well, it's loading code in the project which means it needs the projects classpath, etc. |
| 01:09 | hiredman | I see |
| 01:09 | replaca_ | that *seems* to be leiningen's mechanism for doing that |
| 01:11 | replaca_ | 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. |
| 01:12 | hiredman | yeah |
| 01:13 | replaca_ | autodoc uses ant, too, so maybe the problem is there (though I can't see why it would be) |
| 01:17 | hiredman | replaca_:where does the exception popup? I can :usr and :only eval-in-project just fine |
| 01:18 | hiredman | works for me :( |
| 01:27 | replaca_ | argh! It just needed a "lein clean"! |
| 02:15 | replaca | indeed it is, but not *quite* ready for prime-time. RSN, though! |
| 02:16 | replaca | hiredman: you here? |
| 02:16 | hiredman | yessir |
| 02:16 | replaca | how do you get the info from clojars? is there an api/webhook? |
| 02:17 | hiredman | screenscrape |
| 02:17 | hiredman | :( |
| 02:17 | replaca | ack! |
| 02:17 | replaca | we gotta get that fixed up |
| 02:18 | replaca | clojars needs to be telling us a *lot* more |
| 02:19 | replaca | at least the data from the pom |
| 02:20 | hiredman | something, but if I have to write another rss polling something or other I will cry |
| 02:20 | replaca | it's all about webhooks, baby! |
| 02:21 | replaca | rss is tech of the past :-) |
| 02:21 | replaca | like the steam engine |
| 02:21 | hiredman | I wrote an rss -> webhook thing and promptly discovered github uses atom |
| 02:21 | hiredman | :( |
| 02:23 | replaca | bummer. github supports webhooks directly, but the project owner has to enable it for you which is kind of lame |
| 02:23 | hiredman | yeah |
| 02:23 | replaca | (that's how autodoc works) |
| 02:24 | replaca | anything I can browse, I ought to be able to hook |
| 02:30 | hiredman | someone needs to write a pubsub node in clojure |
| 02: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 :-) |
| 02:34 | replaca | time to walk the dog and get some sleep |
| 02:34 | replaca | see y'all in the AM. |
| 03:33 | LauJensen | Morning team |
| 04:53 | erohtar | ,(def p (promise)) |
| 04:53 | clojurebot | DENIED |
| 04:53 | calvini | |
| 06:01 | adityo | good afternoon folks |
| 06:02 | adityo | ,(doc cond) |
| 06: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." |
| 06:03 | adityo | for cond how can i give a final clause i.e if nothing else then this..like t in Common Lisp |
| 06:07 | adityo | got it |
| 06:08 | adityo | simply use tru |
| 06:08 | adityo | true |
| 06:17 | Chousuke | adityo: use :else. it's the idiomatic "always true" thing. |
| 06:19 | adityo | Chousuke: thanks will try it out |
| 07:18 | tcrayford | is there a way to have variable arity in a macro? |
| 07:46 | cemerick | tcrayford: macros can have multiple arities just like other fns |
| 07:46 | cemerick | if the arity really is variable, and you're essentially parsing the arguments, then use rest args |
| 07: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?" |
| 07:49 | defn` | i want to do something like [:frame {:name "top"} (html [:h1 "hello world"])] in compojure |
| 07:49 | defn` | but im not sure it's even possible |
| 07:50 | defn` | i dont remember the last time i used frames, heh |
| 07:51 | cemerick | defn`: No, I don't think you can do that -- you'd probably have to populate the frame's document using js. |
| 07:51 | defn` | yuck |
| 07:51 | defn` | back to the drawing board... |
| 07:53 | defn` | lol god this domain name is weird: internet.com |
| 08:02 | defn` | it's like...really? the internet.com, eh? |
| 08:27 | JonSmith | defn: you would want to use a div for that |
| 08:28 | JonSmith | then you can use CSS to position it etc. |
| 09: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 |
| 09:22 | seths | on http://clojure.org/macros |
| 09:22 | seths | The link to Java interop needs an o |
| 09:22 | seths | currently is http://clojure.org/java_interp |
| 09:39 | ordnungswidrig | hey all |
| 09:40 | jasapp | mornin' |
| 09:43 | ordnungswidrig | does anybody know of a fully decentral database. Decentral in a sense of gti/darcs? |
| 09:43 | chouser | seths: that's not in git, so the process is a bit different. as in, no process. :-) Thanks for the report. |
| 09:45 | chouser | seths: fixed |
| 09:46 | ohpauleez | ordnungswidrig: RMDBS or Keystore? |
| 09:47 | chouser | rdf something? |
| 09:47 | ohpauleez | ordnungswidrig: you might want to take a look at CouchDB |
| 09:48 | ohpauleez | not sure what you want, but I think you're just looking for a distributed storage system |
| 09:48 | seths | chouser: thx |
| 09:48 | ohpauleez | LauJensen: I like the recent changes to Best In Class |
| 09: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" |
| 09:51 | jasapp | how close does couch's sharding come to what you're looking for? |
| 09: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. |
| 09:53 | jasapp | gotcha, I'm not very familiar with darcs |
| 09: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). |
| 09:56 | ordnungswidrig | 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 | ohpauleez | A session, commits, and rollbacks happen as a transaction, which can be applied, and aborted |
| 10:03 | ohpauleez | if you represent the transaction as a diff of the current state, you have what you're looking for |
| 10:04 | ohpauleez | I don't know of any DB that does that, most likely for performance reasons, but it could be cool |
| 10:04 | ohpauleez | 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 | ohpauleez | 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 | chouser | 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 | arj_ | 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 | chouser | this would help reduce the amount of work done if the transaction has to be retried. |
| 10:15 | chouser | but yeah, you get it. So I'll stop talking now. |
| 10:15 | chouser | :-) |
| 10:16 | arj_ | :D |
| 10:16 | arj_ | 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 | ordnungswidrig | 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 | the-kenny | ,(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 | praptak | , (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 | ohpauleez | the other way is to use agents and partition it |
| 11:07 | Licenser | scottj: did you try it with update-in? |
| 11:08 | Licenser | 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 | chouser | scottj: you could try doing the :name lookup once: put it in a local to use twice. |
| 11:16 | chouser | 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 | 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 | chouser | 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 | mebaran151 | 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 | chouser | 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 | mebaran151 | I always felt dealing with primitives was a bit of code smell |
| 11:23 | mebaran151 | 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 | mebaran151 | 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 | mebaran151 | they're a doozy |
| 11:29 | mebaran151 | 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 | mithraic | 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 | chouser | 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 | bowyakka | 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 | jasapp | I thought it was C-c C-spc |
| 12:17 | the-kenny | jasapp: M-. |
| 12:18 | jasapp | strange |
| 12:19 | jasapp | thanks |
| 12:19 | the-kenny | You're welcome |
| 12:19 | jasapp | do you know which mode provides that? |
| 12:20 | jasapp | 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: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 | mithraic | 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 | mithraic | 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 | pjackson | Damn. |
| 12:50 | pjackson | 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 | _schulte_ | 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 | technomancy | _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 | technomancy | oy |
| 13:04 | technomancy | _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 | _schulte_ | 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 | _schulte_ | 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 | gregh | (it's a bit slow to start but a worthwhile read) |
| 13:34 | knuckolls | gregh: cool thanks |
| 13:34 | knuckolls | arohner: yeah i have |
| 13:34 | knuckolls | 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 | chouser | anaphora? |
| 13:51 | chouser | ~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 | cemerick | 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 | cgrand | 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 | the-kenny | 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 | scode | ah |
| 15:04 | scode | 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 | scode | I'd want it to support both. |
| 15:04 | scode | Or else have a separate one for slurping streams. |
| 15:04 | the-kenny | scode: slurp* supports almost everything |
| 15:05 | the-kenny | urls, files, sockets, readers |
| 15:05 | scode | Hmmmm. |
| 15:05 | scode | Oh! |
| 15:05 | scode | (reader ...) does that for it. |
| 15:05 | scode | Sorry! |
| 15:05 | scode | 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 | cmbntr | something along http://gist.github.com/271563 would be nice... |
| 16:35 | AlexS_ | Can anyone help with a leiningen swank problem? |
| 16:36 | AlexS_ | 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 | the-kenny | lein-swank is the leiningen-plugin |
| 16:38 | the-kenny | AlexS_: But if you're using swank-clojure in emacs, you can also do M-x swank-clojure-project without "lein swank" |
| 16:38 | the-kenny | 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 | neotyk | 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 | the-kenny | 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 | the-kenny | (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 | the-kenny | 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 | lpetit | I guess I'll have to wait for technomancy then. |
| 16:53 | lpetit | Ok, time to go to bed here, cu |
| 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 | stuartsierra | 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 | the-kenny | stuartsierra: Looks so |
| 17:08 | the-kenny | 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 | stuartsierra | 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 | the-kenny | 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 | alexyk | I'm rewriting them as (defn varname+ [prevvar] body) and then place a comment ;; (def var (varname+ prevvar)) |
| 17:14 | alexyk | for repl'in' |
| 17:14 | alexyk | and it gets old quickly |
| 17:15 | alexyk | the sequence of readily available var values is the equivalent of an R console environment for data mining |
| 17:15 | alexyk | the question is, is there a nice way to macroify it |
| 17:16 | alexyk | (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 | alexyk | 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 | 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 | ordnungswidrig | 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 | Licenser | but we should make one! |
| 17:27 | ordnungswidrig | hmm, that was what I thought of. What about registering the locations of interessted people? |
| 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 | 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:30 | somnium | alexyk: hmm, would you settle for skip and limit for now? :) |
| 17:30 | Licenser | berlin in the capital :P |
| 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 | Licenser | 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 | the-kenny | In clojure, of course |
| 17:36 | Licenser | göttingen looks kind of central |
| 17:36 | Licenser | I've that implemented already |
| 17:36 | somnium | wow, you guys are organized |
| 17:36 | Licenser | it returned "Berlin" |
| 17:36 | Licenser | (defn best-place-in-germany [ & _] "Berlin") |
| 17:37 | Licenser | ,(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 | ordnungswidrig | hehe, hagelberg? |
| 17:40 | ordnungswidrig | 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 | Licenser | 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 | Licenser | 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 | alexyk | in maven repos |
| 17:47 | alexyk | 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 | chouser | 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 | somnium | <3 leiningen |
| 17:54 | alexyk | somnium: repo is still maven, and namespace/versioning too |
| 17:54 | alexyk | 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 | konr | *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 | the-kenny | 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 | technomancy | 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 | mebaran151 | anybody have any suggestions or ideas what would be an idiomatic wrapping? |
| 20:05 | mebaran151 | 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 | Licenser | 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 | durka42 | 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 | durka42 | it was the defmulti dispatch function |
| 21:16 | durka42 | 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 | Licenser | but still I'm impressed like |
| 21:28 | Licenser | iterating through a 2k list, mapping over everyting and changing stuff within it is greatly fast |
| 21:40 | Licenser | 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 | Licenser | it behaves very oddly |
| 21:44 | Licenser | 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 | Licenser | 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 | somnium | 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 | Licenser | 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 | somnium | (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 | Licenser | 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 | somnium | Licenser: are you using ido? |
| 21:54 | somnium | 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 | Licenser | somnium: long story short, I tried, isn't working so no :P |
| 21:54 | Licenser | 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 | somnium | and C-h b? |
| 21:55 | somnium | how about M-x list-buffers? |
| 21:55 | somnium | sry |
| 21:55 | somnium | M-x list-buffers |
| 21:56 | somnium | 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 | somnium | 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 | Licenser | and especially not with a german keyboard |
| 21:58 | Licenser | so #emacs suggested to buy a english keyboard -.- way thank you |
| 21:58 | Licenser | I killed swank :D |
| 22:00 | somnium | hmm |
| 22:00 | Licenser | heh I seem to have a hand for braking things -.- |
| 22:01 | Licenser | 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 | Licenser | 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 | Licenser | 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 | Licenser | 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 | somnium | nm |
| 22:12 | Licenser | it's horrible and gets worst with every houre I think :/ |
| 22:26 | mebaran151_ | Licenser |
| 22:26 | mebaran151_ | if you're not an emacs junkie |
| 22:26 | mebaran151_ | try netbeans |
| 22:26 | mebaran151_ | 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 | chouser | 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 | chouser | ,(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 | somnium | chouser: is this a trick question? it prints readably as ( ... )? |
| 23:10 | chouser | no trick. |
| 23:11 | chouser | (-> 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 | defn` | thanks |
| 23:14 | defn` | liebke: i cant seem to find it on clojars |
| 23:14 | defn` | is it org.clojars.liebke/compojure "0.3.1"? |
| 23:16 | liebke | defn`: org.clojars.liebke/compojure 0.3.1-master |
| 23:16 | liebke | yeah, search doesn't work very well |
| 23:16 | liebke | 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 | defn` | thanks |
| 23:20 | chouser | no more guesses for my pop quiz? |
| 23:20 | chouser | I suppose I could give a hint. |
| 23:21 | replaca | chouser: hang on, I'm working... |
| 23:29 | replaca | hmm, I'm thinking that it's a PersistentQueue, but I can't figure out how to make one |
| 23:29 | replaca | the repl blanches at my attempts saying it can't match the constructor |
| 23:30 | chouser | replaca: you win! |
| 23:30 | chouser | 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 | mebaran151 | right there in core |
| 23:33 | mebaran151 | 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 | defn | 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 | replaca | if I'm reading the code right |
| 23:42 | mebaran151 | he really is a master craftsman |
| 23:42 | defn | Think: Bob Vila |
| 23:43 | defn | 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 | mebaran151 | I have to write some payment code |
| 23:58 | defn` | mebaran151: sorry, no ieda |
| 23:58 | defn` | idea* |