2010-07-12
| 02:21 | Licenser | Good Morning my lispy friends |
| 02:56 | unfo- | {{citation needed}} to prove we are lispy! (too much wikipedia...) |
| 02:58 | Licenser | unfo-: {{citation}} You are lispy |
| 02:59 | unfo- | lol ;) |
| 03:48 | benatkin | thirddog: I'd be interested in an iBatis-inspired sql library, too. |
| 04:33 | LauJensen | Good morning all |
| 04:34 | ponzao____ | Hi, I've got a Java method that takes a variable amount of arguments. I noticed I have to wrap the arguments inside an array for it to work in Clojure. Is there a clean way to avoid this? |
| 04:34 | Licenser | Morning LauJensen |
| 04:35 | LuminousMonkey | Moring LauJensen |
| 04:35 | Licenser | ponzao____: I think what java does with variable Rgs is exactly that, wrapp ing ghem in an array |
| 04:38 | ponzao____ | Licenser, yes that is what it does, but it is a lot cleaner to do Arrays.asList(1, 2, 3, 4) instead of (Arrays/asList (to-array [1 2 3 4])). |
| 04:39 | Licenser | ponzao____: Well you can always make a wrapper function ;) |
| 04:39 | Licenser | But if you want a list isnt there a way to cate it from a collection |
| 04:39 | ponzao____ | Licenser, yeah, I was just wondering if there already was a solution I didn't know of, no sense in reinventing the wheel :) |
| 04:40 | ponzao____ | Licenser, that was just an example, my actual use case is different, but syntactically the same. |
| 04:41 | Licenser | Ah okay |
| 04:41 | Licenser | well make a .* macro :) |
| 04:41 | Licenser | You even could get it with reflections eww |
| 04:41 | Licenser | W |
| 04:43 | ponzao____ | Licenser, ok. I am very new to Clojure and I've been very impressed with its Java interoperability. The varargs was the first inconvenience and a very minor one at that. |
| 04:45 | Licenser | *nods* yap sopunds not perfe but actually no problem for me wipth that upto now |
| 05:01 | LauJensen | ponzao____: Is it a generic class you had problems with ? |
| 05:10 | ponzao____ | LauJensen, the method signature is: public Q from(Expr<?>... args) |
| 05:11 | LauJensen | ponzao____: I was wondering about the concrete name, as I wanted to experiment with it, and see it if could pass in collections |
| 05:12 | ponzao____ | LauJensen, concrete name, sorry I am not following. |
| 05:12 | LauJensen | like java.lang.String |
| 05:16 | ponzao____ | LauJensen, com.mysema.query.sql.AbstractSQLQuery |
| 05:16 | LauJensen | thanks |
| 05:23 | mmarczyk | LauJensen: just watched your latest Emacs screencast... that is *awesome*!!! |
| 05:24 | mmarczyk | LauJensen: may I express hope that I you might some day release your Emacs config (I do not dare to ask for a commentary) :-) |
| 05:35 | Lajla | Bahman, don't tell me you're that prude. |
| 05:35 | Lajla | Besides, it saves you the cost of a toilet. |
| 05:36 | Bahman | Lajla: Any unknown creature may be dangerous ;-) |
| 05:37 | Lajla | Bahman, I am the second best programmer in the world, right after the Microsoft Chief Software Architect, you should know that by now. |
| 05:38 | Bahman | Lajla: If he's the best programmer of the world, then I'm Albert Einstein for no doubt. |
| 05:38 | Lajla | Bahman, but he invented the long filename system on NTFS! |
| 05:38 | Lajla | ोAnd BASIC seems to be his favour language! |
| 05:42 | Bahman | Lajla: Well these are admirable inventions except that he's just 20 years late to come up with them. |
| 05:44 | Lajla | Bahman, but he is rich, he must be the best! |
| 05:51 | Bahman | Lajla: Yes he's the best. But best of what? |
| 05:51 | Bahman | Perhaps he's got all that money because of the inventions you said earlier. |
| 05:52 | Lajla | Bahman, but he gave us net based applications. |
| 05:52 | Bahman | It's interesting that being 20 years late in inventing is so money-making. |
| 05:52 | Bahman | Timing is everything. |
| 05:52 | Lajla | And enabled us to send XML messages. |
| 05:52 | Lajla | Through SOAP |
| 05:52 | Lajla | THROUGH SOAP! |
| 05:52 | Bahman | Praise him! |
| 05:53 | Bahman | These men are bloody rare. |
| 06:08 | sandos | xb |
| 06:30 | Lajla | Bahman, you are my fire, |
| 06:30 | Lajla | my one desire |
| 06:30 | Lajla | believe when I say |
| 06:30 | Lajla | that I want it that way. |
| 06:30 | Bahman | Lajla: Oh yes. I hope you're just high. |
| 06:31 | Lajla | Bahman, I don't even drink man. |
| 06:31 | Lajla | I don't need it |
| 06:31 | Lajla | I get high on stealing candy from babies. |
| 06:45 | ponzao____ | LauJensen, the class is from Querydsl (http://source.mysema.com/display/querydsl/Querydsl). I was just testing during the weekend if I could get Clojure working with it. |
| 06:46 | LauJensen | You can get just about anything working. I was just wondering if you get get around (into-array [1 2 3]) and only pass [1 2 3] for varargs hidden in arrays |
| 06:51 | mmarczyk | if you mean simply passing in a vector instead of an array to a method -- without some sort of wrapper macro or the explicit into-array -- then no |
| 06:58 | LauJensen | sure |
| 07:09 | _willtim_ | a LINQ style API for clojure would be nice |
| 07:10 | _willtim_ | the 'from' function would need to do a dispatch (for multiple providers) and be a macro in order to get at the expression trees |
| 07:10 | _willtim_ | tricky |
| 07:25 | ponzao____ | willtim, doesn't ClojureQL do something like that already? |
| 07:40 | willtim | ClojureQL looks really nice but afaik only does SQL |
| 07:42 | Lajla | willtim, you are a teddy bear filled with used batteries, that makes you cute. |
| 07:42 | willtim | What's nice about LINQ is that it unifies comprehensions and SQL |
| 07:43 | willtim | whereas ClojureQL doesn't really integrate with the for macro |
| 07:43 | willtim | or work-like the for macro |
| 07:49 | cemerick | Lajla: I often fail to comprehend many of your messages. |
| 07:50 | cemerick | willtim: it seems the challenge would be to make a "clojure LINQ" as capable/natural to use as all the usual seq tools we have. |
| 07:50 | Lajla | cemerick, I get that a lot. |
| 07:51 | Lajla | I do have a diagnosis schizophrenia running around though, it might be related. |
| 07:53 | cemerick | willtim: after looking at a few LINQ samples (it's been a while), how would for not do the job as-is |
| 07:53 | cemerick | ? |
| 07:56 | willtim | yes for is very powerful |
| 07:57 | willtim | although it lacks groupby, orderby |
| 07:57 | willtim | there is a nice paper by SPJ and Wadler called 'Comprehensive Comprehensions' |
| 07:57 | willtim | would be very easy to implement in Clojure (no type complexity!) |
| 07:58 | cemerick | well, for is intended to be lazy, so grouping and ordering aren't germane in that context |
| 07:58 | willtim | but LINQ would also render a comprehension into SQL |
| 07:58 | willtim | cemerick, very true |
| 08:04 | cemerick | If I were querying SQL databases (been a while there, too), I think I'd much rather write SQL than use something like LINQ. There's always that edge case that the underlying database supports, but the driver/provider papers over. |
| 08:05 | cemerick | That said, it'd be interesting to see a stab at it in Clojure. I wonder how much it'd pay off to mix with the various datalog stuffs that have been done. |
| 08:06 | willtim | we certainly wouldn't have to modify the compiler to produce expression trees ;) |
| 08:07 | ponzao____ | cemerick, type-safety is a huge advantage when using LINQ. |
| 08:08 | cemerick | ponzao____: I suppose, if that sort of thing is important to you. :-) |
| 08:09 | ponzao____ | cemerick, when using a language in which ones mindset is set on the compiler helping you then yes it is very important :) |
| 08:09 | cemerick | sure |
| 08:10 | cemerick | and I hear tooling is a big draw for linq usage -- being able to complete on database columns (turned into object fields?) in the same editor as your C#, etc. Doesn't excite me though. |
| 08:19 | ponzao____ | cemerick, same advantage exists in a lot of query languages, I find it useful. I am guessing LINQ doesn't restrict you from doing native SQL if needed for that special case. |
| 08:22 | cemerick | execStream |
| 08:22 | cemerick | bah |
| 08:23 | cemerick | Yeah, I'm certain it's useful, as long as your database/language/tooling choices line up. In my current typical case of couchdb/clojure/enclojure, that's not the case though. :-) |
| 08:26 | ponzao____ | cemerick, Sure. Eclipse is fantastic for Java development and I couldn't live without it, but for Lua and now Clojure I go with a normal editor, I won't mention the name because I am guessing most of the people here are Emacs users... |
| 08:27 | cemerick | hardly all ;-) |
| 08:27 | cemerick | but most, perhaps |
| 09:07 | Licenser | Weeh work Day Done :D |
| 10:24 | ct_ | why does (take 5 (fib3)) always print 'm' ? (defn fib3 |
| 10:24 | ct_ | ([] |
| 10:24 | ct_ | (fib3 0 1)) |
| 10:24 | ct_ | ([m n] |
| 10:24 | ct_ | (lazy-seq (do |
| 10:24 | ct_ | (println "m:" m) |
| 10:24 | ct_ | (cons m (fib3 n (+ n m))))))) |
| 10:29 | ct_ | arg. I see it. (take 5) is _always_ the first time through. Defining a var to the take result and then iterating through that doesn't print m. |
| 10:31 | ct_ | Hmm. no. of course the new seq doesn't print m. I still don't know why (take 5) _always_ prints m. I thought lazy-seq cached the results... |
| 10:37 | Lajla | ct_, I worship your shadow |
| 10:38 | ct_ | what does that mean? |
| 10:39 | Raynes | It means he's being an idiot. |
| 10:39 | ct_ | Oh, heh.. |
| 10:41 | Lajla | ct_, http://en.wikipedia.org/wiki/I_Worship_His_Shadow |
| 10:46 | neotyk | ct_: fib3 could provide different results each run, not that it does |
| 10:46 | neotyk | but in general it would not be to good to memoize all lazy-seq |
| 10:47 | neotyk | ,(doc memoize) |
| 10:47 | clojurebot | "([f]); Returns a memoized version of a referentially transparent function. The memoized version of the function keeps a cache of the mapping from arguments to results and, when calls with the same arguments are repeated often, has higher performance at the expense of higher memory use." |
| 10:49 | ct_ | Thanks. I'm stuck atm. I'd really like memoize to be used. I'm using fibonacci to just get an understanding of how I can create a lazy-seq of a seq created by a fn where the seq is not infinite. |
| 10:49 | neotyk | ct_: shameless plug http://codemeself.blogspot.com/2010/06/clojurecorelazy-seq-makes-sense.html |
| 10:50 | neotyk | ct_: though it should cache if I look at |
| 10:50 | neotyk | ,(doc lazy-seq) |
| 10:50 | clojurebot | "([& body]); Takes a body of expressions that returns an ISeq or nil, and yields a Seqable object that will invoke the body only the first time seq is called, and will cache the result and return it on all subsequent seq calls." |
| 10:50 | ct_ | nice article. I read it last night. |
| 10:50 | neotyk | ct_: thanks! |
| 10:51 | slyrus | morning |
| 10:51 | slyrus | anyone know of a clojure library for _undirected_ graphs? |
| 10:55 | ct_ | Maybe I'm still misunderstanding lazy-seq. I'd like to create a seq of 20 items. each item is created by a fn. I only want the fn to be called once for each item. I think I'm wrapped around the axel on this.. |
| 10:57 | neotyk | ct_: check this out http://github.com/richhickey/clojure-contrib/blob/78ee9b3e64c5ac6082fb223fc79292175e8e4f0c/src/main/clojure/clojure/contrib/lazy_seqs.clj#L82 |
| 10:58 | Chousuke | ct_: can't you use map or repeatedly or something? |
| 10:58 | ct_ | Thanks. I've seen that too. |
| 10:58 | ct_ | repeatedly works for infinite sequences. |
| 10:58 | Chousuke | ct_: using lazy-seq directly is not often necessary. |
| 10:58 | ct_ | I actually tried that. |
| 10:58 | Chousuke | it works for finite seqs too :) |
| 10:58 | Chousuke | (take n (repeatedly ...)) :P |
| 10:58 | ct_ | I returned 'nil' after my fns are done but ... |
| 10:58 | ct_ | hmm. |
| 10:59 | Chousuke | or take-while somepred .... |
| 10:59 | ct_ | take-while sounds interesting |
| 11:00 | ct_ | Q: (take n (repeatedly ...)) - I did this, but I didn't know how to limit the size of the seq. returning nil didn't stop take |
| 11:00 | ct_ | (take kept going what it was told and returning nil for items beyond 20 :-) |
| 11:01 | ct_ | going->doing |
| 11:24 | neotyk | ct_: lazy-seq is cacheing |
| 11:24 | neotyk | ,(let [a (lazy-seq (cons (do (println "one") 1) (lazy-seq (cons (do (println "two") 2) nil))))] (first a) (first a)) |
| 11:24 | clojurebot | 1 |
| 11:24 | clojurebot | one |
| 11:24 | neotyk | ct_: notice that one is printed only once |
| 11:25 | neotyk | issue might be that you define it as fn |
| 11:36 | ct_ | what you write makes perfect sense. Your article shows 1/one very well. I'm not sure why lazy-seq is not caching fib3: (defn fib3 [m n] (lazy-seq (do |
| 11:36 | ct_ | <ct_> (println "m:" m) |
| 11:36 | ct_ | <ct_> (cons m (fib3 n (+ n m))))))) |
| 11:36 | ct_ | m is printed every time - as if lazy-seq isn't caching. |
| 11:37 | ct_ | (take 5 (fib3)) |
| 11:39 | Chousuke | ct_: calling the function always generates a new seq |
| 11:39 | neotyk | ct_: because you are creating new lazy-seq each time you call fib3 |
| 11:39 | ct_ | heh |
| 11:39 | ct_ | tyvm |
| 11:54 | arohner | is there a function to replace the value of an expression with another value? |
| 11:55 | arohner | I want something like (replace (foo) {1 "1", :a :b}) |
| 11:55 | arohner | which would return "1" if foo returned 1, and :b if foo returned :a |
| 12:03 | hiredman | arohner: how is that in anyway different from ({1 "1", :a :b} (foo)) |
| 12:04 | arohner | hiredman: I want the expression to return foo's value if it is not present in the replacement map |
| 12:04 | arohner | (or (get map (foo)) (foo)), without the double evaluation |
| 12:04 | hiredman | you don't need to use get for that |
| 12:05 | ct_ | Chousuke/neotyk - thanks again ! I have everything working on my end. I really appreciate your help. |
| 12:05 | arohner | hiredman: actually, get has a not-found, which may do what I want |
| 12:35 | Licenser | aloa my lispy friends |
| 12:36 | TeXnomancy | Licenser: cookies? |
| 12:36 | Licenser | TeXnomancy: Way thank you but it is too hot, even for cookies :( |
| 12:42 | esj | Ello Licenser |
| 12:42 | Licenser | aloa esj |
| 12:54 | konr | What was that function like filter that returned matching elements inside a nested structure? |
| 14:01 | rbxbx | After reading http://gist.github.com/470031 (jkk's examples gist) I've changed my mind and decided it's a good thing :D |
| 14:15 | jkkramer | rbxbx: you thought getting examples at the repl was a bad idea previously? |
| 14:44 | rbxbx | jkkramer: I thought it was superfluous :( |
| 14:44 | rbxbx | but I've since seen the error of my ways. |
| 15:36 | dsop | ? |
| 15:37 | technomancy | dsop: is there a specific reason you think it belongs in contrib instead of in a 3rd-party library? |
| 15:38 | dsop | technomancy: I think a lot of people need sha-1 or md5, so that's why I think it belongs to contrib |
| 15:39 | technomancy | dsop: right now stuart H is pushing for a more modular build of contrib, so I think it's not a good idea to add new namespaces right now |
| 15:39 | technomancy | especially with 1.2 around the corner. |
| 15:40 | technomancy | I suggest releasing it as a 3rd-party lib anyway, it's not like it's hard to add third-party libraries. |
| 15:40 | dsop | technomancy: yes that's okay. I can wait and redo the proposal if contrib contributors like the general idea |
| 15:40 | technomancy | it's not like the old days |
| 15:41 | dsop | technomancy: well maybe it's because of my scripting languages background but I found it very handy to have sha-1 distributed with contrib |
| 15:41 | hiredman | meh |
| 15:41 | hiredman | contrib |
| 15:41 | technomancy | well some of us are trying to reduce our contrib usage |
| 15:41 | hiredman | make a jar, push to clojars |
| 15:41 | technomancy | if you make it a third-party library, you will be able to accept patches without a CA, and you'll also be able to release new versions at your own discretion. |
| 15:42 | dsop | hiredman: that's exactly what I don't like |
| 15:42 | hiredman | why not? |
| 15:42 | dsop | because a developer doesn't know if the maintainer of the 3rd party library doesn't do BC breaks or something |
| 15:42 | hiredman | BC breaks? |
| 15:42 | dsop | if it's in contrib you can rely on some basic backward compatbility |
| 15:43 | hiredman | dsop: you can just use an old version |
| 15:43 | dsop | hiredman: oh certainly, until you once you have to upgrade for whatever reason |
| 15:43 | technomancy | dsop: http://semver.org |
| 15:43 | hiredman | dsop: not always |
| 15:43 | lancepantz | think it makes as much sense in contrib as other stuff, like clojure.contrib.graph |
| 15:44 | technomancy | lancepantz: lots of stuff made it into contrib for historical reasons |
| 15:44 | lancepantz | but i am dying for contrib to be split up |
| 15:44 | technomancy | lancepantz: it used to be that was the only non-painful way to distribute your code |
| 15:44 | hiredman | and you are just pushing the load of keeping the code up to date from the library writer to whoever is involved in the contrib release process |
| 15:44 | dsop | technomancy: I know semantic versioning. It's just that I would trust contrib to be bc more than 3rd party libraries |
| 15:44 | lancepantz | right |
| 15:44 | hiredman | which slows releases |
| 15:45 | hiredman | and makes a burden for others who might not give a damn about your code, instead of, you know, having the person who cared enough to write it in the first place keep it up to date |
| 15:45 | technomancy | dsop: we've had lots of backwards-compatibility issues in contrib; it's part of the reason I am trying to reduce usage of it. |
| 15:45 | dsop | technomancy: yes, and it's probably worse in 3rd party libraries |
| 15:46 | technomancy | dsop: it varies in 3rd-party libraries |
| 15:46 | hiredman | nope |
| 15:47 | dsop | technomancy: exactly, and contrib will probably move into the direction of more stable releases |
| 15:47 | dsop | technomancy: anyway I got your point, I was just hoping to get some feedback on the general idea |
| 15:47 | dsop | technomancy: because I'm new to clojure and my approach might not be very lispy |
| 15:47 | hsarvell | sha1 feels like something basic enough to be in contrib |
| 15:48 | hiredman | your funeral |
| 15:50 | dsop | :) |
| 15:56 | neotyk | Hello my favorite irc channel |
| 15:59 | AWizzArd | Hi neotyk. Sorry about yesterdays football match :) |
| 16:00 | neotyk | AWizzArd: I overslept it |
| 16:01 | kotarak | AWizzArd: it was bad karma |
| 16:01 | neotyk | my kids do that all the time to me, I think I put them in bed, but it is other way around :) |
| 16:02 | dsop | overslept a football match? |
| 16:02 | dsop | the final.. |
| 16:02 | neotyk | AWizzArd: my team didn't even qualify to group :P |
| 16:02 | neotyk | dsop: true, true |
| 16:03 | neotyk | if NL would win, I would be woke up. Most likely |
| 16:03 | neotyk | and I prefer Cojure than football |
| 16:04 | kotarak | Well, NL thought it was kind of Kung Fu championship, not soccer. |
| 16:06 | AWizzArd | kotarak: ;) |
| 16:35 | islon | i'm trying to run lein 1.2 RC2 under windows with last clojure from gi but when i execute "lein swank" it raises an exception "Exception in thread "main" clojure.lang.LispReader$ReaderException: java.lang.Exception: Invalid token: C:" |
| 16:35 | islon | *git |
| 16:41 | cmcclell | Quick question: I have slime 07062010 working against ccl&sbcl, but cannot get it to work with clojure (against swank-clojure 1.3.0). No special forms will execute - it just hangs emacs. Any ideas? |
| 16:44 | arohner | cmcclell: I'm not entirely sure that version of slime is compatible |
| 16:44 | arohner | cmcclell: try this one http://github.com/technomancy/slime |
| 16:45 | cmcclell | arohner: I'll try it. My alterative is to split my .emacs file, and use load-file to bring in the common-lisp one when I don't want to use clj |
| 16:50 | cmcclell | (when |
| 16:50 | cmcclell | (load |
| 16:50 | cmcclell | (expand-file-name "~/.emacs.d/elpa/package.el")) |
| 16:50 | cmcclell | (package-initialize)) |
| 16:51 | cmcclell | Using elpa, that seems to be enough to be able to connect to a clojure:swank started by maven |
| 16:52 | cmcclell | using slime 04042010 |
| 17:19 | epochwolf | Is http://pragprog.com/titles/shcloj/programming-clojure still a good book for learning Clojure? |
| 17:21 | lancepantz | epochwolf: its better than nothing, but i think the joy of clojure is much better |
| 17:22 | neotyk | epochwolf: is very good start |
| 17:23 | epochwolf | do I need java experience? |
| 17:23 | epochwolf | or better, is there a website for my newbie questions |
| 17:24 | qbg | As long as you stay in Clojure land you shouldn't need much java experience |
| 17:25 | rbxbx | epochwolf: http://news.ycombinator.com/item?id=1508609 ;) |
| 17:27 | cmcclell | Joy of Clojure shouldn't be a first read for a person new to clojure |
| 17:27 | epochwolf | lancepantz, neotyk, rbxbx: thanks |
| 17:30 | cmcclell | epochwolf: Practical Clojure is also decent; Clojure In Action is shaping up to be nice, but it is not out yet :( |
| 17:30 | neotyk | epochwolf: or better write clojure code and ask here :) |
| 17:35 | kib2 | Hi. Does someone knows where can I find an article/tutorial on how to transform sexpressions to xml/html ? |
| 17:36 | jkkramer | kib2: hiccup is a lib that does that |
| 17:36 | jkkramer | kib2: well, to HTML, not XML per se |
| 17:36 | kib2 | jkkramer: Yes I know, but it is just for personal satisfaction :) |
| 17:37 | jkkramer | kib2: you could look at the sources to hiccup to see how it's doing it |
| 17:37 | arohner | kib2: then read the source for hiccup. It's pretty short |
| 17:37 | arohner | enlive may do that as well |
| 17:43 | jneira | hi people |
| 17:44 | nickik | Hello, I'm new to emacs and I want to install rainbow parens. But I have no idea how that works. Where do I put this script and make it default= |
| 17:45 | nickik | http://stackoverflow.com/questions/2413047/how-do-i-get-rainbow-parentheses-in-emacs |
| 17:45 | jneira | when i am writing a function I always think that there will be a better version in contrib or somewhere :-/ |
| 17:46 | cmcclell | Anyone have any good information on clojure performance in general? We are evaluating the language as our functional alternative on the JVM A lot of discussions seem way out of date. |
| 17:46 | nickik | I know what you mean |
| 17:46 | jneira | jum personally i dont like rainbow parens ... |
| 17:46 | jneira | i didnt try install it |
| 17:48 | kotarak | jneira: this is not always the case: see reductions |
| 17:49 | jneira | jum @cmcclell i think, generally speaking clojure can have the same performance than java |
| 17:49 | konr | What was that function like filter that returned matching elements inside a nested structure? |
| 17:49 | jneira | is not reductions good? |
| 17:51 | cmcclell | jneira: thanks. Basically, when it comes down to debate I know the three things people will use to say no to clojure at my company will be: performance, tool support and "lisp is hard to teach" |
| 17:53 | jneira | konr with clojure.zip i think you could do so |
| 17:53 | qbg | cmcclell: What do you want to use clojure for? |
| 17:53 | konr | jneira: thanks! |
| 17:54 | dnolen | cmcclell: outside of code involving a lot of primitive arithmetic operations, I've rarely heard people complain about Clojure's performance. |
| 17:54 | technomancy | clojurebot: performance? |
| 17:54 | clojurebot | http://clojure.org/java_interop#toc46 |
| 17:54 | cmcclell | qbg: We have sets of problems that will be easily solved by functional means. Currently, we use .NET and the JVM. On the .NET side of the house F# has been used for a while to great effect. On the JVM side of the house, we've been java or bust for a while. But now, we're going to pick a language we will support on the JVM for problems best solved via fn programming. |
| 17:55 | technomancy | clojurebot: performance is http://meshy.org/2009/12/13/widefinder-2-with-clojure.html |
| 17:55 | clojurebot | Ok. |
| 17:56 | jneira | jum "yes sir" would be better |
| 17:57 | jneira | i have wrote a function wich extracts the value o a n-dimension matrix |
| 17:58 | jneira | Already exists somewhere? |
| 17:59 | kotarak | jneira: reductions in contrib was terribly out-of-date. The new core version is much faster. |
| 17:59 | jneira | fe (nthn [[[4]]] [0 0 0]) -> 4 |
| 17:59 | kib2 | sorry, guys: baby problem. Thanks for your answers, I've already read hiccup source, but found them difficult to understand (I'm a Clojure newbie) |
| 18:00 | cmcclell | technomancy: thanks good article |
| 18:00 | jneira | kotarak: jum ok but sure the old version is better than mine :-P |
| 18:02 | kib2 | In fact I've found an article (in Common Lisp) here: http://cybertiggyr.com/lh/ and translated the code to Clojure. But then I realized the author was doing it wrong: he just forgot about escaping "<",">", etc. chars. |
| 18:02 | jneira | this is my take http://gist.github.com/473128 sure there is a better version ;-) |
| 18:06 | jkkramer | ,(get-in [[[4]]] [0 0 0]) |
| 18:06 | clojurebot | 4 |
| 18:06 | kotarak | jneira: (reduce nth coll coords) |
| 18:07 | kotarak | ,(reduce nth [[[4]]] [0 0 0]) |
| 18:07 | clojurebot | 4 |
| 18:07 | jneira | ñam always reduce |
| 18:07 | jneira | i am rusty |
| 18:08 | jneira | thanks kotarak! |
| 18:09 | kotarak | jneira: loop with accumulator cries for reduce, jkkramer also has an idea with get-in, but maybe nth is faster on vectors? |
| 18:09 | kotarak | dunno |
| 18:10 | jneira | jum |
| 18:19 | jneira | note to myself: when do you have a recursive accumulative function think in a possible reduced reduce version (or fold) |
| 18:41 | akhudek | hey everyone, is there a reason that the sh function in clojure.java.shell prints its arguments? |
| 18:42 | akhudek | assume it's just debug code that is still present? |
| 18:42 | lancepantz | akhudek: the latter, there was a mention of it on assembla recently |
| 18:42 | lancepantz | i think it got patched |
| 18:42 | akhudek | ok, thanks |
| 18:49 | mudphone | Sivajag: hi Siva |
| 19:32 | bhenry | ,(def test "test") |
| 19:32 | clojurebot | DENIED |
| 19:33 | bhenry | ,(let [test "test"] test) |
| 19:33 | clojurebot | "test" |
| 19:35 | bhenry | with ring, how might i serve up static files from a dynamically decided path (based on a "get" variable from the query string)? eg. http://localhost:8080/?dir=/Users/bhenry/Pictures/wallpaper would show me all the pictures from that dir on a page of html. right now i have it showing me all the full paths to each picture in dir. |
| 19:51 | tomoj | ring has some helper function for serving up static files that are on the classpath |
| 19:51 | tomoj | but I think nothing for arbitrary files on the host |
| 19:53 | bhenry | guess i have to make a script asking for dir when starting up the clj file rather than getting it from the url afterwards. |
| 19:53 | tomoj | oh, and I was wrong |
| 19:53 | tomoj | there is ring.middleware.file and ring.middleware.static |
| 19:54 | bhenry | i looked at those but couldn't figure out how to go about doing what i wanted. |
| 19:59 | lancepantz | what is the penalty for having lots of files on the classpath with the jvm though? |
| 19:59 | lancepantz | i know it would start up slower |
| 19:59 | lancepantz | would those files also get put in memory? |
| 20:00 | bhenry | no |
| 20:00 | bhenry | my new idea is to just have the program write a static html file with the file:// links to images. and then open the static html file. |
| 20:01 | bhenry | the problem i was having is from http://localhost i can't click on file:// links for browser security features. |
| 20:01 | bhenry | but if i have clojure spit out an index.html i can just have it pop it open in the default browser as file://path to dir/index.html |
| 20:46 | redalastor | For a new clojure project, would you suggest to go with the latest github sources and transition to 1.2 when it is released or go with 1.1? |
| 20:46 | lancepantz | redalastor: github |
| 20:47 | lancepantz | redalastor: well actually, just pull the jar from repository |
| 20:47 | technomancy | clojurebot: compiling clojure is rarely necessary to do yourself. |
| 20:47 | clojurebot | Ack. Ack. |
| 20:48 | redalastor | I regularly checkout the code with git, compiling is more convenient than downloading to me. |
| 20:49 | technomancy | well sure, if you download with wget or whatever. =) |
| 20:56 | brweber2 | hey stuarthalloway, can you help with an array type hint question (when using :gen-class)? |
| 20:56 | stuarthalloway | hey brweber2, how are ya? |
| 20:56 | stuarthalloway | and maybe |
| 20:56 | brweber2 | great |
| 20:56 | stuarthalloway | if I can't, Stuart Sierra is sitting next to me |
| 20:56 | brweber2 | and you? you home today or travelling? |
| 20:56 | brweber2 | awesome |
| 20:56 | stuarthalloway | home |
| 20:56 | brweber2 | don't know if Liebke told you |
| 20:57 | brweber2 | but Near Infinity will be hosting clojure hack nights in NOVA |
| 20:57 | brweber2 | we should probably coordinate with you guys |
| 20:57 | brweber2 | to help do some useful stuff |
| 20:57 | technomancy | how big are your hack nights? |
| 20:57 | brweber2 | help out if we can |
| 20:57 | technomancy | we just find a coffee shop with big tables and it works great. =) |
| 20:57 | brweber2 | technomancy, first one will be scheduled after capclug this Thursday |
| 20:58 | brweber2 | technomancy where do you live? |
| 20:58 | technomancy | brweber2: seattle |
| 20:58 | technomancy | we generally get 7-12 attendees |
| 20:58 | technomancy | (disclaimer: we have really big coffee shops here) |
| 20:58 | brweber2 | stuarthalloway so my question... is it possible to do array type hints for a method parameter on :gen-class? I've tried every hack I could think of |
| 20:58 | brweber2 | including some that might work on a defn |
| 20:58 | stuarthalloway | what kind of array |
| 20:59 | brweber2 | technomancy we're hoping for about 50% of capclug so that would be around 10 folks |
| 20:59 | brweber2 | technomancy but we'll have to see |
| 20:59 | stuarthalloway | usually the string form of the JVM spec name works, e.g. "[B" |
| 20:59 | brweber2 | I think it would be awesome if the groups could coordinate with clojure/core and help out |
| 21:00 | brweber2 | I tried "[Ljava.lang.String;" but that didn't work there with trunk |
| 21:00 | stuarthalloway | seems like that should work |
| 21:00 | stuarthalloway | what kind of non-working symptom did you get? |
| 21:01 | technomancy | brweber2: better to be prepared, I guess |
| 21:01 | brweber2 | Exception in thread "main" java.lang.Exception: Unmatched delimiter: ] (seven.clj:3) |
| 21:01 | brweber2 | at clojure.lang.Compiler.compile(Compiler.java:6042) |
| 21:02 | brweber2 | maybe it is a bug in trunk, I haven't tried with 1.1 yet.... |
| 21:02 | stuarthalloway | that definitely seems wrong -- can you make a gist of the whole thing? |
| 21:03 | brweber2 | stuarthalloway absolutely |
| 21:03 | brweber2 | I'll trying debugging here to in a minute, I have the source checked out |
| 21:05 | abedra | lol |
| 21:05 | technomancy | super friends! |
| 21:05 | brweber2 | stuarthalloway http://gist.github.com/473303 |
| 21:05 | abedra | i believe he goes by Flash now :) |
| 21:05 | technomancy | who got stuck with Aquaman? |
| 21:05 | abedra | luckily nobody |
| 21:06 | abedra | it would be like the one who has superpowers but only in mutability |
| 21:07 | stuartsierra | Yes, I don't get along with Apple. |
| 21:07 | brweber2 | stauarthalloway at clojure.lang.LispReader$UnmatchedDelimiterReader.invoke(LispReader.java:1021) |
| 21:07 | stuarthalloway | technomancy: we are trying to test the new build box |
| 21:07 | stuarthalloway | http://clojure01.managed.contegix.com/snapshots |
| 21:08 | stuarthalloway | but when I point lein there it grab a less-than-most-recent build |
| 21:08 | stuartsierra | brweber2: you have a type hint ("#^...") with no symbol to follow it |
| 21:08 | stuarthalloway | is there possibly some magic in leiningen that knows about the official build ip address? |
| 21:09 | brweber2 | stuartsierra agreed, but that is how method on :gen-class works |
| 21:09 | stuarthalloway | abedra is http://en.wikipedia.org/wiki/Martian_Manhunter |
| 21:09 | stuartsierra | brweber2: that can't be right, the Clojure reader can't parse that |
| 21:09 | technomancy | stuarthalloway: how did you point lein there? hacking the lein source or adding it to :repositories in project.clj? |
| 21:09 | technomancy | or something like an /etc/hosts entry? |
| 21:09 | brweber2 | stuartsierra or you are saying I need to get rid of the quotes? |
| 21:09 | stuartsierra | no |
| 21:10 | technomancy | aquamaaaaaaan! http://www.harkavagrant.com/index.php?id=260 |
| 21:10 | stuarthalloway | technomancy: repositories entry in project.clj |
| 21:10 | brweber2 | stuartsierra agreed :) it isn't working so I def agree with you! I'm not sure it is possible... I'd love to believe that it is though |
| 21:10 | technomancy | stuarthalloway: the b.c.o repositories URL is added in lein itself; I'm not sure what the precedence rules are. |
| 21:10 | technomancy | however, you can set :omit-default-repositories true |
| 21:11 | technomancy | in your project.clj |
| 21:11 | stuarthalloway | technomancy: perfect! |
| 21:11 | dsop | stuarthalloway: stuartsierra one you are here, what about the digest proposal on clojure.user? |
| 21:11 | stuartsierra | sorry, not up to date with mailing list |
| 21:11 | dsop | k |
| 21:11 | stuarthalloway | dsop: I haven't looked at the code, but based on my experience with crypto apis in Java i would support a convenience layer |
| 21:12 | dsop | stuarthalloway: at the moment it's just digest that wraps MessageDigest. |
| 21:12 | technomancy | stuarthalloway: I'm taking off now; feel free to email me if you need any more help with the new build box. |
| 21:12 | stuarthalloway | technomancy: I am sure the whole community will blame lein (you!) if we break it. Bwa ha ha :-) |
| 21:12 | stuartsierra | brweber2: don't use meta for types in :method args lists, see http://gist.github.com/473303#comments |
| 21:13 | technomancy | no doubt! =) |
| 21:13 | technomancy | cheers |
| 21:13 | dsop | stuarthalloway: anyway, I'll wait until you guys look at it. it's probably not good clojure code anyway |
| 21:13 | brweber2 | stuartsierra that works for primitives and classes, but not arrays... any idea about arrays specifically? |
| 21:13 | stuarthalloway | brweber2: task for capclug: review dsop |
| 21:14 | stuarthalloway | 's proposal for digest, possibly extend to other crypto apis |
| 21:14 | stuartsierra | brweber2: I *think* it can just be a string, like my second comment http://gist.github.com/473303#comments |
| 21:14 | stuarthalloway | would be cool to add clojure.contrib.java.crypto |
| 21:16 | brweber2 | stuarthalloway do you have a link? |
| 21:16 | stuarthalloway | brweber2: http://github.com/dsp/clojure-contrib/commit/77c9f7dbe071d90bf6cb385db4859e76d5e8ff19 |
| 21:19 | brweber2 | stuartsierra ah, I see the error of my ways! thank you! |
| 21:19 | stuartsierra | brweber2: welcome. |
| 21:20 | dsop | brweber2: there is also a follow up commit thats add a default charset |
| 21:21 | brweber2 | dsop stuarthalloway ok, I'll follow up after Thursday's capclug to let you know when the group will meet |
| 21:22 | dsop | ? |
| 21:22 | dsop | capclug, group, meet? |
| 21:25 | dsop | ah okay found |
| 21:27 | stuarthalloway | dsop: where are you based? |
| 21:27 | dsop | stuarthalloway: karlsruhe, germany |
| 21:27 | stuarthalloway | bit of a hike to capclug :-) |
| 21:28 | dsop | hehe |
| 21:28 | stuarthalloway | you could come hang at JAOO in Aarhus though |
| 21:28 | stuarthalloway | Rich and I will be there |
| 21:29 | dsop | hm sounds good |
| 21:30 | brweber2 | dsop capclug is national capital area clojure user's group |
| 21:30 | brweber2 | dsop the group will be meeting |
| 21:30 | brweber2 | soon |
| 21:32 | brweber2 | dsop stuart h. was suggesting that the group review it |
| 21:32 | dsop | brweber2: ah okay. at least you will have something to laugh, I'm not very lisp experienced :) |
| 21:32 | dsop | anyway, looking forward for feedback to make the code better |
| 21:32 | brweber2 | dsop I think most clojure devs aren't.... |
| 21:33 | dsop | I'm off, it's later here, 3:30 am |
| 21:33 | dsop | brweber2: I wonder if they will figure out what Class/forName "[B" means ;) |
| 21:34 | brweber2 | dsop several of them will know :) the rest will have blank stares |
| 21:35 | brweber2 | stuartsierra is stuarthalloway making you work late tonight? ;) |
| 21:36 | stuartsierra | We're meeting in the Justice League Justice Cave or whatever it is. |
| 21:36 | stuartsierra | 'cause it's always a cave |
| 21:36 | brweber2 | stuartsierra I'm not sure what to make of the clojure justice league... beats vampires I suppose! |
| 21:37 | stuartsierra | Well, sonian already claimed the Clojure Avengers |
| 21:45 | tomoj | hmm.. careful with swank.core/break: if one of the locals is an infinite sequence, your repl dies off |
| 21:46 | brweber2 | stuartsierra what build box hacking are you doing? trying to get the build green again or something entirely different? |
| 21:46 | stuartsierra | setting up new Hudson/repository box |
| 22:06 | bhenry | if clojure justice league was instead clojure league of justice, the initials would be clj. you could also abbreviate it cloj |
| 22:26 | TimMc | :-D |
| 22:37 | cheluis | hi good evening... can someone tell me why this works (apply str "string") and this doesn't (apply (fn [x] (str x)) "string") |
| 22:40 | hiredman | cheluis: the fn takes a single arg, str does not |
| 22:41 | rhudson | cheluis: (apply f "string") is equivalent to (f \s \t \r \i \n \g) |
| 22:41 | cais2002 | hi guys, how do I do this: bool e=false; for (int i=0; i<100; i++) if (vec[i]==true) then e=true; // now do something with e |
| 22:41 | cais2002 | I am using doseq for the for loop |
| 22:42 | cheluis | oh.. I see.. thanks |
| 22:47 | rhudson | cais2002: (let [e (some true? myvec)] ...) ; e will be true or nil |
| 22:51 | cheluis | if I want to duplicate every char on a string? |
| 22:52 | qbg | ,(apply str (map str "hello" "hello")) |
| 22:52 | clojurebot | "hheelllloo" |
| 22:52 | rhudson | for example? |
| 22:52 | cheluis | yep |
| 22:52 | cheluis | "hheelllloo" |
| 22:52 | qbg | Probably a better way to do it |
| 22:54 | cheluis | don't you think that is a problem that there's so many ways to solve a problem on clojure? |
| 22:57 | rhudson | makes it more likely that you'll find at least 1 solution :) |
| 22:59 | cais2002 | rhudson: how to do it in a more generalized way, assuming (vec[i]==true) is a test function and I am also doing something for side effects within the for loop? |
| 23:02 | rhudson | cais2002: I generally think of a way to use reduce if I want to "accumulate" some value across a sequence |
| 23:03 | aria42 | Hey, anyone having swank-clojure issues; anything that should throw an error now loops in the mini-buffer "error in process filter: wrong argument type characterp, nil" |
| 23:03 | aria42 | On the latest slime, slime-repl, etc. |
| 23:09 | rhudson | cais2002: something like (let [e (reduce #(or %1 %2) false (for [i (range 100)] (v i)))] ... ) |
| 23:20 | mikem | ,(macroexpand-1 '(unless false (println "this should print"))) |
| 23:20 | clojurebot | (unless false (println "this should print")) |
| 23:21 | mikem | hm, according to Programming Clojure, that should expand to (if false nil (println "this should print")) |
| 23:21 | bhenry | ,(doc unless) |
| 23:21 | clojurebot | Titim gan éirí ort. |
| 23:22 | mikem | hm, ok, how about this: |
| 23:23 | mikem | ah, ok, never mind :) seems it's working |
| 23:23 | mikem | since unless isn't actually defined anymore |
| 23:24 | bhenry | yeah seems with the quoted expression you'll get whatever you put there no matter what. |
| 23:25 | rhudson | ,(macroexpand-1 '(when foo bar baz)) |
| 23:25 | clojurebot | (if foo (do bar baz)) |
| 23:25 | mikem | ,(macroexpand-1 '(when-not foo bar baz)) |
| 23:25 | clojurebot | (if foo nil (do bar baz)) |
| 23:27 | bhenry | ,(macroexpand-1 '(im-so-drunk-right-now false (println "this should print"))) |
| 23:27 | clojurebot | (im-so-drunk-right-now false (println "this should print")) |
| 23:27 | bhenry | which is why it worked with unless |
| 23:27 | bhenry | goodnight everyone. |
| 23:27 | rhudson | If the first symbol in the quoted list isn't a macro, there's nothing for macroexpand-1 to do |
| 23:27 | bhenry | right |
| 23:57 | Bahman | Hi all! |
| 23:57 | qbg | Hi |