#clojure logs

2010-05-14

00:39defnaww ninjudd left before i could explain that all of the examples have results
00:39defnyou just gotta click em
00:39defnarohner: haha
00:39defnthe sum of digits 0 to n with a reduce => WARNING
00:51defnIs it rude to push jars to clojars without maintainer approval
00:52technomancydefn: only if you don't alter the groupid
00:52defnnoted
00:52defntechnomancy: where do i edit that bad boy?
00:52defnjust change the defproject ... to foo.bar.project-name
00:53Raynes$mail ninjudd All of the examples have results. You just have to click them.
00:53RaynesBug!
00:53technomancyyup
00:56RaynesMethinks the mail database got corrupted.
00:58RaynesEh. Something looks broken in c.c.io.
00:59Raynes"java.lang.IllegalArgumentException: No matching method found: write for class java.io.BufferedWriter"
00:59Raynes"at clojure.contrib.io$spit__2167.invoke(io.clj:328)"
01:02RaynesGuess Stuart broke it.
01:15RaynesThis makes little sense.
01:15Raynesspit works fine from the REPL, but not from sexpbot/clj-config.
01:20technomancyany more contrib forms that clojure-mode should be smarter about indenting?
01:20technomancycurrently have dotrace, handle-case, and handle
01:20technomancyraek: sorry for ignoring your clojure-mode patch for so long. it got lost under a big pile of stuff
01:21defnclojure is 1.2.0-master-SNAPSHOT and contrib is 1.2.0-SNAPSHOT, yes
01:22technomancyt
01:22technomancywait, I mean true
01:22technomancydang elisp
01:22defn:)
01:23RaynesWhat a weird bug.
01:24RaynesCheck this out: if you do (spit "omgfile" {:wtf "omg"}), it will throw "java.lang.IllegalArgumentException: No matching method found: write for class java.io.BufferedWriter"
01:24RaynesI didn't realize I wasn't str-ing it before, so that fixed it.
01:24technomancytry {:wtf "bbq"}
01:24RaynesSame thing! Weird!
01:24defnlol
01:24Raynes;)
01:25technomancy{:rolf "copter"} maybe?
01:25technomancy:rofl
01:25defn{:loller "skates"}
01:25defnRaynes: is that weird? I didn't think you could just write a data structure out like that
01:25technomancyRaynes: check the mailing list; some of the semantics of io got changed to quit using PrintWriters and got reimplemented with protocols
01:25RaynesIt worked before the last commit.
01:26defnRaynes: are you trying to serialize?
01:26RaynesI understand how it wouldn't work.
01:26RaynesBut I don't understand why it threw such a useless error.
01:26RaynesIt had me going for a whiler.
01:26Rayneswhile*
01:26Raynesdefn: clj-config. It uses Clojure data structures for configuration files.
01:27defndont you want something like (dorun (with-out-writer (java.io.File. "foo") (binding *print-dup* true] (prn {:foo "bar"})))
01:27defn)
01:27RaynesNo, I don't.
01:27defnoh...
01:27defnwell then nevermind then!
01:27Raynes$mail ninjudd All of the examples have results. You just have to click them.
01:27sexpbotMessage saved.
01:28RaynesThat's better. :D
01:28defnsince you're from AL you should have said 'em instead of them
01:28RaynesI don't have much of an accent. :p
01:28RaynesLauJensen Jr.
01:28defnAll them thar examples have results! Ya just gotta click 'em!
01:28defnTarnashuns!
01:29RaynesYa'll just gotta click 'em!*
01:29RaynesI hate "Ya'll", but what I hate worse is these illiterate hicks not bothering to put the apostrophe there.
01:31Raynesdefn: Want a preview of the new tryclojure? :>
01:31defnsure
01:31technomancyjust submitted updated slime, clojure-mode and clojure-test-modes to elpa
01:31technomancyhopefully they will be available soon
01:31defntechnomancy: sweet
01:31Raynesdefn: http://4.252.15.242:8801/
01:31defni run clojure-mode from a git repo anywho
01:32defnRaynes: is this on your 56k?
01:32technomancydefn: well now the folks who are too lazy to do that will benefit
01:32RaynesI'm working on some better stuff to do with the text-field (like probably get rid of it and make it look like an actual REPL.).
01:32RaynesYes.
01:32RaynesMinus that last period in the parens there. :>
01:32defnRaynes: nice work buddy
01:33RaynesThat's why I said preview. It's obviously going to be slow right now. :p
01:33defnRaynes: can i make one minor stylistic suggestion
01:33RaynesSure.
01:33defndont post anything that takes people to Reddit
01:33RaynesO_o?
01:33defnReddit sucks. ycombinator is the only way to roll
01:33RaynesIt's the Clojure reddit. :o
01:34defnyeah but it's still reddit
01:34defnreddit is filled with so much junk
01:34technomancyRaynes: can't enter anything here
01:34RaynesPatches welcome. :)
01:34technomancyoh, nm; just took a while
01:34RaynesYeah, sorry. Slow webs.
01:34Raynesdefn: I got the scrolling to work on my Chrome now too. JQuery made it work for some reason.
01:34technomancyRaynes: one request: can you make clojure.lang.PersistentQueues show as queue-fish?
01:35technomancybecause that would really make my day
01:35clojureboteveryday is Rich Hickey Appreciation Day
01:35Rayneswut
01:35technomancythat too
01:35technomancy,Q
01:35clojurebot<-nil-<
01:35RaynesI think there was an implicit joke there that I missed.
01:35technomancy,clojure.lang.PersistentQueue/EMPTY
01:35clojurebot<-nil-<
01:35technomancy,(conj (conj clojure.lang.PersistentQueue/EMPTY 12) 9)
01:35clojurebot<-(12 9)-<
01:36RaynesThats interesting.
01:36technomancybehold, the legendary queue-fish
01:37technomancyit's a print-method hack that got added to clojurebot
01:40TheBusbyfor some reason that reminds me of William Tell's arrow
01:42defn,(conj clojure.lang.PersistentQueue/EMPTY \\\\\\\\\\\\\)
01:42clojurebotEOF while reading
01:43defn,(conj clojure.lang.PersistentQueue/EMPTY \\\\\\\\\\\\\/)
01:43clojurebot<-(\\ \\ \\ \\ \\ \\ \/)-<
01:43defnaww that's no good
01:43defn,(conj clojure.lang.PersistentQueue/EMPTY "\\")
01:43clojurebot<-("\\")-<
01:43defn,(conj clojure.lang.PersistentQueue/EMPTY [-_-])
01:43clojurebotjava.lang.Exception: Unable to resolve symbol: -_- in this context
01:44defn</spam>
01:45technomancy,(conj clojure.lang.PersistentQueue/EMPTY '^_^)
01:45clojurebotUnmatched delimiter: )
01:45technomancy,(conj clojure.lang.PersistentQueue/EMPTY (symbol "^_^") )
01:45clojurebot<-(^_^)-<
01:46technomancyok, g'night
02:17replacawow, folks are really fascinated with the fish :)
02:17defnit's novel, and it's late :)
02:41jColeChangedHi, I'm just starting to learn clojure and ran into a bit of a bump.
02:43zmilaJColeChanged - what's the problem?
02:43tomojwhat's the bump shaped like?
02:43jColeChangedIts shaped like a tree I think.
02:44jColeChangedhttp://pastebin.org/234696
02:45jColeChangedI'm trying to so recursion and finding myself getting a stackoverflow error. I tried switching it to use recur and got the same problem.
02:45jColeChangedWell, a different problem, but it still didn't run.
02:46tomojside note: you probably want defn
02:46tomojand we don't like underscores
02:46tomoj(defn knapsack-count [sack space] ...
02:46zmilahere (knapsack_count (rest sack) space) - you don't change "space"
02:49tomojthe way you're trying to solve the problem is not easy to do in clojure, I think
02:58LauJensenMorning all
02:58jColeChangedI'll probably try solving it another way than. Just goofing around with project euler problems so its not really a big deal.
02:59jColeChangedMorning Laujensen.
03:03LauJensenjColeChanged: http://gist.github.com/400896
03:03LauJensenHows that work?
03:07jColeChangedThat worked.
03:07jColeChangedPerfeclty.
03:07jColeChangedThankyou LauJensen.
03:08LauJensennp :)
03:08jColeChangedBTW: You solved problem 31 on project euler.
03:08LauJensenNo you did - I just fixed your code :)
03:09jColeChanged=) This channel seems a whole lot more friendly than most (from my limited experience). Glad I decided to learn clojure.
03:10LauJensenYea its definitely a nice place to hang out
03:10tomojwon't that code still blow the stack?
03:11tomojguess it doesn't matter if you're only looking for a specific answer
03:11tomojneed trampolines to solve it that way in general, I think?
03:11LauJensenNo, it blew the stack because it didn't bail on empty
03:11LauJensentomoj: Yes
03:11LauJensenBut I don't know how to explain a trampoline solution in a newbie friendly way, perhaps you can help?
03:12tomojI've never needed them yet :(
03:12scottjIs there a better way to get a string of x spaces than (apply str (take x (repeat \space)))?
03:12LauJensen$(doc trampoline)
03:12sexpbotresult: -------------------------clojure.core/trampoline([f] [f & args]) trampoline can be used to convert algorithms requiring mutual recursion without stack consumption. Calls f with supplied args, if... http://gist.github.com/400904
03:12LauJensen,(doc trampoline)
03:12clojurebot"([f] [f & args]); trampoline can be used to convert algorithms requiring mutual recursion without stack consumption. Calls f with supplied args, if any. If f returns a fn, calls that fn with no arguments, and continues to repeat, until the return value is not a fn, then returns that non-fn value. Note that if you want to return a fn as a final value, you must wrap it in some data structure and unpack it after trampoline r
03:12tomoj,(doc repeat)
03:12clojurebot"([x] [n x]); Returns a lazy (infinite!, or length n if supplied) sequence of xs."
03:12tomojscottj: ^
03:13scottjtomoj: ahh, thanks
03:13tomojnot quite as cool as ruby, but meh
03:14tomojoverloading * for sugar seems evil now to me anyway
03:15LauJensenI really like the 2**10 operator
03:15LauJensen2**10 vs (Math/pow 2 10)
03:16tomojhow come I never see symbols with infix :?
03:16tomojlike 'foo:bar I mean
03:16scottjtomoj: what I think is tricky about that is that 2*" " seems as valid as " "*2
03:20scottjI suspect because clojure programmers are used to associating : w/ keywords they don't think to use it as a separator in symbol names, and use packages to separate things groups - feels insufficient
03:20scottjs/packages/namespaces
03:21tomojI wonder what rich was thinking when he explicitly allowed it
03:21tomoj"A symbol can contain one or more non-repeating ':'s."
03:28scottjLauJensen: if I were going to use Math/pow more than a couple times in a prog I'd define **
03:30lancepantz_does clojure-mode in emacs only highlight purple and blue out of the box?
03:30tomojI'm just bugged by the fact that it only returns doubles
03:31LauJensenscottj: define it as a reader-macro and send it to Rich :)
03:34scottjlancepantz_: you mean does it only define two faces? it has faces for builtin, comment, func, keyword (annoyingly highlights some builtins and what clojure calls keywords), and string. not constant face
03:38jColeChangedLauljensen: From what I can tell the only difference between next and rest is that rest returns an empty sequence and next returns nil when given a sequence with no items beyond the first. Are there any other differences that I'm missing which made next preferable to rest in the code you fixed or was it just your preference?
03:39LauJensenNone at all. When next first was introduced, it was described as being more lazy than rest which was now eager. But when I wanted to explain that, I saw in the docs that it was no longer the case. So for this scenario rest is fine, if not better
03:46LauJensenjColeChanged: Oh, and by the way (< x 0) is (neg? x), (> x 0) is (pos? x)
03:46tomojheh, interestingly it looks like for lists, rest actually just does the exact some thing as next, but then returns () if it gets nil back
03:47jColeChangedand (zero? x) as well right?
03:47LauJensensi
04:21jColeChangedThanks again for the help. I'm heading to bed (its 1:20 AM).
04:31unfo-if i wanna do GUI stuff with clj i do it with java's swt/swing/etc libs right?
04:32abrenkunfo-: yes - there are a couple blog entries regarding clojure and swing
04:32abrenkunfo-: also there's a wrapper around miglayout in clojure-contrib
04:33unfo-abrenk, ty. I got interested in implementing something like this: http://rogeralsing.com/2008/12/07/genetic-programming-evolution-of-mona-lisa/ in clj :)
04:33sexpbot"Genetic Programming: Evolution of Mona Lisa « Roger Alsing Weblog"
04:40LauJensenunfo-: Looks like something that would be simple to paint on a JPanel
04:43tomojthere's also processing
04:45unfo-true true
04:45unfo-<3 processing with scala at least :)
04:45unfo-haven't checked it out with clj
04:46LauJensenIts trivial to plug into with Clojure
04:46LauJensenSlick2D is a little tricky, PulpCore is really tricky
04:46LauJensenJME is doable, but a little tricky and very tedious
04:47LauJensenJPanel is definitely the way to go for something like that
04:47LauJensenTakes 10 minutes to set up a panel with customized rendering
04:50vIkSiThmm, btw - in your experience - how much of an overhead is clojure code compared to equivalent java or scala?
04:50vIkSiTI've been reading some blog posts today with all sorts of benchmarks
04:51LauJensenvIkSiT: judging from Wide Finder II its about -20% :)
04:51Chousukefor well-written, optimised code.
04:51LauJensenYou see, in that particular benchmark, it beat both Java and Scala. But theres not a 1 answer fits all. If you want to be as fast as Java or Scala, you can definitely be that, but dynamically typed unhinted code will be slower
04:51vIkSiTLauJensen, ah hmm - would you have a link to some results? a google search thows a number of blog posts from '08
04:52LauJensenSo choose your battles. If you hav slow code, optimize it. If not, keep it elegant
04:52vIkSiTah I see
04:52LauJensenhttp://wikis.sun.com/display/WideFinder/Results
04:52sexpbot"Results - Wide-Finder - wikis.sun.com"
04:52LauJensenClojure did that in 8 minutes something
04:52vIkSiTfor instance - this post is quite telling: http://groups.google.com/group/clojure/browse_thread/thread/73b1d41635d19dd8
04:52LauJensen$google alex osbourne wide finder II
04:52sexpbotFirst out of 2640 results is: ongoing · What · Technology · Concurrency
04:52sexpbothttp://www.tbray.org/ongoing/What/Technology/Concurrency/
04:53Chousukeif you just write straightforward code it's anywhere between one point something to ten times slower than a java solution, depending on what you're doing :P
04:53vIkSiThehe
04:53LauJensenor 100 times slower if it reflects
04:53Chousukeheh
04:53vIkSiTand would you know its efficiency vs common lisp?
04:54LauJensenBut the point is. Clojure is 10x more concise and elegant than Java, and 9x more so than Scala. And if you want, you can make it just as fast.
04:54ChousukevIkSiT: which implementation? :)
04:54LauJensenvIkSiT: I dont have any numbers, though I have seen a comparison, where optimized Clojure vs optimized CL showed Clojure to be about 5x faster
04:54LauJensenThan SBCL I think
04:54vIkSiTLauJensen, oh yes, I agree in terms of conciseness and elegance :)
04:55vIkSiTChousuke, well, SBCL, or Franz for instance!
04:55tomoj5x faster than sbcl...
04:55Chousukeagain, it depends a lot on what you're doing
04:55LauJensenvIkSiT: But if you saw my post on Fluid Dynamics, you can see just how low-level you can go with Clojure. I did primitive math
04:55tomojthat is baffling
04:55ChousukeI wouldn't believe that 5x number :P
04:55vIkSiTLauJensen, ah yes I think I saw it a few days ago
04:55LauJensentomoj: why?
04:55ChousukeSBCL is extremely fast if you write properly type-hinted code.
04:55tomojsbcl compiles
04:55Chousukeit can beat C at times.
04:56tomojto machine code I mean
04:56Chousukefor a similar algorithm
04:56LauJensenIt was the Brians brain I did. My version was slow, lets say it took 1 minute for a certain number of iterations. The SBCL version then took 20 seconds, then Christophe made one that took 5 seconds - Same algorithm
04:57vIkSiThmm
04:57LauJensentomoj: but going directly to machine-code also means no hot-spot
04:57Chousukebut still, imperative programming is idiomatic in CL so most CL code won't really be comparable with clojure code, as the data structures and algorithms used are very different.
04:57vIkSiTChousuke, what do you mean by your last statement btw?
04:57vIkSiTimperative programming is "idiomatic" in CL?
04:57Chousukeyes.
04:57vIkSiTas in?
04:57LauJensenTrue. But I think its a void concern. The question should be, can I make this fast _enough_ if I need to. And yes you can. End of performance story, lets now look at elegance and robustness :)
04:58tomojyeah
04:58ChousukevIkSiT: Well, if you try to write imperative code in clojure you'll end up with a mess
04:58tomojI won't be touching sbcl anytime soon
04:58ChousukevIkSiT: but CL is much more forgiving.
04:59vIkSiTah
04:59LauJensenChousuke: Yea, CL is the father who doesn't care - Rich cares!
04:59vIkSiTbtw, I'm always a bit hazy about what exactly "idiomatic" refers to when used with lisps
04:59ChousukeLauJensen: I'd rather say that CL is not as opinionated
04:59vIkSiTdoes it imply using functional techniques vs imperative mishmash?
04:59Chousukewell functional style is idiomatic in CL too
05:00LauJensenvIkSiT: when something is idiomatic to a language, it means it adhears to what the language-designer intended - at least thats one definition
05:00vIkSiTah I see
05:00Chousukein my view CL supports both approaches equally well
05:01LauJensenChousuke: wow, really?
05:01tomojI don't want to give the designer authority over idioms
05:01LauJensenI didnt even know they had persistent immutable datastructures
05:01LauJensentomoj: bad news is, he's already got it
05:01tomojmaybe de facto
05:01ChousukeLauJensen: well, they don't. but you don't need those for functional programming.
05:01tomojif he says "don't do that" people will listen
05:01tomojbut we really have the power to create whatever idioms we want, under my understanding of the word
05:01LauJensenChousuke: If its to have any practical application, then yes you do
05:02ChousukeLauJensen: nah
05:02LauJensenChousuke: How then can your code be both effecient and geared for concurrency?
05:02tomojI think of idioms as code style memes I guess
05:02Chousukewhat has concurrency to do with this?
05:02ChousukeLauJensen: higher-order functions and such are useful even without immutable data structures
05:02LauJensenChousuke: 'practical application'
05:03Chousukeconcurrency isn't the only practical application of functional programming :P
05:03LauJensenThats true, but even Richs definition of a functional language, is one which has a focus on immutable datastructures
05:05ChousukeI didn't mean to define CL as a functional language, but one that supports functional idioms
05:05Chousukeand those don't necessarily include working with immutable data structures
05:06LauJensenChousuke: Im just trying to alert you to the fact, that CL doesnt not support functional paradigmes 'equally well' as Clojure. So that if you have to choose based on the criterium, choose Clojure
05:06scottjhttp://news.ycombinator.com/item?id=1016566
05:06sexpbot"Hacker News | Palindromes (Clojure vs. Common Lisp)"
05:07ChousukeI didn't say it supports the paradigm equally to clojure. I said it supports imperative and functional programming equally well :)
05:07Chousukeno comparison to clojure in that statement.
05:07LauJensenaha - sorry I misread :)
05:10Raynesmmarczyk: ping
05:12Licenserhttp://blog.licenser.net/2010/05/14/stupid-db =)
05:12sexpbot"lice! : Stupid DB"
05:14tomojlink to github is wonky
05:20RaynesTo whom it may concern: http://tryclj.licenser.net/ is awesome now.
05:21LauJensenRaynes: I love that you've done it, but does it have to be so ugly?
05:21RaynesWhy, thank you.
05:21LauJensenhttp://tryruby.org/
05:21sexpbot"try ruby! (in your browser)"
05:21LauJensenhttp://tryhaskell.org/
05:22LauJensenAnd then look at yours - notice something a little off? :)
05:22RaynesIt's my first web development project ever. I'm sorry if it's ugly. Licenser has a fork, and I suspect he'll make his pretty, then you can use his.
05:22Chousukeit should use the clojure colour scheme
05:23tomojI'm surprised jquery-console doesn't support emacs keybindings
05:23LauJensenRaynes: Please dont pout, its nothing personal. Im just saying, slap on some nice css and a huge clojure.svg background image and you're all set :)
05:23RaynesI'm not pouting. I don't expect anyone to use it.
05:23tomojor maybe that's not possible?
05:23LauJensentomoj: but Conkeror does
05:23tomojyeah, but not in the jquery-console
05:23tomoj(not even in quote-mode)
05:23LauJensenoh
05:24RaynesJust trust me, if I had any clue how to make it pretty, I certainly would.
05:24RaynesI'm definitely not a designer.
05:24LauJensenI think I'll make a little script which hits every bug tracker in the world, and files the bug "does not support emacs keybindings" - they really should be everywhere
05:24tomoj:D
05:24LauJensenRaynes: So just copy paste the other sites
05:25RaynesEh.
05:25RaynesI'd rather not.
05:25LauJensenjust link they CSS and use the same classes :)
05:25RaynesI'd rather it be ugly than just copy and paste someone else's work. Believe it or not, I worked my ass of on that site, ugly or not.
05:25Raynes:p
05:26zmilatryclojure is good. i'll use it when smth small need to be checked. in order to not start the whole Eclipse
05:26RaynesI needed the experience, and that's why Licenser made his fork. He can make his "official" if he wants, and put it on try-clojure.org.
05:26LauJensenRaynes: ok, here's my suggestion. Make the background white. Remove everything but the evaluation box, and but that in a div which has a background: transparent url(/something/with/a/nice/border.png) no-repeat top left. And thats it. Simple and beautiful
05:27RaynesWould be kind of lonely.
05:27esjsecond that - make it look like a goole page
05:27esjs/goole/google/
05:27sexpbotsecond that - make it look like a google page
05:30zmila,(assoc {} [3 #{1 2 3}] 100)
05:30clojurebot{[3 #{1 2 3}] 100}
05:30zmilatryclojure fails to eval "(assoc {} [3 #{1 2 3}] 100)" => ClassCastException: java.lang.Integer cannot be cast to clojure.lang.IFn
05:31RaynesI already had plans to do something like that. With some added stuff below all that, like the other pages, with links and such.
05:31RaynesOn the right, there is a message that says "This site is not finished" or something similar.
05:31RaynesOnce it's gone, you can whine about ugliness all you want. :p
05:32Rayneszmila: Probably problems with URL encoding. I'll fix that later. I need a break.
05:32tomojRaynes: good work! someday we will have a nice in-browser tutorial to wow people with
05:37zmilayes, Raynes. just simple "#{1}" fails, but only "#{}" is ok
05:38Raynestomoj: Meh, not good enough.
05:38tomojwell, like you said, it's not done yet
05:39zmilai even don't need to open the page, just type the url ending with the expr :)
05:40zmilahttp://tryclj.licenser.net/magics?code=%28range%200%201000%29
05:40zmilanice!
05:40RaynesOh, cool. That's kind of an implicit API.
05:40Raynes:p
05:41RaynesOr an accidental API.
05:42zmilai can calculate with google just from firefox address bar
05:42zmilaand now eval clojure
05:55cgrandRaynes: late pong
05:55RaynesWasn't that like a day or two ago? >_>
05:56RaynesI think I was going to ask you why Moustache still requires clojure/contrib 1.1.0-master-SNAPSHOT
05:56RaynesOops.
05:57Raynes^ wrong channel.
05:57RaynesThe oops was in the wrong channel, that is.
06:10Rayneszmila: That isn't my bug! :D
06:10Rayneszmila: That's a clj-sandbox bug.
06:10Raynes$eval #{1}
06:10sexpbotjava.lang.Integer cannot be cast to clojure.lang.IFn
06:10zmilagood :)
06:11RaynesWell, I guess that does make it my bug. :|
06:11RaynesBut not a tryclojure bug.
06:12tomoj$eval #{+ 2 3}
06:12sexpbotjava.lang.Integer cannot be cast to clojure.lang.IFn
06:14tomoj$eval #{'list list}
06:14sexpbotresult:
07:25tomojLicenser_: you around?
07:25tomojRaynes: or you?
07:26RaynesI'm here.
07:33tomojthat was a premature ejaculation, sorry
07:38tomoj$eval *print-level*
07:38sexpbotDENIED!
07:39tomojRaynes: ok, ready, I guess :/
07:40Raynes?
07:40tomojthought I could do more but I'm giving up
07:40tomojhttp://tryclj.licenser.net/magics?code=*print-level*
07:41RaynesIs there a question here or something? :o I'm confused.
07:41tomojyou work on clj-sandbox, right?
07:41RaynesYeah.
07:41tomojhttp://tryclj.licenser.net/magics?code=*print-length*
07:42tomoj*print-level* is no longer blacklisted (or is now whitelisted, whichever) on your tryclojure
07:43RaynesI haven't modified those in any way, so I guess it must be whitelisted in the default tester.
07:43tomojok, now it is again
07:43tomojno, I did this
07:43tomojwant me to PM you or do you trust #clojure? :)
07:44RaynesOh, wait, you broke it?
07:44RaynesSee, you didn't say that.
07:44Raynes:p
07:44RaynesPM me.
07:52tomojtoo bad it doesn't work on def
07:56zmilasetting print-len is "Disabled for security purposes."
07:56Raynestomoj: Licenser is working for that.
07:56Rayneszmila: Sure is. :p
07:57zmilabut how about asking your magic api for (range 0 1000000000000000) ?-)
07:57RaynesFeelin' lucky? Punk? Go for it.
07:57Raynes:p
07:58RaynesHOLY SHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIITimeout.
07:58tomojoh, so even with *print-length* whitelisted, you're safe?
07:59Raynestomoj: It actually isn't whitelisted. I don't know why it's going through.
07:59RaynesMaybe another bug.
07:59tomojhrmm, I need to work harder :P
07:59tomojyeah, the bug I just told you about in PM
07:59RaynesOh yeah.
08:00RaynesSorry, I've been awake for a while.
08:00Raynes:p
08:00tomojoh, I think I can whitelist defn too
08:00tomojbut maybe when it expands to def, that'll be blocked even so?
08:02tomojyep :(
08:02RaynesI think so.
08:03tomojand since def is a special form there's nothing I can do about it, oh well
08:14tomojhttp://tryclj.licenser.net/magics?code=(net.licenser.sandbox.box43527/tomoj)
08:16tomojok, I'm done, sorry :(
09:00webar7can someone make #clojure run on python or parrot instead of java :P
09:01Chousukeyes, but will someone? I dunno :P
09:02Hodappgnu lightning ftw
09:02Hodappwebar7: was that the sound of you volunteering to port it?
09:05webar7I have such pain building/installing java on freebsd ... sigh
09:06webar7Hodapp, ok ... as long as I know it's technically feasible :)
09:06Chousukeit'll probably become a lot easier as the java parts get rewritten in Clojure
09:07Chousukebut it's probably not going to happen tomorrow :)
09:07eevar2webar7: there's no openjdk for freebsd?
09:08ChousukeThough as far as I understand the situation, when 1.2 is released clojure should have all the tools necessary to do it.
09:09webar7Hodapp, I'm like Jim Carrey in that movie where when faced with 1000000 to 1 odds he says "I've got a chance!!"
09:10Hodapphmmmm
09:15SynrGwebar7: what, i can get clojure to work on OpenVMS but freebsd is a no go? i find that amusing :)
09:15webar7haha
09:16SynrGhttp://www.freebsd.org/java/ says there are binaries ...
09:16sexpbot"FreeBSD Java™ Project"
09:19webar7yeah ... they sort of work
09:20eevar2SynrG: i assume it's as simple as port install openjdk6
09:20webar7it';s more that when I read you can do lisp type programming in clojure but then "do anything you can do in java" by calling out to the jvm I thought: "but I don't wanna do java" hahah
09:21webar7but anyway it shore is cooool
09:21SynrGstill waiting for clojure in clojure, hm?
09:21webar7and it's gonna work on appengine :)
09:22chouserclojure-in-clojure will still let you do anything you can do in java
09:23eevar2it will also still run on / depend on the jvm
09:23chouserright
09:24chouserit will make it easier to port to other hosts, but will not itself be a host.
09:25defnf
09:25defnclojure is three languages
09:26webar7chouser, other hosts like other vms?
09:26chouserright
09:27chouserjavascript, golang, parrot, etc.
09:28defnthe environment of the hostess defines the freedom of her hosts
09:28chouserdefn: which three?
09:29defnchouser: i was just thinking of the motivations for learning clojure
09:29Hodapphm, I wonder if I could program Processing in Clojure
09:29Hodappas it's basically just Java
09:29Hodappbut straight Java makes me want to cry sometimes
09:29defnyou have your passionate "compelled" force of nerds, you have your "tickled by the idea" nerds, and you have the "we're in it for the white paper" nerds
09:30Hodappwhite paper?! where?
09:30defnyou also have the "hedging my bets" nerds who insist on learning haskell, erlang, scala, AND clojure
09:31arkahnI want a t-shirt that says "I'm in it for the whitepaper"
09:31defnhahahaha yes!
09:31Hodappwhere do the "C++ is the only language you'll ever need, and it's beautiful" nerds fit in?
09:31defn"I went to grad school, and all I got is this lousy whitepaper."
09:31chouserHodapp: http://data-sorcery.org/2009/08/30/processing-intro/
09:31sexpbot"Creating Processing Visualizations with Clojure and Incanter « Data Sorcery with Clojure"
09:31HodappHELLZ YEAH
09:33HodappI'm on my netbook so it was easier to ask rhetorically in here than to switch windows and ask Google
09:34chousernetbook ftw?
09:35defnknowing what irc is, is half the battle
09:36Hodapppdk: #zdoom is that way.
09:37Hodapppdk: unless, of course, you're not that pdk.
09:47neotykHi
09:47neotykto get clojure current clojure 1.2 what are version strings for lein?
09:47neotykboth clojure and contrib
09:48tomoj1.2.0-master-SNAPSHOT for clojure
09:48tomoj1.2.0-SNAPSHOT for contrib
09:48jfields_anyone have a good idea on how to split this "34HD1209,ADSK,"-2,539","-83,203",25,0,0" into this ["34HD1209" "ADSK" "-2,539" "-83,203" "25" "0" "0"]
09:48neotyktomoj: thanks
09:50drewrjfields_: you sure you don't mean ["34HD1209, ADSK" ...]?
09:50tomojwould be easier to understand if you escaped the inner quotes, I think
09:51drewrnm, missed a level of quoting there
09:51drewranyway, you'd probably be best served by using a csv parsing lib
09:51drewrsupercsv and opencsv are both pretty good
09:52tomojhttp://github.com/davidsantiago/clojure-csv hmm
09:52jfields_drewr: sorry, I guess that wasn't clear. The line '34HD1209,ADSK,"-2,539","-83,203",25,0,0' is in a file, and includes the inner quotes, but not the outer ones I added.
09:53chouserjfields_: re-seq
09:55jfields_chouser: the commas within the quotes make a regex seem... complicated.
09:55chouser:-) yes
09:56chouser,(map (fn [[_ a b]] (or a b)) (re-seq #"([^\",]+)|\"(.*?)\"" "34HD1209,ADSK,\"-2,539\",\"-83,203\",25,0,0"))
09:56clojurebot("34HD1209" "ADSK" "-2,539" "-83,203" "25" "0" "0")
09:57chouserthough a csv lib may be better
09:57drewrtomoj: I tried that lib a while back but it's not quite industrial enough for everyday work
09:57jfields_chouser: hah. thanks.
09:57tomojtoo bad
09:58drewrtomoj: doesn't handle the kinds of quoting issues one finds in the real world
09:59arkahn"data sorcery with chouser" - I'm copying that solution into my notes for future reference. In solving it, I had gotten as far as using re-seq and scratching the surface with some REs ; )
10:03_na_ka_na_hello
10:03_na_ka_na_is there an easy way to get a random element out of a set
10:04chouserarkahn: regex knowledge is highly transferrable among modern languages and environments
10:04_na_ka_na_one way could be (first (shuffle set)) ... but its overkill
10:04chouser(doc rand-nth)
10:04clojurebotTitim gan éirí ort.
10:04tomojperhaps (rand-nth (seq #{..})) ?
10:04_na_ka_na_hmm.. thx lemme chk
10:04tomojehh
10:04chouserclojurebot's running a rather old clojure
10:05_na_ka_na_is it not in 1.1?
10:05tomojsucks that you have to convert to something other than a set, and if it's seq you get linear time to walk to the nth, no?
10:05_na_ka_na_or seq-utils 1.1?
10:05chousertomoj: yeah
10:05tomojand I guess converting a set to a vector isn't all that attractive either
10:06chousernope, still O(n)
10:06arkahnchouser: thankfully I have regex experience from other languages, though just the regex stuff you wrote would have taken me a bit longer to think up. : ) Nicely done.
10:06_na_ka_na_if there were a lazy shuffle .. then one could do (first (shuffle )) .. but the shuffle in seq-utils isn't lazy?
10:07raek(defn random-of [coll] (nth coll (rand-int (count coll))))
10:07raekthis is how I ended up solving it
10:07_na_ka_na_this is O(n) ..
10:08chouseryou really want a set here, for other reasons? rand-nth on a vector should be nearly O(1)
10:08_na_ka_na_ya set is required as i want only distinct elems
10:09chouser,(counted? (seq #{:a :b}))
10:09clojurebotfalse
10:09chousermeh
10:10_na_ka_na_hmm..
10:14arkahndoes that mean that (count #{:a :b}) has to go through all n items to find the count or does it keep track as part of adds/removes in the data structure?
10:15_na_ka_na_it has to traverse the whole set .. :/
10:16_na_ka_na_well w/o O(1) count, we can't even implement a lazy shuffle ??
10:16_na_ka_na_wait a min.. does lazy shuffle even make any sense?
10:17chouser,(counted? #{:a :b})
10:17clojurebottrue
10:17_na_ka_na_how?
10:17clojurebotwith style and grace
10:18chouserarkahn: no, (count #{:a :b}) is O(1) because sets know their size. What I was checking was if the seq of a set also knows its size. It could, but apparently it doesn't.
10:18arkahnchouser: ok - thank you
10:18_na_ka_na_hmm ok ..
10:18chouserok, so rand-nth calls count on the collection (set in this case) directly.
10:19chouserI'm confusing myself. Ignore that.
10:19_na_ka_na_can you please tell me where to find rand-nth
10:20chouser(rand-nth (seq a-set)) means rand-nth will count the seq, which because it's not counted will walk the whole thing.
10:20chouser_na_ka_na_: rand-nth is in 1.2-snapshot (git master). There's something similar (maybe rand-elt?) in contrib
10:21_na_ka_na_hmm thx chouser
10:22_na_ka_na_,(source rand-elt)
10:22clojurebotjava.lang.Exception: Unable to resolve symbol: source in this context
10:22_na_ka_na_its thr .. but same as above (defn rand-elt
10:22_na_ka_na_ "Return a random element of this seq"
10:23_na_ka_na_ [s]
10:23_na_ka_na_ (nth s (rand-int (count s))))
10:26chouserBut even if set-seq were counted, nth on the seq would still have to walk, so technically O(n)
10:26chouserI can't see how to do any better than O(n) unless some clojure collection type directly supported rand-nth
10:27chouserPersistentSet could walk its internal tree choosing a random branch at each level and give you O(log32 n)
10:28chouserbut ... you know what, that wouldn't be evenly distributed across the leaf nodes.
10:29_na_ka_na_hmm .. i see what you're saying
10:32chouseryou'd have to know the size of each branch to balance the upper choices, and I don't think sets or sorted-sets know that
10:33neotykdoes de.kotka.lazymap work with clojure 1.2?
10:33chousera finger tree could. you might be able to get set-like behavior out of a finger tree, and still get O(log2 n) random lookups
10:36zakwilson_Is there a way to kill a future that's still computing?
10:36zakwilson_Aside from (shutdown-agents)
10:37chouserfuture-cancel
10:37zakwilson_Why didn't I notice that in the autocompletions?
10:38tomojapparently future-cancel will not kill a process spawned with Runtime exec
10:41tomojmaybe with a finally it could
10:47zakwilson_Anybody have experience with EC2? I have some compute-intensive Clojure code and I'm wondering how much faster it would run on a high-CPU XL instance than on my laptop.
10:58zakwilson_Do futures have a timeout?
10:59chouserlooks like you can have a timeout on the 'get'
11:00zakwilson_I ran (def the-future (future (a-process-that-takes-hours))) and it stopped after a few minutes
11:00zakwilson_future-done? says it's done, and its value is nil (should be true if it completed)
11:03mikemmaybe (a-process-that-takes-hours) terminated early with a nil?
11:05zakwilson_Can't happen. It could throw an exception, but not return nil.
11:10patrkriszakwilson_: and you're sure that it didn't throw an unhandled exception?
11:10webar7anything can happen :)
11:10zakwilson_patrkris: No. I'm sure it didn't return nil, but it may have thrown an unhandled exception.
11:11patrkriszakwilson_: you can probably inspect *e to see the last unhandled exception
11:11patrkrisand use the stuff under clojure.stacktrace
11:11Rayneshttp://tryclj.licenser.net/ With the help of LauJensen, I/we've completely redesigned TryClojure. Note that there are a few bugs in clj-sandbox that make the repl a bit less useful than it will be eventually. You can't def* anything, and there seems to be a bug with sets containing integers that Licenser and I will work on later, but all in all, it works.
11:12zakwilson_patrkris: I didn't know about *e. The last unhandled exception was an attempt to access an undefined variable at the REPL before the future was created.
11:16patrkriszakwilson_: ok, probably wasn't an unhandled exception then :)
11:16patrkriswell it was, but not in your future
11:18wahzhi; what does "call to contains can't be resolved" refer to when using protocols and records in clojure 1.2?
11:19stuartsierrawahz: are you calling 'contains?' on a record object?
11:20zakwilson_There are no unhandled exceptions in my future? Thank you, oh great psychic. Now I don't have to do any testing!
11:20wahzno, I don't call 'contains?' directly
11:42stuartsierrawahz: maybe something else is calling it, that would be my guess
11:47wahzI use a record field as a test in a 'cond'; could that be causing it perhaps?
11:49stuartsierraI don't think so...
11:49wahzokay, thanks
12:30wahzgoodnight; and for anyone else in Australia, go to bed! :)
13:02giaceccohi all
13:04giaceccoanyone wants to give me a hand with a strange ant script?
13:07giaceccoanyone wants to give me a hand with a strange ant script?
13:48jfieldsis there something more simple than this: (Integer/parseInt (apply str (filter #(not= \, %) "2,000")))
13:50chouser(remove #{\,} "2,000")
13:50chouser,(remove #{\,} "2,000")
13:50clojurebot(\2 \0 \0 \0)
13:50chouser,(.replace "2,000" "," "")
13:50clojurebot"2000"
13:51chouser,(Integer/parseInt (.replace "2,000" "," ""))
13:51clojurebot2000
13:51chouser,(Integer. (.replace "2,000" "," ""))
13:51clojurebot2000
13:52jfieldschouser: thanks man. if it makes you feel better, I'm reading your book. so thanks for always answering my questions :)
13:52chouserheh. great!
13:53chousersome people read slashdot to break up monotany at work. I answer #clojure questions.
13:57cemerickhrm, I see the pause-after-script-is-done issue is still there
13:58cemerickrelated to non-daemon agent threads IIRC
14:10naeuhow might i take a list and create a new list with each item passed through a function and put into an inner list: [1 2 3 4 5] -> [[2] [4] [6] [8] [10]]
14:11chouserthose are vectors
14:11chouser,(for [i [1 2 3 4 5]] [(* 2 i)])
14:11clojurebot([2] [4] [6] [8] [10])
14:14naeuah, i had forgotten about for
14:14naeuI've not managed to get comfortable with it in a functional context yet
14:14naeuchouser: thanks
14:15chouserthe choice between map/filters and for (for me anyway) is based on a bunch of vague preferences and unrelated details
14:16chouserin this case, wanting to produce an inner vector pushed me towards for
14:16tcrayfordyou can use map I guess
14:16chouser,(map #(vector (* 2 %)) [1 2 3 4 5])
14:16clojurebot([2] [4] [6] [8] [10])
14:16tcrayfordaye
14:16tcrayfordI just like being able to switch preferences like that automatically where it makes sense
14:17tcrayfordautomatically threading stuff through ->>/-> (and unthreading) has been a nice thing for me
14:17TimMcI'd like to get started with Clojure + Compojure, but I can't find much about how to structure a project + build files.
14:17chousertcrayford: yeah, those sound handy
14:17chouser,(reduce #(conj %1 (vector (* 2 %2))) [] [1 2 3 4 5])
14:17clojurebot[[2] [4] [6] [8] [10]]
14:17tcrayfordTimMC: using lein?
14:18TimMctcrayford: I see that lein exists, but I don't know what to do with it.
14:18tcrayfordchouser: that paper on fold linked in the joy of clojure was so damn cool
14:18tcrayfordTimMc: download it, install it
14:18TimMctcrayford: Done.
14:18tcrayfordthen run `lein new` somewhere
14:18tcrayfordwith the name of the project
14:19tcrayford`lein new myfirstcompojure` or summat
14:19tcrayfordchouser: I've been meaning to translate that paper into clojure and put it up on a blog, might do that soon
14:19TimMcOK, I'll explore that, thanks.
14:20tcrayfordI have it
14:20TimMcCan I get that integrated with an IDE like Eclipse?
14:20tcrayfordone sec
14:20chouser"A Tutorial on the Universality and Expressiveness of fold" by Graham Hutton ?
14:20tcrayfordhttp://www.cs.nott.ac.uk/~gmh/fold.pdf
14:20tcrayfordyeah that one
14:21TimMcI mean, if I want to write a Java app, I just fire up Eclipse or NetBeans and create a project, and *BAM* I'm ready to go. Anything like that?
14:21tcrayfordTimMc: not at the moment iirc
14:21tcrayfordnot with lein anyway
14:21tcrayfordyou can do it with maven and any of the java ide's with a clojure plugin
14:21tcrayfordbut I don't know too much about that
14:21TimMcOK, so it's not just poor google-fu on my part.
14:21chousertcrayford: I haven't read it. All references to scholarly works are because of Fogus.
14:22tcrayfordchouser: its really nice
14:22technomancytcrayford: actually you can have it spit out a pom, which then the IDEs can generally figure out
14:22technomancy(not that I've tried)
14:22chousertcrayford: it does look interesting. I'd probably rather read your blog than the haskell in there though. :-)
14:22tcrayfordtechnomancy: not that you would try :P
14:22jfieldsit's not possible to destructure when using %1, correct?
14:22jfieldsI need to stick with (fn) if I want to destructure, right?
14:23tcrayfordchouser: the nice part is when he defines filter and map in terms of reduce
14:23clojurebotmap is lazy
14:23tcrayfordfor me anyway
14:23woobyanyone getting a reader missing parens w/ clojure test mode recently?
14:23tcrayfordare you using 1.2
14:23tcrayford?
14:24chouserclojurebot: yes, but in haskell everything is.
14:24clojurebotHuh?
14:24tcrayfordyou need to grab the latest source off of technomancy's github, otherwise it breaks
14:24chouserjfields: right, fn or let
14:24jfieldschouser: thanks
14:25jfieldsI have a map and I want to apply a fn to every val and return the map. The best I could come up with was: (reduce (fn [map [k v]] (assoc map k (* 2 v))) {} {:a 1 :b 2})
14:25woobytcrayford, thanks
14:26tcrayfordwooby: I got bit by that a couple of days back, because I had a forked test-mode with a red/green bar thing (that I've now gotten rid of)
14:27chouser,(let [m {:a 1 :b 2}] (zipmap (keys m) (map inc (vals m))))
14:27clojurebot{:b 3, :a 2}
14:28chouser,(let [m {:a 1 :b 2}] (into {} (map (fn [[k v]] [k (inc v)]) m)))
14:28clojurebot{:a 2, :b 3}
14:29woobytcrayford, ah yes i was tempted to try that thing also
14:30tcrayfordwooby: it broke occasionally, and wasn't actually that useful, so its been dropped
14:30technomancythe clojure-test-mode fix has been submitted to elpa, just waiting for upload
14:30tcrayforddoes it still work with 1.0 & 1.1?
14:32technomancytcrayford: no, you need clojure-test-mode 1.2 for clojure 1.0 support
14:32tcrayfordbut 1.1 is still fine?
14:34technomancyja
14:35tcrayfordno worries here then, I didn't really get into proper projects until 1.1 was the standard
14:38TimMcFeh, I still can't get lein to run properly. Self-install worked, but if I try to do anything else, it fails with a clojure/main not found error. :-(
14:45TimMcThis looks promising, though: http://vimeo.com/8934942
14:45sexpbot"Episode 8 - Projects on Vimeo"
14:46TimMc("Full Disclojure")
15:04tcrayfordalso cake is already taken for some other language
15:04ninjuddpie?
15:04technomancythe cake is a lie.
15:05tcrayfordthe cake is spy!
15:05tcrayford(to be said in a Heavy [TF2] accent)
15:05TimMctechnomancy: Boy, am I glad to see you! I'm getting "NoClassDefFoundError: clojure/main" whenever I try anything with lein other than self-install.
15:05ninjuddcake is build system that only works for windows and cygwin? that hardly counts
15:06TimMcThis is a Win 7 64-bit system, via Cygwin.
15:06ninjuddhttp://sourceforge.net/apps/trac/cake-build
15:06sexpbot"Cake Build System"
15:06technomancyTimMc: I think there are some outstanding issues with cygwin support. not sure of the details myself. I have some patches I need to look at for that; it should improve for the 1.2 release.
15:07technomancyTimMc: you might try teropa's fork
15:07TimMcI'm stuck on Win 7 here at work -- recommendations for alternatives?
15:08technomancyyou could try lein.bat too. it's more manual but better-tested.
15:08tcrayfordvmware/linux?
15:08TimMcUrgh.
15:08technomancyrobwolfe is my go-to man for Windows issues; too bad he's not online.
15:09TimMcThanks for the help!
15:10TimMcWe're exploring using Clojure for a web app, but getting a dev environment set up has been tricky.
15:11tcrayfordI'd reccomend it if you do. I wrote a fairly substantial webapp in compojure and enjoyed it a lot
15:12TimMcNote: teropa's fork doesn't help
15:12TimMcYeah, it *looks* fun, and I have fond memories of Scheme, but... bleh.
15:12tcrayfordyeah, clojure's tooling support on windows is kinda lacking
15:13tcrayfordyou tried one of the ides properly yet?
15:13cemerickTimMc: If you're not liking lein, there's clojure-maven-plugin. Not so popular with some, but pretty darn solid IMO.
15:13tcrayfordcemerick: didn't you have a blog post about using that and compojure somewhere?
15:13TimMcYou know what would be a really *awesome* Getting Started guide? A .zip/.tgz with toll install instructions, a build file, and an eclipse workspace premade. :-P
15:13TimMc*tool
15:14cemericktcrayford: yeah... muckandbrass.com/chas will lead you there
15:14TimMccemerick: I think I like lein, it just doesn't like me.
15:14tcrayfordcemerick: mostly this for TimMc's benefit
15:15cemerickTimMc: If you're already in eclipse, then maven would presumably be the easier path.
15:15TimMcTrue.
15:15cemerickI've not used the clojure plugin there yet though.
15:15cemerickouch ;-)
15:15tcrayfordeclipse's ccw is meant to be pretty good, has paredit and some other nice things
15:16tcrayfordI need to pick an ide to work refactoring-mode into soon
15:16cemericktcrayford: that's what I hear; I plan on giving it a run, as well as intellij's sometime shortly
15:16TimMcWe're a Java shop, so Eclipse and Maven are embraced.
15:16cemerickalthough what I see re: e4 sounds pretty good, so that might prejudice things a little.
15:17jfieldsany idea what this means: Exception in thread "main" java.lang.AbstractMethodError: org.apache.log4j.helpers.FileWatchdog.doOnChange()V
15:19tcrayfordthat's just a java error no?
15:19jfieldsyeah, I'm trying to implement an abstract class, but when it gets to the Template Method (which is abstract) it throws that exception
15:20jfields(proxy [FileWatchdog] [path]
15:20jfields (doOnChange []
15:20jfields (println "changed")))
15:21tcrayfordis the signature correct?
15:21jfieldsit's a no-arg method call, so as far as I can tell, yes.
15:22tcrayfordI ain't got much then.
15:24dakroneis there a way to unroll a sequence without apply? I want something like (foo (unroll [1 2 3])) -> (foo 1 2 3)
15:24tcrayfordwhy the dislike of apply?
15:25kotarakdakrone: (eval `(foo ~@[1 2 3])), *yuk*
15:25dakronebecause I don't want it to actually be applied
15:25dakroneI need to unroll things for java interop inside a macro
15:25tcrayfordkotarak: that's ugly :(
15:25kotarak,(list `foo [1 2 3])
15:25clojurebot(sandbox/foo [1 2 3])
15:25kotarak,(list* `foo [1 2 3])
15:25clojurebot(sandbox/foo 1 2 3)
15:26kotarakdakrone: list* is what you want, then.
15:26dakronekotarak: cool, thanks
15:27kotarak(defmacro to-string [& args] (list* '.toString args))
15:27kotarakdakrone: similar to apply: (list* :a :b :c [:d :e :f])
15:28dakronekotarak: that does the trick for this, awesome! :)
15:28kotarakdakrone: glad it helps
15:29kotarakin fact apply does use list* internally: (apply f a b c d) => (.applyTo f (list* a b c d))
15:30dakronehere's how I'm using it: http://gist.github.com/401546
15:33tcrayfordis reduce lazy?
15:33stuartsierrano
15:33jfieldswhere's the pastie address?
15:34stuartsierrapaste.lisp.org
15:34tcrayfordcheers
15:35jfieldsdoes this work in 1.2?: http://paste.lisp.org/+24KV
15:36jfieldsit looks like calling an abstract method from the ctor fails in Clojure 1.1
15:36jfieldsand I'd like to report it, but not if it's already fixed in 1.2. and I don't have a 1.2 easily available.
15:36stuartsierraI think that will always fail with 'proxy'
15:36jfieldsoh, it's by design, okay. what should I do instead?
15:37stuartsierraavoid it if possible
15:37jfieldswould love to, but it's a 3rd party lib.
15:37stuartsierragen-class *might* work
15:38stuartsierraotherwise, you'll have to write a wrapper in Java
15:39stuartsierraThat's an appalling design, by the way.
15:39tcrayfordlog4j :/
15:39stuartsierrasheesh
15:39tcrayfordjfields: does clojure.contrib.logging help at all?
15:40kotarakdakrone: http://paste.lisp.org/display/99248
15:40jfieldsuhm, not sure, why would it?
15:40tcrayfordit provides some wrappers around log4j
15:40tcrayforddepends on what you're doing
15:41stuartsierraApache Commons Logging might also help.
15:42cemerickI'm seeing some odd behaviour with interfaces generated with deftype...i.e. (instance? Foo instance) failing even though (class instance) returns Foo (or, something with the name Foo). This anomaly resolves itself if I re-eval the Foo defrecord and recreate the instance....
15:43dakronekotarak: you sir, are a gentleman and a scholar
15:43dakroneand you are also really good at making me feel dumb :)
15:43kotarakdakrone: don't feel dump!
15:43kotaraks/b/p
15:43dakroneshould have thought of the thresh operator to begin with
16:05lancepantzdo lein plugins have to be dev-dependencies?
16:05lancepantzif i make a plugin a regular dependency, will it be transitive?
16:06kotarakBut than everyone will get your dependency. Whether they use lein or not. Not the correct use, I think.
16:13lancepantzgoo point kotarak
16:14lancepantz*good
16:18kotarak,1d6
16:18clojurebotInvalid number: 1d6
16:18kotarakclojurebot: 1d6
16:18chouser1d6
16:18clojurebot6
16:18clojurebotIt's greek to me.
16:18kotarak2d6
16:18clojurebot5
16:18kotarak6d6
16:18clojurebot19
16:18hiredman1d2+20
16:18clojurebot22
16:20kotarak,1.5e6
16:20clojurebot1500000.0
16:21kotarak,4e0.5
16:21clojurebotInvalid number: 4e0.5
16:21kotarak,1.e6
16:21clojurebot1000000.0
16:25kotarak,.5
16:25clojurebotjava.lang.Exception: Unable to resolve symbol: .5 in this context
16:27ninjuddkotarak: should lein dev dependencies be transitive across multiple dev dependencies?
16:27kotarakninjudd: dunno, I don't use lein
16:28ninjuddha!
16:28ninjuddgood man
16:28kotarakha?
16:28kotarako.O
16:28ninjuddsometimes i wish i didn't use it
16:29kotarakninjudd: then - well - don't use it
16:33ninjuddkotarak: do i have to write groovy to use clojuresque?
16:34lancepantzkotarak: this is my first time looking at clojuresque, it looks really cool
16:34kotarakninjudd: well, you can pretend that it's some arbitrary dsl. For 90% of the projects that's enough.
16:35tcrayfordreduce is pretty neat: http://bit.ly/dh2hmm
16:35sexpbot"tcrayford"
16:36ninjuddkotarak: i doubt i'm in the 90%
16:36kotarakninjudd: just a sec
16:37ninjuddwhich is why it is so hard to do what i want in lein
16:38kotarakdang. the "usual" paste bin has hiccup. :/
16:40ninjuddtechnomancy: are lein dev dependencies transitive across multiple dev dependencies?
16:41ninjuddtechnomancy: so if B has a dev dep on C and A has a dev dep on B, will A get C in lib/dev?
16:41technomancyninjudd: no, dev dependencies are not transitive
16:42ninjuddtechnomancy: seems to me they should be
16:42ninjuddtechnomancy: otherwise, how can someone make a lein plugin that depends on another lein plugin?
16:43technomancyno, if I use Emacs/swank to develop clojure-http-client, that doesn't mean everyone who uses clojure-http-client should also be forced to download it
16:43ninjuddthat's not what i'm saying
16:43ninjuddi'm working on a lein plugin for compiling protocol buffers
16:44kotarakninjudd: http://pastebin.org/237085 a half-way complicated build script, which defines some subprojects and a custom runNailgun task
16:44kotarakninjudd: for such custom stuff, you'll have to know a little groovy, but that's a matter of an afternoon
16:45ninjuddhow can i get a dev dep for my plugin to be available to someone using my plugin?
16:45ninjuddtechnomancy: do i have to make it both a dev dep and a regular dep?
16:45technomancyoh, I see. if A has a regular dependency on B and C has a dev dependency on B, C will pull in A on "lein deps"
16:45technomancybecause the regular dependency *is* transitive
16:46ninjuddso if i have a dev dep on A, it will pull in B too
16:46ninjuddok, so in my case i just need to make the library both a dev and regular dep
16:46ninjuddkotarak: cool, i'll take a look
16:48stribbhi there, can someone tell me why all the line numbers in my errors are 0?
16:48ataggartstribb: because the code was entered in at the repl?
16:49stribbno, first arg: java -cp clojure.jar clojure.main ~/clojure/sudoku.clj
16:49ataggartah, no idea then.
16:49lancepantzstribb: put a pastie up
16:50ninjuddtechnomancy: problem is that it really is only a dev-dependency, not a regular dependency
16:50stribblancepantz: of the code or the commandline session?
16:50lancepantzcode
16:50lancepantzgo ahead and put your trace as well
16:50ninjuddtechnomancy: so people who aren't doing development will get the dep anyway
16:51stribbhttp://pastebin.org/237090 # code
16:52stribbhttp://pastebin.org/237091 # terninal session
16:53stribb(using the stable 1.1 release)
16:55kotarakstribb: http://pastebin.org/237094
16:56stribbkotarak: so that makes a big array of items then applies to hash-map? cute
16:56stribbbut .. the code isn't really my problem right now, it's how to develop it :|
16:56kotarakstribb: well, that was your code.
16:57kotarakstribb: your flatten-pairs is better written as reduce. And your error stems from the missing apply.
16:57stribbok :)
16:58stribbhowever, without the hint about which line the bug is on, I'm going to be coding in the dark a little
17:00ataggartthat's what makes working in the repl so handy
17:00kotarakstribb: I can only sketch my dev style: I work only in properly set up projects. I edit code in a file and send it from the editor to a clojure server running in the background. Then I do testing from a Repl in my editor. Then the line numbers are always set up correctly. I use Vim with VimClojure. Emacs + SLIME does similar things, and I think enclojure and ccw work similar for the big IDEs.
17:02stribbyeah, I spent a while both on Linux and on the mac here trying to get a slime setup working
17:02tcrayfordkotarak: confirm that the big IDE's all have repls
17:02tcrayfordstribb: where's the problem?
17:02stribbsomewhat stymied by the abundance of erroneous docs
17:03kotaraktcrayford: the problem is called "SLIME" ;)
17:03tcrayfordI like SLIME
17:03kotaraktcrayford: but it seems tricky to set up correctly.
17:03tcrayfordits not that hard
17:03tcrayfordyou follow the instructions on lein's readme
17:03tcrayfordand use the emacs package manager
17:03stribbit might be easy to set up correctly, but it's hard to debug once it's set up wrong
17:04stribbmaybe by using aquamacs I'm going off-piste a bit
17:04tcrayfordstribb: what problems are you having?
17:04tomojI've had more trouble on the mac
17:04tomojin ubuntu it always works flawlessl/y
17:04stribbkeeps waiting to establish a connection
17:04tcrayfordare you just running M-x slime?
17:05tomojgnu emacs for mac seems to work alright, but not great
17:05tcrayfordtomoj: there's a fork out there somewhere with fullscreen support
17:05tcrayfordtomoj: on github
17:05tcrayfordusing the cocoa emacs stuff
17:05stribbtcrayford: yes I was
17:06tcrayfordstribb: I get that as well
17:06tcrayfordjust checked
17:06tcrayfordI use lein for everything these days though
17:06tomojcool, I just meant the clojure-mode/slime install process always seems to not work quite right on the mac
17:06stribbit says: java.io.FileNotFoundException: Could not locate swank/swank__init.class or swank/swank.clj on classpath: (NO_SOURCE_FILE:0)
17:06stribbon the inferior-lisp buffer
17:06tomojthat's not an emacs setup problem
17:07tomojyou need lein-swank in your dev-dependencies
17:07stribbspent some tme grepping the net trying to find the file but couldn't
17:07tcrayfordtomoj: he's not using lein (I don't think)
17:07stribbI'm not currently using lein
17:07tcrayfordI'd reccomend it
17:07tcrayfordit removes a lot of pain
17:08stribbI have no aversion to it but I don't yet know what it's about
17:08tcrayfordbefore lein I didn't even use clojure (because of how painful it was)
17:08tomojwhat are you using?
17:08tomojmaven?
17:08clojurebotclojure-maven-plugin is http://github.com/talios/clojure-maven-plugin
17:08tcrayfordhe's just using slime from emacs
17:08tomojoh...
17:08tcrayfordwhich is sorta deprecated now iirc
17:09tomojso you need to find a lein-swank jar and copy it in manually
17:09tcrayfordnope
17:09tcrayfordhe needs the swank-clojure jar
17:09tcrayford(which he needs lein to get, yay!)
17:09stribbokay, assuming I can get somewhat comfortable with Clojure, I'd like a comfortabe dev environment to use with emacs
17:09tomojoh, heh
17:09tcrayfordstribb: install lein then
17:09stribbis lein a popular way?
17:09stribbok
17:10tcrayfordyeah
17:10tcrayfordsomething like 90% of the clojure projects on github use lein
17:10tcrayfordjust make sure you read the wiki article about getting lein setup with slime/swank
17:10tomojI don't see swank-clojure on clojars
17:10stribbsplendid
17:11tomojoh, there it is
17:11tomojhttp://clojars.org/repo/swank-clojure/swank-clojure/1.2.0-SNAPSHOT/swank-clojure-1.2.0-20100502.112537-13.jar
17:11stribband is there a stable lein? lein 1.1.0 is good?
17:11tcrayfordyeah should be fine
17:12tcrayfordit has its own updating system (`lein update`) that should help
17:12stribbsorry, I shouldn't need so much hand-holding :(
17:12tcrayfordstribb: are you on windows or unix?
17:12stribbno, os x: I couldn't bring myself to call it unix
17:12tcrayfordthat'll do
17:12tcrayfordlein is somewhat icky on windows right now (from what I've heard)
17:12tcrayfordsee http://www.assembla.com/wiki/show/clojure/Getting_Started_with_Emacs
17:12sexpbot"Getting Started with Emacs | Clojure | Assembla"
17:13stribbthanks
17:13tcrayfordbut you probably want proper slime right?
17:13stribbideally
17:13tcrayfordwith all the nice ide-like features and such
17:13tcrayfordright
17:13tcrayfordso install lein
17:14tomojno need to customize inferior-lisp-program when using lein-swank
17:14tcrayfordyeah
17:14tcrayfordyou just run `lein swank` inside a project directory and everything works
17:15tcrayfordyou have to follow the hacking instructions on lein as well, otherwise you can't use swank
17:18stribband is the dev version of lein able to work with a stable clojure?
17:18tcrayfordyes
17:18tcrayfordor a new clojure, or whatever you want
17:18stribbgood stuff
17:18tcrayford(I'm using, and happy with 1.2)
17:30stribbbah,
17:30stribbException in thread "main" java.lang.IllegalAccessError: flatten is not public (classpath.clj:1)
17:30stribbso I guess lein dev isn't compatible with clojure 1.1 after all
17:31tcrayfordis there any reason you want to be using 1.1?
17:31stribbtcrayford: I happen to like stable versions
17:31tcrayfordfair nuff
17:32stribbif the git head is stable enough, fine
17:32kotaraktcrayford: 1.2 broke several times pretty hard
17:32tcrayfordI have an older version of lein that I use with 1.1, works fine
17:33stribbmeh, in for a penny, in for a pound
17:41alexykninjudd: so I realized when I tried to convert a defn to defmacro like you suggested yesterday, I have to replace each let [x...] with let [x# ...], along with x's usage, to avoid symbol capture errors, correct?
17:41ninjuddalexyk: yes, that's right
17:42alexykninjudd: painful for large defn
17:42alexykI ended up just doing a functional param to do the guts, even though it's a bit slower with parameter passing
17:43ninjuddalexyk: if you need those let values in the guts though, you have to do symbol capture
17:43ninjuddalexyk: that's probably better.
17:43alexykninjudd: using ~'x syntax?
17:43alexykif I were to do a macro
17:44ninjuddalexyk: right, in the lets, but not where you are using them
17:44ninjuddor you may need it both places...
17:45ninjuddyeah, you do
17:45alexykninjudd: so would I say, (let [~'x (make-x)] ... x) ?
17:45ninjuddalexyk: no, i was wrong. it would have to be (let [~'x (make-x)] ... ~'x)
17:45alexykargh, even uglier
17:46ninjuddthat is only if the guts need those let values
17:55zakwilsonIt appears in my testing that using keywords as map keys is slower than using strings. Why is that?
18:00ataggartmicrobenchmarks are fun
18:01stribbtcrayford: thanks. It's still not working but I'm tired and I'll get back to it fresh tomorrow
18:01stribbcheerio
18:03DrakesonDo you happen to know why clojure-mode does not enable font-lock-mode by default in recent emacs (24.0.50.1) ?
18:11defnman i wish i could have made it to the pragprog clojure thingamajig
18:11defnall these tweets are making me jealous
18:14ataggarta co-worker I introduced to clojure went
18:14ataggartI'm stuck in the office
18:22tcrayford defn: agreed
19:24technomancycan you compile a binding form that rebinds a var that hasn't been required yet?
19:24technomancymight have to eval there... ugh
20:10riddochcI'm curious... the lancet run-once logic at the end of chapter 6 of programming clojure rules out using any of clojure's built-in concurrency techniques... but it was written pre-futures.
20:11riddochcAnybody revisited lancet lately to rethink the run-once logic?
20:16raekhrm, clojure.lang.Cons is not a list?
20:16raek,(list? (read-string "'foo"))
20:16clojurebotfalse
20:16scgilardiyou may want seq?
20:17raek,(class (read-string "'foo"))
20:17clojurebotclojure.lang.Cons
20:17raekI'm trying to reuse the clojure reader
20:17raekfor a toy language of mine
20:18scgilardifor detecting "form like things", seq? is the right predicate.
20:18raekah...
20:19raekthe doc of list? is pretty clear...
20:19raek"Returns true if x implements IPersistentList"
20:19technomancyraek: the list? predicate is not really much use.
20:19technomancyyou might prefer the seq? predicate
20:19technomancyoh, wups
20:19technomancyyeah, what he said
20:20scgilardi:)
20:20raekmy goal is to make a homoiconic stack-based toy language
20:21raekthat eventually will be compiled into JVM byte code
20:21hiredmanraek: and you get why 'foo is a list to the reader?
20:21hiredmanor a seq as the case may ne
20:21hiredmanbe
20:21raek'foo -> (quote foo) ?
20:22hiredmanright
20:22raekthe ' is only syntactic sugar, right?
20:22hiredmanright
20:22raekso, I will make a language that is defined in terms of clojure data structures
20:25riddochcHm. Perhaps lancet isn't really used outside of being a book example, on account of leiningen.
20:26lancepantzriddochc: lancet is pretty dead, aside from the implementation within in lein
20:26tomojare vectors and maps not "form-like things"?
20:26tomoj,(seq? '[foo])
20:26clojurebotfalse
20:27hiredmantomoj: if you want to be inclusive of "things that don't print in parens" use coll?
20:27tomojhmm
20:27tomojthen you get more than I want, but maybe that's ok
20:27hiredmanno, coll? is IPersistentCollection
20:27hiredmannot Collection
20:28tomojnot all IPersistentCollections have literal reader syntax, though, right?
20:28hiredmanI believe there are three that don't
20:29hiredmansorted map/set and queue
20:30tomoj,(eval (-> (clojure.lang.PersistentQueue/EMPTY) (conj '+) (conj 1) (conj 2)))
20:30clojurebotDENIED
20:30tomojd'oh
20:30tomojwell, it doesn't work
20:30tomojI guess I'd really want to check specifically for lists, vectors, sets, and maps
20:31arohnerwhat was the name of the fn to reset the methods on a multimethod?
20:32tomojsorted-sets and sorted-maps self-eval just fine
20:33tomojactually, they eval to unsorted versions it seems
20:35tomojConses eval like PersistentLists
20:37tomojwhy is it that you can't use with-meta on a Var? I mean, I know it's because they're not IObjs, but is there a reason for this?
20:38technomancytomoj: maybe because you can't dup a var?
20:38technomancysince they're not anonymous
20:39tomojah, that's why we need reset-meta! and friends I guess
20:39technomancytry vary-meta maybe?
20:39tomojvary-meta requires IObj too
20:39tomoj(it just calls with-meta)
20:39technomancyalter-meta! is what I meant
20:40tomojunfortunately clj-sandbox blacklists it
20:40tomojs/un//
20:40sexpbotfortately clj-sandbox blacklists it
20:57maravillasthat looks like a bug with sexpbot
20:57tomojwhat does
20:58maravillasremoved both "un"s from unfortunately
20:58maravillaseven though you didn't add a g flag
20:58tomojyeah :/
20:58tomojimo any output at all there is a bug
20:58maravillasheh
21:00tomojs/h.h//
21:00tomojwonder if it only takes literal strings, not regexes?
21:00maravillashm
21:01tomojs/w.*f/foo/
21:01sexpbothm
21:01tomojoops
21:01tomojs/o.*p/foo/
21:01sexpbotfoos
21:01tomojoh, neat
21:01maravillashttp://github.com/Raynes/sexpbot/blob/master/src/sexpbot/plugins/sed.clj i'm assuming
21:04lancepantzanyone use the zenburn theme for emacs?
21:05slyphoni used to
21:05slyphonforget what i'm using now
21:05mmarczykI do
21:06mmarczykI remember technomancy posted a zenburn-coloured snippet in the widefinder days, plus zenburn is included with the Emacs Starter Kit, so perhaps he does also :-)
21:06lancepantzdoes it look like this: http://i.imgur.com/AjtAU.png
21:07mmarczyknope
21:07mmarczykhttp://p.hagelb.org/wide_finder.clj.html
21:07sexpbot"wide_finder.clj"
21:07mmarczyk^-- that's what it looks like
21:08lancepantzyeah, i didn't think i had it right
21:08lancepantzi'm using his starter kit, do you know how to enable it?
21:08mmarczyk(require 'zenburn) (zenburn), I guess
21:09technomancylancepantz: M-x zb in the starter kit, but if you invoke it after invoking other color themes it won't look right
21:09technomancyI always do it on a fresh instance.
21:09mmarczyktechnomancy: might that mean you use different themes on different occasions?
21:10technomancymmarczyk: I don't use a color theme when I'm going to be connecting to an instance from emacs -nw, since they usually don't look decent in a terminal
21:10mmarczyktechnomancy: incidentally, I am overawed after reading your latest blog entry
21:10technomancyheh, overawed? that wasn't the intention. =)
21:11mmarczykI keep it open and treat it as a TODO list :-)
21:12slyphonspeaking of blog entries, i dunno if everyone had seen this but me, but this had me cracking up earlier today: http://james-iry.blogspot.com/2009/05/brief-incomplete-and-mostly-wrong.html
21:12sexpbot"One Div Zero: A Brief, Incomplete, and Mostly Wrong History of Programming Languages"
21:12mmarczykslyphon: yeah! that's cool :-D
21:12slyphonoh man, i was dyin
21:13slyphoni think the python one was my favorite
21:13slyphon"Dutch programmer Guido van Rossum travels to Argentina for a mysterious operation. He returns with a large cranial scar, invents Python, is declared Dictator for Life by legions of followers, and announces to the world that "There Is Only One Way to Do It." Poland becomes nervous."
21:13tomojputting all the stuff you'd normally put in a wm in something external sounds interesting -- could we do it in clojure?
21:13tomojneed X11 bindings I guess?
21:14tomojs/stuff/config/
21:14sexpbotneed X11 bindings I guess?
21:14tomojgrr
21:14mmarczykslyphon: yup, that's a good one :-)
21:14technomancytomoj: there's an X java library, but it's pretty ancient
21:14tomojyeah, I tried to find something once before and gave up
21:15tomojmaybe you could have a thin server using a sane X library that clojure talks to?
21:15slyphontomoj: you're scaring me, what are you considering?
21:15mmarczyktechnomancy: out of curiosity, do you find it possible to do stuff for a couple of hours straight at your coding desk...? or do you take breaks often?
21:15tomojI just would like very much to replace my xmonad config file with clojure
21:15lancepantztechnomancy: can you think of why M-x zb would not be matched on my machine?
21:16technomancymmarczyk: pee breaks mostly. =) but yeah, I sit down for a couple hours a day on average.
21:16lancepantzi tried from terminal, explicitly passing init.el and from aquamacs
21:16mmarczyktechnomancy: that's so outlandish I'm dying to try it ;-)
21:18technomancylancepantz: my bad; that's a personal alias. M-x color-theme-zenburn
21:19lancepantztechnomancy: got it, thank you
21:20tomojslyphon: :P
21:24slyphonargh
21:24slyphoni really hate some rubyists
21:24riddochcslyphon: which rubyists?
21:24slyphontoo much focus on "elegance" and "designer eyewear" and not enough focus on "robustness" or "correctness" or even "defensive programming"
21:25slyphonthere are too many toys out there
21:25riddochcAhhh. Evidently, new glasses don't necessarily result in better code. ;)
21:26riddochcI got new glasses last July, around the time I first heard about Clojure. They're not designer glasses, but they do. And I've come to quite enjoy Clojure.
21:26tomojyou want rubyists to publish less code?
21:27slyphontomoj: there's a tendency in the ruby community to release projects that promise a lot, have a slickly designed project page, and really don't deliver the goods
21:27slyphonthere's a real heavy "self-promotion" and "hype" vibe in a lot of the community
21:28riddochcI'd be satisfied if *every* programmer spent a little more time with thinking about what they're doing and testing and such. I think a large part of the problem is independent of language, myself. The industry would be a *very* different place if having good code were more important than being first.
21:28slyphonindeed
21:29tomojah, yeah, I see
21:29slyphoni mean, not anything against this lib
21:29slyphonhttp://outoftime.github.com/sunspot/
21:30slyphoni've never used it
21:30slyphonbut if you were to pretend that it actually sucked
21:30slyphonand then multiply that by 500 *other* projects that claim to do cool shit
21:30tomojyes, rubyists do seem extraordinarily concerned about glamour
21:30slyphonexactly
21:31slyphonit's fucking annoying
21:31slyphonthe other grouchy guys on my team used to refer to it as "pants", as every ruby developer we interviewd seemed to be wearing designer jeans on their interview
21:32slyphonsorry, i'm done
21:32Hodappit's okay
21:32Hodapprant on
21:32slyphon:D
21:33lancepantzi know what you mean
21:33slyphoni guess we'll just have to wait and see what clojure's flaws are :)
21:33lancepantzmakes me ashamed to be a ruby programmer at times
21:34lancepantzall the egobloggers too
21:34slyphonthe thing that gets me is that i've been a professional developer working in ruby for the past 5 years, and have built some stable and even fairly complex systems in ruby that are in production
21:35slyphonthe problem is, everytime one of these 'egobloggers' makes a claim they can't back up...
21:37lancepantzi always get a kick out of blog posts with ass backwards code on them
21:37slyphon:)
21:37lancepantzi used to read leah culver's blog, the chick who founded pownce for that reason
21:38slyphonhttp://xkcd.com/386/
21:38sexpbot"xkcd: Duty Calls"
21:47riddochcclojurebot: who wrote you and where can I find your code?
21:47clojurebotcode-review is <rhickey> yikes
21:48riddochcHm. Not *quite* the variety of non-sequiteur I was expecting. ;)
21:48tomojhiredman, http://github.com/hiredman/clojurebot
21:48riddochcAhh. Thanks, tomoj.
21:49tomojI wonder if clojurebot knows that
21:49tomojclojurebot: who is your master
21:49clojurebotc'est bon!
21:54mmarczykwow, what a fantastic rant happened just now
21:54mmarczykway to go, slyphon! :-)
21:54slyphonhahahahaha
21:54mmarczykI'm glad I haven't gone to sleep yet :-)
21:55slyphon"Be More Awesome: It's Important"
21:55mmarczyk:-)
21:57riddochcHave fun, everyone.
22:49wahzas a first guess, what kind of data building blocks would be suitable for a binary tree type structure? (e.g. vectors, records, etc)
22:49wahzwith an eye on performance
22:49wahz(context is genetic programming)
22:50wahzfrom my early toy examples, records look pretty promising