#clojure log - Jul 08 2011

The Joy of Clojure
Main Clojure site
Google Group
List of all logged dates

0:02 technomancy: it does have some latency

0:02 on startup

0:04 hugod: might not check it in as it's much better as a static page =)

0:20 tomoj: is there a better way to write (if (foo) [[x]] [[x] [y]])

0:27 https://gist.github.com/10619e1362284cccd495 :/

0:27 hmm.. that's silly

0:28 https://gist.github.com/79f5d9a0899e85160005

0:29 Scriptor: tomoj: the original seems simpler, imo

0:30 (if...

1:02 kephale: ,(let [a (ref []) b (ref {:stuff 17 :a a})] (dosync (ref-set a (conj @a b))))

1:02 clojurebot: [#<Ref@a85638: {:stuff 17, :a #<Ref@7878c8: [#]>}>]

1:03 kephale: hrm…. that gives me a stack overflow in my REPL though

1:07 any clues? i'm running clojure 1.2.1… its way more annoying now that it actually worked on clojurebot : P

1:25 dnolen_: if it's any consolation, the "steve yegge" thread is 3 times smaller than the "enhanced primitive support" thread ...

1:26 hiredman: I don't believe

1:26 dnolen_: eps *233* messages

1:26 sy meager 70+

1:31 gstamp: Does "lein plugin install" honor the proxy settings in ~/.m2 ? I seem to be having problems

1:31 kephale: aha!

1:32 it is just an issue with displaying the result, that leads to the infinite loop

1:33 is there a way to avoid printing the contents of refs? i'm using lein-swank if it matters

1:36 err swank-clojure that is

1:37 dnolen_: heh, last thread as long as "steve yegge" ... "clojure's n00b attraction problem" (195) ... followed by "enhanced primitive support"

1:38 hiredman: ugh

1:47 jamiltron: I'm having a few difficulties understanding leiningen. I have a project that I can run, I make sure to run "lein classpath", then if I run "lein jar" and then try to java -jar the resulting jar, I get a "java.lang.NoClassDefFoundError: clojure/lang/IFn". However if I run the uberjar I can run it just fine. Is there something I may be missing with my classpath?

1:55 ihodes: anyone in here from MN? after tonight's Seajure, i want to try it in MN. Clojure people are awesome.

2:08 clojure mailing list makes me sad.

2:17 sean_corfield: why ihodes?

2:22 amalloy: jamiltron: lein classpath doesn't *do* anything, it just prints the classpath for you

2:22 so really you want to do something more like java -cp `lein classpath` -jar myjar.jar

2:25 tomoj: i've written (into [[x]] (when test [[y]])) before

2:25 with only small amounts of shame

2:26 tomoj: oh, nice

2:26 I was thinking of writing something that did exactly that

2:26 well not exactly

2:27 I was wanting (foo [x] (when test [y])) I think

2:27 amalloy: yeah, that looks like what you wrote

2:27 tomoj: but I thought briefly about "maybe-push" which is what into does

2:27 and more

2:27 I mean, into does more

2:30 ihodes: sean_corfield: the massive thread at the top is just pointless :\

2:37 replaca: ihodes: I have to agree with you on that. Every once in a while one of those seems to go by. But generally the list has a pretty high signal to noise ratio

2:37 sean_corfield: ihodes: i muted it in gmail... but i've been dipping in from time to time... there are a _few_ useful points in there...

2:38 ihodes: replaca: truth. it's a good community, modulo the random person who then gets to be named "the community" on whichever thread is the complaining one of the month. but honestly, it's a great community. love you guys and gals

2:39 replaca: sean_corfield: I felt a little like I was at group therapy tonight :)

2:39 sean_corfield: at least people are passionate enough to care :)

2:40 hiredman: replaca: was that the dc meet up?

2:40 sean_corfield: bay area

2:40 replaca: hiredman: no, sf

2:40 ihodes: how's the sf scene?

2:40 sean_corfield: alternates between SF and Mountain View

2:40 ihodes: wrt clojure

2:40 sean_corfield: we get 20-40 at each meeting i guess?

2:40 * hiredman is watching 'community' right now

2:41 replaca: pretty good. we've got a bunch of clojure stuff here, including real companies that are clojure focused

2:41 * ihodes is watching Toy Story 3. kind of.

2:41 replaca: it's SF so there's tech obsession everywhere

2:41 ihodes: nice. anywhere that might hire a recently graduated math major...? ;)

2:41 amalloy: replaca: you're in sf? did i meet you at one of the meetups? (i'm in LA now, ofc)

2:42 sean_corfield: GoGrid is hiring... Runa might be?

2:42 replaca: yeah, I think we've met amalloy

2:42 in real lfe I'm Tom Faulhaber

2:42 amalloy: oh

2:43 i think meetups should have mandatory IRC nametags :P

2:43 replaca: i know what you mean

2:43 sean_corfield: IRL I'm still Sean Corfield :)

2:43 replaca: :)

2:43 sean_corfield: i had to /whois replaca to figure it out...

2:43 replaca: yeah, I used to be in here enough that everyone knew the translation

2:44 ihodes: i'm really, for real, actually isaac.

2:44 replaca: but lately my PHB life has been consuming all my time and not so much clojure :(

2:45 sean_corfield: you said you'd run an auto-doc update on c.j.j?

2:45 replaca: yeah, a few days ago

2:45 do you want me to fire up another one

2:45 hopefully in the net week or so I'll have the automated one running

2:46 sean_corfield: no, i just hadn't seen it updated recently

2:46 looks good at 0.0.4-SNAPSHOT :)

2:47 replaca: that's newest, right?

2:47 sean_corfield: we still have the code display problem in the related pages - any more thoughts on that yet?

2:47 replaca: yeah, I know how to deal with it, but it's got to percolate up the list

2:47 sean_corfield: and, yeah, 0.0.4-SNAPSHOT is the latest clojure.java.jdbc

2:48 the 0.0.3 release fixed generated keys for postgreSQL / SQL Server

2:48 as showcased in the heroku article about DB-backed web apps on Heroku :)

2:49 replaca: yay!

2:49 the heroku thing just adds one more thing to the list of things I've got to experiment with

2:50 sean_corfield: although the article refers to 0.0.3-SNAPSHOT and requires the sonatype repo be added to project.clj

2:50 replaca: ahh well, things are out of date so fast in our world

2:54 ok, time to go to sleep before I start debugging anything new. Good night all.

2:56 sean_corfield: likewise

2:56 lots to do tomorrow

