2011-02-05
| 01:14 | irc_newbie | howdy |
| 01:15 | ieure | Hello. |
| 01:24 | mec_ | is there a variant of (source) that will show all the methods of a multimethod? |
| 01:26 | amalloy | mec_: i don't think so, but see (.getMethodTable print-dup) |
| 01:26 | danlarkin | amalloy: clojure.core/methods |
| 01:26 | danlarkin | (doc methods) |
| 01:26 | clojurebot | "([multifn]); Given a multimethod, returns a map of dispatch values -> dispatch fns" |
| 01:27 | amalloy | danlarkin: ah. a nice sugar for the above |
| 01:28 | mec_ | I tried that but just a bunch of "Source not found" |
| 01:30 | sritchie | amalloy: problem solved with cascading, btw -- there was indeed a way to serialize primitives without any special wrapper, it's just "off" by default |
| 01:31 | amalloy | mec_: i don't think defmethod attaches metadata to the methods |
| 01:31 | amalloy | so you can't find the source |
| 01:31 | sritchie | amalloy: I'm using your method, of pushing to a DataOutputStream, I just don't have to pretend to be a byte array anymore |
| 01:31 | amalloy | sritchie: convenient |
| 01:31 | sritchie | amalloy: less shameful! |
| 01:32 | amalloy | buffers and channels are supposedly the "new thing", and definitely faster if you care about that |
| 01:33 | sritchie | Unfortunately I have to conform to this interface: http://hadoop.apache.org/common/docs/r0.20.0/api/org/apache/hadoop/io/serializer/Deserializer.html |
| 01:34 | sritchie | amalloy: but I hear you |
| 01:34 | amalloy | sritchie: whoa, implementing serialization yourself. i wonder if thrift might be easier |
| 01:34 | danlarkin | interfaces are awesome because you can reify them |
| 01:34 | danlarkin | it's subclassing that sucks |
| 01:35 | amalloy | or avro i guess, for hadoop |
| 01:35 | amalloy | danlarkin: i don't think anyone was complaining about interfaces |
| 01:35 | danlarkin | just commenting |
| 01:35 | sritchie | danlarkin: I was just pointing out that it forced me to use streams |
| 01:36 | sritchie | amalloy: for anything other than these primitive arrays, I'll certainly check out thrift, or some other serialization framework |
| 01:36 | sritchie | the next thing I'll have to stream will most likely be parallel colt matrices |
| 04:13 | fliebel | morning |
| 04:14 | fliebel | Is anyone here capable of navigating the Java XML jungle? I found a SAX serializer, which is what I thought I needed, but it says it's deprecated, and lists 2 other options I can't find. |
| 04:15 | fliebel | "This class was deprecated in Xerces 2.9.0. It is recommended that new applications use the DOM Level 3 LSSerializer or JAXP's Transformation API for XML (TrAX) for serializing XML. See the Xerces documentation for more information." |
| 04:42 | fliebel | Java makes fliebel angry :( |
| 04:46 | fliebel | Why! A DocumentBuilderFactory, that produces DocumentBuilders, that can make Documents. Just give me the document, all right? |
| 04:48 | jkrueger | fliebel: so you are a JavaAversionAccumulator ? |
| 04:50 | fliebel | jkrueger: Yes, and making a XmlDslFactoryGeneratorFactoryCreator |
| 04:50 | fliebel | You know, like Hiccup, but for XML, with namespaces and all. |
| 04:52 | fliebel | The problem is that I can't find a way to simple generate some XML with Java. When I was on the point where I thought I found it, I noticed it said 'deprecated'. |
| 04:53 | gregh | you can always just write text |
| 04:53 | jkrueger | at times one gets the feeling that some java APIs get deprecated before they ever get released |
| 04:54 | fliebel | gregh: Before I started, I was under the impression there was a wealth of great XML libraries for Java. |
| 04:57 | gregh | if by "great" you mean "Very big, large scale", I think you found them. :) |
| 04:59 | fliebel | gregh: The real problem is that that also seems to imply "business talk, complicated" and also "you *know* this stuff, right? so why explain?" |
| 05:00 | fliebel | Anyway, I finally found some examples how to write a DOm Document to XML, so with a dozen lines of factory cruft, that will get me there I think. |
| 05:05 | fliebel | I'll call my lib ArmageDOM, or WisDOM or SAXophone, or XMJ(eXtended Markup Jumble), or… any suggestions? |
| 05:08 | jkrueger | i like SAXophone |
| 05:08 | jkrueger | but would have expected that to be a library name already |
| 05:09 | fliebel | jkrueger: Me to, but I am not technically using SAX. I was on the SAX trail, but I can;t find a decent serializer/writer |
| 05:12 | jkrueger | DOM minion |
| 05:12 | fliebel | DOMino :) |
| 05:12 | gregh | DOMmage |
| 05:13 | fliebel | gregh: ? |
| 05:14 | gregh | from the french expression "quel dommage" : "what a shame" |
| 05:15 | fliebel | http://en.wiktionary.org/wiki/dommage |
| 05:16 | entropie | DOMINATION! |
| 05:23 | fliebel | What I need is an implementation of org.xml.sax.ContentHandler that writes the tags somewhere. |
| 05:48 | fliebel | Huh? I try (.newInstance DocumentBuilderFactory) on http://download.oracle.com/javase/1.5.0/docs/api/javax/xml/parsers/DocumentBuilderFactory.html#newInstance() and get java.lang.IllegalAccessException: Class user$eval373 can not access a member of class javax.xml.parsers.DocumentBuilderFactory with modifiers "protected" |
| 05:50 | fliebel | That constructor is protected, so you have to use newINstance, and then get the protected error... |
| 05:51 | fliebel | this works: (. DocumentBuilderFactory (newInstance)) |
| 05:52 | fliebel | Why? |
| 05:52 | clojurebot | why not? |
| 08:13 | raek | fliebel: sometimes the reflector finds a private or protected method to be a better match type-wise |
| 08:14 | raek | fliebel: if the method or constructor is overloaded, and some of the overloaded variants are not public, you can use type hints to force the reflector to pick the right one |
| 08:15 | fliebel | raek: But why does that mean that |
| 08:15 | raek | this is common when you have an instance of a private private class that implements a public interface |
| 08:15 | fliebel | (.newInstance DocumentBuilderFactory) does not work while (. DocumentBuilderFactory (newInstance)) does? |
| 08:18 | fliebel | I thought one was sortof a macro for the other. |
| 08:20 | raek | fliebel: I think (.method object) is only for instance methods |
| 08:20 | fliebel | ah |
| 08:20 | raek | try (DocumentBuilderFactory/newInstance) |
| 08:21 | fliebel | *facepalm* |
| 09:55 | fliebel | There must be a better way that doing mutual trampoline recursion… |
| 11:02 | fliebel | phew, it's working. https://github.com/pepijndevos/ArmageDOM |
| 11:06 | fliebel | In only need to figure out a way to make it recursive in a good way. |
| 11:09 | LauJensen | How do I open a regular cake/clojure project in Eclipse? |
| 11:09 | fliebel | I am currently in a situation where I have recursive mutual recursion. (I don't know a better wording for it) |
| 11:14 | ejackson | LauJensen: WHAT ? You must have had one too many Fishshots last night my man... I can't believe I'm seeing you using something outside emacs :P |
| 11:14 | LauJensen | ejackson: Im trying to help out a customer :) |
| 11:15 | fliebel | LauJensen: Is Eclipse one of those IDEs that only let you open eclipse project files? |
| 11:15 | LauJensen | Yes |
| 11:15 | LauJensen | I know lein has a plugin somewhere which creates such a file |
| 11:16 | fliebel | LauJensen: Well, what Cake feature do you need that prevents you from using Leiningen to generate that file? |
| 11:18 | LauJensen | My projects are usually quite firmly married to Cake, but I think I would be able to run the plugin even still |
| 11:18 | LauJensen | Just not build the project |
| 11:37 | defn | LauJensen: when you say firmly married, do you use a lot of cake plugins or have custom tasks or something? |
| 11:37 | defn | do you mean you use* |
| 11:42 | LauJensen | defn: custom tasks primarily |
| 11:59 | robonobo | yo |
| 12:10 | fliebel | robonobo: yo |
| 12:26 | cinch | &(meta '(a)) |
| 12:26 | sexpbot | ⟹ {:line 1} |
| 12:26 | cinch | &(meta '[a]) |
| 12:26 | sexpbot | ⟹ nil |
| 12:27 | cinch | why is line added on a list? |
| 12:31 | fliebel | cinch: I think for debugging. |
| 12:31 | fliebel | Since most of the time lists are used for code, it is good to know where they are when one raises an exception. |
| 12:31 | cinch | makes sense, was wondering why it's not on a vector |
| 12:36 | fliebel | What operations do and don't retain the meta of an object? |
| 13:07 | amalloy | fliebel: i'd tend to assume (wrongly, i'm sure), that no operations retain the meta, to avoid problems |
| 13:12 | amalloy | also, fliebel, findfn is fixed: |
| 13:12 | amalloy | $findfn + [1 2 3] 6 |
| 13:12 | sexpbot | [clojure.core/reduce clojure.core/apply] |
| 13:15 | cinch | fliebel: " In general, collection functions (conj, assoc, dissoc, and so on) are supposed to preserve metadata, |
| 13:15 | cinch | while sequence functions (cons, take, drop, etc.) are not. But there are exceptions. In Clojure 1.0, conj on |
| 13:16 | cinch | (from practical clojure) |
| 13:29 | fliebel | amalloy: Great, great :) |
| 13:30 | fliebel | cinch: Thanks, I shoudl look what Joy of Clojrue hast to say on the issue. |
| 13:37 | amac | Is there a form which allows something similar to loop/recur (tracking intermediate state while iterating over a series of elements) but with multiple recur points in the loop? |
| 13:37 | amac | ...hard to phase that question |
| 13:37 | amalloy | amac: i think the best you can do is multiple loop forms |
| 13:37 | amalloy | but iterate or reduce may be able to do what you want in a different way |
| 13:39 | amac | my problem is that in some cases I need to do extra passes over the elements, so they get temporarily skipped but processed later |
| 13:40 | amalloy | amac: and you can't condense that into a single pass of multiple-step processing? |
| 13:42 | amac | I can't think of a way to do it that won't fail in some edge cases |
| 13:43 | amac | basically its a graph traversal, but if the graph contained disjoint subsets (groups of elements with no relation to other groups) it would break on a single pass |
| 13:46 | amac | ...going to hack away at this some more, thank for the input |
| 13:47 | amalloy | amac: maybe it's hammock time :) |
| 13:50 | amac | amalloy: gotta watch that talk again :) |
| 13:52 | fliebel | amac: What does this disjoint subset graph look like? I can't really imagine what you're talking about. |
| 13:57 | amalloy | fliebel: a graph with points ABCDE: DE are connected, ABC are all interconnected, but no links between the groups |
| 13:57 | amac | say you have a graph of 6 elements, 1 2 3 are connected and 4 5 6 are connected |
| 14:00 | amac | the issue is that if you have a 7th element that connects 3 and 4 then they're no longer disjoint and need to be processed again |
| 14:03 | fliebel | amac: So it's a seq of connections? And what do you do with them? I understand what disjoined sets look like, but the representation and iteration is where I run into trouble. |
| 14:03 | clojurebot | c'est bon! |
| 14:07 | amalloy | clojurebot: your tendency to treat any sentence containing the word is as a definition is frequently misguided |
| 14:07 | clojurebot | In Ordnung |
| 14:09 | amac | fliebel: yeah, its a seq of elements. I do a pass over the elements separating them into two sets based on their relationship, but if I hit an element without a relationship to one already processed its either disjoint (needs to be processed as its own graph) or needs to be processed when another element has been processed which has a relation to it |
| 14:12 | fliebel | I think reduce works. As I understand it, you could have the initial value as an empty seq of subgraphs, and then, for every element, either start a new subgraph, add it to one, or if it connects 2, concat them. |
| 14:13 | amalloy | fliebel: seconded |
| 14:15 | amalloy | amac: that would get you the set of disjoint graphs in one pass, and then you can work on each of them individually |
| 14:15 | fliebel | Remotely related: You could make a zipper for a graph, and have it walk in circles :D |
| 14:16 | amalloy | although, fliebel, i suspect you could speed things up by having the reduce/accumulator value be a map of nodes to the subgraph they're in, so that you can do fast lookup of the two endpoints of a node to see what graph they're in |
| 14:16 | amalloy | rather than a seq |
| 14:18 | fliebel | amalloy: I would agree with you, if I had any understanding of graphs. |
| 14:20 | amalloy | anyway, i'm off. ta-ta |
| 14:21 | fliebel | bye |
| 14:21 | amac | man, you're right that would simplify life considerably... most of the headaches were from pickning out the disjoint elements. |
| 14:22 | fliebel | amac: When you're done, I'd love to see it. I'm curious to the graph stuff. |
| 14:24 | amac | fliebel: sure |
| 14:45 | fliebel | oooh, now even node and redis have hosted services. waiting for clojure... |
| 14:48 | sritchie | hey all -- what's the best way to split a string in half? I have "003002", and want two strings "003", "002" -- I can do a clojure.contrib.string/partition by a regex matching a 3 digit number, but that feels clunky |
| 14:51 | sritchie | ,(map (partial apply str) (partition 3 (drop 2 "12003002"))) |
| 14:51 | clojurebot | ("003" "002") |
| 14:52 | sritchie | actually, this is the end goal: |
| 14:52 | sritchie | ,(map #(Integer/parseInt %) (map (partial apply str) (partition 3 (drop 2 "12003002")))) |
| 14:52 | clojurebot | (3 2) |
| 14:56 | fliebel | &(let [s "1234567890"] (map (partial apply str) (split-at (/ (count s) 2) s))) |
| 14:56 | sexpbot | ⟹ ("12345" "67890") |
| 14:57 | fliebel | You use of partition and drop seems to suggest you don;t just want to split it. |
| 14:58 | fliebel | sritchie: ^ |
| 14:59 | sritchie | fliebel: sure, I should describe what I'm doing -- I've got a string of the form "DDXXXYYY", where XXX and YYY are representations of integers (x and y coordinates of a NASA MODIS tile) |
| 14:59 | sritchie | fliebel: I don't care about d -- I just want those two substrings, represented as integers |
| 14:59 | sritchie | s/d/DD |
| 14:59 | sexpbot | <sritchie> fliebel: I DDon't care about DD -- I just want those two substrings, representeDD as integers |
| 15:02 | fliebel | &((juxt #(subs % 2 5) #(subs % 5 8)) "DDXXXYYY") |
| 15:02 | sexpbot | ⟹ ["XXX" "YYY"] |
| 15:04 | fliebel | sritchie: In that case, this is the best I can do. |
| 15:05 | fliebel | It even doe structural sharing with the original string :) |
| 15:05 | sritchie | fliebel: haha, more efficient than mine! |
| 15:06 | sritchie | it'd be nice if clojure.contrib.string had a partition method that took a number n, like core's |
| 15:06 | sritchie | rather than just a regex |
| 15:06 | anthony__ | I'm stuck on something that I think is trivial. I want |
| 15:07 | anthony__ | to have a separate thread print "Hi", and (future (println "Hi")) works for that. |
| 15:07 | anthony__ | But (repeatedly 5 (future (println "Hi"))) doesn't work (to do 5 threads). What am I doing wrong? |
| 15:07 | fliebel | sritchie: There is clojure.string now ;) |
| 15:07 | fliebel | anthony__: repeatedly takes a function. |
| 15:08 | anthony__ | *sigh* Thanks...I knew that, too. |
| 15:08 | fliebel | But you want pmap or pcalls I think. |
| 15:08 | anthony__ | Ah! I tried pmap first, but it didn't quite work. Never heard of pcalls, and it looks perfect. |
| 15:09 | fliebel | or pvals if you don;t want to make functions ;) |
| 15:09 | markskilbeck | Hi, all. Regarding convention, when does one use naming such as *symbol*? |
| 15:10 | fliebel | markskilbeck: For vars that can be dynamically changed, via binding. |
| 15:10 | sritchie | markskilbeck: earmuffs! from the clojure assembla: |
| 15:10 | sritchie | Use *earmuffs* only for things intended for rebinding. Don't use a special notation for constants; everything is assumed a constant unless specified otherwise. |
| 15:10 | sritchie | http://www.assembla.com/wiki/show/clojure/Clojure_Library_Coding_Standards |
| 15:10 | markskilbeck | fliebel, sritchie: Thank you very much. |
| 15:10 | anthony__ | fliebel: I'm having trouble finding documentation for pvals. Is that in a separate library? (doc pvals) doesn't work in my REPL |
| 15:11 | fliebel | oh maybe it's pvalues or whatever. |
| 15:11 | markskilbeck | ,(doc pvalues) |
| 15:11 | clojurebot | "([& exprs]); Returns a lazy sequence of the values of the exprs, which are evaluated in parallel" |
| 15:11 | anthony__ | fliebel: markskilbeck: Thanks. Sorry for the trivial questions. |
| 15:13 | sritchie | ,(map (partial subs "11222333") [2 5] [5 8]) |
| 15:13 | clojurebot | ("222" "333") |
| 15:13 | sritchie | works, but is misleading! |
| 15:15 | fliebel | &(map (partial apply subs "11222333") [[2 5] [5 8]]) |
| 15:15 | sexpbot | ⟹ ("222" "333") |
| 15:17 | sritchie | fliebel: not misleading anymore |
| 15:17 | fliebel | &(map (partial apply subs "11222333") (partition 2 1 (range 2 9 3))) ; evil |
| 15:17 | sexpbot | ⟹ ("222" "333") |
| 15:18 | fliebel | &(map (partial subs "11222333") (range 2 6 3)(range 5 9 3)) |
| 15:18 | sexpbot | ⟹ ("222" "333") |
| 15:19 | fliebel | okay, the [[2 5] [5 8]] was the best |
| 15:19 | sritchie | on monday, I'm going to get the other two guys on my team switched over from python to clojure -- |
| 15:20 | sritchie | I'll include all of these as anonymous functions with documentation, to give them some samples of |
| 15:20 | sritchie | the many ways to slay a fn |
| 15:20 | fliebel | sritchie: What kind of stuff are you working on? |
| 15:21 | sritchie | fliebel: a hadoop project, using nathanmarz's cascalog, to predict deforestation rates in tropical areas |
| 15:21 | sritchie | we're using NASA's MODIS tile data, with a few other sources |
| 15:21 | sritchie | MODIS tiles supply their TileID in that "AAXXXYYY" format... I just needed a quick parser to get the x and y coordinates of a tile |
| 15:22 | fliebel | sritchie: So you're actually changing from Python to Clojure mid-project? |
| 15:22 | sritchie | fliebel: they've finished a first version of the project, that works with EC2, but it's quite fragile |
| 15:22 | sritchie | http://www.cgdev.org/section/initiatives/_active/forestmonitoringforactionforma |
| 15:23 | sritchie | fliebel: it's working with 1000m data -- nasa provides 500m and 250m, which will be far better, but the current system doesn't scale |
| 15:23 | sritchie | I'm redoing it in clojure, with hadoop -- it's probably going to clock in at 10% of the code, something like that |
| 15:23 | sritchie | what with shedding the file IO, etc |
| 15:26 | fliebel | sritchie: Very good work! |
| 15:27 | sritchie | fliebel: it's been really fun |
| 15:30 | arohner | is there a "drop-nth" function anywhere, or do I need to write it? i.e. returns a seq with the nth item missing |
| 15:30 | fliebel | sritchie: Do you also monitor forest *growth*? It would be interesting to compare. |
| 15:30 | sritchie | that's really interesting, I'm sure it would be |
| 15:30 | fliebel | (mapcat (partition 4)) |
| 15:30 | sritchie | we don't do that now |
| 15:31 | sritchie | but with clojure, everything becomes far more composable |
| 15:31 | sritchie | so we can play with different methods of analyses, or pull in new datasets with little effort |
| 15:31 | doubleagent | What is wrong here? https://gist.github.com/812758 |
| 15:32 | markskilbeck | I'm trying to generate a vector, x * y in length, of random numbers, though I don't know much (if any) Clojure. Any hints? Preferably *not* code. |
| 15:33 | doubleagent | oops |
| 15:33 | fliebel | sritchie: Great! Saying "Xkm^2 of deforestation" is not very meaningful without knowing how much new forest there is. ;) |
| 15:33 | markskilbeck | doubleagent: at a glance, I'd say its existence, or lack thereof, is the issue. |
| 15:33 | markskilbeck | ;) |
| 15:33 | sritchie | we're tracking the percent probability that a given square kilometer of forest has been deforested, and projecting that forward in time |
| 15:34 | Chousuke | markskilbeck: into, rand-int, take and repeatedly :P |
| 15:34 | sritchie | fliebel: but you're right! |
| 15:34 | markskilbeck | Chousuke: thank you, sir! |
| 15:35 | doubleagent | markskilbeck, lol. specifying the context should provide it. Just wanted to know if this is a Cake bug or what? |
| 15:35 | fliebel | Chousuke: into? |
| 15:36 | Chousuke | fliebel: for the vector. |
| 15:36 | Chousuke | fliebel: but I guess vec works too |
| 15:36 | fliebel | right |
| 15:37 | fliebel | Chousuke: Another thing to consider is, if he does not know Clojure very well, does he really want a vector. |
| 15:37 | markskilbeck | I'm right here, guys. |
| 15:37 | fliebel | markskilbeck: How is it going? |
| 15:38 | markskilbeck | fliebel: uno momento. |
| 15:42 | markskilbeck | ,(repeatedly 16 #(rand-int 10)) |
| 15:42 | clojurebot | (8 6 6 8 8 4 6 7 3 4 ...) |
| 15:42 | markskilbeck | Is that along the right lines? |
| 15:42 | Chousuke | yes. |
| 15:42 | markskilbeck | Badassery. |
| 15:42 | Chousuke | actually I forgot repeatedly takes a count argument too :) |
| 15:42 | markskilbeck | It being a vector isn't important, I don't think. |
| 15:42 | doubleagent | sorry about that - here's the issue: https://gist.github.com/812768 |
| 15:43 | markskilbeck | When should one user a vector, when should one use a list, etc.? |
| 15:43 | Chousuke | use seqs whenever you can |
| 15:43 | Chousuke | if you need random access, use vectors |
| 15:44 | Chousuke | vectors are also good for literals wherever you need a seq |
| 15:44 | markskilbeck | Chousuke: could you elaborate on that last statement? |
| 15:45 | Chousuke | most functions that want a seq actually call the seq function on the argument |
| 15:45 | Chousuke | so you can pass a vector instead and it works |
| 15:46 | markskilbeck | Ah, I see. |
| 15:46 | Chousuke | ie. you can just call (foo [1 2 3]) instead of (foo (list 1 2 3)) or something. |
| 15:46 | markskilbeck | Jolly good. |
| 15:47 | LauJensen | hiredman: Looks like you got caught with your hand in the cookie jar :(( http://www.youtube.com/watch?v=oJagxe-Gvpw |
| 15:49 | danlarkin | that's not very nice Lau |
| 15:49 | LauJensen | danlarkin: I didnt record it, its some security guy who put up honeypots |
| 15:49 | LauJensen | (promise) |
| 15:49 | doubleagent | solved it - it wasn't pulled into the namespace |
| 15:50 | danlarkin | oh, honeypotting is fine, but insulting hiredman is rude |
| 15:50 | LauJensen | danlarkin: hehe, thats funny you should say so |
| 15:50 | fliebel | ghe, is hiredman a haxor who runs perl all the time on windows SP3? |
| 15:50 | doubleagent | ninjudd, there's an error in your documentation |
| 15:52 | fliebel | LauJensen: Why is that funny? |
| 15:53 | LauJensen | fliebel: I think its fairly common knowledge that hiredman is one of the most rude and insulting personalities in the land of clojure, so objecting to having some fun with him is at best funny, at worst hypocritical |
| 15:55 | fliebel | … I never noticed that. |
| 15:55 | markskilbeck | Man I love the song on that video. |
| 15:56 | LauJensen | markskilbeck: yea its great |
| 15:59 | fliebel | http://xkcd.com/481/ |
| 16:01 | markskilbeck | Thankfully no one is around to hear me singing falsetto ^-^ |
| 16:01 | LauJensen | fliebel: haha, that would be great |
| 16:01 | LauJensen | markskilbeck: haha |
| 16:01 | fliebel | http://freetts.sourceforge.net/docs/index.php + sexpbot :) |
| 16:03 | jaskirat | fliebel: that would be fun! :) |
| 16:04 | fliebel | jaskirat: One would need to couple it with an upload service… but it's an interesting idea... |
| 16:06 | jaskirat | fliebel: hmm, soundcloud.com? |
| 16:08 | fliebel | jaskirat: http://code.google.com/p/soundcloudapi-java/ |
| 16:11 | fliebel | I'm all for it! $speak nickname -> soundcloud link of last message :D |
| 16:13 | jaskirat | fliebel: soundcloud + emms |
| 16:13 | jaskirat | fliebel: http://www.emacswiki.org/cgi-bin/wiki/EMMS |
| 16:13 | jaskirat | fliebel: never used emms though.. hmm |
| 16:15 | fliebel | time to go |
| 16:15 | fliebel | bye |
| 16:25 | shortlord | how can I evaluate a form in a macro? I am passing 2 forms, the first should be evaluated to decide whether to execute the second form or not |
| 16:26 | Chousuke | why not just generate an if expression? :/ |
| 16:29 | Chousuke | if you want a conditional expansion you can use eval but be aware that it's limited |
| 16:29 | shortlord | Chousuke: doh, of course! thx a lot, it works now |
| 16:29 | sritchie | hey all -- if i have something like this -- |
| 16:29 | sritchie | ,((juxt #(* 2 %) #(vector 2 %)) 3) |
| 16:29 | clojurebot | [6 [2 3]] |
| 16:29 | sritchie | ie, one function that returns a number, one that returns a collection, |
| 16:29 | shortlord | Chousuke: I still have quite a few problems to think of macros purely in terms of code transformation |
| 16:29 | jassi | shortlord: some thing like (defmacro x [f1 f2] `(if (f1)(f2))) |
| 16:29 | jassi | |
| 16:29 | Chousuke | shortlord: yeah, macros don't really "execute" code. |
| 16:30 | sritchie | what's the best way to end up with a list of all of the numbers, merged? |
| 16:30 | Chousuke | shortlord: they just generate it and the result is what gets run at runtime. |
| 16:30 | sritchie | to cons or merge them all, and end up with a list one deep |
| 16:30 | shortlord | sritchie: what do you mean, 'merged'? you can use 'flatten' to put all the elements into one big list |
| 16:30 | jassi | shortlord: oops that should be ~f1 & ~f2 |
| 16:31 | sritchie | shortlord: flatten sounds right |
| 16:32 | shortlord | Chousuke: yeah, macros definitely are a fascinating topic. I really need to get a bit more practice with them |
| 16:33 | Chousuke | shortlord: honestly the trickiest thing about macros is knowing when to use them :) |
| 16:35 | shortlord | Chousuke: that's what I am still figuring out. So far I have been using them as little as possible, preferring functions wherever possible and just using them in cases like this where the arguments must not be evaluated |
| 16:38 | Chousuke | shortlord: that's a good rule of thumb :P |
| 16:38 | shortlord | hah, nice :D |
| 16:39 | jaskirat` | whats the best way to look up documentation for clojure functions while inside the repl? i thought the :doc would be the best way but doesnt seem to work. like python has help() or __doc__, something like that? |
| 16:40 | kjeldahl | ,(doc vec) |
| 16:40 | clojurebot | "([coll]); Creates a new vector containing the contents of coll." |
| 16:40 | shortlord | jaskirat`: doc should work, simply do (doc some-name) |
| 16:40 | jaskirat` | thanks guys |
| 16:40 | jaskirat` | i was trying (:doc blah) |
| 16:41 | amac | you can also use (source some-name) if you need more information |
| 16:41 | amac | will show you the implementation |
| 16:42 | jaskirat` | amac: hmm, that should be usefull sometimes |
| 16:43 | amac | jaskirat`: if you wanted to learn more about macros, source some macros for inspiration :) |
| 16:44 | jaskirat` | amac: :) |
| 20:52 | hiredman | https://github.com/ztellman/lamina/blob/master/src/lamina/core/fn.clj#L17 well that looks familiar |
| 21:36 | sritchie | hey all -- is it possible to define an array of unsigned integers in java? |
| 21:37 | brehaut | sritchie: if there are unsigned integer primatives (i dont think there are) then yes, otherwise no? |
| 21:37 | sritchie | brehaut: I didn't think there were unsigned int primitives, just wanted to check if anyone had had to deal with that issue |
| 21:38 | brehaut | people must have dealt with it in javaland at least |
| 21:38 | sritchie | the goal is to get out of javaland as fast as possible! |
| 21:39 | sritchie | brehaut: in any case, problem avoided, the REPL tells me this method will read into a java primitive byte array |
| 21:39 | sritchie | progress! |
| 21:52 | sritchie | when did clojure start supporting doc strings on def? |
| 21:53 | sritchie | I'm using leiningen, with 1.2, and still getting "Too many arguments to def" |
| 22:04 | mreynolds | sritchie: You may be interested to know that Java bytes are also signed http://www.jguru.com/faq/view.jsp?EID=13647 |
| 22:04 | mreynolds | I think it's a bytecode thing. Anyway, if you have something that works, awesome. |
| 22:06 | sritchie | mreynolds: no, that's helpful. I'm interacting with a java object, a dataset, that needs to take an array and read into it -- it takes an optional parameter for datatype, and I know that the source data is either an unsigned byte, signed int (16 bits) or unsigned int |
| 22:07 | sritchie | the default, with that parameter left out, is an array of 32 bit ints |
| 22:07 | sritchie | which makes sense, given that we're talking about a java API |
| 22:08 | mreynolds | sritchie: I have strong memories of Java only having signed types, primarily because of the simplicity of dealing with fewer types at the bytecode level, but don't hold me to that. Are you just passing the data through, or are you trying to deal with it in clojure/java? |
| 22:09 | sritchie | the ReadRaster method on this object takes that int array and a few other things, and fills it with ints -- then I'm creating a lazy seq with (indexed (partition chunk-size array)) |
| 22:09 | sritchie | which serializes the data back out into hadoop-land |
| 22:53 | sritchie | has anyone had trouble with a docstring on def? |
| 22:53 | sritchie | defn works great, of course, but def won't accept one -- i get a "too many arguments to def" error |