#clojure logs

2012-01-31

00:03jkdufairanyone have experience with cdt?
00:06devnjeremyheiler: yeah, it seems interesting maybe -- idk
00:07jeremyheileryeah, im hesitent about things like this. I mean, it took me a while to release Domain Driven Development really only translated into "don't be stupid, and think about design"
00:07jeremyheilerrealize*
00:24devnjazzy
00:30jbiesneckerjeremyheiler: These things are like (most) religions, which all tend to boil down to more or less the Golden Rule. Generally they're different ways to slow down, reason about your problem before you start working on it, etc.
00:31devnjbiesnecker: they offer dimension, an angle for consideration
00:31devnjbiesnecker: it's a nice review of possible paths one might consider taking
00:32jbiesneckerdevn: not saying they're useless by any means, but rather that they tend to revolve around the same handful of ideas.
00:33jbiesneckerdevn: and sometimes it's the revolving that makes the idea make sense.
00:34cmajor7(starting out with clojure): In imperative world, there are (XA) transactions, AOP, messaging(JMS/AMQP), Security, TCP/IP, etc.. What is the general approach to these things in the clojureland? to just reuse what is there in Java world? [seems that problems can be solved simpler with clojure, but a lot of "enterprise" concerns are still there]. appreciate your thoughts.
00:36devnjbiesnecker: that's a really fantastic way of saying that.
00:37devnjbiesnecker: i agree with you.
00:37devnjbiesnecker: for now ;)
00:37jbiesneckerdevn: ;)
00:38metajack1cmajor7: In some cases there are really nice Clojure abstractions for those (STM, Avout, Lamina, etc) and in some cases you just use the JVM libraries already available. A lot of times you start with the latter and end up creating the former.
00:41devncmajor7: im playing that chord sequence on my guitar right now. is this a song i should recognize?
00:43muhooi'm kind of avoiding overtone because i have to focus on stuff that's going to make money
00:43cmajor7metajack1: thank you. I am just trying to estimate a "what would it take" scenario by looking at the last couple apps I wrote in "Scala / Spring Integration" that talk to sockets and do AOP and XA. I am thinking I'd love to be able to achieve the same (but of course more elegantly and simpler :) ) in clojure. What I am stumbling upon are regular things.. get XA resource.. create an aspect, hook into a monstrous websphere mq, etc.. would i
00:43devnstart touring muhoo :)
00:44muhoodevn: been there, done that
00:44muhoohave the poverty to show for it.
00:44cmajor7muhoo: may songs start with cmajor7. Actually _any_ song that starts with the major chord can start with cmajor7 :)
00:45muhooi prefer the bill evans chord, 3 7 9 with the 1 in the bass.
00:45devnso specific
00:45devni cant pick one
00:45technomancynuclearsandwich: fixed in lein 1.7, but I guess I better fix it in swank too
00:46devnit's like killing a child or something -- chords require context to be themselves
00:46metajackI think messaging is going to be the same. As for sockets, the abstractions in Lamina and Aleph are really nice. I have no experience with AOP in clojure or with distributed transactions, but for the latter you have easy access to ZooKeeper or Avout, or if it's all in process, you can just use Clojure's STM.
00:46muhoowhat is AOP?
00:46aphyrmuhoo: macros.
00:46metajackmuhoo: Aspect oriented programming I assume
00:46amalloyinvisible macros
00:46muhooaop is macros?!
00:46aphyrweak macros, haha
00:46cmajor7muhoo: http://en.wikipedia.org/wiki/Aspect-oriented_programming
00:47devni honestly am dumbfounded as to what is happening in here
00:47technomancyaaelony: I'm heading off, but if you could try the 1.x branch of leiningen from git and open an issue if it breaks that would be great
00:47muhoomy god, there's so much buzzword bullshit involved in just working around weaknesses in OOP
00:48aphyrBasically a way to write functionality in different discrete ways and plug them together in functions
00:48muhooAOP, design patterns, feh.
00:48cmajor7think about is a weaving the code into any spot of you program later.. ( e.g. compile time, byte code weaving, run time )
00:48aaelonyok, do you have a link so I'm sure to try the right one?
00:48technomancygit://github.com/technomancy/leiningen.git
00:49muhoothe statement above about all these things just being flaiings at trying to acheive some elusive platonic ideal is quite good, i think.
00:49aaelonycool, thanks
00:50muhooaphyr: thanks
00:50cmajor7muhoo: aop is not really a pattern, but what they call a cross cutting concern tool without polluting the codebase. think about security, logging, exception handling, tx management, etc.. that could be "weaved" later on into your code base
00:51muhoosimilar to writing algorithms to handle seqs, so you can later plug lots of different types of data into it? :-)
00:51aphyrMaybe. You even seen ruby method alias chaining?
00:51aaelonytechnomancy: from the leiningen directory I do bin/lein, right? that gives me an exception.
00:51aphyrdo_something_before_foo?
00:52muhoono i haven't gotten that deep into ruby.
00:52carllercheAre people still having issues w/ transient maps on the latest clojure 1.4 alpha?
00:52aphyrmuhoo: that's AOP, in a sense. Wrapping up methods in other methods that provide, say, connection safety, thread safety, logging, debugging, etc.
00:52muhooaphyr: like ring middleware?
00:53aphyrmuhoo: Sure, that'd be a nice example/
00:53devnalias method chains are the same as ring middleware?
00:53carllercheamalloy: I noticed you submitted a transient map issue
00:53technomancyaaelony: if you get an error on the 1.x branch after following the "building" instructions in the readme, please open an issue on github
00:53aaelonyok
00:53metajackah, i've used this in Emacs without knowing that much about it. There it's called advice.
00:54aphyrdevn: in the sense that they're composing orthogonal functionality into single functions, yes.
00:54amalloycarllerche: quite a long time ago, and based on an issue someone posted about on the mailing list. i don't follow the alphas so i dunno
00:55nuclearsandwichtechnomancy: awesome, thanks. Is 1.7 ready for testers or should I be patient.
00:55carllercheI will submit an issue… for now is there a way to work around transient maps? It seems that converting a java HashMap into a persistent map uses transient maps, so I would guess it would still be buggy
00:55technomancynuclearsandwich: should be good to go apart from documentation and a couple irreproducible bug reports; hope to release in a few days
00:55cmajor7metajack: right. an "aspect" could have one or more "advice"s that could be "applied" to a certain "pointcut" (that can be regex specified) in your code
00:56metajackcmajor7: In that case, I think you'll find Clojure quite a bit more powerful for this :)
00:57amalloywell, clojure only has macros, not secret-invisible macros that get applied all through your codebase without any visible signs
00:57technomancy"INVISIBLE MACRO" might make a good lolcat though
00:57metajackamalloy: You could replace vars at runtime with new versions though right?
00:57muhooor a band name.
00:57amalloytechnomancy: feel free to steal that
00:57cmajor7metajack: right.. while I have a very good imperative understanding of AOP, since I am only starting out with Clojure, I have a hard time placing it in the clojureland
00:57amalloymetajack: but how will you reassign let? i'm sure AOP lets you give advice around "assigning variables"
00:58amalloy(not that i actually want this in clojure)
00:58cmajor7amalloy: thanks. are you saying that if I need to add an "auth" capability into functions that follow a certain pattern, I can do it with macros?
00:58metajackamalloy: Does AspectJ do this? From the wikipedia page it mostly looked like augmenting function calls.
00:58amalloymetajack: whatever. you can't do that either, across all functions
00:59amalloy"every time i call a function whose name starts with x, please do ____"
00:59aphyrSure you can
00:59aphyrWrap your entire program in a macro that recursively rewrites forms
00:59amalloycmajor7: you could, but usually it's more flexible to just use higher-order functions
00:59aphyrTake every fn that starts with x and rewrite it to do something else
00:59amalloyaphyr: yes, yes, i know macros can do anything
00:59aphyrWhy you'd want to is beyond me though, haha :)
01:00metajackcmajor7: I'd go read a Ring or Compojure tutorial to get an idea of how passing around wrapper functions works. It's probably similar enough to give you some good ideas.
01:01cmajor7amalloy: trying to wrap me head around it :) are you talking passing "some" function f(x) into another f(y) just in case.. to later enrich f(x) with "auth" capability?
01:01amalloyeg, (defn wrap-security [f] (fn [& args] (when *secure-connection* (apply f args)))) - you take a function in, and return a new function that performs the original action only if the connection is secure
01:02aphyrcmajor7: https://github.com/aphyr/ustate/blob/master/reimann/reimann.config
01:02cmajor7metajack: thanks.. once I am finished with the Mark Volkmann's tutorial :)
01:02metajackcmajor7: If you know python, it's pretty similar to python decorators. Django uses this for transactions for example.
01:02aphyrEach of those is a function that encapsulates the functions below it to contextualize them.
01:02muhooi was going to ask about decorators
01:03muhooi did see a similarity between middleware and decorators, but hadn't studied them enough to know for sure.
01:05cmajor7aphyr, amalloy: but aren't these examples _assume_ that there is "security" ( e.g. auth ) in the first place? I may be missing something.. though [can't inhale clojure that fast just yet]
01:06aphyrcmajor7 really AOP all comes down to writing bits of code to attack separate problems in composable ways.
01:06amalloyyes, my example assumes there's some way to find out if auth has happened; i'm not going to write a whole auth layer in irc. but the point is you can wrap render-webpage with the auth functionality, even though render-webpage knows nothing about auth
01:07cmajor7amalloy, aphyr, metajack: thank you. I got the "wrapper function" approach. makes sense.
01:09aphyrcmajor7: you can invert that as well: functions make calls to globally scoped hooks that allow them to do interesting things.
01:10aphyrFor instance, (defn send [message] (with-network-connection [conn] (send-message conn n)))
01:11aphyrwith-network-connection doesn't know what connections are used for, but it creates, locks, and provides them to callers as a service.
01:11aphyrand could itself be extended with logging, debugging, etc.
01:13cmajor7aphyr: yep, I see.. I guess the whole AOP aspect is there mostly because it is hard to "change" the behavior of something that is already there without inheritance.. where in Clojure ( any functional language ), we can just pass a decorated function...
01:15cmajor7moving on from AOP (marking it "the clojure way is understood")… how easily do you think I can use clojure with something like Spring Integration ( channel | pipe | filter, etc.. )? ( I understand that you would have reservation from using it with anything like Spring Xyz, but I do believe Spring Integration solves "integration" in a very simple and powerful way )
01:16aphyrIntegration is just queue-backed message passing?
01:18aphyrI'd reach for agents, nonblockingqueue + threadpool, regular old fn composition, or something like Lamina.
01:20aphyrcmajor7: https://github.com/ztellman/lamina may be interesting
01:20cmajor7aphyr: not just queue.. it implements EIP patterns http://martinfowler.com/books.html#eip where you have things like message stores, protocol adapters ( jms, amqp, jdbc, webservices, etc.. ), aggregators, splitters, etc..
01:21cmajor7aphyr: sure. thanks, I'll take a look
01:21aphyrcmajor7: here's a fn-composition implementation of aggregators, splitters, filters, pipes, stateful things, etc. https://github.com/aphyr/ustate/blob/master/reimann/src/reimann/streams.clj
01:21y3dihey guys, i assume clojurescript doesn't mesh well with alot of the newer js frameworks (backbone.js)?
01:25cmajor7aphyr: looks cool. if I need to connect these channels / pipes to something such a MQ (websphere, rabbit, etc..) where do I start?
01:26aphyrconsume-all -> mq client?
01:26aphyrPlus a few lines for connection safety and logging I gues
01:27aphyrOr you could use Spring Integration, if that's what you really want.
01:29cmajor7but if I do use Spring Integration / Camel, is there a way not to get into OOP trap by using it in Clojure?
01:29aphyrDunno dude, I try to stay far away from anything that says "enterprise" or "pattern".
01:30aphyrIf no wrappers exist you could write one, or you could create objects and do things java-interop style.
01:31aphyrMy limited experience with interop (via antlr) has been pretty painless--I just try to get out of java and into clojure as fast as possible.
01:32jbiesneckerIs there an LRU object cache library that supports expiration? I've been googling and not coming up with anything...
01:34cmajor7aphyr: while I agree with you that enterprise, pattern, process, etc.. are really vague and useless concepts, I actually see strengths in both worlds ( e.g. how mature Camel / Spring Integration is and at the same time how elegant, simple and beautiful Clojure is ). Since I do not yet know Clojure well (still going through tutorials), I do not feel how simple would it be to use both...
01:34aphyrcmajor7: if it helps, writing java in clojure seems easier than writing java in java.
01:38cmajor7aphyr: I would prefer "clojure in clojure" and "java in java" :), but I get what you're saying
01:39cmajor7aphyr: thanks for your help.. bouncing off..
01:58muhoowhere is the show function now that there's no more contrib?
01:58muhoowhere's repl-utils, in general now?
02:00tjgilliesim trying to import classes into clojure from a jar but im getting an error
02:01tjgilliesuser=> (import '(jm.util Play))
02:01tjgilliesjava.lang.ClassNotFoundException: jm.util.Play (NO_SOURCE_FILE:10)
02:02tjgilliesjar is in my classpath
02:03tjgilliesand jar tf jMusic1.6.3.jar lists class
02:06tjgilliesoh
02:06tjgilliesjar wasn't in my classpath, fail
02:06tjgilliesim new to JVM
02:09muhoothat's weird. i have no clojure.contrib.repl-utils. why?
02:09yawNOhi
02:09muhoo&(require 'clojure.contrib.repl-utils)
02:09lazybotjava.io.FileNotFoundException: Could not locate clojure/contrib/repl_utils__init.class or clojure/contrib/repl_utils.clj on classpath:
02:09muhoohuh
02:09muhoo&(require clojure.contrib.repl-utils)
02:09lazybotjava.lang.ClassNotFoundException: clojure.contrib.repl-utils
02:10muhoowtf?
02:16devn&*clojure-version*
02:16lazybot⇒ {:major 1, :minor 3, :incremental 0, :qualifier nil}
02:16devn&(use 'clojure.repl)
02:16lazybot⇒ nil
02:17devn&(doc filter)
02:17lazybot⇒ ------------------------- clojure.core/filter ([pred coll]) Returns a lazy sequence of the items in coll for which (pred item) returns true. pred must be free of side-effects. nil
02:26jbiesneckerI have a java interop question (and I don't really know Java). I'm trying to use Google's ConcurrentLinkedHashMap as an LRU cache ( http://code.google.com/p/concurrentlinkedhashmap/wiki/ExampleUsage )
02:27jbiesneckerand I can't figure out how to create the object
02:27jbiesneckerIt uses a builder object, but I can't seem to import / reference that object
02:27jbiesneckerAnd I don't really know enough about Java to know what what I'm looking for is even called
02:28raekjbiesnecker: do you have a link to the javadoc for those classes?
02:29raekthe examples don't say which packages the classes are in
02:29jbiesneckerraek: http://concurrentlinkedhashmap.googlecode.com/svn/wiki/release-1.2-LRU/index.html
02:29raekok
02:29jbiesneckerraek: (import '(com.googlecode.concurrentlinkedhashmap ConcurrentLinkedHashMap)) works just fine in the REPL
02:30jbiesneckerraek: but I can't get anywhere from there
02:30raek(ns ...your-ns... (:import com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap))
02:31raek(let [cache (doto (ConcurrentLinkedHashMap$Builder.) (.maximumWeightedCapacity 1000) (.build))] ...)
02:31raekjava has . in the name of nested classes
02:31raekbut it's really a $ in the name on the JVM level
02:31raekwhich is what clojure sees
02:32jbiesneckerWhen I do that (in the REPL, does it matter?) I get "CompilerException java.lang.IllegalArgumentException: Unable to resolve classname: ConcurrentLinkedHashMap$Builder, compiling:(NO_SOURCE_PATH:43)"
02:32raeksorry, my example does not work for two reasons
02:33raek1. the nested class is its own class, so it needs to be imported too
02:33raek(ns ...your-ns... (:import com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap$Builder))
02:33raek2. you want the result of .build, not the the builder to be bound to 'cache'
02:34raek(let [cache (-> (ConcurrentLinkedHashMap$Builder.) (.maximumWeightedCapacity 1000) (.build))] ...)
02:34raekjbiesnecker: you should be able to access ConcurrentLinkedHashMap$Builder in the repl if you have run (import 'com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap$Builder)
02:35jbiesneckerraek: Huzzah! It works. Thank you so much!
02:35jbiesneckerraek: I think it was importing the Builder class, or rather me not importing it) that was getting me.
02:35raekyeah, afaik this is not explained in the official docs :(
02:36raekthe part about the $, that is
02:36jbiesneckerNo, I hadn't seen it.
02:36jbiesneckerThanks again, that was a nice end to far too much frustration :)
03:16echo-areaclgv: ping
03:17clgvecho-area: pong
03:17echo-areaclgv: http://pastebin.com/qEJrWemb <-- As for yesterday's question, I wrote a test program
03:18echo-areaI think both the forms (board-map #(dosync (ref %)) board) and (board-map ref board) are the same effect
03:19clgvecho-area: oh, I dont think you can conclude that from that code snippet.
03:19echo-areaWhy?
03:19clojurebot#<ClassCastException java.lang.ClassCastException: clojure.lang.Cons cannot be cast to clojure.lang.IPersistentStack>
03:21clgvwell you have very likely only one thread accesing the data at a time since the other sleeps meanwhile.
03:22clgvI dont think the question whether (board-map #(dosync (ref %)) board) and (board-map ref board) in absence of other concurrent operations does lead to much insight. The interesting question in my opinion is: "what do you use dosync for?"
03:23clgv+"do the same in absence..."
03:23clgvthat second question is pretty well covered in JoC, I think
03:24echo-areaIMHO the point here is that both of the two may print inconsistent values for `board'. The right way to go seems to be (dosync (board-map ref board)), as in the link.
03:24clgvyep that would be the right one
03:25clgvwasnt it deref instead of ref?
03:25echo-areaAh right, it was a typo ;-)
03:25echo-areaWhoa I typed wrong for all the forms
03:25echo-area:(
03:26echo-areaclgv: Anyway, thanks for the help
03:50Blktgood morning everyone
03:51llasramAh, time zones. Good morning, Blkt :-)
03:52clgvgood morning
04:06clj_newbis there a short hand for (with-meta 'Matrix {:rows 20, :cols 12}) ?
04:06G0SUBclj_newb, ^{:rows 20 :cols 12} 'Matrix?
04:07clj_newbG0SUB: jus the syntax I was looking for; thanks
04:07G0SUBclj_newb, mind you, the quote will mess up the metadata attachment. the metadata will get attached to the (quote Matrix) form instead of the symbol Matrix.
04:08clj_newbcrap
04:08clj_newbhow do I fix this?
04:08llasramWhat's the bigger picture of what you're trying to do?
04:08G0SUBclj_newb, depends on what you want.
04:08clj_newbi'm using functional zippers for my wysiwyg editor
04:08clj_newbnow, I need to attach meta data to nodes, things that aren't sub nodes; but are important
04:09clj_newblike for example, the dimensions of a matrix
04:09clj_newbi.e. '(Matrix 1 2 3 4) is not enough; since I don't know if it's 1x4, 2x2, or 4x1
04:09clj_newbI need some meta data hanging around -- stuff that are not entries of the matrix, yet are important, i.e. cols/rows
04:09llasramHmm. That sounds an awful lot like data, not metadata
04:10clj_newbthe reason I don't want to store it as '(Matrix rows cols ~@data) .... is that it then forces a change a setup in my data structures
04:10clgvclj_newb: most likely you should make that explicit within your deftype/defrecord
04:10clj_newbllasram: agreed; I didn't think this out before hand
04:10clj_newbthis was more of a "build a prototype; hate self later" approach
04:12llasramLess hate, more refactoring!
04:12clj_newbgenrally, I find that if I'm not kicking myself; refactoring is premature optimiation
04:14clgvclj_newb: that sounds pretty wrong
04:21clj_newbthis is terrible; I think i'm goign to have to define a proper protocol/interfaces for zipper nodes now
04:21clj_newband interact with them in an intelligent manner
04:21clj_newbinstead of just having everything be a bunch of lists
04:24G0SUBclj_newb, :-)
04:27Fossiis there a chance to get http://dev.clojure.org/jira/browse/CLJ-801 backported to 1.2?
04:28Fossi"Protocols Should Handle Hash Collision"
04:28Fossiit makes our appengine webapps crash spontaneously
04:39phil___because of what clj_newb said, what is the community consensus of maps vs defrecords/types?
04:39_philon*
04:41_phili.e. from what i understand, dont try to structure pure data too much (Person, Employee...) but when it comes to architecture then defrecords/types etc are encouraged (i.e. Window, Widget, FileReader)
04:41_philcorrect?
04:43_phil:/
04:44llasram_phil: That's not quite my understanding of the norms / intent behind the structures
04:45_philllasram: could you elaborate?
04:46llasramSure :-) Was trying to track down some documentation to back up my statements, but I'll just wing it
04:46_phil:)
04:46llasramI think deftype is usually used for things which are purely software abstractions. So some "architecture" stuff, and things like data structures, etc
04:47llasramBut defrecords implement the map interfaces
04:48_philllasram: and when do we use maps? :)
04:48llasramI haven't used them myself much, but they let you do type-based polymorphic dispatch, without sacrificing (much) of the flexibility of using maps for domain models
04:49_philllasram: yes, what i do right now is i use maps but "abstract" away the API behind functions so that i can easily convert to defrecords if i should need polymorphism
04:50_philbut im not sure if thats the right approach
04:50llasramThat is my understanding of the best practices as well
04:50_philso youd say defrecords for "data" and deftypes for "architecture"?
04:50llasramThat matches my understanding of the intent as well
04:51_philor rather, defrecords for data *should the need arise*
04:51llasramRight
04:51_philallrights, this clarifies things, thanks!
04:51_phil*allright :)
04:52llasramOf course, we could both be wrong... Muhaha
04:52llasramI just deployed my first production Clojure project last week
04:53_philyea, i think clojure is more of an "individualist" language than others right now :)
04:53_phili.e. "theres no right way to do it"
05:08clgv_phil: there is also this flowchart http://cemerick.com/2011/07/05/flowchart-for-choosing-the-right-clojure-type-definition-form/
05:21_philclgv: thx!
05:24RaynesROSEBUD!
05:25samaaronRaynes: have you been watching Columbo re-runs again?
07:47philin which interface is (get ...) defined?
07:47philits not clojure.lang.Associative
07:48philwhen i look at the source, it seems that (get ...) invokes the runtime (clojure.lang.RT)
07:49philso is it even possible to deftype something that overrides get?
07:49llasramphil: ILookup is probably what you want
07:50philllasram: hm, where is ILookup defined?
07:50philclojure.lang?
07:50llasramyah
07:50philllasram: has it been added recently? cant seem to find it :/
07:52llasramAdded on Aug 2, 2009 according to git
07:53philllasram: sorry for the noob question, but can you point me to the exact location in the source? or is it not in jvm/clojure/lang?
07:54llasramThat's where it should be: https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/ILookup.java
07:54philoh god what kind of clojure do i have :/
07:55llasramAn incomplete one, apparently? That is v odd
07:55llasramWhere did you get it from, OOC?
07:56philllasram: google code oh god
07:56phil:D
07:56llasramOh! Yes, v old
07:56philhahah i feel a bit stupid now :D
07:57philllasram: thanks a lot!
07:57llasramOh, np!
08:46solussd_what is the opposite of the interpose function? I want to take a list and separate it into two lists- one of even indices and one of odd. :)
08:47RickInGAthere is a take-nth function, or something like it, looking up....
08:47TimMcsolussd_: partition
08:48TimMcHmm, maybe not quite.
08:48solussd_yeah.. thought that at first too
08:49RickInGAtry (doc take-nth)
08:49TimMcsolussd_: Right, you need striding here.
08:49RickInGA&(take-nth 2 (range 10))
08:49lazybot⇒ (0 2 4 6 8)
08:50solussd_that can work
08:50RickInGA&(take-nth 2 (rest (range 10))
08:50lazybotjava.lang.RuntimeException: EOF while reading, starting at line 1
08:50TimMcOK, I bet there's a function that can split into n lists.
08:50RickInGA&(take-nth 2 (rest (range 10)))
08:50lazybot⇒ (1 3 5 7 9)
08:51TimMc$findfn 3 (range 9) [[0 3 6] [1 4 7] [2 5 8]]
08:51lazybot[]
08:51TimMcoh well
08:52solussd_&(let [l [1 2 3 4 5 6]] [(take-nth 2 l) (take-nth 2 (rest l))])
08:52lazybot⇒ [(1 3 5) (2 4 6)]
08:52solussd_kind of ugly
08:53RickInGAcan you pass a second param no take nth?
08:53RickInGA&(take-nth 2 1 (range 1 10))
08:53lazybotclojure.lang.ArityException: Wrong number of args (3) passed to: core$take-nth
08:53RickInGAguess not :(
08:53solussd_&((juxt (partial take-nth 2) (comp (partial take-nth 2) rest)) [1 2 3 4 5 6])
08:53llasram&(map (partial take-nth 3) (take 3 (iterate rest (range 12))))
08:53lazybot⇒ [(1 3 5) (2 4 6)]
08:53lazybot⇒ ((0 3 6 9) (1 4 7 10) (2 5 8 11))
08:54solussd_of course, I want to be able to do it w/ arbitrary lists
08:54llasram&((fn [n s] (map (partial take-nth n) (take n (iterate rest s)))) 3 (range 12))
08:54lazybot⇒ ((0 3 6 9) (1 4 7 10) (2 5 8 11))
08:55RickInGAwow, that's cool
08:55solussd_&((juxt (partial take-nth 2) (comp (partial take-nth 2) rest)) [1 '+ 2 '* 3 '+ 4 '/ 5 '+ 6])
08:55lazybot⇒ [(1 2 3 4 5 6) (+ * + / +)]
08:55TimMc&(apply map vector (partition 2 (range 20)))
08:55lazybot⇒ ([0 2 4 6 8 10 12 14 16 18] [1 3 5 7 9 11 13 15 17 19])
08:55TimMcBAM
08:55solussd_:D
08:55TimMcNot lazy, but it works.
08:55TimMc(Don't use it with an infinite input.)
08:56solussd_:) thanks
09:24TimMcA proper striding function would be nice, though.
09:25RickInGAtimmc: striding function?
09:28TimMcRickInGA: Transpose of partition.
09:29TimMcwhat solussd_ was asking for
09:35RickInGAgotcha
10:56cmajor7(def s1 #{:a : b : c :d :e}) ; spaces in 'b' and 'c' to get rid of smiley faces in irc
10:56cmajor7(def s2 #{: c :d :f :g :h})
10:56cmajor7(/ (count (intersection s1 s2)) (count s1)) ; => 2/5
10:56cmajor7what would be a more elegant way to find a percentage one set matches/covers the other?
10:56cmajor7thank you
10:57TimMccmajor7: If your IRC client turns :b into a smiley and you can't change that, I think you need a new client. o.O
10:58TimMccmajor7: And that solution looks fine. Sets are counted in constant time: ##(counted? #{1 2 3})
10:58lazybot⇒ true
11:00cmajor7timmc: thank you. you mean they are counted as they get created?
11:01TimMcYep. So are maps and vectors.
11:01TimMcOh, and lists.
11:01cmajor7that's cool :)
11:01cmajor7(smiley is intentional)
11:01jeremyheilerahhhhhh unbalacned paren *dies*
11:03TimMcclgv: You could also roll your own intersection counter if you didn't want to incur the cost of building the intersection set: ##(let [a (set (range 0 6)) b (set (range 0 10 2))] (reduce #(if (a %2) (inc %) %) 0 b))
11:03lazybot⇒ 3
11:03TimMcclgv: But that's likely such a small performance hit that there's no sense worrying about it. :-)
11:05TimMc&(let [a (set (range 0 1e5)) b (set (range 0 1e5 3))] (reduce #(if (a %2) (inc %) %) 0 b))
11:05lazybot⇒ 33334
11:05clgvTimMc: did I ask something? not today I think
11:05TimMcbah
11:06TimMccmajor7: ^ those up there were supposed to be addressed to you
11:06clgvTimMc: lol you got me as default? :P
11:06TimMcyeah
11:06clgvguess I am asking too much ;)
11:06TimMcI don't understand irssi's tab completion algorithm.
11:07TimMcThe problem is that it's usually right, so I've been lulled into complacency.
11:07clgv:D
11:07cmajor7TimMc: thanks, interesting. performance is not a problem. looking for clarity..
11:07TimMccmajor7: Then go with intersection, it is visually clear what is being computed.
11:07lnostdalhi guys, is it possible to extend clojure agents to work nicely with not only the built-in transactions (dosync), but also with "other" transactions like e.g. database ones? .. i mean the agents must not only wait until the clojure transactions are done before running, but must also wait until the db transaction is done running
11:08TimMclnostdal: ORM, eh?
11:08TimMc~ORM
11:08clojurebotObject-Relational Mappers are the Vietnam of computer science.
11:08TimMcheh
11:08lnostdali don't know .. it's a mix
11:08RickInGAhehe
11:09llasramlnostdal: Clojure agents don't interact with the STM system, so... no?
11:09TimMcTHey sort of do.
11:10llasramHow so? They're reference types, but that doesn't mean they use STM. `dosync' means nothing to an agent
11:10TimMcIf you're in a transaction, a 'send(-off) will only act once. But the agent doesn't know that.
11:10llasramAhhh
11:10llasramOk
11:10TimMcSo... sort of.
11:10TimMclnostdal: You could make the STM transaction fail if the DB transaction fails, right?
11:11TimMc##(dosync (when false (io!)))
11:11lazybot⇒ nil
11:11TimMc##(dosync (when true (io!)))
11:11lazybotjava.lang.IllegalStateException: I/O in transaction
11:12romain_pWould anybody suggest alternatives to represent graphs in this code ? The name+gensym solution I came up with seems yucky, but I have no other ideas https://gist.github.com/1711377
11:12RickInGAhttp://sqlkorma.com/ claims to be "Tasty SQL for Clojure" and "For the real world" -- I would look there. (I haven't played with it yet myself).
11:12lnostdalanyway .. anyone know?
11:12romain_p(also, generic readability/idioms critique?)
11:12lnostdalTimMc, ah, nice idea with the io! .. thanks
11:12TimMclnostdal: Test what happens with agents first.
11:13llasramTimMc: OOC, do you know where the agent/transaction behavior is documented? It's pretty clear from the code for clojure.lang.Agent, but I don't think I'd read that before
11:14TimMcOh, I thought it was controlled by the dosync. Got a link handy?
11:15TimMclnostdal: Ooh. Actually, just an exception will work fine.
11:15llasramTimMc: https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Agent.java#L248
11:15TimMclnostdal: By the way, you'd better be damn sure that agent will succeed, otherwise the DB will be out of sync with it.
11:17TimMcllasram: Huh. Greek to me.
11:18maiocan I somehow ignore SSL certificate errors when fetching URL with slurp?
11:25TimMcI doubt there's a var to bind -- you'll probably want to create your own URL input stream with custom settings.
11:25muhooi'm confused in this example, does %2 mean mod 2 or arg 2 to the lambda? (reduce #(if (a %2) (inc %) %)
11:25muhoo% overload
11:25TimMcarg
11:25muhooso where's ar %1 ?
11:26TimMcmuhoo: % is shorthand for %1
11:26muhooor does % mean %1 ?
11:26muhoook, thanks
11:26TimMcmod is mod
11:27RickInGAtinMc, mod is mod, or rem?
11:28TimMc&((juxt unchecked-divide-int mod quot rem /) -20 6)
11:28lazybot⇒ [-3 4 -3 -2 -10/3]
11:29muhoodamn you are fast with those one-liners
11:29TimMcNo I;m not.
11:29TimMcgrep 'mod.*rem' chatlog/freenode/#clojure.log
11:29llasram~juxt
11:29clojurebotjuxt is a little hard to grok but it's the best thing ever
11:29muhoo%(doc juxt)
11:30muhoo&(doc juxt)
11:30lazybot⇒ ------------------------- clojure.core/juxt ([f] [f g] [f g h] [f g h & fs]) Takes a set of functions and returns a fn that is the juxtaposition of those fns. The returned fn takes a variable number of args, and returns a vector containing the result of applyi... https://refheap.com/paste/517
11:30TimMc&((juxt + -) 20 1)
11:30lazybot⇒ [21 19]
11:31muhoobrain. melt.
11:32mintsoup~map
11:32clojurebotmap and the other sequence functions used to be lazy, but with the advent of chunked sequences, may or may not be lazy, consult your local ouija board
11:33muhoohehehe
11:33muhoo&(doc map)
11:33lazybot⇒ ------------------------- clojure.core/map ([f coll] [f c1 c2] [f c1 c2 c3] [f c1 c2 c3 & colls]) Returns a lazy sequence consisting of the result of applying f to the set of first items of each coll, followed by applying f to the set of second items in each co... https://refheap.com/paste/518
11:35muhoohmm, juxt does seem a bit to me like map
11:35mintsoup&(map #(% 20 1) [+ -])
11:35lazybot⇒ (21 19)
11:35muhoooh!
11:36TimMcexcept juxt is decidedly not lazy
11:37TimMc(which has never been a problem for me, or probably anyone)
11:37muhooso it is reversed. in map you put the args into the lambda, and the functions into the body, and in juxt you put the functions up front and then the args to present to them
11:37TimMcmuhoo: Not exactly.
11:37TimMcjuxt creates a function, and you can do with that function as you wish.
11:38muhooa function that maps args to several functions?
11:39muhooi mean
11:39muhoo&(map #(% -20 6) [unchecked-divide-int mod quot rem /])
11:39lazybot⇒ (-3 4 -3 -2 -10/3)
11:39muhoo((juxt unchecked-divide-int mod quot rem /) -20 6)
11:39muhoo&((juxt unchecked-divide-int mod quot rem /) -20 6)
11:39lazybot⇒ [-3 4 -3 -2 -10/3]
11:41muhooi find this stuff irresistably fascinating, though i certainly don't quite understand it yet
11:41TimMcmuhoo: ##(let [ops (juxt + - *)] (take 10 (map ops (range) (range 20 10 -2))))
11:41lazybot⇒ ([20 -20 0] [19 -17 18] [18 -14 32] [17 -11 42] [16 -8 48])
11:42TimMcThe result of a juxt is just a function that can be passed around. It doesn't have to be used right then and there.
11:42muhoocool, i see the advantage now over map
11:46muhooas opposed to ##(let [fns [unchecked-divide-int mod quot rem /]] (map #(% -20 6) fns))
11:46lazybot⇒ (-3 4 -3 -2 -10/3)
11:47mintsoupi just wanted to see what clojurebot said about map ;p
11:50muhoowhere do the factoids in clojurebot come from? the docs?
11:50clgvmuhoo: user definition
11:51clgvclojurebot: muhoo is a questioner of clojurebot factoids
11:51clojurebotAck. Ack.
11:51clgv~muhoo
11:51clojurebotmuhoo is a questioner of clojurebot factoids
11:52ckirkndallacagle: ping
11:53muhooclojurebot: muhoo is also not a number
11:53clojurebotAlles klar
11:53clgv~muhoo
11:53clojurebotmuhoo is a questioner of clojurebot factoids
11:54lnostdal~paste
11:54clojurebotpaste is http://gist.github.com/
11:54muhooclojurebot: paste is also http://www.refheap.com
11:54clgvlnostdal: lol Raynes should change that I guess ;)
11:54lnostdalclgv, refheap is better?
11:54muhooclojurebot: paste is http://www.refheap.com
11:54clgvlnostdal: he developed refheap ;)
11:55muhoolnostdal: "better", i dunno. but it's written in clojure and developed by one of the guys here
11:55muhooi use it.
11:55clojurebotIk begrijp
11:55lnostdalok, cool .. refheap it is then; dogfooding :)
11:56clojurebotOk.
11:56clgv~paste
11:56clojurebotpaste is http://www.refheap.com
11:56lnostdalfont looks fuzzy though :P
11:56lnostdalmaybe it's just linux here
11:56lnostdal(xfce)
11:57muhooiirc he's using html5 fonts
11:57lnostdalok, the chrome here should support that i think
11:58lnostdallooks waaay better in firefox actually .. weird
11:58arkhckirkendall: ping
11:58muhooi'm on ff7 on debian, looks fine to me.
11:58seanmlnostdal: it could depend on what flags chromium was built with
11:59TimMcclojurebot will still say "gist" when you ask for "paste" -- it's factoid-forgetting feature is really broken.
11:59seanmI had a similar problem a ways back
11:59seanmcan't remember how I fixed it. Super helpful, right?
12:00TimMcoh god I said "it's"
12:01muhooclojurebot: seppuku is I AM DISHONORED! AIEEEE! *dies*
12:01clojurebotOk.
12:02muhoo~seppku
12:02clojurebotNo entiendo
12:02muhoo~seppuku
12:02clojurebotseppuku is I AM DISHONORED! AIEEEE! *dies*
12:02muhoook enough fun, back to work for me
12:02ckirkendallarkh: what's up
12:04arkhckirkendall: in your fork of Clojurescript One you have "public/javascripts/goog/dojo" included in your config :libs. Is that the same dojo as dojotoolkit.org or is that a name for a google thing?
12:05muhooi like chris granger's stuff, but orm's give me the shakes. and composite primary keys are the waterloo of most orm's.
12:10ckirkendallits a goog thing
12:11ckirkendallarkh: it is goog.dom.query
12:11ckirkendallarkh: its based on the dojo stuff
12:11pandeirois it still too early to assume document.querySelector/All are everywhere?
12:13arkhckirkendall: ah - thank you
12:15RickInGAwoo hoo, just the excuse I was looking for... http://euroclojure.com/2012/
12:17TimMcRickInGA: To travel to Europe?
12:17TimMcOK, does anyone else think it's a little weird to have an Uncle Sam image on the EuroClojure page?
12:19jeremyheilerTimMc: That's funny. I didn't even notice that.
12:19mintsoupWill videos from clojure conj 2011 be posted at some point?
12:19RickInGAtinmc: yeah, to go to Europe.
12:20RickInGAmintsoup: just saw this on twitter http://clojure.com/blog/2012/01/31/first-conj-2011-videos-available.html
12:21mintsoupnice.. hopefully sam aaron's will be posted soon.
12:21RickInGAcemeric: just read your tweet... mostly lazy office hours? Neat idea!
12:22RickInGA(love the podcast btw)
12:23gfredericks~ping
12:23clojurebotPONG!
12:50pcavsWhy can't I seem to call (String/format "%s" "foo") properly?
12:50pcavs,(String/format "%s" "foo")
12:50clojurebot#<ClassCastException java.lang.ClassCastException: java.lang.String cannot be cast to [Ljava.lang.Object;>
12:51raekpcavs: vararg java methods are a bit special under the hood
12:51technomancypcavs: why not just clojure.core/format?
12:51raekthey actually take an array as their last argument
12:52pcavstechnomancy: I would, but I'm using Clojure to test java code, then I translate it into Java ><;
12:52pcavsWas wondering super quick what the behavior of String.format with fewer varargs then format expressions was (but then I started shaving a yak/digging)
12:53pcavswell looks like (source format) has answered my questions, thanks
12:53TimMcpcavs: so did raek
12:54pcavstrue, thanks all.
13:12perezdpeople who are using zeromq in clojure: what is the defacto library to use?
13:29fliebelWhoa! Europe Clojure Conference!
13:33amrois there any way to tell which cljs is causing an error in clojurescript?
13:33amroI'm getting Exception in thread "main" clojure.lang.ArityException: Wrong number of args (5) passed to: compiler$eval889$fn--890$pfn
13:35amroI actually tracked that down, but it would still be nice to know for future reference
13:35muhoooh fantastic, the (source ) command. no IDE necessary. truly happy.
14:07jkdufairso has anyone seen clojurecraft? http://www.github.com/sjl/clojurecraft
14:07sjljkdufair: yes :)
14:07jkdufairit's a fun system for interacting with Minecraft using Clojure
14:07jkdufairoh hi!
14:07sjlhah, hey
14:08jkdufairmy son is totally into MC and I want him to learn to program
14:08jkdufairthis is my shim :-)
14:08alexykhow do I require duck-streams nowdays?
14:08jkdufairdid you happen to see my fork?
14:08technomancyalexyk: (require 'clojure.java.io)
14:08sjlI stopped updating Clojurecraft when Notch went crazy changing the protocol every two days a while ago, and haven't gotten back to it yet.
14:08alexyktechnomancy: and it has spit and such?
14:08jkdufairi got it behaving fairly nicely with MC 1.1
14:08technomancyalexyk: some of duck-streams got moved to clojure.core
14:08sjljkdufair: not yet, but I've been meaning to look at it. Maybe I can do that after work tonight
14:08jkdufairno rush
14:08alexyksuper
14:08TimMc,(resolve 'spit)
14:08technomancya few things got dropped entirely
14:08clojurebot#'clojure.core/spit
14:09technomancythe rest is in clojure.java.io
14:09sjljkdufair: nice
14:09jkdufairi found a great resource that documents the current state of the protocol, thankfully
14:09TimMcalexyk: ^ presumably what you are looking for?
14:09jkdufairgreat piece of kit, sjl
14:09sjljkdufair: thanks! there are still a bunch of things that need to get done before I see it being generally useful
14:10jkdufairwell if you need help, i'm interested in hacking on it
14:10sjljkdufair: but at least the most horrifying part, the bit-twiddling protocol stuff, is done
14:10alexykTimMc: yep, awesome
14:10sjljkdufair: yeah, definitely -- I'll look at the fork tonight and let you know
14:10jkdufairsjl: indeed
14:11jkdufairmy goal is for my son and i to sit down and build a sillybot that spits out monty python insults when you whack at it
14:11sjlheh
14:11alexyknow I have a list of strings. I want to output them one per line. Should I just going them and spit or is there a better way for ling lists>?
14:11sjljkdufair: one of the bad parts about the Minecraft protocol -- there's no way to reliably tell who hits you
14:11jkdufairoh my
14:11alexykhmm -- write-lines is no longer there
14:11sjljkdufair: the closest you can do is look at who's nearby when your health goes down
14:12TimMcalexyk: (doseq [l lines] (println l)) might do it
14:13alexykTimMc: I'm in repl...
14:18TimMcalexyk: with-out-str
14:18technomancyreplaca: is it intentional that pprint doesn't honor *flush-on-newline*
14:18technomancy?
14:20alexykhow do we do set difference?
14:22alexykand, how do I import string join vs del join? am a bit rusty
14:23alexykafter a year of Scala :)
14:24technomancyclojure.string, clojure.set
14:24alexykwhat's the import statement from repl for string join, renaming it to say strain?
14:24alexykstrjoin?
14:25TimMcalexyk: You want to able to say str/join, right?
14:25TimMc(require '[clojure.string :as str])
14:26_philTimMc: why is ' necessary when its not a list?
14:26alexykTimMc: cool
14:27_philTimMc: nvm, because its trying to resolve clojure.string, got it
14:29amalloyit would also try to resolve str
14:30_philamalloy: yea, i was confused :) but i like that aspect of clojure - its dynamic but it still catches the most blatant errors by resolving symbols at compile time
14:32alexyk_phil: my early laments about NPE were met with counter-claims of "Null ate my mother and my father"
14:33_philalexyk: i like how clojure handles nil though
14:34_phili think it wouldve been better if there was no nil at all but idk if that is even possible in such a dynamic language like lisp
14:34_philin the 10 seconds iv thought about it right now, i dont see why not
14:35_phil(get ...) would have to return (nothing) or (just)
14:35_philbut without type annotations thatd probably be a nightmare to handle
14:36TimMcnil is already a minor nightmare
14:36amalloyheh
14:36amalloyi also like how haskell handles nil, which seems to be what you're asking for, but it's just not appropriate for clojure
14:37_philamalloy: yes, thats exactly what id like to see, but yes, without type enforcement that would probably be even worse than having nils all over the place
14:37_phildoes (get) return a value or a value wrapped in a maybe?
14:38amalloywe don't have maybes
14:38_philgo figure
14:38_phili was talking hypotetically :)
14:38amalloywell if maybes existed, obviously you'd return one
14:38amalloybut in real life, you use get's not-found third argument, or you use find instead of get, when you need to tell nil apart from "no entry"
14:39amalloy&(get {:x 1 :y nil} :y :nothing)
14:39lazybot⇒ nil
14:39amalloy&(get {:x 1 :y nil} :z :nothing)
14:39lazybot⇒ :nothing
14:39_philamalloy: yes, im aware of that, just thinking out loud what the implications of a deeply ingrained maybe type would be
14:39_phili think without pattern matching it would make no sense
14:40TimMc_phil: Luckily, we're using a lisp, so that's no problem.
14:41_philTimMc: what speaks against maybe & pattern matching in a lisp?
14:42_phil(completely reversing my previous position now :)
14:42hugodmm, how do you set a root binding for a existing unbound var?
14:44gtrakckirkendall: how's the cincyfp going?
14:49pjstadighugod: part of the 1.2 => 1.3 paid we've experienced had to do with .setRoot being changed to .setRawRoot or something
14:50alexyk~((fn [x] (inc x)) 1)
14:50clojurebotExcuse me?
14:50alexyk~ ((fn [x] (inc x)) 1)
14:50clojurebotNo entiendo
14:51alexykhow do I make it compute?
14:51alexyk&((fn [x] (inc x)) 1)
14:51lazybot⇒ 2
14:51alexyk&(-> 1 (fn [x] (inc x)))
14:51lazybotjava.lang.UnsupportedOperationException: nth not supported on this type: Long
14:51alexyk-- how do we overcome the second case?
14:52alexykI want lambdas in ->
14:53ritre&(-> 1 ((fn [x] (inc x))))
14:53lazybot⇒ 2
14:53hugodpjstadig: thanks for the warning
14:54alexykright. more parens
14:57alexykhow do I make a map out of [[1 2] [3 4]] ?
14:59Bronsa&(into {} [[1 2] [3 4]])
14:59lazybot⇒ {1 2, 3 4}
15:00alexykyay
15:04alexykhow do I force a lazyseq?
15:04brehautdoall or dorun
15:05Raynes&(doall (range 10))
15:05lazybot⇒ (0 1 2 3 4 5 6 7 8 9)
15:05Raynes&(dorun (range 10))
15:05lazybot⇒ nil
15:07ckirkendallgtrak: very good how are your adventures in Baltimore. Did you group get started up.
15:08gtrakckirkendall: yes, we've had 2 beer nights and doing a talk/hack night tomorrow, it's small but enthusiastic right now
15:09ckirkendallWe been running around 15-20 for awhile. I am talking at the cincy JS group about ClojureScript next wed.
15:09gtrakawesome, I saw you guys are still doing one talk per-meeting, how's that working out?
15:11ckirkendallits working well, we have more topics than we have meetings right now. I think we are booked through Apr.
15:12ckirkendallgtrak: In march we have a group coming down from Columbus to do an Overtone concert.
15:12gtrakfreaking sweet :-)
15:12gtrakyou should record it
15:12ckirkendallgtrak: That's a good idea I will chat with Carin about it.
15:24jcromartie(reset! motivation nil)
15:32jondot2hey guys
15:33jondot2im wondering, how should i namespace my ring middleware?
15:33jondot2if the middleware is called 'ping', is it impolite to drop it in ring.ping namespace?
15:33Raynesmy.awesome.ping.middleware.
15:34jondot2i wouldn't like to use the common __mycompany_.ping.middleware, i think it discourages collaboration
15:34RaynesIt's just a name.
15:34gtrakit's impolite to use someone else's namespace in general, what kind of collaboration would that discourage?
15:34gtrakarguing about name collisions?
15:35jondot2people avoiding contribution thinking this is something that belongs to a company
15:35RaynesYou can name it com.pornhub.ping and people will still work with it if they like it.
15:35ibdknox_lol
15:36gtrakjondot2: then use org.
15:36RaynesIf Github started putting out com.github.* namespaced libraries...
15:36RaynesThey wont collaborate if your company sucks, I guess. :P
15:37jondot2i had a bad day guys
15:37TimMcI use org.timmc
15:37ibdknox_I usually just do ibdknox/.. since my name is unlikely to collide ;)
15:37jondot2TimMc, ok, that sounds reasonable
15:37TimMcDon't use mine!
15:37gtrakTimMc: you're a well-coordinated bundle of organs
15:37jondot2TimMc :)
15:38Raynesibdknox_: I want to namespace things hermione.*, but I figure I'd be infringing on your space.
15:38TimMcgtrak: That's what my momma always said.
15:38ibdknox_Raynes: yeah man, lay off... that one's mine.
15:39jondot2so its needles to say that the same deeply nested structure as in Java exist in clojure? no movement to brake off it? (such as naming it org-mycompany-project)
15:39jondot2as opposed to org.mycompany.project
15:39benares_98portman.natalie.grits
15:39gtrakjondot2: i don't really see a difference between hyphens and dashes
15:40ibdknox_gtrak: the number of folders
15:40jondot2gtrak, the directory structure i'd need to mkdir -p ?
15:40gtrakmeh? you make the file once, then emacs can auto-follow to find your file
15:40gtrakM-.
15:41jondot2well i know there is a solution, i'm just poking around to avoid the solution
15:41jondot2it may be my opinion, but i dislike Java's deeply nested folders
15:41gtrakjondot2: eclipse helps you find classes too
15:42gtraki hate projects that create their own structures and don't follow conventions
15:42jondot2like this one? https://github.com/medSage/clj-http/tree/master/src/clj_http
15:42jondot2hmm.. i'll just use that kind of structure, was under my nose all this time
15:43brehautjondot2: i think https://github.com/dakrone/clj-http is the canonical repo now
15:44RaynesIt is.
15:44dakroneIt is.
15:44jondot2yep, that was just in my browser history i guess
15:46jondot2sorry if i made you guys uncomfertable, sometimes i'm just too eager when i have a chance of not doing something i disliked doing for a long time :)
15:46RaynesYou make us all very comfortable.
15:47jondot2in what way?
15:48RaynesThe best kinds of ways.
15:48ibdknox_lol
15:49ibdknox_this is headed somewhere not good
15:49brehauttoo many hormones involved
15:49gtrakRaynes is ready to slip into something more comfortable
15:53gtrakbtw, FP baltimore is having the first talks/hack night tomorrow
15:53gtrakBaltimoreFP, rather
15:53ibdknoxgtrak: can san franciscans come?
15:54gtrakyes
15:54Raynestechnomancy: ibdknox is bouncerfied.
15:54ibdknoxit's like I'm a whole new man
15:55TimMcYessss, now we can bug him any time of day or night.
15:56ibdknoxperhaps I should've considered the implications...
15:56RaynesHah
15:56Raynesibdknox: But you don't have to see the bugging until you reconnect. ;)
15:56ibdknoxI should create a bot version of myself
15:56ibdknoxto work in my stead
15:56technomancyibdknox: oh man, it saves so much time. highly recommended.
15:57ibdknoxtechnomancy: what about it saves time?
15:57technomancyearlier you said it's like you're a whole new man?
15:58hiredmanself markov models are the next GTD
15:58ibdknoxhaha
15:58ibdknoxGTD made a lot of money...
15:59ibdknoxunrelated, for anyone interested, here's a simple example of some of the CLJS state stuff I've been working on https://refheap.com/paste/522 non-deterministic-finite-state-machine-driven-ui FTW
15:59TimMcibdknox: Is it because of your childhood that considers the possibility?
16:00ibdknoxTimMc: abuh?
16:00brehautTimMc: lol
16:01gtrakany speculation why apple's sending so many folks to clojure/west?
16:01ibdknoxgtrak: source?
16:02RaynesThey totally plan to replace objective c with Clojure.
16:02Raynesibdknox: Alex Miller.
16:02Rayneslrn2twitter
16:02ibdknoxlol
16:02brehautgtrak: i suspect they are apple people going to clojure west, rather than being sent by apple
16:02cemerickThere was a guy in here a year ago or so that claimed to be from Apple, who said that Clojure was being used a fair bit. *shrug*
16:03gtrakibdknox: @ClojureWest: "So far the company with the most developers attending Clojure/West is... Apple. Surprised?"
16:03brehautcemerick: sounds unlike an apple employee :P
16:03cemerickbrehaut: I should have *bolded* "claimed".
16:03ibdknoxheh
16:03brehautcemerick: nope :P
16:03ibdknoxwell maybe I can teach some of them to build websites ;)
16:03gtrakdon't know if that implies they're sponsored to go by apple
16:04Raynesibdknox: They wont build any websites unless it is STEEL colored and blank.
16:04brehauti understand that even if they go on their own, they arent supposed to say they work at apple
16:04TimMcibdknox: Have you ever interacted with the ELIZA chatterbot?
16:04ibdknoxTimMc: I have :)
16:05ibdknoxRaynes: true, should make the class pretty easy to teach
16:05TimMcibdknox: I was imagining using ELIZA as your replacement while you weren't logged in.
16:05alexykhow do you prepend an element to a vec?
16:05ibdknoxTimMc: it's a pretty good approximation of me
16:05RaynesYou probably don't really want to.
16:05gtrakalexyk: you can cons one onto a seq'd vec
16:06alexykgtrak: will it still be a vec?
16:06RaynesNo.
16:06gtrakthe vec part will
16:06TimMcalexyk: The output of cons is always a seq.
16:06alexykRaynes: I'm doing silly data mangling
16:06alexykso everything goes
16:06RaynesFinger trees!
16:06brehaut,(class (rest (cons :a [:b])))
16:06clojurebotclojure.lang.PersistentVector$ChunkedSeq
16:07RaynesI use finger trees for all my softwares.
16:07TimMcRaynes writes all his monads using finger trees.
16:07ibdknoxI use bloomfilters for basically everything.
16:08gtrak,(class (cons :a [:b]))
16:08clojurebotclojure.lang.Cons
16:09gtrakthe Cons class is quite simple
16:09RaynesQuite.
16:09jondot2jondot
16:09jondot2crap.
16:09ibdknoxlol
16:09RaynesRaynesbot.
16:09ibdknoxHi Raynesbot, how are you today?
16:09RaynesBot, dot, whatever. It's all the same to me.
16:10jondot2well great now you know the sudo password to one of my VMs
16:10lazybotI'm excellent. Thanks for asking.
16:10Raynesjondot2: Yeah, I've already deleted all of your data.
16:10ibdknoxlazybot: you're welcome.
16:11gtrakjondot2: now I'll go and brute-force through my all the vm's in the world database organized by rooted hosts
16:11ibdknoxgtrak: should take what? 15mins?
16:11lazybotibdknox Would you consider a homorobotic romance?
16:11gtrakyea, ec2's really fast
16:12ibdknoxhaha
16:12jondot2only that its a virtualbox under a double NAT..
16:12gtrakjondot2: really fast
16:12RaynesMan, I can almost hear cemerick sigh as he watches the conversation degrade.
16:12ibdknoxI assume he hates us all now.
16:13ibdknoxLuckily I can claim someone stole my bounced identity and this is all a terrible joke.
16:13Rayneshttp://euroclojure.com/2012/euroclojure-2012/ Holy crap.
16:13ibdknoxyeah, I'll probably submit a couple talks to that one
16:14alexykis there a mean/average in std lib?
16:14gtraki don't think i can afford any more clojure conferences
16:14yawNOlondon
16:14yawNO:;
16:14alexykClojure/west I'll visit
16:14yawNO*;_;
16:14yawNOcrap
16:14cemerickRaynes: There's very little that makes me sigh. Presume I'm smirking at all times. ;-)
16:14cemerickAnyone know who's running the euroconf?
16:14gtrakbut i will be at clojure/west :-D
16:15yawNOcemerick: i might
16:15ibdknoxcemerick: whoever this is: http://companycheck.co.uk/company/07908329
16:15yawNOno wait
16:15yawNOmay
16:15yawNOjust kidding
16:15yawNOcant
16:16gtrak~enter
16:16clojurebotPardon?
16:16ibdknox~guards
16:16clojurebotSEIZE HIM!
16:16ibdknox~anyone
16:16clojurebotJust a heads up, you're more likely to get some help if you ask the question you really want the answer to, instead of "does anyone ..."
16:16ibdknoxhah it's still there
16:16axle_512_just saw a tweet from newsycombinator about the clojure conj videos… really digging Rayn'es clojail talk
16:16alexyk&(reduce '+ [1 2 3])
16:16lazybot⇒ 3
16:17gtrakI'll steal the one from ##java
16:17aaelonynoticed that Aaron Bedra is wearing a sweet Grateful Dead / Clojure Lambda T-shirt in the One () to Rule them All video (http://www.infoq.com/presentations/One-Parenthesis-to-Rule-them-All) ... !!! are those on cafepress somewhere ?
16:17alexyk(reduce + [1 2 3])
16:17alexyk&(reduce + [1 2 3])
16:17lazybot⇒ 6
16:17gtrak~enter is not punctuation. Please don't press your Enter or Return key until you've finished typing your question, sentence, or idea. It is annoying to see that and hard to follow.
16:17clojurebotIk begrijp
16:17gtrak~enter
16:17clojurebotenter is not punctuation. Please don't press your Enter or Return key until you've finished typing your question, sentence, or idea. It is annoying to see that and hard to follow.
16:18alexykisn't it interesting to see how '+ causes reduce to silently be wrong
16:18TimMcalexyk: Why do you think that was the wrong answer?
16:19brehaut,((comp (partial apply /) (juxt (partial apply +) count)) [1 2 3])
16:19clojurebot2
16:19cemerickaaelony: Nope, he made it.
16:19technomancy"On two occasions I have been asked [by members of Parliament], 'Pray, Mr. Babbage, if you put into the machine wrong figures, will the right answers come out?' I am not able rightly to apprehend the kind of confusion of ideas that could provoke such a question."
16:19ibdknox,('+ 3 4)
16:19clojurebot4
16:19aaelonycemerick: i think it's pretty awesome
16:20technomancyclojurebot: wrong figures is <reply>"On two occasions I have been asked [by members of Parliament], 'Pray, Mr. Babbage, if you put into the machine wrong figures, will the right answers come out?' I am not able rightly to apprehend the kind of confusion of ideas that could provoke such a question."
16:20clojurebotc'est bon!
16:20TimMcOh, I see, (quote +)
16:20TimMcI've gotten into the habit of putting ' in front of var names in discussion.
16:20alexykTimMc: I understand it's not "wrong", but sshy a symbol would return the last arg in a form?
16:20alexykwhy
16:21TimMcalexyk: I believe it has to do with lookups.
16:21brehautits not the last, its the second
16:21ibdknox,('+ 3 4 5 6)
16:21clojurebot#<ArityException clojure.lang.ArityException: Wrong number of args (4) passed to: Symbol>
16:21alexykbrehaut: awesome mean too
16:21brehaut('+ {'+ :a} :foo)
16:21brehaut,('+ {'+ :a} :foo)
16:21clojurebot:a
16:21brehaut('+ {'- :a} :foo)
16:21brehaut,('+ {'- :a} :foo)
16:21clojurebot:foo
16:22brehautits the same thing as keywords as accessors in maps
16:22alexykbrehaut: what's your Twitter nic?
16:22brehaut@brehaut
16:22ibdknoxhow unoriginal ;)
16:22brehaut(shocking i know)
16:22dpritchettIs there a shorter way to write this? (map #(vector (:title %) (:published %)) my_coll)
16:22brehaut(map (juxt :title :published) my_coll)
16:22ibdknox(map (juxt :title :published) my-coll)
16:22ibdknoxdamnit
16:22TimMcdpritchett: juxt!
16:22dpritchettthanks!
16:23ibdknoxbeaten to the punch
16:23brehautibdknox: you didnt screw the hyphen though
16:23dpritchettibdknox if it makes you feel any better i am working in noir
16:23ibdknoxsweet
16:23TimMcbrehaut: You sniped amalloy on a juxt answer!
16:23brehautTimMc: i know!
16:23brehautsomeone should check if hes ill
16:23ibdknox~juxt
16:23clojurebotjuxt is usually the right answer
16:23Raynesamalloy is nuts for juxt.
16:24amalloybrehaut: i was ill, on my deathbed, but the mere mention of juxt has revitalized me
16:24brehautlol
16:24ibdknoxamalloy: you have a highlight rule for juxt don't you?
16:24amalloyibdknox: that would be little use, right? nothing left to contribute once it goes off
16:25Raynesibdknox: He uses pidgin for IRC. He probably doesn't even have a highlight rule for 'amalloy'. Chances are, he pays someone to watch his client just in case someone pings him.
16:25brehautmechanical turk
16:25TimMclazybot emails him every time
16:25ibdknoxlol
16:25dpritchettI was using Quassel and feeling hardcore about it until I noticed its cache was using up about 1/3 of the disk on my VPS. Now I'm using freenode webchat...
16:26Raynesdpritchett: OS X?
16:26ibdknoxwhat's the best way to monitor memory usage from within your app?
16:26dpritchettwin7 here at the office raynes
16:26dpritchettI had quassel running on osx at home and win7 at work
16:26dpritchettthe server was ubuntu LTS
16:27Raynesibdknox: Get inside the app with a video camera pointing to an instance of yourkit.
16:27ibdknoxRaynes: I tried that, the camera was too shaky to get a good read.
16:28amalloy$javadoc System
16:28lazybothttp://download.oracle.com/javase/6/docs/api/java/lang/System.html
16:28TimMcibdknox: Probably something to do with JMX
16:29TimMcMBeans and whatnot.
16:29amalloyfrom within your app? i'd suggest something more like http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html#freeMemory() if a crude tool is sufficient
16:29ibdknoxcrude is ok
16:30ibdknoxI'm running out of memory on heroku but I'm not using much locally, so I just need something I can look at to get an idea where things are going haywire
16:36Licenseribdknox are you still wokring on cljs-watch?
16:36ibdknoxLicenser: I still use it everyday, yes
16:37Licenserdo you plan on porting it to the newer cljs releases? :)
16:37ibdknoxhm?
16:38LicenserI want to use some recent things in cljs like the new -bla syntax for parameters and cljs-watch keeps compiling with the old stuff
16:39ibdknoxyou just need to pull inside your copy of clojurescript
16:39ibdknoxit uses whatever you have locally
16:40Licenseroddly for me it does not work, if i use cljs directly it runs with the new stuff, if I run cljs-watch it uses the old stuff
16:40ibdknoxhm is your clojurescript_home potentially pointing at some old dir?
16:41Licenserpretty sure not it's part of my makefile and using the smae cljourescript_hope I use to compile but I will double check
16:45Licenserbut thanks for the hint ibdknox I'll investigate on that
16:45ibdknoxokidoke, let me know if there's something I need to do.
16:46jondot2whats the canonical OSS license to use for clojure libs? i see EPL generated by lein, however some others go with MIT
16:46jondot2hm perhaps 'encouraged' is the word
16:47ChousukeEPL is common
16:48gtrakWTFPL
16:48Licenseribdknox thanks mate :) I will
16:48tjgilliesi use cljr and sometimes it gets "stuck" as in unresponsive, is there a way to get back to user=> ?
16:48ChousukeWTFPL is a bad licence for anything :P
16:48gtrakha, why?
16:48Chousukeit's too informal
16:49brehautits a real thing‽
16:49brehauthuh so it is
16:51tjgilliesMIT is my fav
16:51tjgilliesbecause its GPL compatible, without going the way of GPL
16:52RaynesChousuke: wtfpl is a great license. Get out of my channe.
16:52Rayneschannel*
16:52pjstadigCC0
16:53dpritchettanyone have a favorite standalone repl?
16:53pjstadigor Unlicense
16:53gtrakwhat's a standalone repl?
16:54brehautreply cljr ?
16:54jedahuI prefer the ISC license http://en.wikipedia.org/wiki/ISC_license
16:54pjstadigdpritchett: i have a script in my bin that just runs clojure
16:54dpritchettso i'm using lein repl and vim to play around with a little shell of a noir project
16:54brehautactually, i dont know if reply is stand alone
16:54pjstadigbut it doesn't have any like classpath support
16:54dpritchettI'd like it if I had auto-indenting and syntax highlighting and whatnot
16:54brehautgtrak: a repl that doesnt exist in a project
16:54dpritchetti can live without it at the repl, but i just like to check every so often
16:54tjgilliesi like cljr because the swing version lets me click on the screen with my mouse
16:55gtrakbrehaut: ah, i just make a project for that
16:55brehautgtrak: if you dont need dependancies (or 1.3 i think), then lein repl works fine without a project context
16:55djh_Can anyone explain to me something. I'm trying to look for this function http://clojuredocs.org/clojure_contrib/clojure.contrib.string/substring_q in the "modularised" Clojure Contrib
16:55TimMcdpritchett: You mean, you want a REPL that acts like Emacs?
16:55dpritchettpretty much, tim
16:55djh_on this page it says http://dev.clojure.org/display/design/Where+Did+Clojure.Contrib+Go that clojure.contrib.string was migrated to clojure.string
16:55dpritchettor pry or irb or bpython or ipython
16:56dpritchetteach of which isn't attached to an editor
16:56djh_but I can't seem to find the function in there
16:56pjstadigdjh_: i don't think everything from clojure.contrib.string made the cut
16:56dpritchettMaybe I can just load some repl-oriented stuff into my dev-dependencies and then it'll show up at my repl? irb is pretty boring out of the box but when you load in a few runtime gems it gets downright usable
16:56djh_pjstadig: Ah I see, OK thanks
16:57dpritchettsomething like Wirble would be great
16:57TimMc$findfn map (partial % "oo") ["foo" "bar"] [true false]
16:57lazybot[]
16:58TimMcdjh_: ##(.contains "foo" "oo")
16:58lazybot⇒ true
16:58TimMcwhich is all 'substring? ever was.
16:59djh_TimMc: ah thanks man, yeah just went to look at the source and noticed that
16:59_philLicenser: also take a look at https://github.com/davesann/cljs-watch
16:59Licenseribdknox actually Iu will send a pullrequest towards you :)
16:59Licenser_phil did it crashes w/o saying anything
17:00jondot2heres an experiment's results: clj 36 LOC, ruby 63 LOC, node.js 71 LOC, C# 153 LOC, same component, same principle frameworks (ring, rack, connect, mvc.net) - nice!
17:00_philit handles cross compilation between clojure and cljs and handles configuration etc
17:00_philLicenser: oh
17:00_philLicenser: never crashed here but im afraid i cant help you :/
17:01Licenser_phil no worries :)
17:02Licenseractually not the error was somewhere entireu differnet
17:02_philLicenser: only thing i know is clojure needs to be on the path and $CLOJURESCRIPT_PATH needs to be set
17:03Licenser_phil it starts up, no java errors or anything just quietly dies
17:03_philLicenser: i mean $CLOJURESCIPT_HOME
17:03LicenserI know ^^
17:03_philLicenser: oh... you have to pass it a parameter
17:03Licensernow I git the version from ibdknox working so I am happy
17:03_philgen-watch f.e.
17:05Licenserf.e.?
17:06jedahu_phil: fwiw, there is also https://github.com/jedahu/lein-clojurescript
17:06_philfor example :)
17:06jedahusorry, that should have been directed to Licenser
17:06_philjedahu: np but ive also been meaning to try it out but havent had the time til now
17:07Licenserjedahu yes I know but I don't have a clojure project just cljs for my frontend code
17:07_philLicenser: i.e. cljs-watch gen-watch
17:07Licenser_phil that is whaty I tried to run :)
17:07Licenser Will watch to gen-src for:user$project_dirs@3a8721bd is all what it said before ending
17:08jedahu_phil: watching checkouts projects is a good idea
17:08_philLicenser: do you have a cljs-opts.clj file?
17:08Licensernope
17:08jedahuI'll have to implement it in lein-clojurescript
17:10_philjedahu: i think lein-cljs is a cleaner solution, cljs-watch generates two additional src folders in your project root
17:10_philjedahu: its kind of a hack
17:11Licensercljs-watch does not generate any folders for me
17:12_philLicenser: strange, it generates src-generated and cljs-staging
17:12Licenserperhaps only the one from davesann?
17:12_philfrom your src folder
17:12_philLicenser: oh yes, im talking about that one :)
17:12Licenserah okay I use the original
17:13_philthe original cljs-watch doesnt handle cross compilation so it doesnt need to generated additional folders
17:13Licensernow that this is solved I just need someone to write me the CLJS for my gui :P
17:13_philgenerate8
17:14_philwhile were talking about cljs-watch, is there a way to keep the repl up-to-date when a file is saved?
17:16_phili remeber there was some ns-watcher thing, has anyone used it successfully?
17:21amrohow can I use apply with a .method in cljs?
17:32jedahu_phil: hadn't come across lein-cljs, looks good :-)
17:33_philjedahu: oh i meant lein-clojurescript :) didnt know there was lein-cljs either
17:39jedahu_phil: turns out it's based on https://github.com/zkim/cljs which is an old clojure->javascript compiler, so not that relevant after all
17:43pjstadigtechnomancy: bump https://github.com/technomancy/swank-clojure/issues/103
17:44jedahuamro: (. obj -method (apply obj (. [arg1 arg2] -array)))
17:45jedahu_phil: there is also https://github.com/jedahu/lein-repljs
17:46_philjedahu: thx, ill have a look :)
17:49dpritchettHey ibdknox, "lein uberjar && java -jar <jarname>" should work on Noir out of the box, right?
17:50dpritchettThat is, for a project generated by lein noir new
17:50ibdknoxdpritchett: I think you'll need to use load-views-ns instead of load-views
17:52dpritchettThanks. Excuse me while I go stare the API docs and try to figure out why there are two separate load-views functions.
17:52ibdknoxdpritchett: history
17:52dpritchettSo I guess my version of the lein noir plugin uses the deprecated function?
17:52ibdknoxload-views-ns is a little more robust and will be used in the templates moving forward
17:53ibdknoxyep
17:58dpritchettSo I figured out the proper syntax for load-views-ns and I was able to get the app back up and running with "lein run" but my attempts to run the uberjar are still stalling out at "could not find the main class: myappname.server"
17:59dpritchettHere's the code fwiw https://gist.github.com/1713638
18:00ibdknoxyou need (:gen-class) in your server ns decl
18:01amrojedahu: what's -array in that?
18:03dpritchettThanks for the hand holding, ibdknox. I'm back in business.
18:03ibdknoxgood deal :)
18:05aphyrtw
18:05jedahuamro: the field of a cljs vector that holds the underlying js array
18:06amroI'm confused how that maps back to a regular apply call, (apply fn arg1 arg2 seq)
18:07amroI basically have (. obj method x y z), where x y z are in a vector
18:09ibdknox(apply (.-method obj) x y z)
18:09ibdknox(.-method obj) will give you the property (which is a function)
18:09ibdknoxhowever
18:10ibdknox"this" will be bound incorrectly in that case
18:10ibdknoxif that method uses it
18:10jedahuamro: like ibdknox said, it doesn't map to regular apply
18:13jedahuamro: (defn wrap-method [& args] (.apply (. obj -method) obj (. args -array)))
18:14jedahuamro: sorry, that should be: (defn wrap-method [prop & args] (.apply prop obj (. args -array)))
18:15jedahuamro: then (apply (wrap-method (. obj -method)) arg1 arg2 seq)
18:15mabesdid class loading change any in 1.3? I'm upgrading a project from 1.2 and it is claiming that it can't file a AOTC class file even though I've verified it exists..
18:16mabesjust looking for related changes that might explain the break...
18:19amrojedahu: thanks, I got it to work
18:20technomancypjstadig: just use ^:regression =P
18:25amrois there a standard way to automatically bootstrap repls with a few forms at the start?
18:30jedahuamro: good :-)
18:38amroI sometimes get this error when running lein clojurescript: Exception in thread "main" clojure.lang.ArityException: Wrong number of args (5) passed to: compiler$eval889$fn--890$pfn
18:38amroit's not consistent at all- I can recompile without any source changes and it doesn't happen
18:39amrotry a few times and it will happen again, still no source changes
18:39amroany ideas why?
18:41jedahuamro: does cleaning the 'out' directory change anything? (lein clojurescript fresh)
18:46pcavsNot a pure clojure question, but does anyone else run into the problem when using clojure-jack-in in emacs, when the repl prints out anything beyond five to ten lines, the repl gets off and puts the cursor in the wrong spot after commands?
18:46amrojedahu: I just ran it 20 times in a row and no more error, I'm gonna chalk that down as a success
18:48amroUncaught TypeError: Cannot call method 'call' of undefined - I've marked the function with ^:export and this still happens. am I missing something?
18:55jedahuamro: does it happen for optimizations lower than :advanced?
19:09amrojedahu: I don't have any optimizations
19:10jedahuamro: iirc ^:export only comes in to play for :advanced optimization
19:11jedahuamro: so chances are there is something else going on
19:12jedahuamro: have you checked out the js source of the error in your browser?
19:14amroyeah, it's what I pasted
19:14amroI checked in the inspector, the object doesn't exist as it should
19:15amroengine.main.setup.call(...) is generated, but engine.main doesn'tt have a setup
19:18sjlI give up. The "Where did Clojure contrib Go" page lists the new names of contrib stuff, but doesn't tell you how to GET them.
19:18sjlWhere can I find the magic names/numbers that need to go into project.clj to actually use these things?
19:18brehauthttp://search.maven.org/
19:19brehauteg http://search.maven.org/#search%7Cga%7C1%7Cclojure.algo.monads
19:19technomancyor lein search
19:19technomancyif you feel like downloading huge maven repo indices from overloaded mirror servers
19:19sjltechnomancy: lein search has been hanging downloading an index for a few minutes now. I ctrl+c'ed it
19:20technomancyyeah, the mirrors are ridiculous
19:20technomancyit's 80MB of lucene files, but still
19:20brehautthats why its never completed for me
19:20sjlbrehaut: hmm, I assume I should just use the latest version listed here and hope it works with 1.3?
19:20technomancyIIRC all contribs have to work on 1.2 and 1.3 to have a release
19:21brehautsome of them have a newer release in the sonatype snapshot repo
19:22technomancyI wonder if lein search should take a "I don't have all day; just try clojars" flag =(
19:22brehauthaha
19:23brehautit'd be helpful for people trapped on craptacular (international?) connections
19:24technomancyoh, actually that's trivial to implement using profiles in lein2
19:25Raynesclojurebot: profiles support in line2 is the answer to life, the universe, everything.
19:25clojurebot'Sea, mhuise.
19:25brehautwait, isnt that juxt?
19:25technomancy{:clojars {:omit-default-repos true :repositories {"clojars" "http://clojars.org/repo/&quot;}}} ; <- put that in ~/.lein/profiles.clj, then do "lein with-profile clojars search cheshire"
19:25brehautlein2 isnt out yet though right?
19:25technomancywellllllll
19:26technomancywhat does "out" mean?
19:26brehauti dont know
19:26xeqia non-snapshot version?
19:26brehautnormal plebs like me who forget to upgrade lein?
19:26technomancytry it and see!
19:26technomancyif it breaks, you get to keep both pieces
19:26brehautfantastic :P
19:27technomancyseriously though, I'll have a preview release by clojurewest
19:27technomancyall that's missing for the preview is the enhanced repl and native deps
19:27technomancyboth of which I have delegated to other hackers =)
19:28cemericknag, nag, nag ;-)
19:28brehautis the enhanced repl an nrepl thing or reply?
19:28brehautor something else?
19:28technomancybrehaut: it's ... both!
19:28RaynesGotta earn my damn sticker.
19:28cemericktechnomancy: bencode has landed, so it won't be long: https://bitbucket.org/kotarak/nrepl
19:29xeqicemerick: I've also got a pull request on pomegranate that would be nice to get into the preview
19:30brehauthow long till one of the technomancys replaces slime / swank with an nrepl equivalent
19:30cemerickxeqi: I missed that somehow. Shocking, given github's awesome notifications. :-P
19:30cemerickI'll get it merged in tomorrow-ish
19:30xeqinp
19:30xeqifigured it might have been missed
19:31cemerickbrehaut: nrepl is a swank equivalent (though I think it's better, of course)
19:31cemerickit's the SLIME part that's tough
19:31technomancyit's better
19:31technomancyas a server
19:31brehautcemerick: right. i presume theres lots of stuff intermunged in slime land?
19:31technomancyconsidering it wasn't a line-by-line port of an ancient CL program =)
19:32brehautlol
19:32technomancyor rather a defun-by-defun port
19:32cemerickbrehaut: yeah, there's *really* tight coupling between SLIME and swank, and emacs in general and swank
19:33cemerickIf bitbucket implements asciidoc well, then… :-P
19:33Raynescemerick: I don't think they even implement markdown well.
19:33Raynes:\
19:33brehautcemerick: lol. what is the appeal of asciidoc other than its not markdown?
19:33cemerickIf they had fixed their pricing 2 years ago, then they might have been where github is now.
19:34Raynescemerick: I use bitbucket just for private repos.
19:34cemerickbrehaut: asciidoc doesn't suck
19:34hiredmanstill thinks
19:34technomancylol bzr
19:34Raynestechnomancy: If you and I started using hg, I bet we'd convince the entire community to…
19:34brehauttechnomancy: yeah.
19:34cemerickmarkdown doesn't suck as bad as textile, but that's not saying much.
19:34brehauttechnomancy: but at least its UI didnt suck
19:35technomancyyeah, it has the best docs
19:35technomancyalso the best icon
19:35brehautit has an icon?!
19:35Raynestechnomancy: Let's do it. leiningen on hg on bitbucket. Go.
19:35technomancyhttp://wiki.bazaar.canonical.com/LogoOptions?action=AttachFile&amp;do=get&amp;target=bzr+icon+64.png
19:35dgrnbrgCan syntax quotes be nested?
19:35cemerickhiredman: There's a Transport protocol, so if anyone has a better idea that suits all parties…
19:35brehauthuh so it does
19:35technomancyRaynes: I'm locked into git for work
19:35_philRaynes, technomancy: yes please, hg!
19:35dgrnbrgto make a macro-generating-macro?
19:35RaynesQuit your job.
19:35hiredman(/ 10000 365)
19:35clojurebot*suffusion of yellow*
19:35technomancyalso, magit is too good for words
19:35Raynes_phil: Never.
19:36cemericksexprs don't cut it
19:36hiredman,(/ 10000 365)
19:36clojurebot2000/73
19:36amalloydgrnbrg: it sounds like this question would be easier to answer by trying it yourself than by asking here
19:36Raynestechnomancy: fugitive.vim is surprisingly sufficient. I've enjoyed using it.
19:36hiredman,(double (/ 10000 365))
19:36clojurebot27.3972602739726
19:36dgrnbrgamalloy, I have tried it, and it doesn't seem to work, so I'm hoping my question will result in an alternative
19:36technomancy,(double :your-refreshment)
19:36clojurebot#<ClassCastException java.lang.ClassCastException: clojure.lang.Keyword cannot be cast to java.lang.Number>
19:36adam_w_,(double (/ 22 7))
19:36clojurebot3.142857142857143
19:36ibdknoxtechnomancy: lol
19:36technomancysupposedly you can use hg as a client for git repos now though?
19:36amalloyk. well, it's totally possible, but is generally a really hard thing to do right so it's not surprising you had trouble
19:37amalloyit's also something you need to do a lot less rarely than you think, so consider a different approach entirely
19:37dgrnbrgI need to have some functions evaluate their arguments as thunks inside another function to catch exceptions and do something to them
19:37brehautamalloy: a lot _less_ rarely?
19:38amalloyer
19:38ibdknoxmore
19:38RaynesHahaha.
19:38amalloyless often
19:38Raynes$logout
19:38brehautphew!
19:38lazybotYou've been logged out.
19:38Raynes$shell
19:38lazybotRaynes: It is not the case that you don't not unhave insufficient privileges to do this.
19:38amalloydgrnbrg: so far, sounds like you want a function for creating functions, not a macro for creating macros
19:39dgrnbrgI need the arguments to not be eagerly evaluated
19:39dgrnbrgsince I need to wrap them in (try)
19:39dgrnbrgI'm pretty sure I need a macro to do that
19:39amalloy*shrug* make them functions
19:39adam_w_have you thought about using futures?
19:39dgrnbrgThe end syntax is important
19:39ibdknoxI write macros that write macros that write functions that spit out programs to write macros that write...
19:40dgrnbrgit has to look like (defn-exceptions my-funk [args] body)
19:40amalloy&(let [thunk #(throw (Exception. "OMG")), wrap-try (fn [f] (try (f) (catch Exception e "Caught it!")))], (wrap-try thunk)))
19:40lazybotjava.lang.SecurityException: You tripped the alarm! catch is bad!
19:40dgrnbrgand each arg must get wrapped in a try to catch any exceptions it might cause
19:41dgrnbrgI've written that part as functions
19:41ibdknoxhm
19:41dgrnbrgbut I need to automagically wrap the arguments into thunks
19:41dgrnbrgwhat are the rules for unsplicing in nested syntax-quotes?
19:41amalloyokay. so that's a macro. you don't need two macros
19:41dgrnbrgbut I need to make lots of functions like that
19:42dgrnbrgso I need a macro to write the argument-wrapping macros
19:42ibdknoxthis is seeming very odd
19:42ibdknoxwhy do they need to be caught individually?
19:43dgrnbrgsince I they're each independent computations, and I want to report as many exceptions as possible
19:43ibdknoxif they're computations, why wouldn't they be their own functions?
19:43amalloyi kinda feel like nested syntax-quotes is a journey you need to go on alone
19:44ibdknoxthat would catch their own exceptions
19:44dgrnbrgibdknox, since I want to allow the user to give me expressions
19:44dgrnbrgthe API is complex, and I want to hide the complex
19:44dgrnbrg-ity
19:46Raynesibdknox: https://refheap.com/paste/524 best thing ever.
19:47Raynesibdknox: That will fix your problem with horrid indentation in (defpage ..) and (defproject ..).
19:47RaynesAnd anything else starting with def or with.
19:47technomancyRaynes: what, no vimscript highlighting yet?
19:47ibdknoxyeah I found that a bit ago
19:47RaynesHuh, that shouldn't have pasted the whole page.
19:48RaynesJust the end is relevant.
19:48Raynestechnomancy: It has VimL highlighting, but my vimrc has no extension and thus my vim plugin doesn't know what to set highlighting to.
19:48Raynesedit'd
19:48dgrnbrgI've almost solved it--I just want to quote an unquote-splicing operator
19:49dgrnbrgbut if I write (unquote-splicing) instead of ~@, it generates different code
19:49_philis there a vim plugin to paste directly to refheap or gist or whatever?
19:49Raynes_phil: http://github.com/Raynes/refheap.vim
19:50RaynesOkay, bug.
19:51RaynesIt doesn't know the difference between a single highlighted line and the whole file. I thought I fixed that. Guess not.
19:51RaynesWill tackle it later.
19:51_philRaynes: thx, trying it out
19:52Raynes_phil: You need a vim compiled with Ruby support enabled.
19:52RaynesAlso, Vim's Ruby support is the devil, so if it doesn't work… Rawr.
19:52_philRaynes: macvim has it by default right?
19:52ibdknox_phil: yes
19:52RaynesYep.
19:52_philcmt + t works at least
19:52RaynesMacvim should work fine.
19:53_philgood
19:53RaynesIf command-t works, it should work.
19:53Raynesibdknox: Also, how do you feel about ctrlp vs command-t? The former is the default in janus distributions, but when I open clj files with it they aren't highlighted and the author can't reproduce :(
19:54ibdknoxI use command t
19:54ibdknoxthough rarely
19:54amalloyRaynes: maybe he should use a sexier text editor, if he's having trouble reproducing
19:54RaynesNERDtree is for nerds.
19:54ibdknoxlol
19:54brehautrimshot
19:54Raynes~rimshot
19:54clojurebotBadum, *tish*
19:54brehautthanks
19:54ibdknoxsomeone changed it from ching?
19:54Rayneshttps://github.com/kien/ctrlp.vim
19:55technomancydoesn't rimshot imply that at least it was close?
19:55ibdknoxRaynes: I used buffer explorer for the most part
19:55amalloyibdknox: i stole it verbatim from fsbot
19:55amalloytechnomancy: if we were talking about basketball rather than drums, yes
19:55brehautf sharp bot?
19:55technomancyaha
19:55Raynesbrehaut: God no.
19:56amalloybrehaut: #emacs bot
19:56brehautoh :S
19:57amalloyand really, the sound *is* more of a tish. ching is what is often said aloud, but the cymbals just don't sound like that at all
19:57_philRaynes: LoadError: /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to l
19:57_phiload -- rubyheap
19:57tjgilliestechnomancy: wow, all your libaries are awsome, thanks
19:57ibdknoxamalloy: I agree, it's more of a chuh
19:57tjgillieslibraries*
19:58brehauthttp://www.youtube.com/watch?v=kpoanOlb3-w
19:58brehaut^ cymbol at 1000fps
19:58brehauts/ol/al/
19:59brehauti dont think a symbol at 1000fps would be as interesting
19:59technomancynot true
19:59amalloyhe should stop leaving that thing out in the sun. looks like he borrowed it from salvador dali
19:59_phildo i need any additional deps for refheap.vim?
20:00technomancysome of them are lame
20:00technomancythis, on the other hand, is awesome: http://27.media.tumblr.com/tumblr_lxkqilGXuz1qzfsnio1_250.jpg
20:00brehautamalloy: hes lucky it didnt aquired weirdo dolphins or strange giraffe/elephants
20:02amalloybrehaut: sorry man, bendy clocks are the limit of my cultural knowledge
20:03brehautone of the bendy clocks is on a dolphine thing
20:05brehautamalloy: i have to have something to show for trying to get into art school years ago
20:06dgrnbrgI figured out the macro:
20:07dgrnbrghere's my macro-writing macro
20:07dgrnbrghttps://gist.github.com/1714329
20:11dgrnbrgI'm quite pleased with ~@'~body
20:15cemerickseancorfield: really? Still looks stale here.
20:15Raynes"Anthony quite possibly is the youngest member of Clojure community, he is 17. Avid cat lower and Stuart Sierra’s groupie with occasion inspired green hair."
20:15RaynesDid anybody else think my hair was green?
20:16RaynesBecause it was supposed to be blue. Albeit I went with a really really light blue that could probably be interpreted as green.
20:16brehautRaynes: you are a cat lower?
20:16ibdknoxit was blue
20:16Raynesbrehaut: Apparently so.
20:16Rayneshttp://vitalyper.wordpress.com/2011/11/17/clojure-conj-2011-recap/
20:17RaynesThe first time I died my hair, it was *exactly* like stuartsierra's hair.
20:17Raynesdyed*
20:17RaynesNot even purposely. I think he just uses the same dye as me.
20:20TimMcDamn you, technomancy, now I'm watching *all* the slow motion videos on YouTube!
20:21brehautTimMc: while technomancy is normally the provider of apropos links, i think this time its my fault?
20:21ibdknoxTimMc: brehaut sent that I think :p
20:21TimMcOh, so it is!
20:21ibdknoxman, I'm just off my game today
20:21ibdknoxbrehaut has beaten me multiple times :p
20:21TimMcI opened both links, you see.
20:21TimMcand forgot which was which
20:22brehautTimMc: http://www.youtube.com/watch?v=TKF6nFzpHBU
20:22brehautiphone 4 inside an acoustic guitar: you can see the wave forms on the strings. very cool
20:23TimMcNOT CLICKING
20:24TimMcYou've done enough damage today!
20:29ibdknoxtechnomancy: any thoughts why my process on heroku would eat ridiculous amounts of memory, but not do so locally?
20:30technomancyyou didn't switch it to using utf-32, did you?
20:30ibdknoxno lol
20:30technomancyyeah... not sure. are you using lein trampoline? that might help address the symptoms
20:30ibdknoxjust using lein run
20:31ibdknoxI'll give trampoline a shot
20:31technomancylein trampoline run will save some memory
20:31ibdknoxwe're talking 600mb here, though
20:31ibdknoxlol
20:32technomancyjust a handful of threads?
20:32ibdknox3
20:32technomancysurely not 3 total threads?
20:33technomancyis it even possible to have only 3 threads when using jetty?
20:33ibdknoxyeah, it creates them as it needs them
20:33ibdknoxand I just restarted it
20:34technomancyso is it 600 MB before responding to any requests? or after a few?
20:34ibdknoxit jumps to 787 from about 120 after 2 concurrent requests
20:34technomancyO_O
20:34ibdknoxyeah
20:34ibdknoxit doesn't even go up 1mb locally
20:35ibdknoxlol
20:35ibdknoxI'm very confused
20:35technomancycan I privmsg?
20:53tjgilliesanyone know how to stop http-server for aleph?
20:53aphyr(server)
20:53tjgilliesrepl driven development is new to me heh
20:54tjgilliesslime is the best
20:57tjgilliesaphyr: Unable to resolve symbol: server in this context
20:59aphyrtjgillies: presuming you bound the server you created to a variable called server.
20:59tjgilliesaphyr: oh, well i didn't bind to anything heh
20:59tjgilliesi guess im out of luck
20:59aphyrYou can get it from the REPL history
20:59aphyr*1, *2, etc
21:00tjgilliesoh nice
21:00aphyrI think
21:01tjgilliesi'll just restart slime and bind next time
21:01tjgilliesheh
21:06jedahuhmm, found a bug in clojurescript: (defn next [a] (inc a))
21:07ibdknox?
21:07jedahuhangs the repl while ram is chewed up and assigns the function to cljs.core.next when compiled
21:07ibdknox:refer-clojure :exclude [next]
21:08ibdknoxas a workaround
21:08jedahushould compile to: my.ns.next = function(a) ...
21:09jedahuibdknox: yes, that fixes it
21:14dnolenjedahu: ibdknox: ticket created http://dev.clojure.org/jira/browse/CLJS-140
21:14jedahudnolen: I was just writing one up :-)
21:27axle_512_How does one println to a stream that is not stdout?
21:27axle_512_suppose I have an seq of streams, and I want to send a string to each of them?
21:28axle_512_s/streams/outputstreams/
21:30brehaut,(doc with-out)
21:30clojurebotExcuse me?
21:30dgrnbrgwith-out-str
21:30dgrnbrg,(doc with-out-srt)
21:30clojurebotPardon?
21:30dgrnbrg,(doc with-out-str)
21:30clojurebot"([& body]); Evaluates exprs in a context in which *out* is bound to a fresh StringWriter. Returns the string created by any nested printing calls."
21:31axle_512_dgrnbrg: thanks
21:32TimMcaxle_512_: (binding [*out* ___] ...), actually
21:32dgrnbrg(let [str (with-out-str body)] (map #(.print % str) seqs))
21:33axle_512_TimMc: thanks. So for each item in my seq, just re-bind *out* to that stream
21:33dgrnbrgwith binding, you could interleave the IO differently
21:33TimMcdgrnbrg: That's an awfully roundabout way of doing it...
21:33dgrnbrgTimMc, you need to write the string to a temp buffer and then copy it around
21:33axle_512_In my case, I am thinking these would be socket connections. Thinking chat-client… I want to iterate over all the connected clients, and send the message to each of them
21:34axle_512_er chat-server
21:34dgrnbrgyou'll want to use binding, almost certainly
21:34TimMcdgrnbrg: with-out-str doesn't allow streaming.
21:34dgrnbrgfor ^^^ reasno
21:34TimMcwith-out-str is halla handy, though
21:34TimMc*hella
21:34axle_512_ok, got it. thanks guys. much appreciated.
21:35jeremyheilerDo you really need to rebind *out* here? If you have writers/streams, could just call println or write directly on them in a doseq.
21:35dgrnbrgtoday I wrote a macro that writes a macro that writes a function...I'm pretty pleased that it works
21:35dgrnbrgwith nested syntax-quotes
21:36axle_512_jeremyheiler: how do you call println directly on the stream?
21:36jeremyheiler(.println stream-obj)
21:36jeremyheilerwell
21:36jeremyheiler(.println stream-obj "sting to write")
21:36brehaut(.write stream "abc")
21:37axle_512_ok, so revert to java-interop for that… got it.
21:37TimMcHmm, true -- if you have the data and the streams *right there*...
21:37jeremyheileraxle_512_: the methods on the stream are available to you.
21:37jeremyheileryea
21:37axle_512_Thanks!
21:37brehautactually, outputstream only has write byte[], no string
21:37amalloyTimMc: "halla". your attempt to impress the kids with your hip lingo has just made you look like you enjoy jewish egg-bread
21:38axle_512_brehaut: true… so I think I can convert my streams to writers
21:39TimMcamalloy: Challah. Fuckin' delish.
21:39amalloyit is, i can't argue with that
21:39TimMcEspecially with bacon, I bet.
21:39TimMcalthough it certainly doesn't need it
21:39amalloya twist on the traditional bacon-and-eggs breakfast?
21:40TimMcsure
21:40TimMcand lunch, and dinner
21:40amalloynote also the wicked pun on "twist" with the twisty challah
21:40brehautits a pitty javas io lib is so class inheritance heavy :/
21:41TimMcamalloy: BAM
21:41TimMcbrehaut: Luckily, amalloy has a solution for you.
21:41brehautTimMc: ah yeah, i think ive seen that
21:41brehauta nice lib
21:42brehautalexyk, jeremyheiler: fyi if you want print… methods you want to wrap your writer in a java.io.PrintWriter
21:42jeremyheilerbrehaut: I know. i figured that was given (or at least implied)
21:43brehauts/writer/writer,file,or outputstream/
21:43axle_512_understood. thanks
21:43TimMcThere's always 'spit, yeah?
21:43TimMcThat'll take just about anything.
21:44jeremyheilerspit cleans up when it's done.
21:44jeremyheilerprobalby want to keep the socket open.. maybe.. lol
21:45brehautjeremyheiler: anyone who has come to clojure from non-jvm languages may well not know the ins and outs of javas IO libs
21:46brehautjeremyheiler: so its worth stating things
21:46TimMcjeremyheiler: Ooh, didn't know that.
21:46TimMcI guess that makes sense.
21:46jeremyheilerbrehaut: true
21:48tjgilliesis it just me or is lein uberjar taking forever
21:48jeremyheileraxle_512_: check out clojure.java.io/writer for easy wrapping of a outputstream in a bufferedwriter. you could go one step further and wrap that in a PrintWriter so you can call println
21:48ibdknoxtjgillies: you're probably running code at the top level
21:48tjgilliesibdknox: eh?
21:48ibdknoxtjgillies: and as such are running it when you jar
21:48tjgilliesoh
21:49tjgilliesibdknox: gotcha
21:49jeremyheileraxle_512_: I mean println the method on the printwriter, not the fucntion.
21:49axle_512_jeremyheiler: ok, i think I'll do exactly that
21:49tjgilliesibdknox: thnx
21:49ibdknoxnp
21:52axle_512_one other question about my chat-server learning example...
21:54axle_512_I am thinking of storing the streams (or PrintWriters actually) of all connected users in a set in an atom. When a new user joins or drops out, I adjust the set by swap!-ing in the new set. Sound like the right way to handle the concurrency and shared set?
21:54brehautaxle_512_: yes that seems sensible
21:54axle_512_behaut: thanks, I think I'm starting to get it. I'm enjoying this :-)
21:55TimMcaxle_512_: Could any of your writes block?
21:56brehautaxle_512_: if by swapping in the new set you mean (swap! my-atom assoc …)
21:56brehauterr
21:56brehautnot assoc, conj
21:56axle_512_brehaut: yes, that's what I mean
21:56brehautcool :)
21:56axle_512_TimMc: Hmm, I don't expect the writes to block… but I suppose it is possible
21:57axle_512_TimMc: The writes would be performed on the output streams bound to sockets for each remote client
22:02ibdknoxyou know, I think I might implement a rule with my projects that to submit a bug, you have to submit a pull request with a test that fails
22:02brehautibdknox: thats a pretty cool idea
22:03ibdknoxpeople have been really good about giving me small repros, so I'm definitely not complaining, but it seems like a really clean way to do it
22:08TimMcibdknox: For some types of projects, that sounds reasonable.
22:08brehautibdknox: might be a little tricky with korma? needing sql to be submitted as well?
22:09ibdknoxbrehaut: hm? almost all bugs with korma can be proven with strings
22:09brehauti guess thats true
22:09ibdknoxTimMc: yeah, only provable ones
22:09ibdknoxlol
22:09ibdknoxKorma is like the poster child for it
22:09TimMcI mean, there are some things I despair of writing regression test for.
22:10alexbaranoskyibdknox, if they don't submit a failing test, then just tell them you probably won't fix it
22:11ibdknoxpinot would be almost impossible to do that way
22:33jweisswhen i see a 10-line block of code like this, where every line is nearly identical https://github.com/clojure/clojure/blob/master/src/clj/clojure/core_print.clj#L263 , I wonder why it's not written as a list and a macro? less readable? slower? seems like it would be easier to maintain at least.
22:34ibdknoxit would be far less obvious
22:36jweissto who? someone who doesn't know what macros do?
22:36jweissto me, that block is "do a defmethod for these 10 things)
22:37jweisshow many such lines before it *would* be better as a macro?
22:37jweiss(i know there's no real answer here, just looking for opinions of people who have more experience w clojure than me)
22:38ibdknoxin that particular case I'm not sure the answer is ever
22:38ibdknoxif even one of those needs to vary
22:38ibdknoxat some point in the future
22:38jweissibdknox: what do you mean?
22:38ibdknoxyou've lost whatever you were gaining by the uniformity the macro would provide
22:38brehauti wonder how much effort it would take to convert the cljs reader into the much discussed format preserving reader
22:39jweissoh i see, you mean if one of the items had to break the pattern
22:39ibdknoxjweiss: yeah, which doesn't seem unreasonable in that case
22:39ibdknoxlikewise, there's already a lot of magic going on there with the multi-methodness of it, I'm not sure it would actually make it clearer.. just add another layer of indirection
22:40jweissok. i tend to look at my own code that looks like this and say "i'm repeating myself". i suppose my code gets less clear, but i feel compelled to make it smaller :)
22:43oakwisedoes clojurescript warn about the new property access form on every method call with 0 args now?
22:43oakwiseor am I doing something weird?
22:43ibdknoxit does
22:44oakwiseno way to say "I get it already!"? :)
22:45jedahuoakwise: on the next release those warnings will be gone
22:45oakwisejedahu: ah great thanks
22:46aphyrIs there a clojure strftime?
22:48oakwiseI found the tiniest of bugs in the Host Interop section of the cljs wiki: `(.sb toString)` should be `(.toString sb)`
22:48ibdknoxoakwise: edit it :)
22:48oakwiseibdknox: I haven't signed the contrib agreement yet :\
22:49TimMcIt's a wiki, just do it. :-)
22:49ibdknoxyou don't need to to edit the wiki
22:52oakwiseTinMc: ibdknox: oh cool thanks. Done!
22:52amalloyi thought wiki was hawaiian for "slow and unwieldy, like jira"
22:52jweisshehe i'm laughing because i once had to administer jira
22:52brehautamalloy: sure fast, messy and inaccurate?
22:53brehauts/sure/surely/
22:54oakwisewas jira chosen b/c github wasn't around/up-to-snuff, or was it a conscious decision over other options?
22:54brehautits to minimise contributions from 3rd parties
22:54jweisshehe
22:54brehaut</jest>
22:55jweissi know jira is a lot more configurable, not sure if that had anything to do with it
22:55brehautit was chosen before githubs issues got decent
22:55brehautnot sure if that was a factor
22:55metajackIt's news to me that GitHub's issues is decent ;)
22:55brehautmetajack: it was worse :P
22:56brehautand at least its not bugzilla
22:56oakwisehah
22:56metajacki liked bugzilla if you fixed the default form to have less info and customized the queries.
22:56TimMcGitHub's issues feature is for completeness. It allows them to attract a much larger user base.
22:56jweissi can't decide which i hate more ,jira or bugzilla . i worked on both jboss and red hat projects, so had to use both
22:56metajackbut out of the box experience was quite poor
22:57brehaut'quite'
22:59oakwiseTimMc: they claim it's feature limited by design
22:59oakwisehttp://zachholman.com/talk/how-github-uses-github-to-build-github
23:41devnSaddle up. This is a wonderful talk.
23:41devnhttp://www.infoq.com/presentations/The-DCI-Architecture
23:54devnhttps://github.com/w01fe/Clojure-traits/blob/master/src/example.clj
23:55devnInteresting.