4:22 justinlilly: Having some trouble importing com.sun.javadoc stuff. I have tools.jar which was copied from openjdk into the ./classes directory. From the repl (which I launch as java -cp ./classes/tools.jar -cp ./classes/clojure.jar clojure.main ), I attempt to (import com.sun.javadoc.Doclet) and it gives me a classnotfound exception. Any thoughts how I can debug this?

4:22 specifically, the exception is: ava.lang.ClassNotFoundException: com.sun.javadoc.Doclet (NO_SOURCE_FILE:1)

4:29 clgv: how can I realize a count operation on a lazyseq similar to dorun. that means I dont want to have the whole sequence realized at once in memory

4:30 Afaik I will have to construct the sequence 2 times - one for counting and one for processing - when counting I have to make sure not to hold on to its head.

4:31 "construct" means calling the function that defines the lazyseq

4:31 justinlilly: can you compose the count and process functions?

4:31 or is that against the point?

4:31 opqdonut: yeah, write one loop (e.g. with reduce) that performs the processing and the counting

4:31 clgv: no. I want to know the count in advance to be able to estimate execution time

4:32 opqdonut: well then you'll have to have to copies of the sequence

4:32 justinlilly: so you want to count, but don't want to have it in memory or go over it twice.

4:32 opqdonut: so you say (let [len (count (generate-sequence)) output (process len (generate-sequence))] ...)

4:32 clgv: I have to iterate it once for counting but I want to make sure it has the dorun memory characteristic

4:33 opqdonut: well then you need to have to copies of the head

4:33 clgv: ok, thats what I thought

4:33 opqdonut: what I pasted will work since nobody is hanging on to the head returned by generate-sequence

4:34 clgv: opqdonut: exactly, thats what I tried to describe with words ;)

4:34 justinlilly: opqdonut: any thoughts on my classpath woes?

4:34 opqdonut: there could be a "lazy clone" operation for lazy sequences, though

4:34 one which wouldn't share the result, that is

4:34 but this of course works only for lazy sequences that are produces purely

4:34 clgv: justinlilly: try to use the lib folder for jars. maybe it doesnt resolve jars in the classes folder

4:35 justinlilly: clgv: "the lib folder for jars" .. which lib folder?

4:35 clgv: opqdonut: yeah the seuqence is entirely pure

4:35 justinlilly: oh I was assuming you use leiningen, do you?

4:35 opqdonut: ("this" meant the lazy clone on my last line)

4:36 clgv: opqdonut: lazy clone sounds awesome if it exists ;)

4:36 justinlilly: clgv: not at the moment, no.

4:36 opqdonut: clgv: well I'm not aware of it existing :)

4:36 justinlilly: just trying this with basic java.

4:36 clgv: justinlilly: oh. hmm how do you build?

4:37 justinlilly: clgv: currently, I'm just trying to import via the repl.

4:37 clgv: justinlilly: how did you start the repl?

4:37 justinlilly: java -cp ./classes/tools.jar -cp ./classes/clojure.jar clojure.main

4:37 where tools.jar contains com.sun.javadoc.*

4:38 clgv: is specifying -cp two times ok? or may it override the previous?

4:38 I always used cp with lists of jars

4:39 justinlilly: aha! thanks ^_^

4:39 build tools at work handle all this stuff for me. :-/

4:44 clgv: install leiningen

4:44 then setup a project as soon as you need dependencies. then you can start a repl via "lein repl" an use the import statement normally ;)

4:44 justinlilly: leiningen isn't going to be adopted as a build tool at work, so I feel that knowing how its done in java will be helpful

4:45 But thanks. I'm aware of how highly it's regarded.

4:45 clgv: opqdonut: hmm a clone-lazyseq is possible only via reflection since access to the IFn is needed

4:52 herwig: technomancy: I see, leiningen is supporting .classpath files now and there is no way to turn that off, is that correct?

4:53 because unfortunately, Eclipse writes a .classpath file, which is XML

4:56 clgv: herwig: thanks for that implicit warning :)

4:56 herwig: clgv: np

4:57 clgv: guess I should wait even longer with upgrading ;)

4:59 herwig: it's not that bad, the classpath ends up like "<?xml version=1.0 encoding=UTF-8?>:legit/entry:..."

4:59 and java ignores invalid CP entries

5:10 justinlilly: http://pastebin.com/raw.php?i=0JGKTUgn -- does anyone see a difference between these two versions? One java, the second clojure (trying to replicate the first in clojure)

5:12 herwig: justinlilly: the clj doesn't print newlines between the classes, right?

5:12 zmila: hi! I wonder how to tell (run-jetty my-handler {:port 8080}) the encoding utf-8?

5:12 when i run the server, it returns header: "Content-Type text/html; charset=iso-8859-1"

5:12 justinlilly: herwig: I can't een get it to import into javadoc :-/

5:13 herwig: justinlilly: to import what into javadoc?

5:13 justinlilly: http://pastebin.com/raw.php?i=mpnvVE2u

5:14 herwig: zmila: that's probably because your client (browser?) prefers iso-8859-1 in the accept headers in the request.

5:14 justinlilly: if I compile ListClasses (the java one) into a class file, I can use it in the javadoc command. If I attempt to do the same with the clojure one.. I get that traceback.

5:14 zmila: FF has: Accept-Charset UTF-8,*

5:16 herwig: justinlilly: have you compiled the clojure code to .class files?

5:16 justinlilly: herwig: I have, yes.

5:16 clgv: justinlilly: afaik :gen-class implements the interface in the class textinfo.test, I dont know how :name works

5:17 justinlilly: clgv: huh? :gen-class takes a :implements symbol.. right?

5:17 am I conflating something?

5:17 herwig: I'm not quite fluent with gen-class either, have to fool around every time using it

5:18 clgv: I have a gen-class without using the ":name" keyword and it just creates the class of the namespace with the given methods "-main" in my case

5:18 justinlilly: javap seems to output somethign that looks appropriate...

5:18 clgv: justinlilly: do you have a java decompiler at hand to have a look at the generated class files and what they do implement?

5:19 justinlilly: http://pastebin.com/raw.php?i=UYriMXss -- various bytecode decompiled output...

5:19 herwig: have you tried (ns texinfo.test.ClassListing ...)?

5:19 justinlilly: not yet. will try now.

5:19 herwig: and leaving the :name out

5:19 * justinlilly grumbles.

5:19 hiredman: speaking of javap: https://github.com/hiredman/javap-mode/blob/master/javap.el

