# HG changeset patch # User Robert McIntyre # Date 1330606559 25200 # Node ID b8bbb0dbda7b2f6aad0cd5a9ad650854a1848d38 # Parent fca75c0e8f40062b3276d94f481b0f16db12886b# Parent 8565803376a42f06cb06ec2fdd2551807a06d7ae merging diff -r 8565803376a4 -r b8bbb0dbda7b readme.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/readme.txt Thu Mar 01 05:55:59 2012 -0700 @@ -0,0 +1,2 @@ +these are various special commands in clojure +that are near and dear to my heart diff -r 8565803376a4 -r b8bbb0dbda7b src/fanfiction/stories.clj --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/fanfiction/stories.clj Thu Mar 01 05:55:59 2012 -0700 @@ -0,0 +1,196 @@ +(ns fanfiction.stories) + +(use 'clojure.java.io) + +(import org.htmlcleaner.HtmlCleaner) +(import org.htmlcleaner.TagNode) +(import java.io.File) +(import java.net.URL) +(use 'clojure.contrib.def) + +(def mlp + (URL. "http://www.fanfiction.net/cartoon/My_Little_Pony")) +;; It Takes a Village +;; http://www.fanfiction.net/s/7490980/1/It_Takes_a_Village +;; Reviews: 1058 +;; Chapters: 17 +;; Progress +;; http://www.fanfiction.net/s/6982210/1/Progress +;; Reviews: 612 +;; Chapters: 27 +;; On a Cross and Arrow +;; http://www.fanfiction.net/s/7211729/1/On_a_Cross_and_Arrow +;; Reviews: 324 +;; Chapters: 12 +;; Growing Pains +;; http://www.fanfiction.net/s/7252679/1/Growing_Pains +;; Reviews: 223 +;; Chapters: 23 +;; My Little Pony: FiM The Romancing Quest +;; http://www.fanfiction.net/s/7171004/1/My_Little_Pony_FiM_The_Romancing_Quest +;; Reviews: 174 +;; Chapters: 13 +;; Don't Let the Sun Catch You Crying +;; http://www.fanfiction.net/s/7032385/1/Dont_Let_the_Sun_Catch_You_Crying +;; Reviews: 165 +;; Chapters: 6 + + +(def chobits (URL. "http://www.fanfiction.net/anime/Chobits/")) +;; TTTRRRRRRAAAAAAASSSSSSHHHHH!!!!!!! + +(def ccs (URL. "http://www.fanfiction.net/anime/Card_Captor_Sakura/")) +;; Jagged Amber +;; http://www.fanfiction.net/s/1348047/1/Jagged_Amber +;; Reviews: 4767 +;; Chapters: 25 +;; Misty Dreams +;; http://www.fanfiction.net/s/1250008/1/Misty_Dreams +;; Reviews: 4460 +;; Chapters: 27 +;; Butterflies +;; http://www.fanfiction.net/s/1667519/1/Butterflies +;; Reviews: 3029 +;; Chapters: 36 +;; Mischievous Love +;; http://www.fanfiction.net/s/1020198/1/Mischievous_Love +;; Reviews: 3013 +;; Chapters: 25 +;; Black Wings +;; http://www.fanfiction.net/s/2737015/1/Black_Wings +;; Reviews: 2822 +;; Chapters: 23 +;; Cherry, My Love +;; http://www.fanfiction.net/s/968234/1/Cherry_My_Love +;; Reviews: 2612 +;; Chapters: 26 +;; Deeper +;; http://www.fanfiction.net/s/4027405/1/Deeper +;; Reviews: 2260 +;; Chapters: 26 +;; Through A Looking Glass +;; http://www.fanfiction.net/s/2729427/1/Through_A_Looking_Glass +;; Reviews: 2009 +;; Chapters: 9 +;; Butterflies: In Spring +;; http://www.fanfiction.net/s/2284162/1/Butterflies_In_Spring +;; Reviews: 1815 +;; Chapters: 17 +;; The New Trials of Card Captor Sakura and Friends +;; http://www.fanfiction.net/s/197453/1/The_New_Trials_of_Card_Captor_Sakura_and_Friends +;; Reviews: 1794 +;; Chapters: 111 +;; Ice Queen +;; http://www.fanfiction.net/s/1927065/1/Ice_Queen +;; Reviews: 1725 +;; Chapters: 38 +;; Crystal Tears +;; http://www.fanfiction.net/s/751067/1/Crystal_Tears +;; Reviews: 1623 +;; Chapters: 26 + + +(def bible (URL. "http://www.fanfiction.net/book/Bible/")) +;; TTTRRRRRRAAAAAAASSSSSSHHHHH!!!!!!! + +(def dark (URL. "http://www.fanfiction.net/book/His_Dark_Materials/")) +;; TTTRRRRRRAAAAAAASSSSSSHHHHH!!!!!!! + +(def junjo (URL. "http://www.fanfiction.net/anime/Junjo_Romantica/")) +;;The Talk +;; http://www.fanfiction.net/s/4351277/1/The_Talk +;; Reviews: 250 +;; Chapters: 1 + +(def rye (URL. "http://www.fanfiction.net/book/Catcher_in_the_Rye/")) +;; TTTRRRRRRAAAAAAASSSSSSHHHHH!!!!!!! + + +(defn tags-by-name + [#^TagNode node #^String element] + (seq (.getElementListByName node element true))) + +(defn-memo parse + "parse a web page using HtmlCleaner" + [#^URL url] + (println "parsing" (.getPath url)) + (if (not (nil? url)) + (.clean (HtmlCleaner.) (input-stream url)))) + +(defn attributes + "get a hash map of the attributes of an element" + [#^TagNode node] + (into {} (.getAttributes node))) + +(def fanfiction-base "http://www.fanfiction.net") + +(defn next-fanfiction-url + "get the next url to visit from the current page we are visiting" + [#^URL url] + (let + [;; extract all links + links (tags-by-name (parse url) "a") + ;; extract the "Next" link + next-node (first (filter #(re-matches #".*Next.*" (.getText %)) links))] + (if (not (nil? next-node)) + + (URL. (str fanfiction-base + ((attributes next-node) "href")))))) + +(defn get-stories [#^URL url] + (filter + #(= "z-list" ((attributes %) "class")) + (tags-by-name (parse url) "div"))) + + +(defn story-url [#^TagNode node] + (str fanfiction-base + ((attributes + (first (tags-by-name node "a"))) "href"))) + +(defn story-desc [#^TagNode node] + (.getText (second (tags-by-name node "div")))) + +(defn story-reviews [#^TagNode node] + (Integer/parseInt + (get + (re-matches #".*Reviews: (\d+).*" + (story-desc node)) 1 "0"))) + +(defn story-chapters [#^TagNode node] + (Integer/parseInt + (get + (re-matches #".*Chapters: (\d+).*" + (story-desc node)) 1 "1"))) + +(defn story-title [#^TagNode node] + (str (.getText (first (tags-by-name node "a"))))) + +(defn all-stories [n #^URL start-url] + (loop [stories [] + index 0 + current-url start-url] + (let [stories* (concat stories (get-stories current-url)) + next (next-fanfiction-url current-url)] + (if (and (not= index n) + (not (nil? next))) + (do + (recur stories* (inc index) next)) + stories*)))) + +(defn best-stories [n search-limit #^URL start-url] + (dorun + (map + #(println (story-title %) "\n" + (story-url %) "\n" + " Reviews: " (story-reviews %) "\n" + " Chapters:" (story-chapters %)) + + (take n (reverse + (sort-by + #(/ (story-reviews %) (inc (story-chapters %))) + ;;story-reviews + (all-stories search-limit start-url))))))) + + + \ No newline at end of file diff -r 8565803376a4 -r b8bbb0dbda7b src/rlm/function_utils.clj --- a/src/rlm/function_utils.clj Tue Feb 28 13:26:34 2012 -0600 +++ b/src/rlm/function_utils.clj Thu Mar 01 05:55:59 2012 -0700 @@ -8,7 +8,7 @@ (def void ::void) -(defn mix +(defn race "Takes any number of mathematically equal functions with possibly different run-times and returns a function that runs each in a separate thread, returns the result from @@ -23,40 +23,33 @@ (dorun (map future-cancel futures)) answer)))) -;; (defn mix-threads -;; " Takes any number of pure functions that take the same arguments and -;; compute the same value and returns a function that runs each in a separate -;; thread, returns the result from the first thread which finshes, and cancels -;; the other threads. Explicitly uses nasty Threads. - -;; For example: -;; (do -;; (defn fun1 [] (Thread/sleep 5000) 5) -;; (defn fun2 [] (Thread/sleep 700000) 5) -;; (time ((mix fun1 fun2)))) - -;; Returns: -;; | Elapsed time: 5000.66214 msecs -;; 5" -;; [& functions] -;; (fn [& args] -;; (let [result (prof :create-atom (atom void)) -;; threads -;; (prof :create-threads (map -;; (fn [fun] -;; (Thread. -;; (fn [] -;; (try (let [answer (apply fun args)] -;; (reset! result answer)) -;; (catch Exception _ nil))))) -;; functions))] - -;; (prof :start-threads (dorun (map #(.start %) threads))) -;; (prof :loop (loop [] -;; (if (= (deref result) void) -;; (recur) -;; (do (prof :kill-threads (dorun (map #(.stop %) threads))) -;; (prof :return (deref result))))))))) +(defn race-pred + "Takes any number of mathematically equal functions with possibly + different run-times and returns a function that runs each in a + separate thread, and returns the first available result x for + which (pred x) returns true (or not-valid, if (pred x) returns + false on all the results). Cancels the other threads upon + returning early." + {:author "Robert McIntyre"} + ([pred not-valid & functions] + (fn [& args] + (let [result (promise) + latch (java.util.concurrent.CountDownLatch. + (count functions)) + failure-case (future (.await latch) + (deliver result not-valid)) + futures + (doall + (cons failure-case + (for [fun functions] + (future + (let [answer? (apply fun args)] + (if (pred answer?) + (deliver result answer?) + (.countDown latch))))))) + answer @result] + (dorun (map future-cancel futures)) + answer)))) (defmacro defmix " Defines a function from any number of pure functions that take the same diff -r 8565803376a4 -r b8bbb0dbda7b src/rlm/light_base.clj --- a/src/rlm/light_base.clj Tue Feb 28 13:26:34 2012 -0600 +++ b/src/rlm/light_base.clj Thu Mar 01 05:55:59 2012 -0700 @@ -162,9 +162,6 @@ cos exp log pow rint sin tan]] [functor :only [fmap]]] - '[matchure :only [fn-match defn-match if-match when-match cond-match]] - - ;; '[letd :only [with-separator display-local-bindings letd]] '[clojure diff -r 8565803376a4 -r b8bbb0dbda7b src/rlm/meditations.clj --- a/src/rlm/meditations.clj Tue Feb 28 13:26:34 2012 -0600 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,155 +0,0 @@ -(ns rlm.meditations) - -(defn ten-times - "Why do people have to argue so much? I feel so alone and - angry. Clojure helps me to calm down. Just today I went to pour - house, and al through the walk, there was so much negativity. Most - of this comes from Mike, I think. He himself feels insecure - because Duncan and Acrefoot were talking about inodes and he didn't - know what they were. Duncan was talking about a ray tracer which - would be able to cmompute new frames in real time. I thought that - sounded neat, but I don't think 20 cores would be enough to really - get it right.. You probably need a whole separate computer - archeticture to actualy do it, like the ray tracing FPGA setup that - some peoplle in 6.375 made last semester. When we gmade it to Pour - House, there seemed to be some event going on. We went downstairs - and found that it was Amnesty International, MIT division, holding a - petition for the conditional release of some journalists from - somewhere. The girl wwho introduced us to the program was drunk. - There were no tables, bbut the bar was mostly empty. I suggested - to Mike that we might sit at the bar, but he said that that would - kill the experience for him since then we would be unable to talk to - everyone eexcept those next to us. Then he told me that If I wanted - t sit down that I could just do that. He was saying that I didn't - care about anything but food and that it woI wasn't really part of - the group anyway, so it was really just up to me wherever I wanted - to sit. I found this to be very cruel and was sad. He didn't even - realize that he made me sad, which means he can't put himself in my - shoes even a bit. Then he got into an argument with acrefoot about - whether there was a croud above us or not. Acrefood had not - nnoticed the croud when we walked in, so he thought we might go up - thereand see if we could get a table. Mike kept arguing about which - way was the front or back of the store because he didn't remember - the orientation of the upper level after we walked down the stairs. - ThBoth men were missing something that the other knew, but the - difference between acrefoot and Mike was that Mike in every word he - said was trying to put acrefoot down and belittle his intelligence - by arguing with him, while acrefoot tried to explain which way was - the front many times whithout changing the subject. Finally - acrefoot found out about the croud, but by that time, he was - upsetand wanted to go up to the upper level anyway just to get away - from Mike. I wanted to go too and said so. Mike dismissively said - that it was OK to go up if we wanted, and I started to follow - acrefoot to the stairs. But then acrefoot asked Chris if he wanted - to go with him. Am I invisible or something? Acrefood did not mean - this out of malice, he just literally din't see me and so asked - chris. Still, this made me feel bad because I was already feeling - bad. Acrefoot and I went upstairs and found that the croud which was - there prevented us from getting a seat. We went back down and there - was Mike, sitting at a table that had just cleared. People started - to sit down at the table, and then Duncan sat next to Mike and - l positioned his body in such a way that he took up the remainder of - the three person booth seat. Yen-yu told him to move but he acted - like he couldn't hear her. I was standing right next to him and - obviously (to me and most people) wating for my seat, but he would - not move. This is Duncan being his normal mildly-autustic self. I - can't blame him for it, as he just gets so focoused sometimes that - he doesn't know how to deal with people. I have some of the same - problems. I like Duncan, but what he did made me feel sad even - more, because I was already feeling upset at his point. With three - random acts of meanness and inconsiderateness behind me and nothing - that good to look forward to, I just left. I didn't feel like - talking to anyone anymore, but wanted to be by myself. I hate how - Mike dismisses me, how his personality is alined to casual meanness, - and how he doesn't even have enough self reflection to know when he - is hurting others. I hope that he matures more and becomes a very - nice person, but I worry about him. I think I think about him too - much.. I'm becomming more widthdrawsn from interacting with these - nerds with half-baked social programming. It's hard living with - people who can casually just ithrow insults at you that would - demand a fight anywhere else. Where people can ignore you if they - think you're less intelligent than they are. I don't like it on - tetazoo. I don't like myself, and I don't like the people here, so - what am I supposed to do? I have to learn to deal or remove myself - from this situation. I think I'd be sad if I was all alone, though. - I left the resturant. I just didn't want to talk t o anyone - anymore. I wanted to be alone. I whish Dylan was here, or even - anothere copy of myself to talk to. I'm so lonely.. They've gotten - into my head. When I type that last sentence, I hear \"oh, the poor - buy is sad, no one loves him. you're not good enough to be loved.\" - That part of me is not helpful. It's echos of people being mean to - me in the past. If I was here to talk to, what would I say? I - would say, 'what's stopping you from just finding a new life, or - just being they type of person that people like and who gets along - wwith everyone? - I'd like to do this but it's so hard to just do a 180 on my - emotions.. As I was walking down the street, I overheard arguing - people and happy people in equal measure. At the time all I - processed were the angry , arguing people, but the goodness was - there too. So, it's just a matter of who you hang out with? Maybe - the clojure community can be ,y community? At least I have one good - friend in Pablo. Dylan is good but he's far away and has a mountain - of his owwn problems he has to work through before he can do - anything with me..I feel lame, because I've been around critical - people for too long. I want to change, become more affable, but I - don't know how. What should I do now? I think I'll go swimming. - But, I don't think they'll let me actually go. I loaned my ID card - to pablo. - This is an experiment in nested closures that makes a function that - must be called ten times to yield its value. It reminds me of - taylor aproximations to a sin wave, which are only accurate for a - finite stretch of the reals, but that stretch can be made as long - as you want by adding more terms." - [] - (let [count 10 - return (fn return [n] - (if (= n 0) "the end" - (fn [] (return (dec n)))))] - (return (dec count)))) - -(defn onion [f n] (if (zero? n) f (recur (fn[]f) (dec n)))) - -(defn onion++[f n] (if (zero? n) f (recur (fn[& _]f) (dec n)))) - -(defn onion+ [f n] (reduce (fn [f _] (fn [] f)) f (range n))) - -(defn onion-n [n f] (onion f n)) - - -(defn ttt [f & knocks] - ( - (cond (empty? knocks) f - ( - - -(defn onion++ [f & knocks] - (let[forever-onion (fn g[& _]g)] - (reduce (fn [g knock] - (fn[& args] (if (=(first args) knock) g forever-onion))) - f knocks))) - - - -(defn treasure - ([X n] - (fn[& args] - (let [k (count args)] - (cond - (< k n) (println "It's to your right!") - (> k n) (println "It's to your left!") - (= k n) (do (println "Apply force here to dig!") (delay X)))))) - ([X n & ns] - (apply treasure (treasure X n) ns))) - - -(def X (treasure "I'm treasure!" 5 3 2 6)) -(defn soln [] - (force ((force ((force ((force (X 1 1 1 1 1 1 ))1 1 )) 1 1 1)) 1 1 1 1 1 ) )) - - -(defn onion* [f n] - (if (zero? n) - f - (fn [] (onion* f (dec n))))) - - diff -r 8565803376a4 -r b8bbb0dbda7b src/rlm/qotd.clj --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/rlm/qotd.clj Thu Mar 01 05:55:59 2012 -0700 @@ -0,0 +1,167 @@ +(ns rlm.qotd) + +;;; There is a pair of integers, 1 < m < n, whose sum is +;;; less than 100. + +;; These constraints makes a triangular sort of pattern. +(defn generate-valid-numbers + [n] + (filter (fn [[a b]] (< a b)) + (map #(vector % n) (range 2 (- 150 n))))) + +(def squish (partial reduce concat)) + +(def p0 (squish (map generate-valid-numbers (range 2 149)))) + +;;; Person S knows their sum, but nothing else about them. +;;; Person P knows their product, but nothing else about +;;; them. + +;;; Now, Persons S and P know the above information, and +;;; each one knows that the other one knows it. They have +;;; the following conversation: + +;;; P: I can't figure out what the numbers are. + +;; Eliminate pairs with a unique product. + +(defn group-by + "Split coll into groups where the f maps each element in a + group to the same value in O(n*log(n)) time." + [f coll] + (partition-by f (sort-by f coll))) + +(defn unique-by + "Remove all elements a,b of coll that for which + (= (f a) (f b)) in O(n*log(n)) time." + [f coll] + (squish (filter #(= (count %) 1) (group-by f coll)))) + +(defn multiple-by + "Keep all elements a,b of coll for which + (= (f a) (f b)) in O(n*log(n)) time." + [f coll] + (squish (filter #(> (count %) 1) (group-by f coll)))) + +(defn prod [[a b]] (* a b)) + +(def p1 (multiple-by prod p0)) + +;;; S: I was sure you couldn't. + +;; Each possible sum s has a set of possible pairs [a b] +;; where (= s (+ a b)). Partition p0 (since S *was* sure) by +;; sum, and keep those pairs that belong in partitions where +;; each pair in that partition is in p1. (since the only way +;; he could be *sure*, is if every possibility for a given +;; sum had an ambiguous product. + +(defn sum [[a b]] (+ a b)) + +(def p2 + (squish + (filter + (partial every? (set p1)) + (group-by sum p0)))) + + +;;; P: Then I have. + +;; Keep those pairs that have a unique product out of the +;; ones that are left. + +(def p3 + (unique-by prod p2)) + + +;;; S: Then I have, too. + +;; Keep those pairs that have a unique sum out of the +;; ones that are left. + +(def p4 (unique-by sum p3)) + + +(defn solve [limit] + (let [generate-valid-numbers + (fn + [n] + (filter (fn [[a b]] (< a b)) + (map #(vector % n) + (range 2 (- limit n))))) + p0 + (squish (map generate-valid-numbers + (range 2 (dec limit)))) + p2 + (squish + (filter + (partial every? (set p1)) + (group-by sum p0))) + + p3 (unique-by prod p2)] + (unique-by sum p3))) + +;;; Dylan START! +(defn results [beez] + (let + [ + pairs + (for [m (range 2 beez) + n (range (inc m) beez)] + [m n]) + + singleton? (comp zero? dec count) + + sum (fn [[x y]] (+ x y)) + product (fn [[x y]] (* x y)) + + inverse-sum + (fn [s] + (filter #(= s (sum %)) pairs)) + + inverse-product + (fn [p] + (filter #(= p (product %)) pairs)) + ] + + + (->> + pairs + + (filter #(< (sum %) beez)) + + ;; P: I cannot find the numbers. + (remove (comp singleton? + inverse-product + product)) + set + + ;; S: I was sure you couldn't. + ((fn [coll] + (filter + (comp (partial every? coll) + inverse-sum + sum) + coll))) + set + + ;;P: Then I have. + ((fn [coll] + (filter + (comp singleton? + (partial filter coll) + inverse-product + product) + coll))) + set + + ;;S: Then I have, too. + ((fn [coll] + (filter + (comp singleton? + (partial filter coll) + inverse-sum + sum) + coll))) + + ))) \ No newline at end of file diff -r 8565803376a4 -r b8bbb0dbda7b src/rlm/quick.clj --- a/src/rlm/quick.clj Tue Feb 28 13:26:34 2012 -0600 +++ b/src/rlm/quick.clj Thu Mar 01 05:55:59 2012 -0700 @@ -30,7 +30,6 @@ [map-utils :only [map-keys map-vals filter-keys filter-vals]] [decorators :only [preserve-meta]]] - '[matchure :only [fn-match defn-match if-match when-match cond-match]] '[clojure.contrib [combinatorics :only [cartesian-product subsets selections diff -r 8565803376a4 -r b8bbb0dbda7b src/rlm/rlm_commands.clj --- a/src/rlm/rlm_commands.clj Tue Feb 28 13:26:34 2012 -0600 +++ b/src/rlm/rlm_commands.clj Thu Mar 01 05:55:59 2012 -0700 @@ -2,7 +2,6 @@ (:use rlm.ns-rlm) (:use clojure.java.javadoc)) - ;; (defn current-directory [] (ds/file-str "/home/r/mobius")) ;; (defn file-re [regex & {:keys [dir recurse] :or @@ -69,16 +68,18 @@ ;; (defn keymap-normal [] ;; (rlm.shell-write/sw "xmodmap" "/home/r/.xmodmap.normal")) -;; (defn rlm [] -;; (clojure.core/require 'rlm.light-base) -;; (rlm.ns-rlm/ns-clone rlm.light-base)) - +(defn javadoc [target] + (binding + [clojure.java.browse/*open-url-script* + "/home/r/proj/repl/get-webpage.pl"] + (clojure.java.javadoc/javadoc target))) + (defn help "load a bunch of really useful help functions" [] (use '[rlm - [function-utils :only [mix defmix]] + [function-utils :only [race race-pred defmix]] [rlm-commands :only [undef ns-reset ns-nuke reload re]] [ns-rlm :only [ls]] @@ -87,7 +88,7 @@ ;;[shell-write :only [sw]] ;;[classpath-utils :only [classpath add-to-classpath]] [dreams :only [megadef silence]] - [map-utils :only [map-keys map-vals filter-keys filter-vals]] + [map-utils :only [map-keys filter-keys filter-vals]] [visualize :only [visual]] [identify :only [identify]]] @@ -95,16 +96,19 @@ ;; TODO find replacement for show '[clojure - [repl :only [source]]] - '[clojure.java - [javadoc :only [javadoc add-local-javadoc]]]) - (clojure.java.javadoc/add-local-javadoc "/home/r/cortex/jme3/dist/javadoc") - (clojure.java.javadoc/add-local-javadoc "/home/r/roBin/jdk6-docs/docs/api") - (clojure.java.javadoc/add-local-javadoc - "/home/r/roBin/lpsolve-doc/lpsolve.sourceforge.net/5.5/Java/docs/api") - (clojure.java.javadoc/add-local-javadoc - "/home/r/roBin/lpsolve-doc/lpsolve.sourceforge.net/5.5/Java/docs/api") - + [repl :only [source]]]) + (clojure.java.javadoc/add-local-javadoc + "/home/r/proj/jMonkeyEngine3/dist/javadoc") + (clojure.java.javadoc/add-local-javadoc + "/home/r/java/jdk6u30-docs/api") + (clojure.java.javadoc/add-local-javadoc + "/home/r/java/jdk6u30-docs/jdk/api") + (clojure.java.javadoc/add-local-javadoc + "/home/r/java/jdk6u30-docs/jre/api") + (clojure.java.javadoc/add-local-javadoc + "/home/r/proj/jmeCapture/docs") + (clojure.java.javadoc/add-local-javadoc + "/home/r/java/tritonus.sourceforge.net/apidoc") nil) diff -r 8565803376a4 -r b8bbb0dbda7b src/rlm/visualize.clj --- a/src/rlm/visualize.clj Tue Feb 28 13:26:34 2012 -0600 +++ b/src/rlm/visualize.clj Thu Mar 01 05:55:59 2012 -0700 @@ -19,8 +19,7 @@ (defmethod visual ImagePlus [image] - (.show image) - image) + (.show image) image) (defmethod visual (class 4) [color]