#clojure logs

2009-06-15

01:02AnniepooIn a proxy what's the name of the constructor, since the class is anonymous?
01:03hiredmanyou cannot make a constructor
01:04Anniepoohmm... I'm trying to overrride the constructor of JLabel to muck with it on setup
01:05hiredmanyou cannot
01:05Anniepooooochie... ok.
01:05hiredmanyou can muck withit first, then pass it to jlabel
01:05Anniepooyes, that's what I meant
01:08replaca~proxy
01:08clojurebotproxy is <Chouser> proxy teases with its ease of use, then suddenly betrays.
01:08Anniepoosay you want to make a special kind of label where the text has "XXX " automaticly prepended to the label. Otherwise it's an ordinary JLabel.
01:08Anniepoohmm
01:10hiredman(defn special-jlabel [x] (JLabel. (str "XXX" x)))
01:11hiredmanvery simple
01:17twopoint718I have a quick question about def.
01:17twopoint718Are the vars that def creates public in that namespace?
01:24hiredmanyes
01:24hiredmanthey are public in any namespace
01:24hiredmanif you (def a 1) in the foo namespace
01:25hiredmanif the foo namespace is loaded, in the user namespace foo/a will give you 1
01:26hiredmanyou can assoc :private with true in the metadata to make a private def
01:26hiredmanthere is also defn- for private defns
01:28twopoint718Okay so if I have a var in namespace foo, what do I use to refer to it from another namespace?
01:29hiredmandepends
01:29hiredmanhow are you loading the foo namespace?
01:30hiredmanshort answer is the namespace qualified symbol
01:30hiredmanfoo/whatever
01:31twopoint718I was using ":require" inside the ns form
01:31hiredmanyeah
01:31hiredmanso foo/whatever
01:32hiredman,(resolve '+)
01:32clojurebot#'clojure.core/+
01:33twopoint718Okay, I think I know what I'm doing. I think I'd created a circular dependency
01:34twopoint718ns A requires ns B, then B wants to refer back to something in A that hasn't been loaded yet, is that plausible?
01:35hiredmanthat is a circular dependency
01:37twopoint718shoot
01:43twopoint718I think I'll just pass two more parameters
01:43twopoint718hiredman: thanks for the help, I think I've got it sorted out now.
01:49Anniepoohiredman, thanks for helping out us noobies
01:49hiredman~hiredman
01:49clojurebothiredmans euler.clj is so embarassing
01:58hiredman~sandboxing
01:58clojurebotTitim gan éirí ort.
01:58hiredmanbah
01:58hiredman~sandbox
01:58clojurebotsandbox is http://calumleslie.blogspot.com/2008/06/simple-jvm-sandboxing.html
03:57sgtarrclojure rules
03:57sgtarrbut I have trouble finding a development environment which is not Emacs :/
03:57sgtarrThe Eclipse plugin lacks in features, the vimClojure crashes on me (author knows about this so it might be fixed soon)
03:58eevar2did you try the netbeans plugin?
03:59hoecksgtarr: I tried netbeans too, but I'm am emacs user, so I'm missing all the fancy keyboard-only jump-around-the-buffer commands
04:01hoecksgtarr: but what I'like about the netbeans plugin is its easy setup and the way you mange your project and your dependencies
04:09sgtarrhoeck: netbeans tends to be rather sluggish and ugly in Linux
04:09sgtarrbut.. seeing that I have few choices here, I'll give it another try
04:09sgtarrhi kotarak :)
04:10kotarakhi sgtarr
04:10sgtarrkotarak: do you mainly use vimclojure when developing clojure programs, or do you also use emacs/netbeans/eclipse/.. ?
04:11kotarakonly VC
04:22sgtarrok
04:22clojurebotbook is http://www.pragprog.com/titles/shcloj/programming-clojure
04:22sgtarrok
04:22sgtarrweird, why did clojurebot say where the book is? :)
04:29sgtarrit seems Clojure is taking off... more and more people getting interested
04:29sgtarrJust imagine if Lisp really got a "mainstream" comeback
04:29sgtarrAnd Lisp was never really Mainstream.
04:30sgtarrI'm reading "Programming Clojure" here at work instead of actually doing work. heh
04:30Carkhthe secret weapon going mainstream ='(
04:42sgtarrDon't worry, it won't get *that* mainstream
04:54sgtarrCarkh: what do you use Clojure for specifically?
04:54Carkhserver stuff
04:54mxcwasn't lisp mainstream in the 50s when it was that, fortran, or assembler?
04:54Carkhright now : a web application for telephony provider
04:55mxcclojure does seem interesting, as a current haskeller
04:55sgtarrhaskell is just too strictly functional for me
04:55sgtarrclojure opens up flexibility
04:55sgtarri'm a practical guy
04:56mxci love my type safety
04:56Carkhhaskell is nice, but it's hard to keep in the spirit of it all the way
04:57Carkhthere is always a point where it gets too hard to keep fully type safe
04:57mxcwould love to be able to use java libraries though
04:57sgtarrwhat I love about these languages is how elegantly you do concurrent programming
04:57mxci just think that haskell's learning curve (basically a vertical line) is probably a bit steep
04:57sgtarrand that's one of the motivations for me learning Clojure now
04:57sgtarrmxc: hahaha, a vertical line :)
04:58mxcbut once you get over it, its pretty amazing
04:58mxci've used ocaml, f#, and haskell
04:58sgtarrwe used ML (standard ml of new jersey) in university for a course, it's interesting but I do not want to use it again
04:58sgtarrand that has really put me off F# as well, since it's inspired by ML
04:59sgtarrLisp however, is so elegant, it's the language of the Gods
04:59eevar2question is whether i should pick up yet another language, or just focus on the toolset I already have ;)
04:59mxcf# is annoying since you have to use so many C# libraries that you lose all the type safey and FP assurances
04:59mxcsgtarr - ostesibly yes, but didn't they just hack most of it together with perl?
05:00mxchttp://xkcd.com/224/
05:00sgtarrmxc: fortunately they came up with a recipe that worked, because seeing that it's hacked together with perl it's impossible to maintain :)
05:00mxchehe
05:00mxchave you ever tried patching existence?
05:00sgtarrnope
05:01mxcsome theorize that there is version control, commits only last for plank time before the master reverts the commit
05:01mxcplanck
05:13sgtarrmxc: haha :)
05:53thomaslee(let [run [1 2 3] runn (count run)] (do (dorun runn run) (do (dorun run))))
06:01jdzfirst dorun looks wrong
06:02jdznot
06:03thomasleeit's straight from the interpreter. it runs, but don't expect it to do anything. :P
06:04jdzyes, i just have not used the two-argument version of dorun
06:25thomasleewhat's the easiest way to get at the :doc string associated with a clojure function?
06:25hoeck(doc name)
06:25clojurebot"([x]); Returns the name String of a symbol or keyword."
06:26thomasleeI would've thought (meta <function>) would give me what I was looking for, but it seems to yield nil
06:26thomasleeIt doesn't just print it out?
06:26hoeckfunctions have no metadata (yet)
06:26hoeckbut vars have
06:26hoeckso (meta #'<function>) is your friend
06:27hoeckor (meta (var <function>))
06:28hoeckor ^#'name :)
06:30thomasleehoeck: thanks, but I don't understand the difference -- why does (var <function>) work when <function> doesn't? Is defn not just performing a "(def blah (fn ...)" under the hood?
06:31hoeckyes, but the metadata is stored in the var object, not in the function
06:32hoeckand evaling <function> returns the content of the var, a function for example
06:33thomasleehmm, okay. I think I understand.
06:36thomasleeso the names to which things are bound in clojure are objects unto themselves
06:36thomasleewhich is why vars have the metadata but functions don't
07:12eleftheriosI am getting very bad support from Pragmatic Programmers customer support for the Programming Clojure book
07:13eleftheriosI was almost shocked to receive such a lousy response from these guys, I thought they were a friendly bunch
07:13rysI didn't get the best response either
07:13eleftheriosthey didn't even greet me
07:13eleftheriosand they didn't have a name or signature on the email
07:14eleftheriosthe ebook has an issue, on the Sony PRS-505 at least (which is probably one of the most popular ebook readers)
07:14eleftheriosthe code is off the right edge so one can't read the code samples
07:14eleftherioswhat use is a programming book if you can't read the code?
07:14eleftheriosand I sent a nice email letting them know about the issue
07:15rysYeah, it's the same issue on the iPhone with the ePub for me
07:15eleftheriosand this guy replied in a few words and he said, 'we asked our readers and they want us to maintain the semantic integrity of the code'
07:15eleftheriosand 'read it in landscape'
07:15eleftheriosand the guy obviously hasn't even tried because
07:15eleftheriosin landscape mode you lose even more of the code
07:15eleftherios!!
07:16rysIt doesn't work in landscape either, yeah
07:16eleftherioshe is an idiot
07:16eleftheriosand I replied in a very friendly way again
07:16eleftheriosand said, 'look, how can you maintain the semantic integrity of the code when half of the code is not there?'
07:16rysStock of the print version in the UK is weak, so I've been waiting since launch day for my copy, reading the crippled ePub version instead
07:16eleftheriosand that 'in landscape mode isn't available either'
07:17eleftheriosand guess what?
07:17eleftherioshe hasn't replied in 4-5 days
07:17eleftheriosso basically, he gives a couple of wrong recommendations in a dry, almost rude email
07:17eleftheriosand then they ignore further emails
07:17eleftheriosso now I am upset and I want a refund because the eBook is not fit for purpose
07:17eleftheriosand they have failed to be polite or helpful
07:18eleftheriosand I am a long-time customer, they can see my account
07:18eleftheriosunacceptable
07:18eleftheriosso if anyone is planning to get the eBook, hold your fire because as rys says too, you want be able to read the code
07:38doug_I want to convert '((1 2) (3 4) (5)) into '(1 2 3 4 5). I can do it with (reduce #(into %1 %2) '() '(1 2 3 4 5)) but is there a convenient function to do it for me?
07:39doug_That actually gives '(5 4 3 2 1) but I'm not worried about the order.
07:40doug_I meant (reduce #(into %1 %2) '() '((1 2) (3 4) (5)) of course...
07:40jdzdoug_: what you are looking for is usually called "flatten"
07:40doug_that's how I would have described it, but can't see a flatten function in the API
07:40jdzdoug_: if you are sure all the members are lists you can do apply concat
07:42doug_that works, thanks. Yes, all members are lists.
07:42jdzwell, they could as well be other sequences
07:42jdzbut they should be seqable
07:42doug_slightly simpler
07:43doug_seqs, yes. keep forgetting this isn't lisp :-)
08:15guineaThis might be an emacs question, but whenever I try to start swank, I get, java.lang.Exception: clojure.contrib.javadoc/javadoc can now be found in clojure.contrib.repl-utils. (javadoc.clj:1)
08:56rhickeyI don't like that pull requests don't get a proper place to live in github - AFAICS they just turn in to messages, so hard to track which have been applied etc
08:56rhickeyalso others can't see them, just in the inbox
08:58Chouserthe patch that the pull request points to is public
08:58rhickeytechnomancy's pull requests were all from named branches on his side - I liked that vs some cryptic number, OTOH a branch isn't a point
08:58rhickeyso maybe tags?
08:59rhickeyChouser: yes, the code is public, but not the pull request, so creates a funnel into someone's inbox
08:59ChouserI made a named branch for that one patch, but I chose the changeset when I sent the pull request -- perhaps that obscured the branch name?
09:00Chouserthe "network" tab on the clojure project is going to get very busy
09:01Chouserlooks like cgrand got two names on one branch -- are those tags?
09:02Chouserhm, apparently not -- just two brances in a row.
09:03rhickeyon the same line because they haven't diverged?
09:03ChouserThat would be my guess
09:03rhickeyanyway, yeah, I can imagine this getting very busy and difficult to manage
09:04Chousukeassembla does nothing to help with pull requests?
09:04ChouserFor these single-patch branches, it seems this is going to be more work for everybody than a patch attached to an issue.
09:04rhickeypull requests are a github thing
09:05ChouserI can see it making sense for something like clojurescript where I was maintaining a branch with multiple patches over the course of several weeks.
09:05rhickeypatches aren't going to get the best merge logic
09:05Chousertrue
09:06Chousukethe network graph is good for seeing what people are working on though.
09:07rhickeyif people want git they want branch/merge, no?
09:07Chouserif you want git's merge logic, then we've got to have public branches
09:09rhickeyyeah, I haven't gotten a great public branch creation recipe that doesn't seem to have a redundant step
09:10Chouserat least I can push a new branch without having to use the web site.
09:11rhickeythis recipe: http://github.com/guides/push-a-branch-to-github doesn't leave your local branch tracking the server?
09:12ChouserPerhaps the pull request is where things go wrong. A github branch url (instead of a raw patch) could be attached to an issue.
09:14rhickeyI got "technomancy wants you to pull from technomancy/clojure at validate-symbols-issue-13" when he used a branch
09:14Chouserright, I meant for better visibility
09:14rhickeythe problem is the branch could change
09:15Chousernot after you've merged it
09:15rhickeyChouser: ah, yes, something has to go on the issue, and ideally the pull request should contain the issue, but overall the pull requests themselves seem not terribly trackable
09:16rhickeyChouser: true, but branch name doesn't label a point in time - are tags better for this?
09:18Chousukehmm.
09:19dudleyfMost of the projects I've contributed patches to don't use pull requests
09:19ChousukeYou're worried that if someone commits to a branch after sending you a pull request, you could end up merging something unexpectedly?
09:19Chousuketags would help with that I suppose.
09:20rhickeyor someone else couldn't reproduce - "grab fred's mod and try on your machine"
09:21Chousukeright.
09:22rhickeydudleyf: does that mean they use patches, or just don't use that part of github
09:22Chousukehm. when applying git-format patches, does it preserve the author information? :/
09:22dudleyfrhickey: The usual way is to create a patch with git format-patch
09:23dudleyfChousuke: Yes
09:23ChousukeI know the patch contains the author info and all, but "git apply" at least only adds the changes to the working copy
09:23Chousukeis there another command for applying it as a commit?
09:24rhickeypatches seem completely antithetical to the concept of git. I can see their use for quick - "try this out over whatever you've got", but the central concept of 'this code was developed using this basis' is destroyed by patches
09:24Chousukerhickey: git-format patches preserve that info.
09:24Chousukeat least to some extent.
09:25Chousukestill, pull requests would be more convenient :/
09:26Chousukemaybe probe the github guys and ask them if they could improve tracking pull requests :)
09:33AWizzArdWas git now chosen as the next rcs for Clojure?
09:37kotarakI made the experience, that 90% of the patches are not in directly applicable form. So pull requests are pretty useless for open contribution. They only work with a team, which adheres to the same rules and whose patches are directly applicable. My 0.02€.
09:38Chousukeapparently "git am" preserves author information etc. but it requires patches to be in mbox or Maildir format.
09:38Chousukethat is, it extracts patches from your mailbox.
09:49rhickeyAWizzArd: we are working through the details now, but yes, git on github + assembla is the current plan
09:49rhickeydoes anyone have a project they can point to with good git workflow guidelines online?
09:56drewrOne project I work with has been using ideas from http://www.kernel.org/pub/software/scm/git/docs/gitworkflows.html.
09:57rhickeydrewr: I've been reading that - it doesn't have a policy for format-patch vs pull
09:59drewrThe maintainer could accept either.
10:03Chouserwas patches attached to issues dreadful?
10:03drewrTakes time with the tool to build up confidence that it's doing what you want.
10:05rhickeyChouser: no, I guess it depends on the nature of the patch, how it is produced etc, and what it is for. Patches for bugfixes might be fine, I guess I've been thinking more about feature development with more than one person
10:06Chouserit may also be that the "right" workflow for clojure is not the best for contrib
10:06clojurebotfor is a loop...in Java
10:06drewrIf it were me, I would "git checkout -b rhickey-issue-x COMMIT", where COMMIT is the revision he was working against, then "patch -p0 < foo.patch" or "git apply ..." or "git fetch/merge" depending on how he submitted it, tweak anything I didn't like, then "git merge --squash" everything back to master.
10:06rhickeyIn any case, there needs to be a very small set of well-defined recipes, i.e. for bugfixes - patches only accepted from format-patch on code rebased to latest master etc, whatever that recipe might be
10:07stuartsierraIncidentally, 3 people have sent me patches in the past couple weeks.
10:07rhickeydrewr: you have more free time than I do :)
10:07Chouserstuartsierra: against contrib?
10:07drewrrhickey: Ha. I use git because I *don't* have free time. :-)
10:08drewrIt's a steep learning curve but an invaluable tool.
10:08stuartsierraChouser: yes
10:09Chouserstuartsierra: people must actually use your code. I never get patches. :-)
10:09rhickeydrewr: it's not just a learning curve thing but a matter of streamlining, e.g. I frequently got patches/diffs in formats that various tools weren't happy with, big waste of time
10:09stuartsierraWell, my name is on a lot of the "shared" libs, like str-utils and seq-utils.
10:10rhickeya project should have guidelines certainly
10:10drewrrhickey: I forgot that you hate the cmdline. Yeah, git's going to be painful most likely...
10:11rhickeydrewr: seriously, it's not about learning something new, it's about avoiding cacophony
10:11rhickeyso, let's get some best practices together here
10:12drewrYou could create a dev list where people send their format-patch submissions and discuss.
10:13drewrThat technique's been used for decades with much success.
10:15rhickeydrewr: just discussing what the loss is, if any, for doing so with git vs. a pull strategy that retained more of the true history
10:17drewrFor patches? It doesn't matter. Submissions should be atomic. You just want to see the result of their work.
10:17Chouserfrom my side it hardly matters. Either way I'll keep my local patch in a separate git branch. To submit I'll either "git show" or "git push", and then fill out the appropriate attachment description, pull request, or whatever (hopefully just a single step beyond git).
10:17drewrSo there really isn't any history to care about.l
10:18drewrThe nice thing about pulling is that they don't have to tell you what commit they started from.
10:19Chouserdrewr: but if head has moved on since the patch was prepared, having a git branch will make a more sophistcated merge easy.
10:19Chouserright?
10:20rhickeyif we do patches, the rule will be they must apply cleanly to master head or else must be rebased and resubmitted
10:21eleftheriosassembla? Is this any good, first time I see it
10:21rhickeywith pulls I imagine git can do a better job with a 'stale' request
10:21drewrChouser: Not in my experience, but I could be wrong.
10:21rhickey?
10:21Chouserit's possible for an old branch to not merge cleanly too, right?
10:21mtdrhickey: yes
10:22drewrChouser: Yeah; if there are conflicts, there are conflicts.
10:22mtdrhickey: this recent post expands a bit on some rules you may want to consider http://www.mail-archive.com/dri-devel@lists.sourceforge.net/msg39091.html
10:22mtdrhickey: it's a bit more "meta" than the "man git-workflows" that was mentioned before
10:23rhickeymtd: read that already, thanks
10:23Chouserright, so either way I assume rhickey will require "clean" merges, it's just a matter of how likely it is that a patch submitter will have to re-apply/re-submit. To avoid that kind of work, I'd prefer git branches to patches.
10:24Chouserdunno about rhickey's end -- patches may be easier to apply than a git branch from a random remote repo?
10:24rhickeyChouser: patches will definitely sit around - else they constitute constant distractions. If when someone gets around to them they no longer work, asking for resubmits will be a pain
10:25drewrYou would have this issue with any VCS. If I submit a patch today for lazy-cons, you all would tell me it's irrelevant. The submitter has to keep up.
10:25Chousukea git branch for a random remote repo shouldn't be more difficult than git pull git://repo/url branch_name
10:25mtdChouser: possibly easier to actually apply, but might be harder to manage overall. IIUC Linus usually pulls from known "lieutenant"s' repos.
10:25mtd(to cite a known example)
10:25rhickeyone problem is with serial patches - 5 people based their work on the same base but not on each other's, so once one is applied the next breaks
10:26mtdrhickey: that's a good problem to have :)
10:26Chousermtd: ok, but this would be similar -- rhickey will only pull from github repos of people who have submitted CAs.
10:26rhickeydrewr: my understanding was that git history was substantially smarter than patches
10:26drewrYeah, but not that smart.
10:26mtdrhickey: yes, that's correct modulo your serial patches issue
10:26mtddrewr: how so?
10:27mtdChouser: nod
10:27drewrmtd: How so what? Sometimes git just can't figure out what you mean, regardless of the history.
10:28rhickeydrewr: I guess it could be smarter if *not* the same basis
10:28mtddrewr: if you and I clone rhickey's branch x, work on it, and then tell rhickey "git pull my-repo for-rhickey" then it should figure it out even if we have a sensible common ancestor.
10:28mtddrewr: I guess I'm saying it can work, and you're saying it can break, and we're both right.
10:29drewrmtd: Yep. :-)
10:29mtddrewr: In order to make it work, I think it's mostly the contributor's task to keep a branch that'll pull clean
10:29rhickeypatches are nice in that they can sit in the issues system or email list, examined directly, applied arbitrarily
10:29mtdrhickey: for small patches that should work I guess. Agree the transparency is nice
10:30Chouserit's easier to keep a local branch clean against head (via rebase) than anything else I've ever tried to do. ...which is why I would do that even if what was submitted was a patch.
10:30mtdChouser++
10:30rhickeyChouser: agreed, that should still be the source of a patch, as is just good git practice
10:31Chousukewhat is a shame though is that git doesn't seem to know how to make a commit from a git-format patch ;/
10:31Chousukeor hmm
10:32Chousukeoh cool
10:32rhickeygit am/
10:32rhickey?
10:32Chousukegit am works even for single patches
10:32Chousukenever mind :)
10:32ChousukeI didn't think the patch was already in mbox format
10:33pjb3rhickey: Here's the Rails workflow for patches with git: https://rails.lighthouseapp.com/projects/8994/sending-patches
10:33Chouserfor what it's worth, I think clojure has patches from no more than 23 people
10:34Chouserand only 7 have more than 2 patches
10:34rhickeyChouser: hasn't the lack of git been holding everyone back? :)
10:35rhickeypjb3: nice, thanks
10:35Chousernaw, what's been holding everyone back is that you send in a patch and it just sits there for weeks because *somebody* think's they're just a distraction.
10:36gnuvinceI can't talk for others, but my biggest hurdle to contributing to Clojure itself is my lack of solid Java knowledge (and also all important things related to algorithms, data structures, compiler technology, etc.)
10:36Chouserrhickey: j/k!
10:36rhickeyChouser: it's a fair point, balancing between being responsive and getting interrupted
10:37Chousukeat least with git you have the network graph which is pretty good for seeing what people are working on.
10:37clojurebotgit is http://www.github.com
10:37rhickeyI didn't say they were 'just' distractions, just that if they have to be dealt with as they come in, they will constantly interrupt
10:39ChouserNot very fair. I suppose you might lose some input for that reason, but it probably wasn't particularly deep input anyway. If someone has invested significant effort in creating a change of real value (and printed, signed, stamped, and mailed a CA), a little more effort and/or patience to get it into the project is unlikely to turn anyone off.
10:40Chousukewith SVN most development was kind of behind the scenes, so it was hard to tell what was being worked on.
10:40Chouserthat's probably less true of contrib, where someone with much less deep knowledge of clojure can probably produce something interesting and useful without a ton of effort.
10:42rhickeyChouser: well, there was significant clamoring for git, and again repeated when I was in SF, at the Bay Area Clojure users group - it does make it easier to work on speculative changes while the core code is moving too. I hope we get more participation, else why change?
10:43gnuvinceTo shut the git squad up so we can discuss more important topics? ;)
10:46rhickeygnuvince: I've taken the feedback seriously. Certainly we could use more hands with bugfixes
10:48ChousukeI'm going to fix require's documentation :P
10:48Chousukeit still refers to the old /x/y/z/z.clj naming scheme
10:49rhickeyso, the sense I'm getting from this discussion and the reading I'm doing in parallel is that patches are better for bugfix submissions. That history is essentially dictated by master and serial
10:50rhickeywe should use github pull/push stuff for feature work by those project collaborators
10:50rhickeyi.e. contrib authors
10:52rhickeywill 'git format-patch master --stdout > your-patch-file.diff' work for multi-commit changes?
10:53drewrgit format-patch --stdout master..topic > ...
10:53rhickeydrewr: I think that command presumed you were sitting in your topic branch
10:54rhickeyfrom pjb3's link earlier
10:54drewrAh, OK.
10:55rhickeywe don't need all this email stuff from format-patch, will it get in the way?
10:56drewrNo, patch and git ignore it.
10:56pjb3rhickey: Yes, multiple commit patches work, here's an example
10:56pjb3https://rails.lighthouseapp.com/attachments/93396/habtm_join_table_with_pk_raises_exception.diff
10:57pjb3I've never actually done that, but I think those are separate commits, I could be wrong though
10:57rhickeypjb3: and git am will restore as multiple commits?
10:57drewrYes to both.
10:57rhickeycool
10:57Chouserthose are separate files, but I'm not seeing evidence in that link of multiple commits.
10:57pjb3rhickey: also the email stuff is how git give credit to the original person
10:58drewrI thought the point of format-patch is that it recreates git commits. Otherwise you'd just do git diff master.. > foo.patch.
10:59Chousukedrewr: right. it does. I just didn't know that you had to use "git am" with them :)
10:59Chousukedrewr: I thought git am was only for patches sent to your mailbox :P
10:59drewrk
11:00rhickeypjb3: yes, that's a great feature. Just doule checking the use of --stdout into a single file, the things I'd seen had you using format-patch to produce multiple files, then zipping them up, then unzipping into a dir and pointing git am at that - r.g. a lot more work
11:02mtdrhickey: for lots of patches the recommendation would probably be to just ask you to pull from a branch. Credit is then also given.
11:07rhickeymtd: I'm trying to get a single recipe together if possible, that will make it easiest for the maintainers, provide a single point for history etc
11:12rhickeyat least for bugfixes. for features, that will have a history of their own, pulls are definitely better. I don't want the only benefits of using git to be local checkins and rebase :)
11:12Chousukerhickey: want to try applying this patch with git am and just see what happens? http://www.modeemi.fi/~oranenj/require-doc-fix.patch
11:13rhickeyChousuke: get in line (as soon as we determine where the line is) :)
11:14Chousukethat first from line there is a bit weird though
11:14ChousukeFrom b207aeb6253371b5fa7ba13765d683bf46300f76 Mon Sep 17 00:00:00 2001
11:19rhickeylocks are not STM - can you tell in how many ways this fails to do what the Clojure ants demo does? http://groups.google.com/group/comp.lang.lisp/msg/c83b38f792219cc0
11:21cemerickgah, I need to be more careful about looking at google group URLs so I don't inadvertently land in c.l.l. :-/
11:22cemerickwhoo-hoo, multiple-value-bind! :-P
11:23Chouserworse yet, setf
11:25ChousukeI can't test the CL ant demo. no LispWorks :/
11:26leafw"it should also be more efficient" -- if that was the motivation, he missed entirely what the ants demo was about: general purpose, lock-free programming.
11:26Chouseractually, that counts as a way, doesn't it? 'turn' in clojure uses dosync so I know it's safe (for some value of safe). The CL version just does a setf, so I have to confirm that everywhere it's called is sufficiently protected.
11:26Chousukedoes it scale up to 700 processors? :p
11:27replacarhickey: I saw your message on assembla. I think if you liked the naming idea, we could probably get github to waive the TOS in this case.
11:28rhickeyreplaca: it still needs to be clear that people are actually submitting to me, as it is with me they have a CA. Could be conveyed clearly though. Do you know github people?
11:30replacarhickey: the project home lets you put a readme, so you could put the terms there. I think that would cover it. Or in the project description.
11:30rhickeythe ants demo was designed to demonstrate 2 things that are very hard without STM - atomic work involving ad hoc subsets, and reporting on consistent views. It is not simply multithreaded ants running around
11:31replacarhickey: I don't know them personally, but they seem pretty accessible. If you want, I could go chase it out.
11:31rhickeyreplaca: agreed, just need the TOS exemption. Also, it seems multiple accounts are a hassle: http://github.com/guides/multiple-github-accounts
11:31cemerickrhickey: well, I'm sure PC will acquiesce if you just explain it to him ;-)
11:32rhickeycemerick: yes, another day wasted
11:35replacarhickey: yeah, it would have to be your preferred solution, of course
11:36Chousukewhich message are you talking about, anyway? :)
11:37rhickeyChousuke: https://www.assembla.com/flows/show/bOk168wkur3P1LeJe5afGb
11:40Chousukerhickey: thanks
11:41Chouserthat rails workflow looks pretty sane
11:47rhickeyChouser: yeah, as long as multiple commits are retained independently
11:51Chouserwhat's the benefit of multiple commits in a single patch?
11:52Chousukeperhaps easier to apply than multiple patches
11:53Chousukeand you still get many small commits instead of a single big one
11:53Chousukewhich makes bisecting and reverting changes easier
11:53opqdonutindeed
11:54rhickeyChouser: if your work involved multiple steps, they are still visible, independently commented.
11:54ChouserI just tested it -- git format-patch produces a file that can contain multiple commits, and git am recreates them correctly.
11:55rhickeyI guess the advantage of multiple files in a zip is that they could be independently applied
11:55rhickeyChouser: thanks for checking that
11:55clojurebotWho??
11:56Chousukethe hashes seem to differ from the original commits though :/
11:56ChousukeI wonder if that's just me.
11:57Chouserhm, the commit id is different for me too
11:57Chousukehmm
11:58Chousukebut it doesn't confuse rebase
11:58Chouserno, and the "index ..." is the same
11:59rhickeyas Linus says here: http://www.mail-archive.com/dri-devel@lists.sourceforge.net/msg39091.html
12:00rhickeyNotice that this really is about other peoples _history_, not about
12:00rhickey other peoples _code_. If they sent stuff to you as an emailed patch,
12:00rhickey and you applied it with "git am -s", then it's their code, but it's
12:00rhickey _your_ history.
12:15doug_Getting to grips with agents. Am I right in thinking that agents themselves do not provide parallel processing? Do I need to resort to java.lang.Thread to spawn new threads?
12:16dnolen_agents do spawn threads
12:16hiredmanagents are backed by a threadpool
12:16hiredmansend runs the agent action on a fixed size threadpool and send-off on a, uh, unfixed? size threadpool
12:17leafwdoug_: since all clojure functions are Runnable and Callable, it's easy to hand them over to your own thread pool created via java.util.concurrent.Executors static methods.
12:17doug_So if I loop over a seq and send a function to a given agent for each item in the seq they will run in parallel (up to the limit of the threadpool)?
12:18Chousukeas long as it's not the same agent.
12:19doug_Chousuke: so I need to create one agent for each send and then collate the results myself?
12:19hiredmandoug_: you might use pmap instead
12:19hiredmanpmap and some kind of reduce
12:20hiredman,(doc pmap)
12:20clojurebot"([f coll] [f coll & colls]); Like map, except f is applied in parallel. Semi-lazy in that the parallel computation stays ahead of the consumption, but doesn't realize the entire result unless required. Only useful for computationally intensive functions where the time of f dominates the coordination overhead."
12:20doug_hiredman, clojurebot: pmap looks interesting. I will investigate, thanks
12:23doug_wow. pmap knocked 40% off my elapsed time - best result from adding one character to my code ever, i'd say :-)
12:24hiredman:)
12:25duck1123doug_: keep in mind that last line in the doc. unless f does quite a bit, sometimes pmap is slower
12:28doug_duck1123: thanks. in this case f is scanning a lot of files from a directory, so getting good results. lets me parallelize the scanning of lots of dirs. Of course, too many and I'll hit i/o limitations, but the doc indicates that it's not running everything at the same time.
12:30leafwdoug_: last I checked, pmap uses (+ 2 (.availableProcessors (Runtime/getRuntime)) threads.
12:31duck1123In my C++ class we were talking about some algorithm and I joked "just make it parallel". When someone responded that that was quite a bit of work, my response was "in Clojure it's one letter"
12:33hiredman~def future
12:37leafwduck1123: via JNA, you should be able to get that C++ program to operate via batch mode using pmap in clojure, if the task can be broken down like that.
12:37duck1123if I need to refer to a global var that's in the same namespace as my macro, what combinatin of characters do I need to use?
12:38duck1123leafw: I can't even remember what the algorithm was anymore, it's just one more example of how functional programming and Clojure has infected my thinking
12:38cemerickyeah, pmap is pretty fantastic.
12:38hiredmanusing jna to "optimize" is a bad idea
12:39hiredmanjna overhead will dominate
12:39arohnerduck1123: ~ns/var I believe
12:40leafwhiredman: I find JNA nice to interface stuff like the fftw library.
12:41hiredmansure, it is nice for getting at native libs
12:42hiredmanbut it is not something you can do a lot of and expect good performance
12:42doug_future looks interesting. I see pmap is implementing using future. would be useful if it allowed setting of the number of threads.
12:42hiredmanhttp://weblogs.java.net/blog/mlam/archive/2006/12/beware_of_the_n.html "The JNI overhead is in the order of something like 20x to 100x."
12:43hiredmanof course jna is faster then jni, but still
12:44hiredmanwiat
12:44hiredmanreverse that
12:44hiredmananyway, calling native code is slow
13:26jackdempseyheh
13:26jackdempseyfwiw putting it up at github will definitely entice me to look into things more :-)
13:26jackdempseyimagine its the same for others.....also, having such a great library of videos/presentations is excellect rhickey
13:27jackdempseythat and you crack me up....while intriguing me.....anyway, great stuff
13:39duck1123jackdempsey: clojure has been on github forever. (just not in an official capacity)
13:39jackdempseyahh, cool
13:39duck1123there was an old git-svn version put out by kevinoneill
14:44cgrandChouser: re: "two names on one branch" I don't understand, the branches are distinct: http://github.com/cgrand/clojure/commits/inline-math-ops and http://github.com/cgrand/clojure/commits/xml-preserve-whitespace
15:08rhickeyso do we just copy: https://rails.lighthouseapp.com/projects/8994/sending-patches and modify for Clojure?
15:09Chousukesounds good to me
15:10technomancythe main difference is that Rails keeps its tests in the same repo, so it makes it much easier for contributors.
15:11cemerickI totally missed the patch/merge conversation this morning. It seems like a bummer that pull requests can't be the standard workflow.
15:11rhickeycemerick: the discussion is still open - what are your thoughts?
15:13rhickeylost?
15:13cemerickwell, I know absolutely nothing about managing a distributed, open source project, but it seems like git provides a great mechanism for ensuring that changes can be propagated and reliably merged from multiple parties (modulo straight-up conflicts). Further, github appears to make tracking who has what patches based off of what tree trivial.
15:14technomancyrhickey: I deleted my contrib repo and made a fresh copy a few weeks ago for some reason, and I didn't have my tests pushed out anywhere.
15:14cemerickGoing to text patch files seems like a missed opportunity (not to mention icky in and of themselves -- reminds me of some bad old days gone by or something).
15:14technomancyof course I should keep closer track of things like that, but it would be much better if I didn't have to.
15:15rhickeycemerick: I'm still envisioning using pulls and proper github branches for features, patches for fixes
15:15cemerickah-ha
15:15stuartsierraWith git, is there any practical difference between features and bug fixes?
15:15Chousukecemerick: fortunately git has a special patch format and is capable of tracking at least authorship :)
15:16cemerickwhy not use it for both?
15:17Chousukeapparently managing pull requests with github is a bit of a chore :/
15:17Chousukethey would not be as convenient to review either.
15:17rhickeythe history for fixes will be determined by their incorporation, less to trust in a patch, patches can be applied ad hoc to any rev, less work than creating a server branch for a small change, branches aren't points in time
15:18technomancyChousuke: sure, but sending a "please merge from this URL" rather than a literal patch still works fine
15:18rhickeypull requests go nowhere useful
15:19technomancyso basically use a patch if it makes sense as a single diff, but use a merge if the history is relevant/worth preserving?
15:19technomancythat seems reasonable.
15:19cemerickI've never been on the receiving end of a pull request, so that's why I didn't grok the rationale.
15:19ChousukeI hope git will also encourage more fine-grained feature work.
15:19cemericksurely github is aware of whatever issues prevent pull requests from being generally useful?
15:19ChousukeSVN commits tend to be huge blobs of often unrelated changes :/
15:21rhickeytechnomancy: not really either or - the format-patch patches can retain multiple commits, the bigger differentiator will be - will this thing have a lifetime of its own, most features will have a short one at least
15:21rhickeycemerick: when on the sending end of a pull request, do you create a named branch on the server? a tag?
15:21technomancyoh, I see.
15:23cemerickrhickey: I've either referred to a sha or created a tag for the maintainer to pull from, and mentioned it in the message.
15:24cemerickBut I can see that it would be tremendously useful for that kind of thing to be standardized.
15:24dysingerrhickey / technomancy - I use pull requests - the key is for the contributor to keep a branch for the feature and keep that branch rebased on the upstream master.
15:24dysingerthen you can evaluate and pull in with no hassle
15:24dysingereven with the github UI
15:25dysingerIf I am contributing and I do this - then it's zero work for the upstream maintainer to pull my feature
15:25dysingerand I as a contributor don't generate patch files that get stale over time
15:26cemerickhrm, also, if patches are being applied, those obviously won't decorate the network graph. Minor issue for minor patches, but the line can get blurry between "features" and "bug fixes".
15:26Chousukethe problem is that you shouldn't really publish branches that you're going to be rebasing all the time.
15:26dysingerit's only a problem if multiple people have that branch or not
15:27cemerickChousuke: if they only reason you're publishing them is for consumption by the maintainer, than that's OK...
15:27dysingeryeah you wouldn't want to rebase public branches for ongoing public work
15:27cemericks/they/the
15:27Chousukeso if you're going to work on a bigger feature, you shouldn't be rebasing it against master all the time.
15:28dysingerbut it does make it the best most convenient no-work way for a maintainer to pull
15:28Chousukeat least if you have other people working with you
15:28dysingertrue
15:28dysingerI am just relating how we work with git on multi-projects
15:29Chousukewhat you need to do is, when your feature branch is ready to be pulled, pre-merge it with master locally and push your merge on the public branch; then it can be easily pulled in by mainline.
15:29dysingerthat works
15:29dysingerbut it's easier to see the differences in two branches if there was a rebase of the forked branch at the end - I am just saying it's easier on the upstream guy.
15:30dysingerdoesn't have to be done that way though
15:30dysingeras long as the merge goes clean
15:30dysingeranyway regardless format-patch is not the best way to share patches is what I was trying to get across
15:31dysingerno authorship information is kept either with patches.
15:31Chousukedysinger: actually, yes it is.
15:32Chousuke"git am" accepts git format-patch output and creates commits from them with full authorship info retained.
15:32dysingerInteresting
15:32dysingerI have only used the files with git apply
15:32cemerickFWIW, I'm happy to do whatever rhickey prefers, but in general, it seems like not taking advantage of what github offers is less than ideal. Beyond that, I'm happier to let more experienced hands debate the specifics.
15:32Chousukethis is not stated explicitly in the manual, which is why I had no idea it does that :)
15:32dysingercemerick ditto from me
15:33Chousukebut apparently, git format-patch produces mbox-format files, which git am accepts
15:33dysingergit had my head spinning when I first used it
15:33cemerickdysinger: heh, well, you're one of the more experienced hands, so keep at it :-)
15:34stuartsierragit is one of those "magic" commands that you never really understand, you just learn enough "incantations" to do what you need.
15:34dysingernow I couldn't live without git (svn,cvs,etcetcetc nothanks)
15:34dysingeryeah and it just keeps going
15:34dysinger2 years on and I am just now playing around with git bisect
15:35Chousukestuartsierra: it's fun when you learn how to do something really cool with it though.
15:35dysingerIt's amazing
15:35Chousukelike splitting too big commits into smaller parts
15:35stuartsierrayes, agreed
15:35dysingery or re-writing history with an automated filter
15:35dysingeror interactive rebase
15:35dysingeror ..... page down * 7
15:36Chousukeor looking at the very first commits of a project from 25 years ago :P
15:36ChousukeThe commit messages are often not very useful :/
15:37Chouser"initial commit"
15:37Chousukeor "entered into RCS"
15:37Chouser"replaced <obsolete subsystem> with <another obsolete subsystem>"
15:38Chousercgrand: Your two independant branches appear on the same line on the github "network" page, which is what confused me.
15:38Chouser(initially)
15:51cgrandChouser: I wasn't clear: what I don't understand is not your confusion but why github display them on the same line
15:52Chouserah. Yeah, I don't know either. I suppose you could add a subsequent revision on the first branch and see what happens.
15:52Chouserjust for fun.
15:53ChouserI'd guess it would split the branches onto two lines then.
15:54Chouserrhickey: fwiw, I think starting with a clojurized version of the ruby workflow is a great low-investment way to get started. Once it's rolling, if you find there's anything you don't like about it perhaps everyone will have had enough experience to craft something more custom.
17:24mrsolotype hint speeds up is substaintal is it a good habit to use it always when dealing witih java interop?
17:25opqdonutyeah
17:25technomancymrsolo: no... only if you have identified a bottleneck
17:25opqdonuti somehow like the explicitness
17:25opqdonutof course it might worsen error messages
17:26mrsolooh?
17:26technomancyI guess it could be helpful for documentation purposes.
17:26mrsoloit really doesn't take much to add it to argument list
17:26technomancyIf you're feeling the need to say "this takes a Foo" then you might as well put it in the code rather than the docstrings.
17:26mrsolomay be a bit cluttered
17:26technomancymrsolo: the question is if it will change
17:27ChouserIf there were a clojure style guide, it would recommend avoiding type hints unless the performance boost is demostrated as useful in a particular case.
17:27technomancyif it has to be that class because of the underlying library, then go ahead
17:27technomancybut if it would be possible/likely for you to swap it out with another type, then don't declare the type unless you need to
17:28mrsoloright
17:28Chousertype hints do not necessarily do type checking -- you should definitely not assume that you'll get a compile or runtime error just because an actual type doesn't match a hint.
17:29mrsoloof course
17:29hiredmanclojurebot: deft is http://gist.github.com/128259
17:29clojurebotOk.
17:30ChouserClojure's also likely to get something like auto-hinting in the future, where each method call you use is checked at compile time (even if not using AOT) against all imported classes -- if only a few matches are found, those cases will get fast-path runtime code.
17:30Chouserone of the reasons there isn't an import *, I believe.
17:31opqdonutah, nice
17:31mrsolonice
19:21mrsoloi like the fact that file-seq is lazy...it rocks :-)
19:27qrushhey folks
19:27qrushany news on the github front?
19:27qrushstill nothing 'official'
19:27qrush?
19:27technomancyfirst merge commits have been applied! =)
19:27qrushoh snap
19:28technomancyqrush: contrib hasn't been moved over yet, but I think that's just waiting on getting the proper svn author import data
19:28qrushcool
20:34qrushgave clojure some lovin' http://github.com/blog/444-github-rebase-23
20:38Chouserqrush: nice
20:39durka42is svn deprecated now?
20:41jackdempseyhm
20:41jackdempsey"a website that can handle over 5000 requests per minute."
20:41jackdempseythat kinda surprised me
20:41jackdempseyi was expecting "per second" :-)
20:42qrushwell the scala article says that value
20:42qrushI think in any case it's still impressive.
20:42jackdempsey(/ 5000 60.0)
20:42jackdempseyhehe damn, need to learn how to use the bot :-)
20:42durka42,(/ 5000 60.0)
20:42jackdempseyyea saw the article
20:42clojurebot83.33333333333333
20:42quidnunc,(/ 5000 60.0)
20:42clojurebot83.33333333333333
20:42jackdempseyah, comma
20:42qrushoh that's cool.
20:42jackdempsey,(println "/me dum")
20:42clojurebot/me dum
20:42hiredmanqrush: and hosted on github
20:43jackdempseycool
20:43hiredmanwell, the code is
20:43qrushis that sandboxed?
20:43hiredmanyeah
20:44qrushyou clojure folks are nuts
20:45jackdempseyhehehe
20:45hiredman,(import '(java.io BufferedReader))
20:45clojurebotjava.io.BufferedReader
20:45hiredman,(import '(java.io BufferedReader File FileReader))
20:45clojurebotjava.io.FileReader
20:46hiredman,(-> "/etc/password" File. FileReader. BufferedReader. line-seq)
20:46clojurebotjava.security.AccessControlException: access denied (java.io.FilePermission /etc/password read)
20:46jackdempseywhats that -> method? hard to google for it :-)
20:47hiredman,(doc ->)
20:47clojurebot"([x form] [x form & more]); Threads the expr through the forms. Inserts x as the second item in the first form, making a list of it if it is not a list already. If there are more forms, inserts the first form as the second item in second form, etc."
20:47hiredman,(macroexpand '(-> "/etc/password" File. FileReader. BufferedReader. line-seq))
20:47clojurebot(line-seq (clojure.core/-> (clojure.core/-> (clojure.core/-> "/etc/password" File.) FileReader.) BufferedReader.))
20:47jackdempseyahh
20:48hiredmanit's pretty cool
20:48hiredman,(require '[clojure.zip :as zip])
20:48clojurebotnil
20:48jackdempseyfeels almost like currying, though i hesitate to say it as i barely understand that topic :-)
20:49jackdempseyso much to learn, so little time
20:50hiredman,(-> '(a b (c d e) f g) zip/seq-zip zip/next zip/next zip/next (zip/replace z) zip/root)
20:50clojurebotjava.lang.Exception: Unable to resolve symbol: z in this context
20:50hiredman,(-> '(a b (c d e) f g) zip/seq-zip zip/next zip/next zip/next (zip/replace 'z) zip/root)
20:50clojurebot(a b z f g)
20:50hiredman,(-> '(a b (c d e) f g) zip/seq-zip zip/next zip/next zip/next zip/next (zip/replace 'z) zip/root)
20:50clojurebot(a b (z d e) f g)
20:51jackdempseyheh, almost get that :-)
20:52jackdempseywhy does the first replace (c d e) with z but the latter only replaces the c
20:52jackdempseyi see the zip/next number of calls is different
20:53hiredman,(-> '(a b (c d e) f g) zip/seq-zip zip/next zip/node)
20:53clojurebota
20:53hiredman,(-> '(a b (c d e) f g) zip/seq-zip zip/next zip/next zip/node)
20:53clojurebotb
20:53hiredman,(doc zip/next)
20:53clojurebot"([loc]); Moves to the next loc in the hierarchy, depth-first. When reaching the end, returns a distinguished loc detectable via end?. If already at the end, stays there."
20:54jackdempsey,(-> '(a b (c d e) f g) zip/seq-zip zip/next zip/next zip/next zip/next zip/next zip/node)
20:54clojurebotd
20:55jackdempsey,(-> '(a b (c d e) f g) zip/seq-zip zip/next zip/next zip/next zip/next zip/next zip/next zip/next zip/node)
20:55clojurebotf
20:55jackdempseyhmm
20:55jackdempsey,(-> '(a b (c d e) f g) zip/seq-zip zip/next zip/next zip/next zip/next zip/next zip/next zip/node)
20:55clojurebote
20:55jackdempseyyea so that makes sense, the way the z replaced (c d e) it almost seems like it'd say c, d, e, (c d e) or something
20:57hiredmanwell zip/next returns (c d e), and the next zip/next returns c then d then e
20:58jackdempseyahh
20:59jackdempseyso if you call the replace at the right point thats how you can get z in there
20:59hiredmanyes
21:01hiredman,(pl (↕map range $ 10 inc · inc · inc))
21:01clojurebot(3 4 5 6 7 8 9 10 11 12)
21:01Chousuke:P
21:13Chouserso github pull requests are just wrong (for us). They are a poorly-managed beginning to a private conversation about a what may become a commit to the main repo.
21:14Chouserpoorly-managed as in low visiblity, can't reply via email, etc.
21:14Chouserand such a conversation should be public, searchable, etc.
21:16jtalcan someone explain this usage of defn? http://kivasti.com/defpackage.html
21:16jtalwhere there is no argument vector
21:16hiredmanyeah, there two
21:17hiredmanit is a multifn
21:17jtal"same as defn, yielding non-public def"
21:17hiredman(defn foo ([arg1] stuff) ([arg1 arg2] stuff2))
21:17hiredmanjtal: that is defn-
21:17jtalah
21:18hiredmanthe form you showed is (defn -main …
21:18hiredmannot the same thing as defn-
21:18jtaldoes the "-" mean something?
21:19hiredmanwhen you use gen-class it backs methods with functions identified with a prefix, "-" is the default prefix
21:21jtalit backs?
21:21jackdempseyChouser: for small changes a patch probably makes sense...for a large change, a forked repo with specific branch and email to the list?
21:22hiredmanjtal: gen-class generates a stubbed out java class
21:22jtaland uses all methods prefiex with "-" ?
21:23hiredmanthe methods in that class dispatches to clojure Fns
21:23Chouserjackdempsey: I think that's right. I also think that's essentially what the rails workflow is, which is I believe our current leading contender.
21:23hiredmanjtal: I would read the gen-class and compiling docs on clojure.org
21:23jtalok
21:23jtaljust trying out enclojure
21:23jackdempseyyeah last i looked at their process it involved +1's on tickets as well
21:23jtalmaybe they expect me to ignore this magic for the moment
21:24hiredmanfeel free to, none of that is really need except something like (ns com.yourcompany.defpackage
21:24hiredman)
21:49ataggartcan anyone point me to an example of using ns with :use, a prefix list also using :as
21:50hiredmanI don't know that :use supports :as
21:51hiredman:require does
21:51hiredman,(require '[clojure.zip :as zip])
21:51clojurebotnil
21:51hiredman,zip/seq-zip
21:51clojurebot#<zip$seq_zip__6709 clojure.zip$seq_zip__6709@1d7141e>
21:52ataggartya it just occurred to me that since :as creates an alias for the other namespace, and use allows one to not type the namespace, it's probably a moot point
21:53ataggartthough I do keep getting turned around about when to use '(...) vs [...]
21:54hiredmanyeah
21:54hiredmanthe answer is: use require and [] all the time
21:56Chouseror :use and :only []
21:56hiredman
23:36jtalany enclojure users? Trying to figure out how to get javax.swing stuff
23:36jtalit seems adding "Swing Application Framework" to libraries is not right
23:48mrsolohmm what mit dumped scheme for cs undergrad program? ....
23:53zakwilsonmrsolo: a year or two ago. They went to a program involving robotics and things that don't work neatly and cleanly in the real world. Python evidently had whatever was needed to talk to the robots.
23:55mrsolohttp://blog.snowtide.com/2009/03/24/why-mit-now-uses-python-instead-of-scheme-for-its-undergraduate-cs-program