5:19 clgv: herwig: that was my exact suggestion^^

5:22 herwig: also, :name would be without the package, right?

5:23 justinlilly: do I have to have a (ns) at the top of the file? http://clojuredocs.org/clojure_core/clojure.core/gen-class seems to indicate I can just call a gen-class function?

5:25 herwig: an ns clause is highly recommended, it's not needed though

5:25 you can use standalone (gen-class)

5:25 clgv: justinlilly: well if I were you I would try the examples listed here first: http://clojure.org/compilation and then modify them implementing your interface and see if it works

5:26 herwig: it does nothing at runtime though

5:27 justinlilly: didn't the modified ns clause work?

5:27 justinlilly: not really. Going to try clgv's suggestion.

5:29 herwig: justinlilly: you didn't define the equiv java class in a package, didn't you?

5:29 I mean the original java code

5:31 b/c the command line call looks for ClassListing in a classpath ./classes/texinfo/test

5:32 try: javadoc -classpath ./classes/clojure.jar:./classes/tools.jar:./classes -doclet texinfo.test.ClassListing -docletpath ./classes ListClass.java

5:32 instead

5:33 justinlilly: herwig: I didn't, no.

5:34 herwig: then that's it

5:34 justinlilly: result: http://pastebin.com/raw.php?i=SxmxjHKc

5:35 herwig: better

5:35 is clojure.jar in classes?

5:35 justinlilly: yes.

5:35 also, javap doesn't seem to show it overriding the interface like it should. one moment for paste.

5:36 herwig: add clojure.jar to the doclet path

5:36 that's probably two different class loaders

5:37 justinlilly: http://pastebin.com/raw.php?i=zer9DqG6 -- this should be overriding the start static method..

5:37 Oooh. no errors that time..

5:37 herwig: it worked?

5:37 justinlilly: so now if I figure out how to override the proper method.. it will work, I think.

5:38 javap says I'm not overriding the method. ie: impl-start should override the start method, I think.

5:38 herwig: hm, I'm not quite sure if you can implement static methods with gen-class

5:39 justinlilly: :(

5:39 "Static methods can be specified with ^{:static true} in the

5:39 signature's metadata."

5:40 herwig: oh

5:40 nice :)

5:42 that would be :methods [ ^:static [start [RootType] ReturnType]] then

5:42 ^:static being short for ^{:static true}

5:42 justinlilly

5:45 justinlilly: yay! NPE!

5:45 (of real code!)

5:45 thanks!

5:45 herwig: yw!

5:46 still, it's a bit curious, since the doc for :methods explicitly states "Do not repeat superclass/interface signatures

5:46 here."

5:47 seems like an inconsistency with static methods

5:50 lnostdal-laptop: how would you go about inheritance of fields in clojure?

5:52 herwig: lnostdal-laptop: not at all, except when you have an interop issue that requires it

5:52 what do you want to do?

5:52 lnostdal-laptop: ok, then how do you organize data? .. defrecord & Co.

5:53 herwig: lnostdal-laptop: http://cemerick.com/2011/07/05/flowchart-for-choosing-the-right-clojure-type-definition-form/

5:54 justinlilly: herwig: http://pastebin.com/raw.php?i=Qffw0GVB -- resulting code.

5:54 lnostdal-laptop: ok, i end up at defrecord following that chart ..

5:55 herwig: justinlilly: nice :)

5:56 lnostdal-laptop: that combines the flexibility of plain maps with the possibility to implement interfaces and protocols

5:57 good thing is, you can start implementing with maps and switch to defrecords as soon as you need it's features

5:57 s/it's/its

5:57 sexpbot: <herwig> good thing is, you can start implementing with maps and switch to defrecords as soon as you need its features

5:57 lnostdal-laptop: yeah, but protocols only sort of implement methods

5:58 herwig: protocols don't implement methods

5:58 lnostdal-laptop: i have several data-types that all need to share a field

5:58 "sort of"

6:00 herwig: and you explicitly need type dispatch?

6:00 lnostdal-laptop: ..and performance

6:00 herwig: maps are performant

6:01 I'd make the common fields into a separate entity

6:06 anyway, that use case works better with maps, where you'd write a "base constructor" creating maps with the common fields and then assoc from there

6:07 lnostdal-laptop: mh

6:12 herwig: cu later, y'all

6:15 clgv: oh the flowchart changed even more

6:27 lnostdal-laptop: i still don't get this .. heh .. maps is the only way? .. defrecord is just for "dead" or static map-like things that never can be extended?

6:28 ..never can be changed with regards to the fields they contain that is

6:29 clgv: lnostdal-laptop: maybe you can describe what exactly you want to do. maybe we can provide you with a sketch of how you could organize your data

6:30 lnostdal-laptop: hm, well .. let's say i have an IDMixin record that will generate an unique ID pr. instance on construction and store it in the single field of that record .. .. i'd like several other records to "inherit" from this record

6:31 ..so that when these "sub-records" are instantiated they'll get their own id-field with its very own value

6:32 clgv: lnostdal-laptop: ok. a possible funtional mapping would be to have a creation function that rtuerns a map with a unique ID. after that you cann aplly the specifiy function that creates one of the subrecords from that previous map

6:32 lol. spelling-devil caught me

6:33 lnostdal-laptop: ok, so it's maps then .. no defrecord possible?

6:34 (i know i can do whatever i want with maps and closures and what not .. but that kind of flexibility seems overkill for this..)

6:34 clgv: lnostdal-laptop: for your current description you need no defrecord but you might use it, since it can do what the map can do as well

6:34 lnostdal-laptop: ..i mean sort of creating my own oop type of thing just for this simple thing; it won't even have a type, and it won't be fast.. *shrug*

6:34 well, can it? .. how?

6:35 clgv: did you read any book on clojure yet?

6:35 lnostdal-laptop: yes, i'm reading The Joy of Clojure

6:37 clgv: oh ok, tough choise for starting - but this book should give you a good impression how to write clojure programs

6:37 lnostdal-laptop: i know CL very well so i figured it'd be ok .. and from what i can tell defprotocol, reify, defrecord etc. can't do this

6:38 clgv: one questions is do you need a generated java class for your record?

6:39 lnostdal-laptop: not really

6:41 clgv: well than a map might suffice if there are no other requirements that speakk against it

6:41 lnostdal-laptop: i'd like to have types, and the added performance of defrecord as apposed to plan maps would be great

6:41 opposed*

6:42 kryft: plain*?

6:42 lnostdal-laptop: yup

6:42 kryft: The gentleman doth typo too much

