#clojure logs

2011-07-08

00:02technomancyit does have some latency
00:02technomancyon startup
00:04technomancyhugod: might not check it in as it's much better as a static page =)
00:20tomojis there a better way to write (if (foo) [[x]] [[x] [y]])
00:27tomojhttps://gist.github.com/10619e1362284cccd495 :/
00:27tomojhmm.. that's silly
00:28tomojhttps://gist.github.com/79f5d9a0899e85160005
00:29Scriptortomoj: the original seems simpler, imo
00:30Scriptor(if...
01:02kephale,(let [a (ref []) b (ref {:stuff 17 :a a})] (dosync (ref-set a (conj @a b))))
01:02clojurebot[#<Ref@a85638: {:stuff 17, :a #<Ref@7878c8: [#]>}>]
01:03kephalehrm…. that gives me a stack overflow in my REPL though
01:07kephaleany clues? i'm running clojure 1.2.1… its way more annoying now that it actually worked on clojurebot : P
01:25dnolen_if it's any consolation, the "steve yegge" thread is 3 times smaller than the "enhanced primitive support" thread ...
01:26hiredmanI don't believe
01:26dnolen_eps *233* messages
01:26dnolen_sy meager 70+
01:31gstampDoes "lein plugin install" honor the proxy settings in ~/.m2 ? I seem to be having problems
01:31kephaleaha!
01:32kephaleit is just an issue with displaying the result, that leads to the infinite loop
01:33kephaleis there a way to avoid printing the contents of refs? i'm using lein-swank if it matters
01:36kephaleerr swank-clojure that is
01:37dnolen_heh, last thread as long as "steve yegge" ... "clojure's n00b attraction problem" (195) ... followed by "enhanced primitive support"
01:38hiredmanugh
01:47jamiltronI'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?
01:55ihodesanyone in here from MN? after tonight's Seajure, i want to try it in MN. Clojure people are awesome.
02:08ihodesclojure mailing list makes me sad.
02:17sean_corfieldwhy ihodes?
02:22amalloyjamiltron: lein classpath doesn't *do* anything, it just prints the classpath for you
02:22amalloyso really you want to do something more like java -cp `lein classpath` -jar myjar.jar
02:25amalloytomoj: i've written (into [[x]] (when test [[y]])) before
02:25amalloywith only small amounts of shame
02:26tomojoh, nice
02:26tomojI was thinking of writing something that did exactly that
02:26tomojwell not exactly
02:27tomojI was wanting (foo [x] (when test [y])) I think
02:27amalloyyeah, that looks like what you wrote
02:27tomojbut I thought briefly about "maybe-push" which is what into does
02:27tomojand more
02:27tomojI mean, into does more
02:30ihodessean_corfield: the massive thread at the top is just pointless :\
02:37replacaihodes: 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
02:37sean_corfieldihodes: i muted it in gmail... but i've been dipping in from time to time... there are a _few_ useful points in there...
02:38ihodesreplaca: 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
02:39replacasean_corfield: I felt a little like I was at group therapy tonight :)
02:39sean_corfieldat least people are passionate enough to care :)
02:40hiredmanreplaca: was that the dc meet up?
02:40sean_corfieldbay area
02:40replacahiredman: no, sf
02:40ihodeshow's the sf scene?
02:40sean_corfieldalternates between SF and Mountain View
02:40ihodeswrt clojure
02:40sean_corfieldwe get 20-40 at each meeting i guess?
02:41replacapretty good. we've got a bunch of clojure stuff here, including real companies that are clojure focused
02:41replacait's SF so there's tech obsession everywhere
02:41ihodesnice. anywhere that might hire a recently graduated math major...? ;)
02:41amalloyreplaca: you're in sf? did i meet you at one of the meetups? (i'm in LA now, ofc)
02:42sean_corfieldGoGrid is hiring... Runa might be?
02:42replacayeah, I think we've met amalloy
02:42replacain real lfe I'm Tom Faulhaber
02:42amalloyoh
02:43amalloyi think meetups should have mandatory IRC nametags :P
02:43replacai know what you mean
02:43sean_corfieldIRL I'm still Sean Corfield :)
02:43replaca:)
02:43sean_corfieldi had to /whois replaca to figure it out...
02:43replacayeah, I used to be in here enough that everyone knew the translation
02:44ihodesi'm really, for real, actually isaac.
02:44replacabut lately my PHB life has been consuming all my time and not so much clojure :(
02:45sean_corfieldyou said you'd run an auto-doc update on c.j.j?
02:45replacayeah, a few days ago
02:45replacado you want me to fire up another one
02:45replacahopefully in the net week or so I'll have the automated one running
02:46sean_corfieldno, i just hadn't seen it updated recently
02:46sean_corfieldlooks good at 0.0.4-SNAPSHOT :)
02:47replacathat's newest, right?
02:47sean_corfieldwe still have the code display problem in the related pages - any more thoughts on that yet?
02:47replacayeah, I know how to deal with it, but it's got to percolate up the list
02:47sean_corfieldand, yeah, 0.0.4-SNAPSHOT is the latest clojure.java.jdbc
02:48sean_corfieldthe 0.0.3 release fixed generated keys for postgreSQL / SQL Server
02:48sean_corfieldas showcased in the heroku article about DB-backed web apps on Heroku :)
02:49replacayay!
02:49replacathe heroku thing just adds one more thing to the list of things I've got to experiment with
02:50sean_corfieldalthough the article refers to 0.0.3-SNAPSHOT and requires the sonatype repo be added to project.clj
02:50replacaahh well, things are out of date so fast in our world
02:54replacaok, time to go to sleep before I start debugging anything new. Good night all.
02:56sean_corfieldlikewise
02:56sean_corfieldlots to do tomorrow
04:22justinlillyHaving 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?
04:22justinlillyspecifically, the exception is: ava.lang.ClassNotFoundException: com.sun.javadoc.Doclet (NO_SOURCE_FILE:1)
04:29clgvhow 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
04:30clgvAfaik 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.
04:31clgv"construct" means calling the function that defines the lazyseq
04:31justinlillycan you compose the count and process functions?
04:31justinlillyor is that against the point?
04:31opqdonutyeah, write one loop (e.g. with reduce) that performs the processing and the counting
04:31clgvno. I want to know the count in advance to be able to estimate execution time
04:32opqdonutwell then you'll have to have to copies of the sequence
04:32justinlillyso you want to count, but don't want to have it in memory or go over it twice.
04:32opqdonutso you say (let [len (count (generate-sequence)) output (process len (generate-sequence))] ...)
04:32clgvI have to iterate it once for counting but I want to make sure it has the dorun memory characteristic
04:33opqdonutwell then you need to have to copies of the head
04:33clgvok, thats what I thought
04:33opqdonutwhat I pasted will work since nobody is hanging on to the head returned by generate-sequence
04:34clgvopqdonut: exactly, thats what I tried to describe with words ;)
04:34justinlillyopqdonut: any thoughts on my classpath woes?
04:34opqdonutthere could be a "lazy clone" operation for lazy sequences, though
04:34opqdonutone which wouldn't share the result, that is
04:34opqdonutbut this of course works only for lazy sequences that are produces purely
04:34clgvjustinlilly: try to use the lib folder for jars. maybe it doesnt resolve jars in the classes folder
04:35justinlillyclgv: "the lib folder for jars" .. which lib folder?
04:35clgvopqdonut: yeah the seuqence is entirely pure
04:35clgvjustinlilly: oh I was assuming you use leiningen, do you?
04:35opqdonut("this" meant the lazy clone on my last line)
04:36clgvopqdonut: lazy clone sounds awesome if it exists ;)
04:36justinlillyclgv: not at the moment, no.
04:36opqdonutclgv: well I'm not aware of it existing :)
04:36justinlillyjust trying this with basic java.
04:36clgvjustinlilly: oh. hmm how do you build?
04:37justinlillyclgv: currently, I'm just trying to import via the repl.
04:37clgvjustinlilly: how did you start the repl?
04:37justinlillyjava -cp ./classes/tools.jar -cp ./classes/clojure.jar clojure.main
04:37justinlillywhere tools.jar contains com.sun.javadoc.*
04:38clgvis specifying -cp two times ok? or may it override the previous?
04:38clgvI always used cp with lists of jars
04:39justinlillyaha! thanks ^_^
04:39justinlillybuild tools at work handle all this stuff for me. :-/
04:44clgvinstall leiningen
04:44clgvthen setup a project as soon as you need dependencies. then you can start a repl via "lein repl" an use the import statement normally ;)
04:44justinlillyleiningen 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
04:45justinlillyBut thanks. I'm aware of how highly it's regarded.
04:45clgvopqdonut: hmm a clone-lazyseq is possible only via reflection since access to the IFn is needed
04:52herwigtechnomancy: I see, leiningen is supporting .classpath files now and there is no way to turn that off, is that correct?
04:53herwigbecause unfortunately, Eclipse writes a .classpath file, which is XML
04:56clgvherwig: thanks for that implicit warning :)
04:56herwigclgv: np
04:57clgvguess I should wait even longer with upgrading ;)
04:59herwigit's not that bad, the classpath ends up like "<?xml version=1.0 encoding=UTF-8?>:legit/entry:..."
04:59herwigand java ignores invalid CP entries
05:10justinlillyhttp://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)
05:12herwigjustinlilly: the clj doesn't print newlines between the classes, right?
05:12zmilahi! I wonder how to tell (run-jetty my-handler {:port 8080}) the encoding utf-8?
05:12zmilawhen i run the server, it returns header: "Content-Type text/html; charset=iso-8859-1"
05:12justinlillyherwig: I can't een get it to import into javadoc :-/
05:13herwigjustinlilly: to import what into javadoc?
05:13justinlillyhttp://pastebin.com/raw.php?i=mpnvVE2u
05:14herwigzmila: that's probably because your client (browser?) prefers iso-8859-1 in the accept headers in the request.
05:14justinlillyif 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.
05:14zmilaFF has: Accept-Charset UTF-8,*
05:16herwigjustinlilly: have you compiled the clojure code to .class files?
05:16justinlillyherwig: I have, yes.
05:16clgv justinlilly: afaik :gen-class implements the interface in the class textinfo.test, I dont know how :name works
05:17justinlillyclgv: huh? :gen-class takes a :implements symbol.. right?
05:17justinlillyam I conflating something?
05:17herwigI'm not quite fluent with gen-class either, have to fool around every time using it
05:18clgvI 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
05:18justinlillyjavap seems to output somethign that looks appropriate...
05:18clgvjustinlilly: do you have a java decompiler at hand to have a look at the generated class files and what they do implement?
05:19justinlillyhttp://pastebin.com/raw.php?i=UYriMXss -- various bytecode decompiled output...
05:19herwighave you tried (ns texinfo.test.ClassListing ...)?
05:19justinlillynot yet. will try now.
05:19herwigand leaving the :name out
05:19hiredmanspeaking of javap: https://github.com/hiredman/javap-mode/blob/master/javap.el
05:19clgvherwig: that was my exact suggestion^^
05:22herwigalso, :name would be without the package, right?
05:23justinlillydo 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?
05:25herwigan ns clause is highly recommended, it's not needed though
05:25herwigyou can use standalone (gen-class)
05:25clgvjustinlilly: 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
05:26herwigit does nothing at runtime though
05:27herwigjustinlilly: didn't the modified ns clause work?
05:27justinlillynot really. Going to try clgv's suggestion.
05:29herwigjustinlilly: you didn't define the equiv java class in a package, didn't you?
05:29herwigI mean the original java code
05:31herwigb/c the command line call looks for ClassListing in a classpath ./classes/texinfo/test
05:32herwigtry: javadoc -classpath ./classes/clojure.jar:./classes/tools.jar:./classes -doclet texinfo.test.ClassListing -docletpath ./classes ListClass.java
05:32herwiginstead
05:33justinlillyherwig: I didn't, no.
05:34herwigthen that's it
05:34justinlillyresult: http://pastebin.com/raw.php?i=SxmxjHKc
05:35herwigbetter
05:35herwigis clojure.jar in classes?
05:35justinlillyyes.
05:35justinlillyalso, javap doesn't seem to show it overriding the interface like it should. one moment for paste.
05:36herwigadd clojure.jar to the doclet path
05:36herwigthat's probably two different class loaders
05:37justinlillyhttp://pastebin.com/raw.php?i=zer9DqG6 -- this should be overriding the start static method..
05:37justinlillyOooh. no errors that time..
05:37herwigit worked?
05:37justinlillyso now if I figure out how to override the proper method.. it will work, I think.
05:38justinlillyjavap says I'm not overriding the method. ie: impl-start should override the start method, I think.
05:38herwighm, I'm not quite sure if you can implement static methods with gen-class
05:39justinlilly:(
05:39justinlilly"Static methods can be specified with ^{:static true} in the
05:39justinlillysignature's metadata."
05:40herwigoh
05:40herwignice :)
05:42herwigthat would be :methods [ ^:static [start [RootType] ReturnType]] then
05:42herwig^:static being short for ^{:static true}
05:42herwigjustinlilly
05:45justinlillyyay! NPE!
05:45justinlilly(of real code!)
05:45justinlillythanks!
05:45herwigyw!
05:46herwigstill, it's a bit curious, since the doc for :methods explicitly states "Do not repeat superclass/interface signatures
05:46herwighere."
05:47herwigseems like an inconsistency with static methods
05:50lnostdal-laptophow would you go about inheritance of fields in clojure?
05:52herwiglnostdal-laptop: not at all, except when you have an interop issue that requires it
05:52herwigwhat do you want to do?
05:52lnostdal-laptopok, then how do you organize data? .. defrecord & Co.
05:53herwiglnostdal-laptop: http://cemerick.com/2011/07/05/flowchart-for-choosing-the-right-clojure-type-definition-form/
05:54justinlillyherwig: http://pastebin.com/raw.php?i=Qffw0GVB -- resulting code.
05:54lnostdal-laptopok, i end up at defrecord following that chart ..
05:55herwigjustinlilly: nice :)
05:56herwiglnostdal-laptop: that combines the flexibility of plain maps with the possibility to implement interfaces and protocols
05:57herwiggood thing is, you can start implementing with maps and switch to defrecords as soon as you need it's features
05:57herwigs/it's/its
05:57sexpbot<herwig> good thing is, you can start implementing with maps and switch to defrecords as soon as you need its features
05:57lnostdal-laptopyeah, but protocols only sort of implement methods
05:58herwigprotocols don't implement methods
05:58lnostdal-laptopi have several data-types that all need to share a field
05:58lnostdal-laptop"sort of"
06:00herwigand you explicitly need type dispatch?
06:00lnostdal-laptop..and performance
06:00herwigmaps are performant
06:01herwigI'd make the common fields into a separate entity
06:06herwiganyway, 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
06:07lnostdal-laptopmh
06:12herwigcu later, y'all
06:15clgvoh the flowchart changed even more
06:27lnostdal-laptopi 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?
06:28lnostdal-laptop..never can be changed with regards to the fields they contain that is
06:29clgvlnostdal-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
06:30lnostdal-laptophm, 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
06:31lnostdal-laptop..so that when these "sub-records" are instantiated they'll get their own id-field with its very own value
06:32clgvlnostdal-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
06:32clgvlol. spelling-devil caught me
06:33lnostdal-laptopok, so it's maps then .. no defrecord possible?
06:34lnostdal-laptop(i know i can do whatever i want with maps and closures and what not .. but that kind of flexibility seems overkill for this..)
06:34clgvlnostdal-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
06:34lnostdal-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*
06:34lnostdal-laptopwell, can it? .. how?
06:35clgvdid you read any book on clojure yet?
06:35lnostdal-laptopyes, i'm reading The Joy of Clojure
06:37clgvoh ok, tough choise for starting - but this book should give you a good impression how to write clojure programs
06:37lnostdal-laptopi 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
06:38clgvone questions is do you need a generated java class for your record?
06:39lnostdal-laptopnot really
06:41clgvwell than a map might suffice if there are no other requirements that speakk against it
06:41lnostdal-laptopi'd like to have types, and the added performance of defrecord as apposed to plan maps would be great
06:41lnostdal-laptopopposed*
06:42kryftplain*?
06:42lnostdal-laptopyup
06:42kryftThe gentleman doth typo too much
06:42lnostdal-laptopwell, i'm not the only one
06:42lnostdal-laptop:)
06:43lnostdal-laptop(..and i'm on a boat; it's bumpy ... :P)
06:43clgvok 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
06:43lnostdal-laptopyeah, the meta-data thing is interesting .. will it work with multi-methods and stuff?
06:43lnostdal-laptopi mean; can i do type-dispatch with it?
06:44clgvif you use the 'type function as dispatch function yes
06:44lnostdal-laptopoh
06:44clgvyou can dispatch with any function you like
06:45lnostdal-laptopso defmulti/defmethod wouldn't work with type meta-data?
06:46clgvit will work. you implement the dispatch function like you choose to
06:46clgvI should have written "every" instead of "any", I guess
06:47lnostdal-laptopohyeah, nvm.
06:47lnostdal-laptopgot it
06:48clgvcemerick: finally your flowchart doesnt optically favor gen-class
06:48lnostdal-laptopi guess maps + type meta-data it is then .. since this seems not possible with defrecord
06:49clgvhumm you can as well dispatch on you record type
06:49lnostdal-laptopyes, but records are static; i can't extend them
06:50clgvyou 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
06:51bsteuberis there already a function that calculates the difference of two maps?
06:51lnostdal-laptopok, i can't create sub-records then ..
06:52clgvlnostdal-laptop: not in the sense of subclasses in OOP languages
06:52lnostdal-laptopright
06:53clgvbut 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
06:55clgvbsteuber: there was some diff function in clojure 1.3 as far as I remember
06:55bsteuberic
06:56lnostdal-laptopi'm not following, clgv
06:56lnostdal-laptopit'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
06:57lnostdal-laptop..there's more records than just that single IDMixin record of course; multiple-inheritance
06:57clgvlnostdal-laptop: well, even in an oop approach you could just have that ID interface and an ID-Manager that assigns it to the objects
06:59lnostdal-laptopthinking 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
07:01clgvlnostdal-laptop: guess I am missing some context to be able to follow that argument
07:03lnostdal-laptopuhm, 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
07:03lnostdal-laptopi really don't know how you guys do this
07:04lnostdal-laptop..no conventions? .. macros for this kind of pattern?
07:04lnostdal-laptop"..partly filled in map* in return.."
07:05dmeadhi channel
07:05dmeaddoes anyone know of an autoformatting tool for clojure source?
07:05dmeadi've got some autogenerated code that is a bit messy
07:05dmeadand might be easier to run through something else to make it look presentable
07:05dmeador readable
07:06clgvdmead: clojure.pprint/pprint on repl is a small advantage
07:07clgvlnostdal-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
07:08clgvit's just writing your constructors as functions.
07:08clgvyou might even hardwire create-abc-record to use create-basic-record in its body. depends on how much flexibility you need
07:17lnostdal-laptopclgv, http://pastebin.com/JVEDAsER .. idunno
07:18lnostdal-laptopi guess this will work .. bit of a shame it's not possible with defrecord tho
07:24clgvin fact you can substitute the map with a defrecord but I dont see any benefit related to your code example
07:25clgvyou 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
07:29lnostdal-laptopcould you post some code? .. i don't see how this would work with defrecord
07:32lnostdal-laptop..uhm.. or id could be a closure initialized on construction?
07:33clgvlnostdal-laptop: first, you should use (assoc m :element-type val) with maps instead of conj
07:33clgvand then you might just define a record via (defrecord BasicRecord [id])
07:34clgvFinally you replace the "{}" in your make-widget by (BasicRecord. (id-generator-next))
07:36clgvnow 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
07:36lnostdal-laptophm
07:37lnostdal-laptopbut won't treating the record as a map convert it to a map? .. i think Joy mentioned this
07:38lnostdal-laptopmaybe i'm wrong
07:38clgvno. defrecord has a full map implementation
07:38clgvif you dont want that use deftype
07:39lnostdal-laptopohdamn .. i'll try that
07:39lnostdal-laptopthanks
07:41lnostdal-laptopyup
07:41peteriserinswhat would be an idiomatic way of writing breadth first search in a clojure list that represents a tree? hashing?
07:43clgvpeteriserins: recursion with a FIFO collection?
07:44peteriserinsclgv: +the hashing I suppose, yes
07:44peteriserinsany queues in clojure?
07:45lnostdal-laptophttp://pastebin.com/tJ3JKmq2 .. this looks good i think .. thank you so much for your patience, clgv ....... :)
07:45clgvpeteriserins: yeah there is clojure.lang.PersistentQueue
07:45lnostdal-laptop..the base problem was me having mis-read or mis-recalled something in the book here
07:47clgvlnostdal-laptop: though you do not need the (defrecord Widget ..) in your example
07:47lnostdal-laptopyeah, i see that
07:47lnostdal-laptop..but i think having a separate type is nice, i think(?)
07:48lnostdal-laptopoh, make-Widget will actually return an object of type IDMixin
07:49lnostdal-laptopyeah, ok, fixed that too now
07:49clgvyes it will. you can work around that, but in my opinion you might leave the path of idiomatic clojure then
07:51clgvlnostdal-laptop: you are planning to do webdevelopment? maybe you should checkout the related clojure frameworks for it
07:53lnostdal-laptopactually .. if i use dissoc it will be converted to a map .. (bottom of page 191 in Joy)
07:53lnostdal-laptop..and adding will mean that the record will "be" a map behind the curtains; it'll still "look like" a record tho
07:54clgvafaik a record *is* always a map
07:54lnostdal-laptopnope, it's a Java class
07:54lnostdal-laptop..initially at least
07:54lnostdal-laptop..that's why it's faster
07:54clgvyeah a java class with a map implementation
07:55clgva map is also a java class ##(type {})
07:55sexpbot⟹ clojure.lang.PersistentArrayMap
07:55lnostdal-laptopi think this is beside the point
07:55clgva map is also a java class ##(type (assoc {} :x 1 :y 5))
07:55sexpbot⟹ clojure.lang.PersistentArrayMap
07:55clgv&(defrecord bla [a b])
07:55sexpbotjava.lang.ClassCastException: clojure.lang.PersistentVector cannot be cast to clojure.lang.MapEntry
07:56clgv&(defrecord Bla [a b])
07:56sexpbotjava.lang.ClassCastException: clojure.lang.PersistentVector cannot be cast to clojure.lang.MapEntry
07:57clgvhumm strange - that should work or throw a security error because of using something like def ;)
07:57clgv,(defrecord Bla [a b])
07:57clojurebotDENIED
07:57clgvah kk
07:58clgvlnostdal-laptop: afaik a defrecord is a special map class that supports native access to the attributes in its definition
07:58lnostdal-laptopno, it implements the map interface; it's not -a- map class
07:59clgvyeah well it wont do blackmagic to support IMap ;)
07:59lnostdal-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."
07:59clgvit contains a map-implementation
08:00clgvotherwise you could not use assoc
08:01lnostdal-laptopsure, 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
08:01lnostdal-laptopi'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
08:03clgvyou can check with 'type. You only have no benefit for the assoc'd values
08:04clgvah well even for dissoc it remains a deftype if you dont dissoc one of the initially defined attributes
08:05lnostdal-laptopok
08:05lnostdal-laptopi don't see myself using dissoc anyway though, but yeah
08:05clgv(defrecord Bla [a b]) (def b (Bla. 1 2))
08:05clgv(-> (assoc b :c 3) type) => Main.Bla
08:05clgv(-> (assoc b :c 3) (dissoc :c) type) => Main.Bla
08:06clgv(-> (assoc b :c 3) (dissoc :b) type) => clojure.lang.PersistentArrayMap
08:06lnostdal-laptopright
08:06lnostdal-laptopmaybe i can do something silly with eval .. heh .. or perhaps defrecord doesn't need to be a top-level form etc.
08:07clgvthe question remains whether you really need defrecord^^
08:08lnostdal-laptopyeah, could just go back to the map and adding type via meta-data thing, yeah
08:11clgvas an example: ##(type (with-meta {} {:type :widget}))
08:11sexpbot⟹ :widget
08:12clgvor with "namespace": ##(type (with-meta {} {:type ::widget}))
08:12sexpbot⟹ :clojure.core/widget
08:12lnostdal-laptop..or write my own MOP and (defmacro defclass (name parent & fields) ...) ==> (defrecord ......) etc. etc. ..... heh
08:12lnostdal-laptopyeah
08:12clgvif it's worth the effort
08:13lnostdal-laptopi'm thinking somebody's probably already doing this
08:13lnostdal-laptop:)
08:14clgvyou have read about it?
08:15clgvI 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 ;)
08:17lnostdal-laptopi 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
08:18clgvhm yeah, I guess adding fields of another existing defrecord to the current definition should not be too hard
08:19kephaleis 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
08:19lnostdal-laptop(keys parents) or so, clgv
08:19lnostdal-laptopparent*
08:23clgvlnostdal-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
08:26clgve.g. a macro defrecord-attrs that internally uses the original defrecord
08:34lnostdal-laptopok, nope, quite pointless .. it won't have the type of its super-record
08:34lnostdal-laptop..or "be"..
08:35lnostdal-laptop....*sigh* so low-level and do-it-yourself then .. with none of the benefits (performance)
08:35lnostdal-laptopi.e. maps everywhere
08:39clgvyou now that premature optimization is one root of evil ;)
08:39lnostdal-laptopwell, it would be nice to know that post optimization would be possible anyway
08:39lnostdal-laptop..without having to resort to rewriting this in java to get inheritance
08:40clgvwhere will be the potential performance bottleneck of your application?
08:43lnostdal-laptopmy guess would be that memory use will become a problem first
08:44clgvyou 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
08:45lnostdal-laptopyeah, i gotta think about this
08:46lnostdal-laptopscala seems to have classes and inheritance
08:46lnostdal-laptop, but anyway .. some coffee
08:46clojurebotjava.lang.Exception: Unable to resolve symbol: but in this context
08:47clgvscala has an elaborated type system ;)
08:48lnostdal-laptopyeah, too bad it doesn't have lisp syntax ..... :)
08:48lnostdal-laptop..with the macros
09:08clgvhm how can I efficently store clojure data structures? currently with serialization there is quite an overhead.
09:12edwThis may seem like a minor thing, but I cried from joy when I saw that this works: (map :foo [{:foo 12 :bar 42}])
09:12edw,(map :foo [{:foo 12 :bar 42}])
09:12clojurebot(12)
09:29clgvsomehow clojure.walk/postwalk doesnt walk all my data hierarchie although I only have standard clojure data structures... :(
10:11clgvI am still looking for a space efficient way to store clojure data on disk with the ability to append to the data file.
10:13tufflaxHm 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:21tufflaxoh i had to specify the full path src/a/b.clj even though src/ was on the cp
10:30arohnertufflax: 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:49kephalewhen using multimethods, is there a way to call the parent's multimethod from the child multimethod?
10:54chouser you can use the 'methods' function, theoretically, to find the parent function, which you can then call.
10:55kephalewonderful, thank you
11:07clgvchouser: how would you store clojure data structures in a file?
11:10chouserprn
11:10clgvchouser: not really space efficient.
11:12clgvchouser: 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:13fliebelclgv: What about kyoto cabinet or thrift, or something like that?
11:13drewrclgv: there is GZIPOutputStream
11:13chouserwell, 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:14clgvfliebel: gzip doesnt work since I need to append to the file later on
11:14chousersure, gzip of prn, protobuf, bson, Java serialization, json, etc.
11:14clgvjava-serialization somehow creates pretty huge files, I would not expect
11:15clgvI currently have implemented it via java-serialization.
11:15drewrI serialize to custom "cljz" files which are clojure maps, one line at a time, zipped; then stream them back in lazily
11:15clgvfliebel: have to check those names
11:15kephaleclgv: if you get hacky and use shell commands the CLI version of gzip can append
11:16clgvkephale: does appending to something compressed not always mean to uncompress the existing data ones when opening the file?
11:17no_mindso are there any remote clojure jobs ?
11:17drewrclgv: you can compress first then store lines of base64 or something
11:17clgvdrewr: yeah, thats true. I already had some thoughts in that direction
11:23kephaleclgv: i don't think that is a requirement of any compression scheme, but the huffman coding used in gzip would throw you off
11:24kephaleclgv: 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:24clgvkephale: yeah there these universal coding schemes that can append easily...
11:24kephalebut that sounds like too much work
11:25clgvhmm 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:26fliebelclgv: Have you checked gloss?
11:27clgvfliebel: what is gloss?
11:27kephalecan you do something really bad and just make separate gzip files for each append? then when you need them, decompress and concat
11:27fliebelclgv: some binary data thing written for aleph
11:28clgvwell serialization would do I guess, but somehow at the moment there seems to be a lot of useless overhead generated.
11:28clgvI'll try to find out step by step
11:31clgvhumm 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:31clgvthat would be an explanation to the observation
11:37chouserno
11:42clgvhm ok
11:43chouseryou have to keep your own references to historical versions, or they'll be garbage collected
11:43clgvhumm is 'aclone supposed to copy an array, if so, it seems not to do the job
11:43fliebel&source amap
11:43sexpbotjava.lang.Exception: Unable to resolve symbol: source in this context
11:44fliebel$source amap
11:44sexpbotamap is http://is.gd/ynNngb
11:44fliebelclgv: Yea, I'd say it should. What makes you think it does not?
11:47clgvI modified the clone and the parent was modified too
11:49clgv&(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:49sexpbot⟹ 0.9 -9.3 -9.3 nil
11:49clgv:(
11:51dnolenlnostdal-laptop: reading the backlog, always interesting to hear people lament the lack of inheritance :)
11:53clgvso 'aclone seems broken unless it has another usecase I am not aware of. documentation suggest a copy
11:55dnolenclgv: ?
11:55clgvdnolen: you see my example 6 posts before?
11:57clgvoh well I could have skipped the first set&print. I only did that too check if b gets all values from a
11:57clgv&(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:57sexpbot⟹ -9.3 -9.3 nil
12:00dnolenclgv: clone is not deep copy.
12:01clgvdnolen: ah damn it 2d array = array of arrays... :(
12:03clgvso (into-array (map aclone a)) should work
12:03clgv&(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:03sexpbot⟹ -9.3 0.0 nil
12:03clgv:)
12:03dnolenclgv: I would not use multidimensional arrays. So slow.
12:04clgvbut easily analysable by generic functions
12:05clgvdnolen: which aspects are slow with them? set/get?
12:06dnolenclgv: why not write some fns to give the illusion of multidim ?
12:06dnolenclgv: both
12:06michigan101https://market.android.com/details?id=com.game.WarStrategy
12:07texinwienHi. I have a somewhat theoretical question related to programming paradigms.
12:07dnolenclgv: if you want perf (definterface multidim ...) + fns w/ inline expansion.
12:08texinwienLet's say you'd like to write a program similar to AutoCad
12:08lnostdal-laptopwhere's the documentation for destructing? .. i can't see it mentioned in the documentation for let or defn
12:08clgvdnolen: hm ok. I write it on my todo list to measure that in comparison to my current implementation
12:08texinwienIs such a problem set more suited to functional or imperative programming?
12:09dnolenlnostdal-laptop: http://clojure.org/special_forms, the let documentation there.
12:10lnostdal-laptopdnolen, thanks!
12:12kephaletexinwien: 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:13sritchieis it possible to shadow special foms with symbol-macrolet?
12:15dnolenclgv: and then you can use aclone w/o the hassle as well.
12:15texinwienkephala: 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:16dnolentexinwien: JS on the JVM ?
12:16dnolen,(let [if 5] (if if :true :false))
12:16clojurebot:true
12:17texinwienbased 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:17sritchie(symbol-macrolet [hand +] (hand 10 1)) => 11, while (symbol-macrolet [if +] (if 10 1)) => 1
12:17texinwiendnolen: it is browser based. 2d plane geometry and algebra.
12:18kephaletexinwien: 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:19texinwiendue 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:20dnolensritchie: yeah I don't think that can work. Might be wrong.
12:21sritchiednolen: 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:22islonI'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:32jlfislon: i haven't seen that, but you might check the value of slime-net-coding-system
12:33islonjlf: and how can I do that?
12:34jlfC-h v slime-net-coding-system or M-x customize-variable RET slime-net-coding-system
12:34islon"Its value is iso-latin-1-unix"
12:35technomancythat 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:35jlfislon: it's set to utf-8-unix here
12:37islontechnomancy: I tried clojure-jack-in and got the same error, i'll try again
12:37islon*some days ago
12:38technomancyislon: oooooh... it may not have made it to a release yet
12:38technomancyI'll keep my mouth shut
12:38jlfislon: any chance you have other versions of slime in your load-path?
12:40kephaletechnomancy: 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:40islonjlf: don't think so, but I changed the variable to utf-8-unix and it worked
12:40islonjlf: thanks!
12:40technomancykephale: I don't know; sorry
12:41kephaleah well, ty
12:41jlfmy first answer on #clojure, woot! :)
12:41mrBlisskephale: *print-level*
12:42kephalemrBliss: oOoo! thanks
12:42texinwienfunctional reactive programming looks like an interesting basis for a CAD gui
12:46avartanianWould java -cp clojure.jar;clojure-contrib-1.2.0.jar clojure.main be the proper way to get clojure-contrib onto my classpath?
12:47avartanian(I'm in Windows, hence the semi-colon rather than the colon)
12:48avartanianThen I try a (require 'clojure.contrib.math) at the REPL and an (abs 5) and it doesn't go so well.
12:49kephaletexinwien: 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:50islonavartanian: (use 'clojure.contrib.math)
12:50avartanianislon oh thanks so much. worked like a charm.
12:50TimMcWhat's that Japanese word for the gibberish you get by misencoding character data?
12:50avartanianwhat's the difference between require and use?
12:50technomancyclojurebot: ns form?
12:50clojurebotthe answer is 42
12:51technomancyclojurebot: 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:51clojurebotOk.
12:51islonavartanian: http://stackoverflow.com/questions/871997/use-vs-require-in-clojure
12:52TimMcOh, there it is: mojibake
14:31derp__what is wrong with this namespace declaration? (ns agent-sim.config.config (:require agent-builder :only [gen-func-state gen-task-state]))
14:31chouser(:require [agent-builder :only [gen-func-state gen-task-state]])
14:31chouserneed more brackets! :-)
14:31derp__ah!
14:31derp__thank you
14:32chousernp
14:34jcromartieI'm surprised there isn't a macro? in core
14:35seancorfieldanyone using clj-date? opinions pro / con? https://github.com/stackoverflow/date-clj
14:35VinzentAlso there is update-in, but there is no update
14:36chouserjcromartie: what would you pass it? a Var?
14:36chouser,(-> #'filter meta :macro)
14:36clojurebotnil
14:36chouser,(-> #'for meta :macro)
14:36clojurebottrue
14:38jcromartiewell, macro? needs to be a macro :)
14:38chouserheh
14:38jcromartiehttps://gist.github.com/8ee446bce85d4cc1fa37
14:38amalloyVinzent: 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:39jcromartieI like the test :)
14:39Vinzentamalloy, it should recieve pairs of key\update-fn, just like assoc does
14:40jcromartieI don't see the point Vinzent
14:40amalloyVinzent: or maybe it should take an update function and a seq of keys, and apply the update function to each key
14:40jcromartieexample?
14:40clojurebotexamples is http://en.wikibooks.org/wiki/Clojure_Programming/Examples/API_Examples
14:41Vinzentjcromartie, 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:42jcromartieinteresting
14:42jcromartieshouldn't be too hard
14:43jcromartiehow about this
14:44jcromartieactually
14:44jcromartiethere are issues with that, update-in takes additional arguments to the function too
14:45S11001001which looks really nice when things fit together
14:45VinzentYep. 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:45jcromartieyou could use -> and update-in
14:45Vinzentjcromartie, yes, of course, but it requires a huge number of unnesescary parens
14:46Vinzent*unnesescary
14:46Vinzentargh... *unnecessary
14:46chouserVinzent: best is to post to the google group
14:46Vinzentchouser, ok, thanks, I'll do that.
14:53jcromartieVinzent: check update-keys here: https://gist.github.com/8ee446bce85d4cc1fa37
14:54Vinzentjcromartie, sorry, I can't view it now because my internet connection is down.
14:54Vinzentand anyway I have implementation of that function in nearly every my project :)
14:54jcromartieI see :)
15:00jcromartiewow, anybody in mid-Maryland... this is an absolutely insane storm
15:00sritchiejcromartie: I'm in DC -- sounds like it's coming this way
15:01jcromartiewatch out! seriously... this is torrential
15:03sritchiehey all -- if I wanted to convert this class to clojure, using gen-class -- https://gist.github.com/1072541
15:04sritchieI was trying to run something like (gen-class :name forma.hadoop.pail.SplitPailStructure :extends forma.schema.DataChunkPailStructure :prefix "split-")
15:05sritchieafter 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:06amalloysritchie: see ##(doc gen-class). if you're not AOTing, it's a no-op
15:06sexpbot⟹ "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:07sritchiegot it
15:16sritchiewhat's the equivalent clojure to String.class?
15:16Vinzentjust String?
15:16sritchieWell, one of my own classes, forma.schema.DataChunk
15:17sritchieso, the equivalent clojure code to "return DataChunk.class;"
15:17Vinzentjust DataChunk? :)
15:17sritchieI suppose DataChunk, at the repl, just evaluates to the class
15:17sritchielooks like it! too simple, just checking :)
15:25amalloyVinzent: can you go three for three with int.class?
15:41dnolenhmm Emacs 24 + ITerm 2 is nice
15:56bryanljcromartie: the storm looks crazy
16:02jcromartieyup
16:02jcromartieit turned our back yard into a pond pretty quickly
16:31dsophow to apply a list of args to a java method? something like (apply .foo repo arglist)
16:34rmarianskidsop: i don't know of a way to do that without reflection
16:35jcromartiememfn?
16:35S11001001takes an argcount
16:35S11001001dsop: anyway, there are no rest args in java methods, despite all appearances from the java language
16:35rmarianskidsop: i've done it like this: https://github.com/iwillig/geoscript-clj/blob/master/src/geoscript/utils.clj
16:36dsoprmarianski: thanks
16:36rmarianskiessentially clojure.lang.Reflector/invokeInstanceMethod
16:36jcromartieI'm not sure if dsop is asking about varargs
16:37S11001001maybe not, but it's the only area where nothing but apply will do
16:38dsopjcromartie: not really. maybe memfn will work, I have to check it
16:38dsopthanks for the help
16:45jaskiratdsop: does a macro sound bad? something like (defmacro japply [f o l] `(~f ~o ~@l)) ?
16:47dsopjaskirat: hmm no that might be good, thanks haven';t thought of it %)
16:48S11001001jaskirat: I don't think that will have the desired effect
16:49amalloy(inc S11001001)
16:49sexpbot⟹ 1
16:49jaskiratS11001001: I don't understand why you say that.
16:50amalloyjaskirat: it will only work if L is a literal list known at compile time
16:50amalloyin 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:50jaskiratamalloy: ah yes
17:16dnolenhmm I wonder if the announcement on the 20th is compiler related ...
17:21hiredmanwhere was the 20th announcemennt?
17:24dnolenhiredman: it's going to be at the NYC Clojure Meetup
17:25Scorchinall I know about it is that Rich has been "using textmate a lot"
17:25technomancyalso mentioned buried in the steve yegge thread that all the core devs are busy until the 20th
17:27technomancyclojurebot: 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:27clojurebotIk begrijp
17:33hiredmandnolen: I mean were was the announcement of the announcement?
17:39dnolenhiredman: in the Yegge thread
17:39dnolenthough the Meetup description does say rhickey will be talking about something "new"
17:41hiredmanugh
17:41dnolenstuart's tweet, https://twitter.com/stuarthalloway/status/89174283967934465, makes me suspect it's compiler related. but who knows?
17:41hiredmanlet it die
17:56dnolendid somebody here work on this? https://pair.io/
17:59ibdknoxdnolen: that's kind of cool
18:00ibdknoxit appears to be this guy: https://github.com/zkim
18:14dnolenclojuredocs.org fellow
18:38amalloytechnomancy: what's this about IFn? you're advocating that everything should be callable, or something more subtle?
18:41technomancyamalloy: 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:42technomancywhich 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:31nishantHow can I start a web server which can accept requests from external hosts, I'm using this - (run-jetty #'app {:host "0.0.0.0" :port 8080})
20:34nishant,run-jetty
20:34clojurebotjava.lang.Exception: Unable to resolve symbol: run-jetty in this context
20:34bpr``is ritz stable enough to develop with at this point?
20:35bpr``i tried it out when it was swank-clj and couldn't even get it running.
20:35amalloybpr``: i can't make it work at all; it seems to depend on the sun/oracle jdk, for one
20:36bpr``amalloy: i'm running it
20:36bpr``er, the sun/oracle jdk anyhow
20:37bpr``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:38bpr``amalloy: what jdk are you using?
20:38amalloyopenjdk
20:38bpr``ah
21:39hugodamalloy_: 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:39hugodI'll give it a try on ubuntu…
22:24amalloyhugod: 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:26hugodamalloy: thanks - just scripting the ritz dev box setup with pallet…