#clojure logs

2009-05-27

01:18mark_the_pirateis emacs + slime the best choice for clojure?
01:21mark_the_piratehellllllllllo :-)
01:21durka42i think the question is, is emacs + slime the best choice for you :)
01:21durka42i like vim better but that's me
01:23arohnermark_the_pirate: emacs + slime is the best choice if you already know emacs
01:23mark_the_piratewhat is your vim setup like? i use vim exclusively, but wanting to branch off into clojure it feels like i emacs+slime offers more
01:23arohnermark_the_pirate: it does, and emacs is better :-)
01:23mark_the_piratei mean with the REPL built in and all
01:23durka42well there is kotarak's vimclojure
01:23durka42which has a repl built in
01:23arohnerbut to be honest, slime is pretty powerful, but it's also a pain to keep up to date
01:24arohnerthe slime devs aren't very useful
01:24mark_the_piratehmm, i'll look into vimclojure
01:24mark_the_piratethanks!
01:47mark_the_piratehas anybody read the programming clojure beta ebook? will the paper copy be worth it?
01:52aaronharshI'm having trouble resolving an "No matching method found" error. is anyone up for looking at some code?
01:53hiredmansure
01:54aaronharshperfect. where should i paste the code? i'm guessing the problem is obvious, but there's 40 lines of code around the line that's giving me a problem
01:55hiredmanlisppaste8: url?
01:55lisppaste8To use the lisppaste bot, visit http://paste.lisp.org/new/clojure and enter your paste.
01:56lisppaste8aaronharsh pasted "No matching method found" at http://paste.lisp.org/display/80889
01:56aaronharshException in thread "Thread-0" java.lang.RuntimeException: java.lang.IllegalArgumentException: No matching method found: write for class com.sun.media.sound.DirectAudioDevice$DirectSDL
01:56aaronharshon the call to .write in play-queued-sound
01:57aaronharshi get a Reflection warning for that line
01:57hiredman~javadoc com.sun.media.sound.DirectAudioDevice
01:58hiredmanah
01:58aaronharsh~javadoc javax.sound.sampled.SourceDataLine
02:01hiredmanaaronharsh: you might try casting the arguments to the method
02:02hiredman(int ...)
02:04aaronharshyou mean the arguments to .write?
02:04hiredmanyeah
02:04aaronharshhow does one cast the byte[] buffer?
02:05hiredmanactually, to start, check the types of everything
02:05hiredman(doto buffer (-> class prn))
02:07aaronharshcom.sun.media.sound.DirectAudioDevice$DirectSDL
02:07aaronharsh[B
02:07aaronharshjava.lang.Integer
02:07hiredmanahhh
02:07aaronharsh.. the three arguments to .write
02:07hiredmanwiat
02:07hiredmanno
02:07hiredmanyou only have two arguments there
02:07hiredmanand .write takes three
02:08hiredmanthe first thing that looks like an argument is actually the object the methiod is called on
02:08aaronharshwell that's embarassing
02:08hiredman"P
02:08hiredman:P
02:09aaronharshaside from actually paying attention to your code, is there a nicer way to diagnose those errors?
02:10hiredmanwell, no matching method errors mean either there is no method of that name, or there no method of that name with a type signature matching your call
02:12aaronharshthe other time i ran into the "No matching method", it was because the runtime was trying to do reflection on a private class (which is why there are type annotations on source-line and target-line). but i suppose those are weird edge cases
02:13hiredmanoh
02:13hiredmanYeah
02:13aaronharshthanks for your help
02:13hiredmansure
02:54vyDoes anybody know what's the status of Stuart's book?
02:58cataskadead tree version is shipped
07:45cemerickwhat was the fate of clojure.contrib.enum?
10:07lisppaste8scottj pasted "time function that runs n times and returns avg, min, and max" at http://paste.lisp.org/display/80902
10:07jwinterjust saw that the pragprogs are now shipping Programming Clojure. Yay!
10:09scottj_I'm trying to create a function like the builtin time but that I can pass a number n and have it evaluate the argument that many times and return the avg, min, max, and total. I've started here http://paste.lisp.org/+1QFA but I'm not sure how to finish it. the bench macro needs to eval expr at the right time, I think there needs to be a `, and maybe some vars need to be var#. any help?
10:19Chouserscottj_: when writing a macro it's always a good idea to write out an example expansion by hand.
10:20Chouseryou've got an example call there, so that's good. Now write out what you'd like the macro to produce for that.
10:21ChouserI'd recommend something like: (bench-results 500 (for [_ (range 500)] (time2 (+ 2 2))))
10:22Chouserthat should make your 'bench' macro much simpler, and then you just need to write a bench-results function.
10:35danlarkinthere's something in contrib similar to this, I think
10:50Chouserany chance import will ever allow use of the short name of nested class names?
10:51Chouser(import '(com.foo.bar.packge.OuterClass InnerClass))
10:53rhickeyChouser: I'm loathe to introduce the further overloading of . - possibly might consider aliases for classnames, but couldn't do it by default - many nested classes have non-unique names
10:54Chouser(import '(com.foo.bar.packge.OuterClass$MiddleClass InnerClass))
10:54rhickey(OuterClass is not a package above)
10:54Chouserwouldn't have to overload . to help a bit
10:55rhickeyI don;t understand that last bit
10:55rhickeyouter/middle/inner - doubly nested?
10:55Chouseryeha
10:55Chouseryeah
10:56Chouser I just mean that I wouldn't need to be able to say Outer.Inner -- I'm okay with Outer$Inner if Inner by itself were also an option
10:56rhickey. is overloaded if it is not a package name compnent separator
10:56rhickeycomponent
10:57ChouserAnyway, explicit aliases would be quite alright by me.
10:57rhickeyit adds a lot of rules to use it as both a package component separator and a package/classname separator and a class/nested class separator
10:58Chouseryes, I'm not arguing to allow Outer.Inner when Outer is a class.
11:00rhickey(import '(com.p1.p2.p3.c1 c2)) still has overloading
11:00rhickeyhttp://java.sun.com/docs/books/jls/third_edition/html/names.html#106941
11:01stuartsierraSymbol macros could handle class aliasing.
11:02rhickeystuartsierra: not really, symbol macros don't exist yet, and they have all kinds of interactions with name interpretation in various contexts
11:03rhickeyat least aliases have a known relationship to their 'expansion'
11:06rhickeyI'm extremely reluctant to add symbol macros - symbol-macrolet is all I want, nice and local
11:07stuartsierraok
11:07Chouseryikes. yeah, that's a lot of rules
11:07Chouserbut we're already allowed com.p1.p2.c1
11:08rhickeyChouser: yes, and many of them require context we don't have
11:08rhickeyChouser: not where a package name is expected
11:08Chouserah, ok.
11:09ChouserIt's just sad to see a perfectly pretty little function collapse under the weight of a couple #^Descriptors$ServiceDescriptor
11:10ChouserI had a macro for a while to try to help reduce the need for them, but it wasn't really helping.
11:10rhickeyI think aliases would be easiest and would mirror the support for namespace aliasing. I'm a little concerned people will start calling String S, and StringBuilder SB and further obfuscation, but I share the pain with some of these classnames
11:14cgayanyone interested in typos on the web pages?
11:15cgayhttp://clojure.org/concurrent_programming -- "an synchronous"
11:15cgayhighly important bug :)
11:17Chousercgay: fixed, thanks
11:36Chouserbit-shift's are all boxed.
11:40Chouserhm, but Long/rotateRight takes primitives, and bit-and is inlineable
11:44cemerickwhat is the recommended way to define enum classes in clojure these days? clojure.contrib.enum seems to have disappeared.
11:45rhickeycemerick: stuartsierra was here a while ago, was that his thing?
11:45cemerickyeah, I think so
11:47stuartsierraclojure.contrib.enum didn't work after gen-and-load-class went away.
11:47rhickeyah
11:48rhickeydoes it have utility as an ahead-of-time thing?
11:48stuartsierraI don't think so, but I'll look.
11:49stuartsierraIt never was 100% equivalent to Java's "enum" keyword, it just generated a class that extended java.lang.Enum.
11:50rhickeyI'm working on modularity issues these days, and one thing that's apparent is that making a newly named class universally accessible by name is unsustainable in the face of the various modular classloading schemes
11:50rhickeythus the problems of add-classpath and gen-and-load-class
11:50stuartsierraok
11:51rhickeyyou can't force all classloaders to be rooted in a dynamic classloader you control
11:52stuartsierraCan you migrate classes from one classloader to another?
11:52rhickeyI can't - each modular classloading system (Netbeans, OSGi, web app servers) can do whatever they want
11:54Chousercan you work with unnamed dynamically-generated classes? make non-reflective calls, etc.?
11:54rhickeyChouser: sure, through a statically-known interface
11:54stuartsierraOk. Can the framework provide a for Clojure to use?
11:54stuartsierraprovide a classloader for Clojure to use?
11:56ChouserThe JVM has got to be one of Clojure's biggest weaknesses. Of course also a big strength.
11:56rhickeystuartsierra: the problem is that there is no standard way to provide a *dynamic* classloader - so any classloader you are given you must make a parent of a new dynamic classloader - but the framework doesn't know about that
11:56stuartsierraYeah, I thought it might be something like that.
11:57gnuvinceChouser: although, were it not for the JVM, this channel would have 5 users instead of 120
11:57rhickeyChouser: these are not weaknesses - they are really the products of a good design. Putting everything in a big global bucket isn't that great an idea, from security, reliability and understandability standpoints
11:57Chousergnuvince: I know
11:57rhickeyIn following CL's global world semantics I inherited a weakness I'd like to remove
11:58Chouserany reason there aren't bit ops for longs in clojure.lang.Numbers?
11:59rhickeyI.e. when running under an app server it would be good if different Clojure web apps had some isolation from each other, having to put themselves in a single namespace map is bad
11:59stuartsierrarhickey: agreed
11:59Chouserbut local classname semantics doesn't preclude dynamic local named classes, does it?
11:59rhickeyChouser: just missing, no reason
11:59clojurebotWho??
12:00rhickeyChouser: the problem is the expectations - people use things like add-classpath and gen-and-load-class and expect them to be available everywhere
12:01stuartsierraThat's a tough one.
12:02Chouserok. I'm going to pretend bit-and supports primitive longs, and imagine that I'm not using reflection and reboxing on every call to bit-and... :-)
12:03Chouserrhickey: really? I'd be fine if something was some kind of repl-server, and add-classpath and gen-and-load in one repl had no effect in another.
12:03rhickeywhen AOT-compiled code is loaded, it is done so by a classloader I can't reparent
12:04Chouseris that a strength or a weakness?
12:04rhickeyChouser: I think that add-classpath per-REPL is likely
12:04Chouserok, cool.
12:05rhickeywhat I am doing is removing the root classloader, then moving to using the context classloader, which can be set by a REPL to be a dynamic classloader, and what you are asking for will work
12:05rhickeyand there will be an understandable context for the visibility of dynamic things
12:06stuartsierrasounds reasonable
12:13cemerickugh, customers are a joy sometimes.
12:14cemerickstuartsierra, rhickey: so enums should just go in .java files?
12:15stuartsierrafor now, yes
12:15rhickeycemerick: I guess for now
12:15cemerickOK. Worksforme.
07:15Chouser_thunderstorm
07:17rhickeyChouser: I don't want to give the impression I am anti-dynamic, Clojure is full of dynamic things. But is reasonable, IMO, to accept some limits on the dynamism of constructs (classnames) designed for static scenarios, whose static nature conveys a significant benefit - performance.
07:17rhickeyI guess the primary tension is with exception types, since the catch mechanism in the JVM is class based, forcing the use of classes in programs that wouldn't otherwise need to bother
07:18rhickeybut I appreciate your pressure to keep the source-only dynamic story a good one :)
07:20cemerickrhickey: that's only really true in a java-interop context, though, right? It seems like there could be a clojure-only try/catch that dispatched the handling of exceptions to a multimethod or something.
07:20cemericks/true/relevant
07:21rhickeycemerick: right, I've only exposed the bare mechanism at present
07:21rhickeybut personally think defining a new class for every type of problem to be pretty silly, even in Java
07:21cemerickdefinitely
07:22stuartsierraDepends on how you have to define those classes. Clojure defines a new class for every function, after all.
07:22rhickeystuartsierra: classes whose identity matters
07:22Chouser_fwiw, I've now got working my first real clojure lib for java consumption
07:22cemerickthings seem to be a lot more serene around here of late. I'm thinking that a lot of people are just happily doing work with clojure, instead of looking for solutions to language issues they're hitting.
07:22rhickeyChouser: cool
07:22Chouser_and it looks and works great.
07:23Chouser_a single .clj defines a class of static factory methods, an interface, and requires an implementation .clj
07:23rhickeycemerick: I hope so. on my end I have: modularity, chunked seqs, 'instance' and clojure-in-clojure on the drawing board
07:24Chouser_the implementation is in a separate namespace/package. You can use this on it's own from Clojure.
07:24Chouser_I can reload the whole imp file or individual vars as needed.
07:24Chousukehm
07:25cemerickrhickey: hrm, I don't rightly know what any of those are, really (though I certainly have my preconceived notions). I've just been getting things done, too. :-)
07:25Chouser_when running Java tests, I can make adjustments to the imp .clj and rerun the test without a recompilation (unlike changes made the the .java test itself)
07:26ChousukeI did some optimisation on iTerm. cut CPU consumption to less than a third when there's a lot of output, and broke blink support in the process.
07:26Chousukeall in all, a great success!
07:27rhickeyChouser_: are you using proxy to implement the interface?
07:27ChousukeI'm sure the code has a bazillion places left to optimise but I'm satisfied with removing the worst idiocy I could find :P
07:28Chouser_rhickey: yep, I'm using proxy all over the place
07:29Chouser_(proxy [Afn RpcCallback] ...) (proxy [APersistentMap RpcChannel] ...)
07:30Chouser_in fact I've got a couple places proxying APersistentMap to provide read-only access to a custom object's "members" while also implementing some particular interface for its instance methods
07:30rhickeyChouser_: is there anything about 'implement' as we've discussed that would preclude you using it instead of proxy? the model you've used (but using 'instance') is the approach I'd prefer people take vs gen-class
07:31rhickeyChouser_: heh, I was just thinking recently about making that a feature of 'instance' since I think it will be so common
07:32rhickey(exposing closed-over 'fields' via map interface)
07:40Chouser_no, instance would be fine
07:40Chouser_The one bit of hackery I've done on top of proxy is done in a macro and would work fine with 'instance'
07:41Chouser_and that's just to provide delegating to an IPersistentMap instance, so if you build that in I wouldn't even need that much hackery
07:41dnolenquestion: so does remove-ns not unload a namespace?
07:41rhickeyChouser_: cool. And is gen-class overkill for the factory and if so, do you have ideas about a simpler interface?
07:42Chouser_it is a bit much -- saying #^{:static true} each time is a bit annoying
07:42Chouser_I hadn't thought about alternatives. maybe :static-methods, and then you just use what you need?
07:42dnolenI note that using remove-ns, require doesn't actually reload that lib.
07:43rhickeyChouser_: I want to make definterface + deffactory + instance the easiest (and fastest) possible thing to do
07:43rhickeydefactory?
07:43gnuvinceIt would be more in line with defn
07:45ChousukeI don't like defactory :/
07:45Chousukedefn works because it sounds like "define"
07:46Chousuke(well, kind of, anyway)
07:46rhickeydefactory, as in - I work in defactory
07:47Chousuke:p
07:47technomancy`maybe it's the opposite of refactoring
07:49cemerickheh, that's like when I saw defonce for the first time -- "deFONZ"? I thought rhickey was exposing his Happy Days fetish. :-P
07:49danlarkinDr. Acula
07:53eivindglHi, I'm new to clojure, emacs and slime (but really impressed). I'm having trouble entering user input into the slime REPL. any idea how I can run the example using BufferedReader in this example? http://java.ociweb.com/mark/clojure/article.html#ConditionalProcessing
07:53technomancy`I love reading the promo snippets at the beginning of the Clojure book and thinking, "hey, I recognize most of those names".
07:55dnolenelvindgl: you can put data into the REPL right? (+ 1 2 3) works?
07:55Chouser_technomancy`: you have paper?
07:55technomancy`Chouser_: no, just the PDF
07:56eivindgldnolen: yes, but I want my program to read user input, and I'm not able to do that from the slime repl
07:56technomancy`oh crap; the appendix still links to Bill Clementson's "Seventeen complicated steps to hopefully get started using SLIME with Clojure as well as a bunch of Common Lisp implementations."
07:56technomancy`that page does more harm than good. =(
07:57dnolenelvindgl: sounds like you want to write a program that can be run at the shell?
07:58eivindgldnolen: yes, this is more of an emacs then an clojure question. But it would make testing easier
08:07danleidoes anyone know what the latest revision with a working add-classpath is?
08:07kotarakSomewhere around 1368. If in doubt use the release.
08:07technomancy`no such thing. =)
08:08danlei:)
08:08kotaraktechnomancy` has a point on the other hand.... :)
08:09danleiI think I'll stick with the release for some time then, thanks.
08:15technomancy`danlei: what do you want to use it for?
08:16danleitechnomancy`: repl
08:16technomancy`danlei: adding a dependency?
08:17technomancy`danlei: my strategy for deps has been just to unpack them all in one place; that way my classpath only has three entries and never needs to change. much more manageable that way.
08:17rhickeydanlei: why not put it on the classpath?
08:17danleitechnomancy`: say I create some test directory/ns and want to add it to the classpath from the repl (my sessions tend to last long), I'd use add-classpath
08:17danleirhickey: I don't restart often
08:18sddiewIf I modify clojure.jar (strip debugging info and/or remove some .class files as well as .clj to reduce size) + add some of my own classes and distribute it trough .jnlp would that be 'derivative work' (do I have to provide source code for my application?)
08:18technomancy`danlei: for each project, set your classpath to src/:test/:classes/:dependencies/
08:18technomancy`then it never has to change
08:19danleitechnomancy`: would also be an option, I agree
08:19danleido you plan to ditch it?
08:19technomancy`ditch add-classpath
08:19technomancy`?
08:20danleiwell, yes?
08:20danleisounds a little like it's discouraged
08:20technomancy`I don't use it anymore as I find the unchanging classpath a lot more manageable.
08:21technomancy`danlei: it's never worked properly for bytecode IIRC
08:21kotarakIt was maybe never really encouraged...
08:21technomancy`would have been nice to see more of a warning in its docstring though, that caused a lot of confusion
08:21danleiwell, I wouldn't use it for production code or something. at the repl, i find it convenient. but that's habits, I guess.
08:22technomancy`I actually find it less convenient since you have to manually set it in the REPL instead of having it declared somewhere.
08:22technomancy`then you restart your repl and you forget what you've added
08:22danleiwell, I always do things at the repl which aren't declared somewhere ;9
08:23danleibut I see the point
08:23technomancy`the more you diverge in the repl from what's on disk, the easier it is to get confused later on
08:23danleiI guess that depends on each persons workflow and preferences
08:26danleiThe ting is, I like dynamic control at the repl, as much as possible, thats a personal preference of mine. You're free to doubt it, but it's what I prefer. Anyways, I don't want to argue about preferences, thanks for the tip.
08:26technomancy`I just mean if you begin to rely on changes you've made without leaving a trail of what happened, you'll have trouble repeating them later on.
08:28sddiewIs removing some .class files from clojure.jar considered 'derivative work' under EPL?
08:28danleiwell, there's always history and cut and paste. that's how I work. stay in the repl for some time (maybe an hour), paste something to a file, change something here, try something there. It's just what works for me. and my sessions do tend to last long. Maybe it's just because I'm used to an image-ish approach (think smalltalk, common-lisp)
08:29technomancy`danlei: right, as long as you're diligent in making sure what's on disk matches what's going on in your current instance there's no problem.
08:44Rayneshttp://www.twopotscreamer.com/lisp-superiority-myth/ I've been reading this for 3 minutes and it feels as if it's taken half my life. :|
08:46RaynesAt least (at the /very/ least) he recommends Clojure for the implied idiots who intend to stick with LISP.
08:47rhickeydanlei: next time you restart, try 1376 for new-style add-classpath support in repl
08:48rsynnottoh, dear, he spells it in caps
08:48rhickeysddiew: no, repackaging is not derivative work
08:48Raynesrsynnott: A lot of people do. Just not the majority.
08:49rsynnottas a general rule, people who say LISP do not use LISP :)
08:49sddiewrhickey: thanks for clarifying.
08:50Raynesrsynnott: I say LISP...
08:50technomancy`Raynes: any points he gained from recommending Clojure are canceled out immediately by referring to Scala as a "modern LISP"
08:50technomancy`what a joker
08:51RaynesI agree. And besides that, that is the /longest/ thread of nothing I've ever read.
08:51sddiew,(defn (symbol "a b") 2)
08:51clojurebotDENIED
08:54durka42(eval `(def ~(symbol "a b") 2))
08:55sddiewI guess it doesn't make sense to use symbols with space...
08:55technomancy`sddiew: it's currently legal, though there's a pending patch to enforce readable symbols
08:56technomancy`speaking of which, I should bring that up again on the mailing list
08:58sddiewon the other hand might be useful (to convert easily between symbol/keyword/string etc.)
08:59technomancy`sddiew: yeah, but it's good to be able to assume that symbols can roundtrip through the reader without getting messed up
09:01sddiewmaybe something like a\ b ?
09:02technomancy`sddiew: there was talk of using |foo bar| as delimiters for symbols
09:03technomancy`not a high-priority feature for Rich to work on, I'd imagine
09:03sddiewtechnomancy`: and what if somebody would like to include | in the symbol?
09:03gnuvinceWhat's the problem with foo-bar?
09:04technomancy`gnuvince: I think this is for symbols that may come from arbitrary sources
09:04sddiewexactly
09:04sddiewlike user input etc.
09:04technomancy`sddiew: if you're interested in the feature, bring it up on the mailing list. rhickey is usually pretty good about accepting patches. =)
09:17avitalgood afternoon. i am trying to use exceptions for the first time in clojure and it seems like all my google searches led me to nonworking examples. the catch-clause seems to want a map - what structure should it have?
09:17technomancy`avital: catch takes an exception class and a name for the caught exception
09:18hiredman(try do stuff (catch Exception e (println e)))
09:18avitalcatch doesn't work at all
09:18avitali'm using :catch
09:18avitaland trying to get that to work
09:18dnolenone caveat is that Exception cannot be variable, it has to be a real java Exception classname.
09:18clojurebot?
09:18avitalcatch doesn't even evaluate in that scope
09:18dnolen(catch
09:19avitaldnolen: yeah i'm just throwing an Exception
09:19dnolennot (:catch
09:19hiredmanuh
09:19hiredman:catch?
09:19avitalthis is my code [part of compojure]
09:19avital (POST "/object/:id" (try
09:19Chousukeuse pastebin
09:19Chousuke:p
09:19Chousukelisppaste8: url
09:19lisppaste8To use the lisppaste bot, visit http://paste.lisp.org/new/clojure and enter your paste.
09:19avitaloh
09:19avitalhehe
09:19avitalthanks
09:20lisppaste8avital pasted "catch exception" at http://paste.lisp.org/display/80923
09:20hiredmane
09:20avitalwhat the hell
09:20hiredmannot 'e
09:20avitalwe are in the future!
09:20avitalamazing
09:20Chousukealso the catch thing needs to be *inside* the try block
09:21avitaljava.lang.Exception: Unable to resolve symbol: catch in this context (web.clj:3)
09:21Chousukenot (try do stuff) (catch) but (try do stuff (catch))
09:21avitalChousuke oh yeah
09:21avitalhmm it might be working now
09:21Chousukesimilarly for finally.
09:22technomancy`hiredman: yeah, every time I see someone paste a code snippet that's not highlighted in a blog or something my brain turns off.
09:22kotarakhiredman: yeah, rainbow parens were a nice idea (stole them from scheme.vim, IIRC)
09:22Chousukethe full structure is (try exprs* (catch ExceptionClass ename exprs*)* (finally exprs)?)
09:22avitalok it seems to work, i'm back to my crazy hacking now thanks guys
09:23hiredmantechnomancy`: http://www.friendlyrobotics.com/robomow/
09:24technomancy`hiredman: but can it go on IRC?
09:34cp2the real question is whether or not it can run crysis
09:37hiredmanstick a beagleboard on it
09:38hiredmansome solar panels
09:38cp2hah
10:09alrex021Are there some good real world examples of where Clojure is currently used to sole problems?
10:09sddiewfinal ebook is out, nice
10:10alrex021I am in process of learning Clojure and functional programming for that matter for the first time so hence am trying to see how it all comes together in real world
10:11dnolenalrex021: lots of people in this irc are using it to solve problems. I'm using it to rapidly iterate web user interfaces at a startup.
10:11alrex021sddiew: I just downloaded the final ebook ver couple of minutes ago. Enjoy the read so far.
10:11danlarkinI am using it to cause problems
10:11technomancyhah; nice
10:12technomancyalrex021: it's not a "real-world problem", but the mire project might be good if you want to learn how a relatively small yet complete codebase is constructed.
10:12technomancy,mire
10:12clojurebotjava.lang.Exception: Unable to resolve symbol: mire in this context
10:12technomancyclojurebot: mire?
10:12clojurebotmire is http://github.com/technomancy/mire/tree/master
10:13alrex021I come from a very string OOP background and almost 0% functional ptogramming knowledge, its some what of a mind $%#% at first. :)
10:13dnolenalrex021: totally.
10:13alrex021but getting a hack of it last few days and can see the benefits and the expressive nature of Clojure
10:14alrex021* hack=hang
10:15alrex021technomancy: thx having a look at mire at github
10:16technomancyalrex021: it's broken up into steps, so each one builds on the last incrementally. makes it easy to follow along.
10:20alrex021Generally speaking, are Clojure files (.clj) compiled to java bytecode or are the files loaded and interpreted at runtime?
10:21stuartsierraNothing is ever interpreted. .clj files are usually loaded and *compiled* at runtime.
10:22HAppyKAmikazebut you can complite them and release as a library , isn't it?
10:22alrex021I see, thanks. Reason I just ask is to have a bit better understating what happens under the hood
10:22stuartsierraYou can compile .clj files to .class files ahead-of-time (AOT), yes.
10:23alrex021I see, nice.
10:26HAppyKAmikazeare webjure and compojure working or they are still in a development state?
10:26dnoleneverything is in the development state :)
10:26dnolenbut compojure is very usable right now.
10:27tWipwebjure is fully working, I have some webjure modules in active productiom
10:27tWipproduction even
10:27tWipbut I'm the author of webjure so I'm biased...
10:27sddiew=)
10:27dnolenso is most of contrib, and Enlive- that's stuff I use mostly, as well the gargantuan mass of Java libraries you can use from Clojure.
10:28alrex021Another thing I am trying to get my head around, coming from OOP background, is that there are so many functions + macros one needs to remember. How do you know what to use when? For working with sequences, like they show in the Programming Clojure book, there are so many variations. (Again appologies as I am really new to functionally programming concepts)
10:28HAppyKAmikazesay not a great problem for me, i'm still learning clojure, exactly i read one introduction article about it, so is a "little early" to learn a web framework :)
10:29technomancyalrex021: that comes with time I guess... plus get good with doc lookup.
10:29technomancyeventually you should read core.clj top to bottom, but that's not a great place to start. =)
10:29tWipno It's never too early (or late) to learn
10:29dnolenalrex021: it is weird at first, if you're used to them being collected together by class/package. a lot of things you just won't use.
10:30dnolenalrex021: i used clojure for like 5-6 months before I even looked at the concurrency stuff.
10:30tWipbut to be honest, webjure requires you to be familiar with Java servlet things and Maven 2... compojure is more mature
10:31dnolenalrex021: one thing that offsets this is the interactivity of the REPL and Slime, very easy to try stuff out.
10:31dnolenalrex021: I recommend creating a notes.clj, I have one that's like 3000 lines long of snippets of things collected from the mailling list, and my own tests.
10:32stuartsierraor even write little test functions as you go
10:32alrex021dnolen: thanks, that sound cool, will give that a try.
10:32alrex021stuartsierra: test function? is that like unit tests :)
10:32HAppyKAmikazewhat's slime?
10:33stuartsierraalrex021: yes. There's a testing framework (mine) in clojure.contrib.test-is
10:33technomancyHAppyKAmikaze: Clojure Emacs integration
10:34stuartsierraSLIME was originally made for Common Lisp, it's been hacked to support Clojure.
10:34HAppyKAmikazeah ok thanks
10:34technomancygood luck getting the bot to tell you anything useful about it though. =)
10:34alrex021stuartsierra: oh great, is there an example of it how to create test that is?
10:34tWipisn't it Superior Lisp Interaction Mode for Emacs
10:34tWipor something like that, originally
10:34stuartsierraalrex021: yes, lots of examples in the source file test_is.clj
10:35alrex021I got SLIME for CLojure to work on my Mac with Aquamacs by the way...prety cool
10:35StartsWithKfyuryu: will you do the merge today?
10:35alrex021stuartsierra: is that in the trunk I take it?
10:35alrex021on clojure-contrib tha tis
10:36stuartsierrayes
10:37alrex021ok I got it
10:38Chousukealrex021: OOP languages generally don't help with the remembering problem either :)
10:38ChousukeI find clojure's functions much easier to keep in my head than a typical class hierarchy :/
10:39drewrI have a JVM that will not exit because of my agent activity. Any suggestions as to how to "kill" them?
10:40Chousukeshutdown-agents?
10:40tWipSystem/exit ?
10:40alrex021Chousuke: just after a decade of OOP..... Noun.verb .... when you see "verb on noun" its just takes maby some getting used to :)
10:40fyuryuStartsWithK: hi
10:40drewrChousuke: That only keeps the agents from accepting more actions.
10:40dnolenChousuke: this is true once you get it. But it would of course be nice to find all functions which can be used on lists and which on vectors.
10:40Chousukealrex021: especially since you actually need to keep in mind also how the classes interact with each other. in clojure, you have a function, and you don't need to care about how it works.
10:41Chousukeunless it has side-effects of course.
10:41drewrtWip: That doesn't work in my script environment.
10:41Chousukebut those cases are isolated :)
10:41alrex021oohh "side-effect" thats anotherone that completelly though me off. Pure function, now thats better :)
10:41StartsWithKfyuryu: hi, just pushed new actions :) repl and completitions file now are working
10:41alrex021* though=threw
10:41StartsWithKand first ant wrapper is in
10:41fyuryuStartsWithK: I want to. But I can't get your branch to build - clojure.jar dependency problems
10:42fyuryuStartsWithK: Ivy can't retrieve it
10:42Chousukealrex021: in functional setting, you don't "do" anything, so verbs don't make sense.
10:42fyuryuStartsWithK: does it build ok for you?
10:42Chousukealrex021: instead, functions are transformations
10:42StartsWithKfyuryu: can you paste me the error message, yes it builds just fine for me
10:43StartsWithKant jar
10:44alrex021Chousuke: ok I see. So functions usually are used to transform a sequences or something and usually don't modify the actual data structure itself but return a new one.
10:44Chousukeyeah.
10:44Chousukeif they do modify things, they're not functions.
10:44Chousukethey're procedures.
10:45alrex021sure, that makes sense to me.
10:45Chousuketakes a while to get into programming in functinal style, but it's much more fun when you eventually get it :)
10:46Chousuke+o
10:46tWipbut there's no enforcement... defn will still define a "function" that modifies things
10:46Chousukeyeah
10:47HAppyKAmikazein some point you have to modify something if you want to do something :)
10:47Chousukebut it's good practice to avoid side-effects until it's absolutely necessary.
10:47tWipwell until reasonably necessary, I'd say ;)
10:48Chousukeand avoid mixing a value transformation and side-effects in the same function.
10:48lisppaste8fyuryu pasted "ivy error" at http://paste.lisp.org/display/80931
10:48Chousukebut yeah, it's all just recommendations, nothing is set in stone
10:48fyuryuStartsWithK: that's after "ant compile"
10:49alrex021Chousuke: I believe so. Though a good question I have now is: Can one manage to learn functional programming well and not forgetting how to apply their OOP skills in other scenario where OOP better suit the solution to a given problem. (Just because the two are quite different..)
10:50StartsWithKfyuryu: no, just "ant jar" compile will be executed by jar command
10:50StartsWithKtarget*
10:51StartsWithKi'll remove most of build.xml later, and use CLOAK to compile itself, build.xml will be there just to get initial deps
10:51StartsWithKat least until i add ivy wrapper
10:51kotarakStartsWithK: hi. I found some minor issues with the configurations.
10:51Chousukealrex021: you can write in functional OOP style too: your objects are simply maps with attributes, and your "methods" are the functions that you specify are allowed to operate on maps with certain attributes.
10:52StartsWithKkotarak: in your ivy module build?
10:52kotarakStartsWithK: yes. the mapping between the configurations across modules were not correct.
10:53StartsWithKkotarak: how did it build then? it worked for me in the end, but i must say i didn't look at generated jars
10:53Chousukealrex021: of course, since they're just maps, there's no enforced encapsulation, but it's not the end of the world :)
10:54kotarakStartsWithK: the build is ok. But when you depend on the "compiled" configuration this was only considered for the direct dependency. Transistive dependencies also retrieved the "source" configuration.
10:55StartsWithKkotarak: i was thinking about the speed problem, and i think there is a solution, but i must test that, if all classpaths used by each module were present in <java ..> call, maybe then fork would not be needed.
10:56StartsWithKkotarak: you found the solution for that?
10:56alrex021Is it possible to use doc-find to only find specific type of fucntions (Say for example only give me functions that can transform lists..)
10:56kotarakStartsWithK: no. I have absolutely no clue about PermGen and whatever.... I'm normally not a Java guy...
10:57alrex021I am trying to find an effective way to use doc-find... How do you search for terms when you don't know the names of things you looking for...
10:57StartsWithKfyuryu: any luck with the build?
10:59fyuryuStartsWithK: yeah. I copied my locally built clojure.jar into lib/clojure-1.0.0.jar in the repo's folder and it went ok
11:00StartsWithKkotarak: well 5 min is not that bad if only one person does it and others pull from the repo
11:00fyuryuI wonder why ivy can't get it itself
11:01kotarakStartsWithK: yeah. I can live with that. That's the idea: the you pull pre-compiled jars from the repo....
11:01StartsWithKfyuryu: there is no ivy on your system, ant build downloads one, later ivy can get anoter ivy from maven repository
11:01kotarakStartsWithK: a solution would be nice, though
11:01StartsWithKkotarak: i'll try to find one, but i think it will require that build is done from clojure script and not ant with all that forking
11:02StartsWithKfyuryu: now you can copy lib/ to bin/ and do export CLOAK_HOME=full/path/to/bin
11:02StartsWithKafter that ./cloak.sh will be your main launcher
11:02kotarakStartsWithK: I think the recursive build creates to much classes. But I'm not sure. As I said: I have no clue about these things...
11:03StartsWithKkotarak: i think that is the problem
11:04StartsWithKso a single clojure build that would add-classpath to all the classpaths used and different settings for compile dirs for each module sould work, but that will need some testing
11:04StartsWithKfyuryu: so chmod +c cloak.sh && ./cloak.sh -q repl-rlwrap
11:04StartsWithKshould generate rlwrap based repl script for cloak project wiht completitions
11:05StartsWithK+x*
11:09fyuryuStartsWithK: I'm on Windows, so I'll have to write a .bat
11:09StartsWithKkotarak: if i bring up to date this ~40 clojure lib packages i made, would you consider hosting them in your repo? (they are like 6mb with clojure and contrib)
11:10fyuryuStartsWithK: I just pulled your changes and the build failed, but this time on ssh2
11:10kotarakStartsWithK: I can do that, but I have to watch traffic.... But for a start I can do that, yes.
11:11StartsWithKkotarak: http://code.google.com/p/truba/ its here, but i'll need a week to fix it
11:11StartsWithKfyuryu: for now just go to ivy.xml and remove ssh2 dependancy then
11:11kotarakStartsWithK: np, just tell when I should pull the stuff into the repo.
11:12StartsWithKkotarak: nice :) i'll try to repackage other half too
11:12StartsWithKand send them patches to have builds :/
11:15kotarakStartsWithK: wow, there are also projects of mine. :) You can safely ignore those. I will move those to Ivy in the next days.
11:17StartsWithKkotarak: the end goal is 80 libs i found, maybe there are some new ones now
11:18StartsWithKand cloak based build that could be used for easy access to them
11:27StartsWithKfyuryu: could the problem with clojure be the file:/// url i use? is there something else i should use for win?
11:36fyuryuStartsWithK: file:/// should work. Some other jars were fetched
11:38StartsWithKfyuryu: other jars don't use (except ssh2) repository from file:/// pattern, i'll try to get my hands on a win box to test this
12:21danleirhickey: thank you
12:28rhickeydanlei: for what?
12:38danleirhickey: <rhickey> danlei: next time you restart, try 1376 for new-style add-classpath support in repl
12:38danlei
12:39rhickeyoh, sure, it was on the todo list, you and Chouser_ just nudged me into doing it today :)
12:39danlei:)
12:51tashafa,(doc add-classpath)
12:51clojurebot"([url]); Adds the url (String or URL object) to the classpath per URLClassLoader.addURL"
15:04waviswhat is this?
15:04wavis#<core$_SLASH___3350 clojure.core$_SLASH___3350@6b371a57>
15:07cmvkklooks like a function, wavis
15:08cmvkkspecifically, the divide function.
15:09wavisokay... i got it with this expression:
15:09wavis2147483647 / 2147483648
15:10cmvkkyeah, what are you trying to do there? if you want a ratio, you shouldn't have spaces around the slash.
15:10cmvkkif you want a divide expression, you want (/ ...)
15:10wavisoh, ok. i'm obviously new
15:10cmvkkyeah math is a bit weird in clojure
15:11wavisi'm here because i think i need a language that handles numbers correctly... there's a Rational class I've scavenged in scala, but I'm realizing that really big numbers might give it trouble
15:12cmvkkclojure should work fine with big numbers of any type, i think
15:12cmvkkalthough i've never tried it with ratios before
15:13wavishrm, well thanks. :) it's time for me to head home from work though.
15:13waviswill investigate further soon
15:13replaca,(2147483647 2147483648)
15:13clojurebotjava.lang.ClassCastException: java.lang.Integer cannot be cast to clojure.lang.IFn
15:13replaca,(/ 2147483647 2147483648)
15:13clojurebot2147483647/2147483648
15:14wavisoh clojurebot is cool
15:15timothypratleyClojure 1.1.0-alpha-SNAPSHOT
15:15timothypratleyuser=> (.sleep Thread 1)
15:15timothypratleyjava.lang.IllegalArgumentException: No matching method found: sleep for class ja
15:15timothypratleyva.lang.Class (NO_SOURCE_FILE:0)
15:15timothypratleyanyone else get this?
15:15clojurebotthis is not a bug
15:17cmvkktimothypratley, you want the static method syntax. (Thread/sleep 1)
15:17cmvkkor well, at least doing it that way doesn't cause an error
15:18timothypratleywell... the static way works for (Thread/sleep 1)
15:19timothypratleybut
15:19timothypratley(Thread/sleep 1)
15:19timothypratley(println "fine")
15:19timothypratley(defn forever[x] (while true (Thread/sleep 1) (print \-)))
15:19timothypratley(forever 1)
15:19cmvkkyes that runs forever, shouldn't it?
15:20timothypratleyah I think i'm just missing flush
15:20cmvkkoh i see what you mean
15:23timothypratleywith flush it does what I expected :)
15:24timothypratleythanks
15:24cmvkkdoes it print out one dash at a time for you? i was surprised to find that even with flush it printed out like a hundred at a time, every few seconds.
15:25timothypratley1 is millisecs
15:25timothypratley(defn forever[x] (while true (Thread/sleep 100) (print \-) (flush)))
15:25timothypratleythat looks a bit nicer :)
15:26cmvkkoh, so it does. in that case, i'm not sure how it only filled up half the screen for the 30 seconds i let it run.
15:26cmvkkoh well.
15:50amitavahi, clojure nube - experienced oo developer - need advise
15:50amitavaa typical piece of java code (from apache poi)
15:51amitavaInputStream inp = new FileInputStream("workbook.xls"); HSSFWorkbook wb = new HSSFWorkbook(new POIFSFileSystem(inp)); ExcelExtractor extractor = new ExcelExtractor(wb);
15:52amitavaobjects used to construct object - in turn used to construct another object
15:52cmvkkyes
15:52amitavaakin to the .. macro
15:53amitavaany shortcut to this pattern?
15:54danlarkinamitava: yes, checkout ->
15:54danlarkin(doc ->)
15:54clojurebot"([x form] [x form & more]); Threads the expr through the forms. Inserts x as the second item in the first form, making a list of it if it is not a list already. If there are more forms, inserts the first form as the second item in second form, etc."
15:55amitavapardon my ignorance - but can u use the java snippet to demonstrate?
15:55cmvkk(-> (FileInputStream "workbook.xls") POIFSFileSystem. HSSFWorkbook. ExcelExtractor.)
15:56amitavawow - that's cool :-)
15:56cmvkkthat should be FileInputStream. "workbook.xls"
15:56cmvkki forgot the dot
15:56cmvkki think it works that way anyway
15:56cmvkk,(-> (String. "Hello") StringBuilder.)
15:56clojurebot#<StringBuilder Hello>
16:03amitavaanother question - (defn fname "foo.txt")
16:03hiredmandef
16:03amitava(FileInputStream. fname)
16:03hiredmannot defn
16:03amitavajava.lang.IllegalArgumentException: No matching ctor found for class java.io.FileInputStream (NO_SOURCE_FILE:0)
16:03hiredman~jdoc java.io.FileInputStream
16:04amitavaon the other hand - (FileInputStream. "foo.txt") works
16:04cmvkkyeah you probably meant def not defn
16:05cmvkktry (class fname) and see if it gives you String.
16:05amitavaduh - nube afterall :-(
16:05amitavathx
17:06ozzileeDoes the ns macro syntax make anyone else want to tear their hair out, or is it just me? How do I exclude clojure.core/compile? (:refer-clojure :exclude compile) doesn't do it.
17:07Chouserit's not just you
17:07Chouser(ns foo (:refer-clojure :exclude [compile]))
17:08dreishIt's nothing that couldn't be fixed by more extensive documentation.
17:08dreishns deserves its own long page.
17:09Chousertrue
17:09cmvkkTHIS. the namespaces page doesn't really describe it at all.
17:09ozzileeHrm, it still won't work. "can't def compile because namespace foo refers to:#'clojure.core/compile"
17:09ozzileeYeah, documentation would help.
17:09Chouserozzilee: the namespace needs to not exist when you do the ns call.
17:10Chouseror you can just un-map it afterwards
17:10ozzileeChouser: Let me start up a fresh repl here.
17:10Chouser(ns-unmap *ns* 'compile)
17:12ozzileeAh, (:refer-clojure ...) needs to be the first line in (ns ...)
17:13ozzileeUh, nevermind.
17:13ozzileeEither my mind or my computer is playing tricks on me :-)
17:20ozzileeHere's a start on some docs. Don't have time to expand on it right now unfortunately. http://en.wikibooks.org/wiki/Clojure_Programming/Tutorials_and_Tips#Using_the_.28ns.29_macro
18:52ozzileeI want to create a macro that returns a list of it's arguments, in quoted form. Can anyone show me how this is possible?
18:53ozzilee(defmacro foo [& args] (apply quote args)) obviously doesn't work, but that's the idea.
18:56cmvkk(defmacro foo [& args] (cons 'list (for [arg args] `(quote ~arg)))) maybe
18:57hiredmanhmmm
18:58cmvkkbut even with that, there's no difference between (foo a b c) and '(a b c) right?
19:00hiredman(defmacro foo [& args] (cons 'quote args)) ?
19:00cmvkkthat's the same as (quote a b c) which only returns a
19:00cmvkkwait
19:01cmvkkyeah
19:02ozzileeI think maybe I'm making things too complicated for myself. I've got a function (compile [& exprs]) which takes quoted expressions, i.e. (compile '(alert foo) '(alert bar))
19:03cmvkkand you want to be able to do it without the quotes?
19:03ozzileeI'm trying to make a macro so that the expressions don't need to be quoted. (mcompile (alert foo) (alert bar))
19:03ozzileeYeah.
19:03cmvkkso just make compile a macro.
19:03cmvkkonce it's a macro, it automatically won't try to evaluate the arguments.
19:05ozzileecmvkk: Hrm...
19:06ozzileeOkay, inside compile I say (map compile-expr expressions). (map compile-expr ~expressions) doesn't do what I want...
19:07hiredmanozzilee: code speaks a thousand words
19:07hiredmanlisppaste8: url
19:07lisppaste8To use the lisppaste bot, visit http://paste.lisp.org/new/clojure and enter your paste.
19:07cmvkkyou can only use the tilde in a backquoted form. if you're only trying to keep the arguments from being evaluated, you don't really need to do any backquoting.
19:08cmvkkor actually
19:08ozzileehiredman: Yeah, I think I got it now, let me paste it up though.
19:08cmvkkhere's how you do it: (defmacro mcompile [& args] `(apply compile ~args)) then you use your original compile function like normal.
19:08cmvkkor something like that.
19:09cmvkkdamn that's wrong too. i'm striking out today.
19:09hiredman(defmacro foo [args & foo] `(quote ~args)) will behave just like (quote ...)
19:10cmvkki think i meant (defmacro mcompile [& args] (apply compile args))
19:12lisppaste8ozzilee pasted "late-night macros" at http://paste.lisp.org/display/80952
19:13ataggartanyone present who uses IDEA on a mac?
19:14cmvkkcompile-expr returns a string?
19:15hiredmanozzilee: seems like you could just (lets [exprs (list 'quote expressions)] ...)
19:15hiredmaner, let
19:15cmvkk(defmacro compile [& expressions] `(apply str ~(map compile-expr ~expressions)))
19:15cmvkki think that would work
19:16cmvkker, without the tilde on expressions
19:16hiredmancmvkk: depends when he wants compile-expr to happen
19:16cmvkktrue, if compile-expr has side-effects it might be a problem, or if it takes a long time.
19:16hiredmanin that case the result of the maco is just a string
19:17cmvkkwell, it's (apply str (a list of strings)) but yeah
19:17hiredmanwhich is evaluates to ittself
19:17hiredmanso, uh, ?
19:17cmvkkeither way, you'd end up with the same result though right?
19:18cmvkkhmm
19:18cmvkkactually
19:18hiredmanwhen I am told 2 + 3 = 4 I do not quible which order 2 and 3 are in
19:19cmvkki guess it depends on the context that the macro is evaluated in.
19:20ozzileecmvkk: That gives me a NullPointerException
19:20cmvkkheh, hmm
19:20hiredmana macro that returns a string, or really anything self evaluating is not a good macro
19:20hiredmanmacros are for performing transforms over code
19:21cmvkki would argue that that is not necessarily the case.
19:21ozzileehiredman: Hrm. I'm writing a javascript generator. The string output is the compiled javascript.
19:22cmvkkhave you looked at clojurescript, or whatever that project is called?
19:22hiredmancmvkk: I win
19:22ozzileeI'm just trying to avoid having to quote the forms to compile. For convenience.
19:22ozzileeYeah, clojurescipt is something different. It's a re-implementation of clojure in javascript.
19:22hiredmanozzilee: you write a compile function and a compile macro
19:23hiredmanthen you have the compile macro emit a form
19:23hiredmanwhich is a call to the compile function
19:23ozzileehiredman: That was my first attempt...
19:23cmvkkthat is basically what his original paste is, i'm thinking. which actually seems okay.
19:23hiredmanthe way you are currently writting it is a recipe for disaster, doing all the work at compile time
19:24cmvkkno, i believe that was me.
19:24ozzileeHrm. Maybe if I make the copmile fn take a list of exprs instead of & exprs? Does that make things easier?
19:24hiredmanozzilee: so you already have a compile function that takes a list of quoted expressions?
19:24cmvkktake a look at his original paste.
19:24ozzileehiredman: It takes [& expressions]
19:24ozzileeThat's not the original paste, let me annotate it quick.
19:24cmvkkit takes one expression, and the result of the compile macro uses map over it.
19:25hiredman(defmacro mcompile [& expressions] `(apply compile '~expressions))
19:27hiredmanwhere compile is your function that takes vararg quoted expressions
19:27cmvkki think the key here is the quote before the tilde. he basically had `(apply str (map compile-expr '~expressions)) which is basically the same thing.
19:27cmvkkbut with a compile function that only takes one argument.
19:29hiredman:)
19:31ozzileeOkay, it works now.
19:31ozzileeI think my problem was that I wanted to somehow (compile '~@exprs).
19:32ozzileeI've obviously been up too late.
19:33lisppaste8ozzilee annotated #80952 "sanity" at http://paste.lisp.org/display/80952#1
19:35ozzileeOne step closer to writing javascript with macros and sexprs. Thanks for the help guys :-)
19:37arohnerhas anyone gotten visualvm to work in OSX?
19:38hiredmanhttp://denverdev.blogspot.com/2008/09/setting-up-sun-visualvm-on-mac-osx.html <-- I think this guy did
19:39arohnerI've read several pages of google results
19:39arohnerand what's really frustrating is I know this used to work on my box. I don't know why it stopped
19:40hiredmandid the 1.6 jdk move?
19:40hiredmanhow is not working?
19:42arohnerwhen I try to attach to my clojure process, it takes a long time, then prints "attach: task_for_pid(47950) failed (5)"
19:48hiredmanmaybe launch the clojure repl with -Dcom.sun.management.jmxremote as an arg to java?
19:55arohnerhttp://smallcultfollowing.com/nikolog/2006/06/04/virtualdesktops-and-procmod-groups/
19:55arohnerthat finally fixed it
19:55arohnerI have no clue why
19:55arohneror rather, I have no clue why I'm seemingly the only person with this problem
19:56hiredmanno one else is updating?
19:59arohner*shrug* I don't know
20:00arohnerbut now it's midnight, and I spent a good part of the day getting my profiler working rather than profiling
20:31cadsyay!
20:32cadsjust realized that I should totally write a paper using clojure for the code implementation
20:32cadsyou can do that in a lisp :)
20:58hiredmanI should really try to write some scala or something, #scala has given me such a negative opinion of the language without ever using it
21:44adityogood morning to all..another glorious today in my path towards learning clojure
22:00cadshiredman: there's things in the scala community we don't have here in clojure yet, I got a bit jealous when I came across scala-check
22:01cadsI've seen a few snippets of scala code and I just don't seem to like it very much, but I'm interested in it too
23:25djpowellclojure-dev tells me that I can't create a new clojure file with a hyphen in the name. Is that correct?
23:31eevar2i think you should use an underscore in file names where you want dashes in the clojure name space
23:32eevar2s/where/when