6:42 lnostdal-laptop: well, i'm not the only one

6:42 :)

6:43 (..and i'm on a boat; it's bumpy ... :P)

6:43 clgv: ok then choose a defrecord. fyi you might add a type to maps as well by specifying :type metadata - you can query it via the 'type function

6:43 lnostdal-laptop: yeah, the meta-data thing is interesting .. will it work with multi-methods and stuff?

6:43 i mean; can i do type-dispatch with it?

6:44 clgv: if you use the 'type function as dispatch function yes

6:44 lnostdal-laptop: oh

6:44 clgv: you can dispatch with any function you like

6:45 lnostdal-laptop: so defmulti/defmethod wouldn't work with type meta-data?

6:46 clgv: it will work. you implement the dispatch function like you choose to

6:46 I should have written "every" instead of "any", I guess

6:47 lnostdal-laptop: ohyeah, nvm.

6:47 got it

6:48 clgv: cemerick: finally your flowchart doesnt optically favor gen-class

6:48 lnostdal-laptop: i guess maps + type meta-data it is then .. since this seems not possible with defrecord

6:49 clgv: humm you can as well dispatch on you record type

6:49 lnostdal-laptop: yes, but records are static; i can't extend them

6:50 clgv: you can "extend" (= alter) them similar to maps - but they can't get new fields that can be used by .field like the ones specified in the defrecord statement

6:51 bsteuber: is there already a function that calculates the difference of two maps?

6:51 lnostdal-laptop: ok, i can't create sub-records then ..

6:52 clgv: lnostdal-laptop: not in the sense of subclasses in OOP languages

6:52 lnostdal-laptop: right

6:53 clgv: but does inheritance really make sense only for sharing the characteristic of having a unique id? seeing the records just as data and having functions manipulating them I would answer no

6:55 bsteuber: there was some diff function in clojure 1.3 as far as I remember

6:55 bsteuber: ic

6:56 lnostdal-laptop: i'm not following, clgv

6:56 it's nice to not have to repeat that every "sub-record" should have an id field .. and also not repeat, in the constructor, how this field is to be initialized

6:57 ..there's more records than just that single IDMixin record of course; multiple-inheritance

6:57 clgv: lnostdal-laptop: well, even in an oop approach you could just have that ID interface and an ID-Manager that assigns it to the objects

6:59 lnostdal-laptop: thinking about this i don't think maps will work without implementing some oop'ish type support library of my own .. thinking about initialization, construction etc. ... hm

7:01 clgv: lnostdal-laptop: guess I am missing some context to be able to follow that argument

7:03 lnostdal-laptop: uhm, or sub-constructors can just pass the & more argument to parent-constructors with the more or less empty map, then get a partly filled in return, then continue to fill in the rest (construct) by its own

7:03 i really don't know how you guys do this

7:04 ..no conventions? .. macros for this kind of pattern?

7:04 "..partly filled in map* in return.."

7:05 dmead: hi channel

7:05 does anyone know of an autoformatting tool for clojure source?

7:05 i've got some autogenerated code that is a bit messy

7:05 and might be easier to run through something else to make it look presentable

7:05 or readable

7:06 clgv: dmead: clojure.pprint/pprint on repl is a small advantage

7:07 lnostdal-laptop: you can create several functions, e.g. create-basic-recod which returns a map with a unique id, create-abc-record [basic-record] that creates the abc-record and so on

7:08 it's just writing your constructors as functions.

7:08 you might even hardwire create-abc-record to use create-basic-record in its body. depends on how much flexibility you need

7:17 lnostdal-laptop: clgv, http://pastebin.com/JVEDAsER .. idunno

7:18 i guess this will work .. bit of a shame it's not possible with defrecord tho

7:24 clgv: in fact you can substitute the map with a defrecord but I dont see any benefit related to your code example

7:25 you could also make a defrecord for every "class" you have and convert between them when adding custom attributes but that would be much effort only for type dispatch in multimethods

7:29 lnostdal-laptop: could you post some code? .. i don't see how this would work with defrecord

7:32 ..uhm.. or id could be a closure initialized on construction?

7:33 clgv: lnostdal-laptop: first, you should use (assoc m :element-type val) with maps instead of conj

7:33 and then you might just define a record via (defrecord BasicRecord [id])

7:34 Finally you replace the "{}" in your make-widget by (BasicRecord. (id-generator-next))

7:36 now you have a defrecord for every make-ID or make-Widget you call. but I dont see any real advantage in it - except you should have better performance when accessing id via (.id r) - but I never measured that myself

7:36 lnostdal-laptop: hm

7:37 but won't treating the record as a map convert it to a map? .. i think Joy mentioned this

7:38 maybe i'm wrong

7:38 clgv: no. defrecord has a full map implementation

7:38 if you dont want that use deftype

7:39 lnostdal-laptop: ohdamn .. i'll try that

7:39 thanks

7:41 yup

7:41 peteriserins: what would be an idiomatic way of writing breadth first search in a clojure list that represents a tree? hashing?

7:43 clgv: peteriserins: recursion with a FIFO collection?

7:44 peteriserins: clgv: +the hashing I suppose, yes

7:44 any queues in clojure?

7:45 lnostdal-laptop: http://pastebin.com/tJ3JKmq2 .. this looks good i think .. thank you so much for your patience, clgv ....... :)

7:45 clgv: peteriserins: yeah there is clojure.lang.PersistentQueue

7:45 lnostdal-laptop: ..the base problem was me having mis-read or mis-recalled something in the book here

7:47 clgv: lnostdal-laptop: though you do not need the (defrecord Widget ..) in your example

7:47 lnostdal-laptop: yeah, i see that

7:47 ..but i think having a separate type is nice, i think(?)

7:48 oh, make-Widget will actually return an object of type IDMixin

7:49 yeah, ok, fixed that too now

7:49 clgv: yes it will. you can work around that, but in my opinion you might leave the path of idiomatic clojure then

7:51 lnostdal-laptop: you are planning to do webdevelopment? maybe you should checkout the related clojure frameworks for it

7:53 lnostdal-laptop: actually .. if i use dissoc it will be converted to a map .. (bottom of page 191 in Joy)

7:53 ..and adding will mean that the record will "be" a map behind the curtains; it'll still "look like" a record tho

7:54 clgv: afaik a record *is* always a map

7:54 lnostdal-laptop: nope, it's a Java class

7:54 ..initially at least

7:54 ..that's why it's faster

7:54 clgv: yeah a java class with a map implementation

7:55 a map is also a java class ##(type {})

7:55 sexpbot: ⟹ clojure.lang.PersistentArrayMap

7:55 lnostdal-laptop: i think this is beside the point

7:55 clgv: a map is also a java class ##(type (assoc {} :x 1 :y 5))

7:55 sexpbot: ⟹ clojure.lang.PersistentArrayMap

7:55 clgv: &(defrecord bla [a b])

7:55 sexpbot: java.lang.ClassCastException: clojure.lang.PersistentVector cannot be cast to clojure.lang.MapEntry

7:56 clgv: &(defrecord Bla [a b])

7:56 sexpbot: java.lang.ClassCastException: clojure.lang.PersistentVector cannot be cast to clojure.lang.MapEntry

7:57 clgv: humm strange - that should work or throw a security error because of using something like def ;)

7:57 ,(defrecord Bla [a b])

7:57 clojurebot: DENIED

7:57 clgv: ah kk

7:58 lnostdal-laptop: afaik a defrecord is a special map class that supports native access to the attributes in its definition

7:58 lnostdal-laptop: no, it implements the map interface; it's not -a- map class

7:59 clgv: yeah well it wont do blackmagic to support IMap ;)

7:59 lnostdal-laptop: " Dynamically generates compiled bytecode for class with the given name, in a package with the same name as the current namespace, the given fields, and, optionally, methods for protocols and/or interfaces."

7:59 clgv: it contains a map-implementation

8:00 otherwise you could not use assoc

8:01 lnostdal-laptop: sure, but what i'm trying to say is that adding fields to a record (using its map interface) will remove the (or some of the) benefit of having a record .. and removing fields from a record returns it as a map fully

8:01 i'm not sure whether adding will just make the added fields "map-like" or whether the entire thing is turned "map-like"; behind the curtain

8:03 clgv: you can check with 'type. You only have no benefit for the assoc'd values

8:04 ah well even for dissoc it remains a deftype if you dont dissoc one of the initially defined attributes

8:05 lnostdal-laptop: ok

8:05 i don't see myself using dissoc anyway though, but yeah

8:05 clgv: (defrecord Bla [a b]) (def b (Bla. 1 2))

8:05 (-> (assoc b :c 3) type) => Main.Bla

8:05 (-> (assoc b :c 3) (dissoc :c) type) => Main.Bla

8:06 (-> (assoc b :c 3) (dissoc :b) type) => clojure.lang.PersistentArrayMap

8:06 lnostdal-laptop: right

8:06 maybe i can do something silly with eval .. heh .. or perhaps defrecord doesn't need to be a top-level form etc.

8:07 clgv: the question remains whether you really need defrecord^^

8:08 lnostdal-laptop: yeah, could just go back to the map and adding type via meta-data thing, yeah

8:11 clgv: as an example: ##(type (with-meta {} {:type :widget}))

8:11 sexpbot: ⟹ :widget

8:12 clgv: or with "namespace": ##(type (with-meta {} {:type ::widget}))

8:12 sexpbot: ⟹ :clojure.core/widget

8:12 lnostdal-laptop: ..or write my own MOP and (defmacro defclass (name parent & fields) ...) ==> (defrecord ......) etc. etc. ..... heh

8:12 yeah

8:12 clgv: if it's worth the effort

8:13 lnostdal-laptop: i'm thinking somebody's probably already doing this

8:13 :)

8:14 clgv: you have read about it?

8:15 I am programming clojure now for about 8-9 months. starting with an OOP mindset I also missed inheritance-like stuff, but in the meanwhile I dont see any need for it ;)

8:17 lnostdal-laptop: i like the idea of this going fast; i think i can implement what i want with a 1 screen macro or so .. gonna try at least

8:18 clgv: hm yeah, I guess adding fields of another existing defrecord to the current definition should not be too hard

8:19 kephale: is there a way to prevent clojure-swank from displaying the contents of a ref? i have a some circular references that lead to stack overflows

8:19 lnostdal-laptop: (keys parents) or so, clgv

8:19 parent*

8:23 clgv: lnostdal-laptop: you might generally replace defrecord to note down the attribute definitions for each type and use them when it is specified as parent somewhere else

8:26 e.g. a macro defrecord-attrs that internally uses the original defrecord

8:34 lnostdal-laptop: ok, nope, quite pointless .. it won't have the type of its super-record

8:34 ..or "be"..

8:35 ....*sigh* so low-level and do-it-yourself then .. with none of the benefits (performance)

8:35 i.e. maps everywhere

8:39 clgv: you now that premature optimization is one root of evil ;)

8:39 lnostdal-laptop: well, it would be nice to know that post optimization would be possible anyway

8:39 ..without having to resort to rewriting this in java to get inheritance

8:40 clgv: where will be the potential performance bottleneck of your application?

8:43 lnostdal-laptop: my guess would be that memory use will become a problem first

8:44 clgv: you could make a test case with a map that has an average or maximal estimated number of attributes and build a estimated maximum of instances with it measuring memory usage

8:45 lnostdal-laptop: yeah, i gotta think about this

8:46 scala seems to have classes and inheritance

8:46 , but anyway .. some coffee

8:46 clojurebot: java.lang.Exception: Unable to resolve symbol: but in this context

8:47 clgv: scala has an elaborated type system ;)

8:48 lnostdal-laptop: yeah, too bad it doesn't have lisp syntax ..... :)

8:48 ..with the macros

9:08 clgv: hm how can I efficently store clojure data structures? currently with serialization there is quite an overhead.

9:12 edw: This may seem like a minor thing, but I cried from joy when I saw that this works: (map :foo [{:foo 12 :bar 42}])

9:12 ,(map :foo [{:foo 12 :bar 42}])

9:12 clojurebot: (12)

9:29 clgv: somehow clojure.walk/postwalk doesnt walk all my data hierarchie although I only have standard clojure data structures... :(

10:11 I am still looking for a space efficient way to store clojure data on disk with the ability to append to the data file.

10:13 tufflax: Hm how do I run a file in b.clj in namespace a (a.b.clj, path src/a/b.clj) on the command line? It seems I can't get it to work. Im trying java -cp lib/*;src; clojure.main a.b.clj and similar things :p

10:21 oh i had to specify the full path src/a/b.clj even though src/ was on the cp

10:30 arohner: tufflax: if you're loading a file, yes. If you use use or require to load a namespace, you won't need specify the full path

10:49 kephale: when using multimethods, is there a way to call the parent's multimethod from the child multimethod?

10:54 chouser: you can use the 'methods' function, theoretically, to find the parent function, which you can then call.

10:55 kephale: wonderful, thank you

11:07 clgv: chouser: how would you store clojure data structures in a file?

11:10 chouser: prn

11:10 clgv: chouser: not really space efficient.

11:12 chouser: my data is analysis data from experiments. thus I can get many data sets. I want to read them in after the experiments for calculating different metrics.

11:13 fliebel: clgv: What about kyoto cabinet or thrift, or something like that?

11:13 drewr: clgv: there is GZIPOutputStream

11:13 chouser: well, prn is the most convenient and future-proof. If you have more specific requirements, there are plenty of data formats with java libs out there to choose from.

11:14 clgv: fliebel: gzip doesnt work since I need to append to the file later on

11:14 chouser: sure, gzip of prn, protobuf, bson, Java serialization, json, etc.

11:14 clgv: java-serialization somehow creates pretty huge files, I would not expect

11:15 I currently have implemented it via java-serialization.

11:15 drewr: I serialize to custom "cljz" files which are clojure maps, one line at a time, zipped; then stream them back in lazily

11:15 clgv: fliebel: have to check those names

11:15 kephale: clgv: if you get hacky and use shell commands the CLI version of gzip can append

11:16 clgv: kephale: does appending to something compressed not always mean to uncompress the existing data ones when opening the file?

11:17 no_mind: so are there any remote clojure jobs ?

11:17 drewr: clgv: you can compress first then store lines of base64 or something

11:17 clgv: drewr: yeah, thats true. I already had some thoughts in that direction

11:23 kephale: clgv: i don't think that is a requirement of any compression scheme, but the huffman coding used in gzip would throw you off

11:24 clgv: i could imagine a version of gzip where you sacrificed a bit of efficiency and didn't rebuild the huffman coding when doing an append operation though

11:24 clgv: kephale: yeah there these universal coding schemes that can append easily...

11:24 kephale: but that sounds like too much work

11:25 clgv: hmm java serialization seems to work well for double-arrays. but with maps and vectors form other parts of the dataset, the files get way too big

11:26 fliebel: clgv: Have you checked gloss?

11:26 * fliebel is watching the shuttle launch

11:27 clgv: fliebel: what is gloss?

11:27 kephale: can you do something really bad and just make separate gzip files for each append? then when you need them, decompress and concat

11:27 fliebel: clgv: some binary data thing written for aleph

11:28 clgv: well serialization would do I guess, but somehow at the moment there seems to be a lot of useless overhead generated.

11:28 I'll try to find out step by step

11:31 humm if I have a hierarchie of maps and vectors which was edited lots of times would the serialization store all historic version together with the current?

11:31 that would be an explanation to the observation

11:37 chouser: no

11:42 clgv: hm ok

11:43 chouser: you have to keep your own references to historical versions, or they'll be garbage collected

11:43 clgv: humm is 'aclone supposed to copy an array, if so, it seems not to do the job

11:43 fliebel: &source amap

11:43 sexpbot: java.lang.Exception: Unable to resolve symbol: source in this context

11:44 fliebel: $source amap

11:44 sexpbot: amap is http://is.gd/ynNngb

11:44 fliebel: clgv: Yea, I'd say it should. What makes you think it does not?

11:47 clgv: I modified the clone and the parent was modified too

11:49 &(let [a (make-array Double/TYPE 5 5)] (aset a 2 4 0.9) (println (aget a 2 4)) (let [b (aclone a)] (aset b 2 0 -9.3) (println (aget b 2 0)) (println (aget a 2 0))))

11:49 sexpbot: ⟹ 0.9 -9.3 -9.3 nil

11:49 clgv: :(

11:51 dnolen: lnostdal-laptop: reading the backlog, always interesting to hear people lament the lack of inheritance :)

11:53 clgv: so 'aclone seems broken unless it has another usecase I am not aware of. documentation suggest a copy

11:55 dnolen: clgv: ?

11:55 clgv: dnolen: you see my example 6 posts before?

11:57 oh well I could have skipped the first set&print. I only did that too check if b gets all values from a

11:57 &(let [a (make-array Double/TYPE 5 5), b (aclone a)] (aset b 2 0 -9.3) (println (aget b 2 0)) (println (aget a 2 0)))

11:57 sexpbot: ⟹ -9.3 -9.3 nil

12:00 dnolen: clgv: clone is not deep copy.

12:01 clgv: dnolen: ah damn it 2d array = array of arrays... :(

12:03 so (into-array (map aclone a)) should work

12:03 &(let [a (make-array Double/TYPE 5 5), b (into-array (map aclone a))] (aset b 2 0 -9.3) (println (aget b 2 0)) (println (aget a 2 0)))

12:03 sexpbot: ⟹ -9.3 0.0 nil

12:03 clgv: :)

12:03 dnolen: clgv: I would not use multidimensional arrays. So slow.

12:04 clgv: but easily analysable by generic functions

12:05 dnolen: which aspects are slow with them? set/get?

12:06 dnolen: clgv: why not write some fns to give the illusion of multidim ?

12:06 clgv: both

12:06 michigan101: https://market.android.com/details?id=com.game.WarStrategy

12:07 texinwien: Hi. I have a somewhat theoretical question related to programming paradigms.

12:07 dnolen: clgv: if you want perf (definterface multidim ...) + fns w/ inline expansion.

12:08 texinwien: Let's say you'd like to write a program similar to AutoCad

12:08 lnostdal-laptop: where's the documentation for destructing? .. i can't see it mentioned in the documentation for let or defn

12:08 clgv: dnolen: hm ok. I write it on my todo list to measure that in comparison to my current implementation

12:08 texinwien: Is such a problem set more suited to functional or imperative programming?

12:09 dnolen: lnostdal-laptop: http://clojure.org/special_forms, the let documentation there.

12:10 lnostdal-laptop: dnolen, thanks!

12:12 kephale: texinwien: CAD programs can be done in a functional language, but autocad is so heavy on gui's and singletons that most would say it should be written imperatively

12:13 sritchie: is it possible to shadow special foms with symbol-macrolet?

12:15 dnolen: clgv: and then you can use aclone w/o the hassle as well.

12:15 texinwien: kephala: Thanks. I've written a very simple proof-of-concept drafting program for a customer. It's based on SVG and runs in javascript. It's not well-architected at the moment, and I'm trying to decide the best way to organize the code.

12:16 dnolen: texinwien: JS on the JVM ?

12:16 ,(let [if 5] (if if :true :false))

12:16 clojurebot: :true

12:17 texinwien: based on SVG and javascript and runs in the browser. I plan to refactor and reorganize the code, but I'm trying to decide between oo/imperative and functional style

12:17 sritchie: (symbol-macrolet [hand +] (hand 10 1)) => 11, while (symbol-macrolet [if +] (if 10 1)) => 1

12:17 texinwien: dnolen: it is browser based. 2d plane geometry and algebra.

12:18 kephale: texinwien: well, i do 3d simulations in clojure, and it isn't so bad. you might want to play with clj-processing, but last time I checked you can't get get clojure+processing to work in applets

12:19 texinwien: due to the speed of js and SVG rendering on modern browsers, I'm currently redrawing the entire drawing every time there's a change

12:20 dnolen: sritchie: yeah I don't think that can work. Might be wrong.

12:21 sritchie: dnolen: I'm realizing that my macro here -- https://github.com/pallet/thread-expr/blob/develop/src/pallet/thread_expr.clj#L363 -- is going to fail for the shadowing of if

12:22 islon: I'm getting an error in slime everytime I try to print the contents of a file in the repl, something to do with iso-8859-1, the file is encoded in utf-8 and I'm using ubuntu, does anyone had this same problem?

12:32 jlf: islon: i haven't seen that, but you might check the value of slime-net-coding-system

12:33 islon: jlf: and how can I do that?

12:34 jlf: C-h v slime-net-coding-system or M-x customize-variable RET slime-net-coding-system

12:34 islon: "Its value is iso-latin-1-unix"

12:35 technomancy: that should be set automatically if you use M-x clojure-jack-in, but if you use raw slime-connect you'll need to set it yourself... should add that to the readme

12:35 jlf: islon: it's set to utf-8-unix here

12:37 islon: technomancy: I tried clojure-jack-in and got the same error, i'll try again

12:37 *some days ago

12:38 technomancy: islon: oooooh... it may not have made it to a release yet

12:38 I'll keep my mouth shut

12:38 jlf: islon: any chance you have other versions of slime in your load-path?

12:40 kephale: technomancy: is there a way to disable printing the contents of ref in a swank REPL? I have some circular references that are giving me stack overflows

12:40 islon: jlf: don't think so, but I changed the variable to utf-8-unix and it worked

12:40 jlf: thanks!

12:40 technomancy: kephale: I don't know; sorry

12:41 kephale: ah well, ty

12:41 jlf: my first answer on #clojure, woot! :)

12:41 mrBliss: kephale: *print-level*

12:42 kephale: mrBliss: oOoo! thanks

12:42 texinwien: functional reactive programming looks like an interesting basis for a CAD gui

12:46 avartanian: Would java -cp clojure.jar;clojure-contrib-1.2.0.jar clojure.main be the proper way to get clojure-contrib onto my classpath?

12:47 (I'm in Windows, hence the semi-colon rather than the colon)

12:48 Then I try a (require 'clojure.contrib.math) at the REPL and an (abs 5) and it doesn't go so well.

12:49 kephale: texinwien: thats kind of similar to the approach that i have been using where events trigger transactions on refs, but thus far everything i've done is fairly side-effecty

12:50 islon: avartanian: (use 'clojure.contrib.math)

12:50 avartanian: islon oh thanks so much. worked like a charm.

12:50 TimMc: What's that Japanese word for the gibberish you get by misencoding character data?

12:50 avartanian: what's the difference between require and use?

12:50 technomancy: clojurebot: ns form?

12:50 clojurebot: the answer is 42

12:51 technomancy: clojurebot: the ns form is more complicated than it should be, but it's better-documented at http://blog.8thlight.com/articles/2010/12/6/clojure-libs-and-namespaces-require-use-import-and-ns

12:51 clojurebot: Ok.

12:51 islon: avartanian: http://stackoverflow.com/questions/871997/use-vs-require-in-clojure

12:52 TimMc: Oh, there it is: mojibake

14:31 derp__: what is wrong with this namespace declaration? (ns agent-sim.config.config (:require agent-builder :only [gen-func-state gen-task-state]))

14:31 chouser: (:require [agent-builder :only [gen-func-state gen-task-state]])

14:31 need more brackets! :-)

14:31 derp__: ah!

14:31 thank you

14:32 chouser: np

14:34 jcromartie: I'm surprised there isn't a macro? in core

14:35 seancorfield: anyone using clj-date? opinions pro / con? https://github.com/stackoverflow/date-clj

14:35 Vinzent: Also there is update-in, but there is no update

14:36 chouser: jcromartie: what would you pass it? a Var?

14:36 ,(-> #'filter meta :macro)

14:36 clojurebot: nil

14:36 chouser: ,(-> #'for meta :macro)

14:36 clojurebot: true

14:38 jcromartie: well, macro? needs to be a macro :)

14:38 chouser: heh

14:38 jcromartie: https://gist.github.com/8ee446bce85d4cc1fa37

14:38 amalloy: Vinzent: there's no clear definition of what update would *do*. update one key of a map with varargs? then it's just update-in but without the brackets

14:39 jcromartie: I like the test :)

14:39 Vinzent: amalloy, it should recieve pairs of key\update-fn, just like assoc does

14:40 jcromartie: I don't see the point Vinzent

14:40 amalloy: Vinzent: or maybe it should take an update function and a seq of keys, and apply the update function to each key

14:40 jcromartie: example?

14:40 clojurebot: examples is http://en.wikibooks.org/wiki/Clojure_Programming/Examples/API_Examples

14:41 Vinzent: jcromartie, with update-in, you can update only one key at one call. (update {:a 1 :b 2 :c 3} :a inc :b dec :c str)

14:42 jcromartie: interesting

14:42 shouldn't be too hard

14:43 how about this

14:44 actually

14:44 there are issues with that, update-in takes additional arguments to the function too

14:45 S11001001: which looks really nice when things fit together

14:45 Vinzent: Yep. So, What's the best way to suggest something to be included in core? I've seen there is clojure.incubator, but should I directly send pull request, or to ask someone who is closer to Rich and can write core-quality code?

14:45 jcromartie: you could use -> and update-in

14:45 Vinzent: jcromartie, yes, of course, but it requires a huge number of unnesescary parens

14:46 *unnesescary

14:46 argh... *unnecessary

14:46 chouser: Vinzent: best is to post to the google group

14:46 Vinzent: chouser, ok, thanks, I'll do that.

14:53 jcromartie: Vinzent: check update-keys here: https://gist.github.com/8ee446bce85d4cc1fa37

14:54 Vinzent: jcromartie, sorry, I can't view it now because my internet connection is down.

14:54 and anyway I have implementation of that function in nearly every my project :)

14:54 jcromartie: I see :)

15:00 wow, anybody in mid-Maryland... this is an absolutely insane storm

15:00 sritchie: jcromartie: I'm in DC -- sounds like it's coming this way

15:01 jcromartie: watch out! seriously... this is torrential

15:03 sritchie: hey all -- if I wanted to convert this class to clojure, using gen-class -- https://gist.github.com/1072541

15:04 I was trying to run something like (gen-class :name forma.hadoop.pail.SplitPailStructure :extends forma.schema.DataChunkPailStructure :prefix "split-")

15:05 after I do this, can I import the created class? Or do I need to mark the class that contains this as an AOT class?

15:06 amalloy: sritchie: see ##(doc gen-class). if you're not AOTing, it's a no-op

15:06 sexpbot: ⟹ "Macro ([& options]); When compiling, generates compiled bytecode for a class with the given package-qualified :name (which, as all names in these parameters, can be a string or symbol), and writes the .class file to the *compile-path* directory. When not compiling,... http://gist.github.com/1072548

15:07 sritchie: got it

15:16 what's the equivalent clojure to String.class?

15:16 Vinzent: just String?

15:16 sritchie: Well, one of my own classes, forma.schema.DataChunk

15:17 so, the equivalent clojure code to "return DataChunk.class;"

15:17 Vinzent: just DataChunk? :)

15:17 sritchie: I suppose DataChunk, at the repl, just evaluates to the class

15:17 looks like it! too simple, just checking :)

15:25 amalloy: Vinzent: can you go three for three with int.class?

15:41 dnolen: hmm Emacs 24 + ITerm 2 is nice

15:56 bryanl: jcromartie: the storm looks crazy

16:02 jcromartie: yup

16:02 it turned our back yard into a pond pretty quickly

16:31 dsop: how to apply a list of args to a java method? something like (apply .foo repo arglist)

16:34 rmarianski: dsop: i don't know of a way to do that without reflection

16:35 jcromartie: memfn?

16:35 S11001001: takes an argcount

16:35 dsop: anyway, there are no rest args in java methods, despite all appearances from the java language

16:35 rmarianski: dsop: i've done it like this: https://github.com/iwillig/geoscript-clj/blob/master/src/geoscript/utils.clj

16:36 dsop: rmarianski: thanks

16:36 rmarianski: essentially clojure.lang.Reflector/invokeInstanceMethod

16:36 jcromartie: I'm not sure if dsop is asking about varargs

16:37 S11001001: maybe not, but it's the only area where nothing but apply will do

16:38 dsop: jcromartie: not really. maybe memfn will work, I have to check it

16:38 thanks for the help

16:45 jaskirat: dsop: does a macro sound bad? something like (defmacro japply [f o l] `(~f ~o ~@l)) ?

16:47 dsop: jaskirat: hmm no that might be good, thanks haven';t thought of it %)

16:48 S11001001: jaskirat: I don't think that will have the desired effect

16:49 amalloy: (inc S11001001)

16:49 sexpbot: ⟹ 1

16:49 jaskirat: S11001001: I don't understand why you say that.

16:50 amalloy: jaskirat: it will only work if L is a literal list known at compile time

16:50 in which case, you don't need apply at all: you would just call (.foo o a b c) rather than (japply .foo o [a b c])

16:50 jaskirat: amalloy: ah yes

17:16 dnolen: hmm I wonder if the announcement on the 20th is compiler related ...

17:21 hiredman: where was the 20th announcemennt?

17:24 dnolen: hiredman: it's going to be at the NYC Clojure Meetup

17:25 Scorchin: all I know about it is that Rich has been "using textmate a lot"

17:25 technomancy: also mentioned buried in the steve yegge thread that all the core devs are busy until the 20th

17:27 clojurebot: rule one is if your answer to "how should I represent X" is "something that doesn't implement clojure.lang.IFn" then you are probably wrong.

17:27 clojurebot: Ik begrijp

17:33 hiredman: dnolen: I mean were was the announcement of the announcement?

17:39 dnolen: hiredman: in the Yegge thread

17:39 though the Meetup description does say rhickey will be talking about something "new"

17:41 hiredman: ugh

17:41 dnolen: stuart's tweet, https://twitter.com/stuarthalloway/status/89174283967934465, makes me suspect it's compiler related. but who knows?

17:41 hiredman: let it die

17:56 dnolen: did somebody here work on this? https://pair.io/

17:59 ibdknox: dnolen: that's kind of cool

18:00 it appears to be this guy: https://github.com/zkim

18:14 dnolen: clojuredocs.org fellow

18:38 amalloy: technomancy: what's this about IFn? you're advocating that everything should be callable, or something more subtle?

18:41 technomancy: amalloy: just annoyed by a library that will remain unnamed that uses its own arcane maps for creating a separate world of things that act like functions but you can't debug with any of the normal tools of the trade.

18:42 which I guess doesn't even apply to my own rules since technically they are maps and thus "callable", you just don't get meaningful results from them

20:31 nishant: How can I start a web server which can accept requests from external hosts, I'm using this - (run-jetty #'app {:host "" :port 8080})

20:34 ,run-jetty

20:34 clojurebot: java.lang.Exception: Unable to resolve symbol: run-jetty in this context

20:34 bpr``: is ritz stable enough to develop with at this point?

20:35 i tried it out when it was swank-clj and couldn't even get it running.

20:35 amalloy: bpr``: i can't make it work at all; it seems to depend on the sun/oracle jdk, for one

20:36 bpr``: amalloy: i'm running it

20:36 er, the sun/oracle jdk anyhow

20:37 hrm, I'm going to see if i can get it running. I'm really looking forward to seeing a slime/swank solution for clojure that has all the bells and whistles that are present in the cl implementation

20:38 amalloy: what jdk are you using?

20:38 amalloy: openjdk

20:38 bpr``: ah

21:39 hugod: amalloy_: sorry to hear you haven't got openjdk working with ritz - afaik openjdk should work, and should actually be easier to setup the sun/oracle jdk

21:39 I'll give it a try on ubuntu…

22:24 amalloy: hugod: i'm heading out in a sec, but https://gist.github.com/1073227 is the error i get and some basic diagnostics. i'm on lucid lynx

22:26 hugod: amalloy: thanks - just scripting the ritz dev box setup with pallet…

Logging service provided by n01se.net