2011-09-12
| 00:03 | amalloy | sconover: https://gist.github.com/1210561 - it's a lot simpler without reductions |
| 00:27 | srid | could someone tell me why I see "java.lang.Exception: Too many arguments to if" error in http://dpaste.com/613267/ ? |
| 00:28 | srid | hmm, perhaps its something to do with `->` being a macro. |
| 00:30 | amalloy | srid: try macroexpanding that; you should see the issue |
| 00:32 | amalloy | also GZIPInputStream. isn't a function, so it wouldn't work anyway |
| 00:33 | srid | right, (if ...) is treated as function call and -> passes the value as a 2nd arg |
| 00:35 | amalloy | srid: you might like https://github.com/flatland/useful/blob/develop/src/useful/fn.clj#L48 |
| 00:36 | amalloy | then you could write (-> url (URL.) (.openConnection) (.getInputStream) (given (not (running-on-google?)) GZIPInputStream.)) |
| 00:36 | srid | hmm, ok. i ended doing this http://dpaste.com/613269/ |
| 00:37 | amalloy | right, that's the no-dependencies way, and i've written that a few times myself |
| 00:40 | srid | where does `lein deps` cache its downloads? it's not in ~/.lein - nor is it in the project directory. lein deps always leads to ZipException on my linux box. |
| 00:43 | amalloy | srid: ~/.m2 |
| 00:43 | amalloy | it uses maven |
| 00:44 | srid | ah thanks. the first time it was complaining about failing checksums. i'll just clean that directory and re-run it. |
| 01:25 | srid | that didn't help. lein deps is always failing to retrieve the appengine jars due to checksum failures. strangely, this only happens on the linux machine. |
| 01:30 | xiaolongxia | srid: did anyone answer your pallet question? |
| 01:31 | srid | nope, but I gave up on the idea of managing my own VMs as I decided to go with appengine (from heroku) |
| 01:31 | xiaolongxia | ok. you can definately manage *any* computer with pallet |
| 01:32 | xiaolongxia | however the process will be slightly different if you don't use jclouds to instantiate the node/instance |
| 03:31 | thorwil | i'm trying to cleanup/update my clojure-mode/swank setup |
| 03:31 | thorwil | evaluating (add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/")) fails with |
| 03:31 | thorwil | (void-variable package-archives) |
| 03:42 | thorwil | http://code.google.com/p/marmalade/issues/detail?id=10 suggests it's either an outdated package.el, or not having it loaded properly |
| 03:43 | thorwil | but afaict, my package.el v 0.9 is the latest, and the code for loading it was written by its installation routine |
| 03:46 | amalloy | thorwil: have you done (require 'package)? |
| 03:49 | thorwil | amalloy: no. just tried, doesn't work |
| 03:49 | thorwil | however, the setq variant from http://code.google.com/p/marmalade/issues/detail?id=10 seems to work |
| 03:51 | thorwil | ... but only in so far as not producing an error, as there's no clojure-mode available |
| 03:55 | thorwil | ah, i needed a package-refresh-contents |
| 07:41 | khaliG | is there some way to pass a vector as the second argument of proxy? |
| 07:44 | bsteuber | khaliG: you mean a programmatically generated vector? |
| 07:45 | bsteuber | you'll have to use a macro for this |
| 07:45 | khaliG | bsteuber, yup, i'm proxying JLabel and want to pass & arguments from my function to the proxy |
| 07:46 | bsteuber | don't think it's possible from a function |
| 07:47 | bsteuber | and from a macro, the arguments must be already known at compile-time |
| 07:48 | khaliG | ah k, so i've no way to dynamically choose a constructor it has to be just one particular one? |
| 07:49 | khaliG | got d/c - i wrote: ah k, so i've no way to dynamically choose a constructor it has to be just one particular one? |
| 07:50 | raek | khaliG: you can also use the construct-proxy and init-proxy functions |
| 07:50 | raek | they are not macros, so you can apply them |
| 07:50 | bsteuber | there are ways to dynamically invoke constructors with java reflection, but I don't know if this can be combined with proxy or gen-class |
| 07:50 | khaliG | raek, thanks. i'll have a look now |
| 07:50 | bsteuber | ah |
| 07:53 | raek | khaliG: an piece of code that uses the underlying functions of proxy: https://gist.github.com/1098101 |
| 07:54 | bsteuber | raek: nice, I've learned something :) |
| 07:54 | khaliG | raek, beautiful, thank you :) |
| 09:02 | dnolen | if somebody's got a spare moment it would be nice to hear if my ClojureScript reify patch works as advertised. http://dev.clojure.org/jira/browse/CLJS-71 |
| 09:03 | jimduey | dnolen: Your delimc library sounds pretty cool. Looking forward to using it in the future. |
| 09:05 | dnolen | jimduey: port of the weblocks cl-cont library. Never had much use for it, but perhaps in the JavaScript context it's more relevant. |
| 09:06 | jimduey | Maybe so. Always so much to learn. |
| 09:09 | jweiss | anyone use clj-stacktrace with swank? I followed the instrux on the README and i still get regular java stacktraces in slime |
| 09:11 | jweiss | seems like my ~/.lein/init.clj is not being respected, tried adding a :prompt option, that doesn't do anything either. |
| 09:14 | jweiss | even putting :repl-options in my project.clj and running lein swank on command line and connecting with slime-connect, those options do not appear to have any effect |
| 09:20 | troussan | quit |
| 09:33 | gfrlog_ | where are folk get their gclosure docs from? |
| 09:34 | manutter | I bought the o'reilly book... |
| 09:35 | scottj | gfrlog_: I think most people are using the online ones and assuming the diffs from version included with cljs are minimal |
| 09:35 | gfrlog_ | manutter: you lookup API info in a book? like on paper? |
| 09:35 | manutter | well, I bought the ebook first |
| 09:35 | gfrlog_ | scottj: you're talking about http://closure-library.googlecode.com/svn/docs/index.html, right? |
| 09:36 | manutter | then I bought the paper book to have something to read while my ebook reader was charging... |
| 09:36 | scottj | gfrlog_: yeah |
| 09:37 | wilkes | gfrlog_: the online docs became a lot more helpful for me when I realized that there was a "File Index" tab :) |
| 09:38 | gfrlog_ | wilkes: I think you just solved all my problems. |
| 09:38 | gfrlog_ | (inc wilkes) |
| 09:38 | lazybot | ⟹ 1 |
| 09:41 | scottj | I had that same problem, apparently it's a crappy UI |
| 09:42 | gfrlog_ | Typical google. Never giving any thought to their UI. They could take a few lessons from Craigslist. |
| 10:09 | thorwil | technomancy: via marmalade, i got clojure-mode 1.7.1 with no clojure-jack-in. i fixed that by removing it and using package-install-from-buffer with 1.10.0 in it |
| 10:12 | Klemern | hey guys |
| 10:12 | thorwil | though http://marmalade-repo.org only lists 1.10.0, so i don't know what happened, actually |
| 10:13 | Klemern | I saw in clj repo that they removed "throws Exception" clause from all Fn invokes. How will clojure handle uncaught exceptions now? |
| 10:18 | TimMc | Klemern: I suspect they will act like RuntimeException and Error. |
| 10:19 | TimMc | I would imagine the declaration was removed so that interop from the Java side wouldn't involve try/catch(Exception) everywhere... |
| 10:20 | TimMc | ...but now I suppose Java interop that wants to catch a NotRuntimeException of some sort will make the IDE complain about the catching of an undeclared checked exception. |
| 10:24 | Klemern | I'm asking because I made a java lib for functional programming and I had this exact problem |
| 10:25 | Klemern | couldn't throw a checked exception because I had no declaration of exception in function interface |
| 10:25 | Klemern | though in case of clojure there a RT class between java and clojure code |
| 10:36 | gfrlog_ | So as I browse gclosure and think to myself "Everything here is so much more clumsy than jquery", does that mean that 1) I need to suck it up and shut up, or 2) we need a good wrapper library for this stuff? |
| 10:42 | bsteuber | gfrlog_: 2) of course :) |
| 10:42 | gfrlog | bsteuber: I mainly hesitate because I got the feeling somewhere that clojure frowned on frivolous wrappers when the interop is just as easy |
| 10:43 | gfrlog | but gclosure is just so OOPy... |
| 10:43 | bsteuber | many goog namespaces seem almost unusable to me, so verbose and not fitting to clojure |
| 10:43 | scottj | gfrlog_: see pinot as a start |
| 10:43 | bsteuber | most stuff goog.dom functions return aren't even usable as sequences |
| 10:43 | gfrlog | scottj: thanks, taking a look |
| 10:44 | gfrlog | dangit why is somebody using the nick 'as'? |
| 10:47 | gfrlog | looking at pinot brings up an interesting point -- how do we use cljs libraries when compiling? Are we still in the soft-link phase of things? |
| 11:04 | scottj | gfrlog: use cljs-watch and include pinot in your project.clj |
| 11:04 | gfrlog | oh hmm. Okay. |
| 11:05 | scottj | idk where the magic happens |
| 11:05 | gfrlog | :) |
| 11:26 | edw | Is there a way to get a full stack trace out of 'lein compile'? I'm hunting for the source of an exception and I can't see a reference to my code. |
| 12:06 | technomancy | thorwil: you got 1.7.1 from a recent install? |
| 12:07 | technomancy | oh, maybe M-x package-refresh-contents (analogous to apt-get update) is needed? |
| 12:07 | thorwil | technomancy: i thought i did. not 100% sure |
| 12:09 | thorwil | yes, package-refresh-contents seems necessary |
| 12:16 | technomancy | thorwil: the needs of users are fundamentally different from the needs of developers |
| 12:16 | technomancy | *end users |
| 12:22 | arohner | technomancy: could you expand on that answer? |
| 12:24 | technomancy | arohner: funny you should ask! http://technomancy.us/151 |
| 12:24 | technomancy | tl;dr: end users want a single version of each program that gets critical updates without fuss. developers need multiple versions at once and don't want any updates to happen without their knowledge |
| 12:32 | thorwil | good points. i think it could be handled with one system, though with some modality |
| 12:32 | thorwil | oh, and then there's the purely functional package manager nix: http://nixos.org/nix/ |
| 12:34 | technomancy | yeah, that is fascinating. |
| 12:34 | technomancy | new package managers face overwhelming odds against them given that the existing systems _are_ really good at what they do and have had decades of head start. |
| 12:37 | hiredman | and there is no culture of separating code spaces in C |
| 12:38 | hiredman | you can do that with java, just dump all your jars in to /usr/lib/java and run java -cp /usr/lib/java/\* |
| 12:38 | hiredman | :( |
| 12:41 | choffstein | Can anyone point me towards the restrictions on clojure function names? Even better if there is a regex to match them... |
| 12:42 | gfrlog | choffstein: are you asking about what the reader recognizes as a symbol? |
| 12:42 | choffstein | Yep |
| 12:43 | choffstein | I'm trying something like (a-zA-Z)(a-zA-Z0-9)* off the top of my head -- but need to get hyphens in there too |
| 12:43 | technomancy | choffstein: "what the reader accepts" and "what the reader is guaranteed to accept in the future" are two distinct concepts |
| 12:43 | TimMc | choffstein: There are three sets: 1) Possible symbols, 2) what the reader will accept, and 3) what the reader is *supposed* to accept. (Decreasing subsets.) |
| 12:44 | choffstein | hmmm, okay |
| 12:44 | TimMc | s/supposed/guaranteed/ I guess |
| 12:44 | hiredman | ,'> |
| 12:44 | clojurebot | > |
| 12:44 | hiredman | ,'< |
| 12:44 | clojurebot | < |
| 12:44 | hiredman | ,'! |
| 12:44 | clojurebot | ! |
| 12:44 | gfrlog | choffstein: the common things you're missing are "-_?!'+/*"... |
| 12:44 | TimMc | ,(symbol " ") |
| 12:44 | clojurebot | |
| 12:44 | pdk | hey clojurebot you learned your math symbols |
| 12:44 | choffstein | gfrlog: Right. Perfect. |
| 12:44 | gfrlog | and more |
| 12:45 | choffstein | okay, here is what I am trying to do |
| 12:45 | gfrlog | choffstein: also note than a number of them are valid as initial characters |
| 12:45 | gfrlog | e.g., - |
| 12:45 | choffstein | I am trying to read in a .clj file and pull out all the functions that have been declared with defn |
| 12:45 | gfrlog | the only one I know of that can't be initial is the digit |
| 12:45 | hiredman | ,(let [無0] 無) |
| 12:45 | clojurebot | #<ExecutionException java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: let requires an even number of forms in binding vector> |
| 12:45 | TimMc | choffstein: There are also things like '/ which are weird. |
| 12:45 | gfrlog | and then there are the thousands of hiredman characters |
| 12:46 | hiredman | ,(let [· 0] ·) |
| 12:46 | clojurebot | 0 |
| 12:46 | gfrlog | choffstein: let the reader read the file then :) |
| 12:46 | gfrlog | choffstein: then you just have to deal with the data structure |
| 12:46 | choffstein | yeah, that is seeming easier |
| 12:46 | manutter | ,(let [無 0] 無) |
| 12:46 | clojurebot | 0 |
| 12:46 | TimMc | You don't want to rewrite the Clojure parser. |
| 12:46 | choffstein | I thought the regex would be fast. Looks like … no |
| 12:46 | choffstein | yeah, exactly. |
| 12:47 | gfrlog | choffstein: you also know that you can examine the functions in a namespace at runtime, right? |
| 12:47 | gfrlog | it's not clear if that would help you or not |
| 12:47 | choffstein | gfrlog, that would actually be perfect |
| 12:47 | gfrlog | not that I know the functions off the top of my head... |
| 12:50 | choffstein | annnddd back to the API :) |
| 12:50 | gfrlog | choffstein: try (ns-publics (find-ns 'my-ns)) |
| 12:51 | choffstein | any way to load a whole string and eval it? read-string only does one object, right? |
| 12:51 | gfrlog | (read-string (str "(" s ")")) might work |
| 12:51 | gfrlog | don't know if there's an even easier way |
| 12:52 | choffstein | load string. |
| 12:52 | choffstein | That clojure cheat sheet is more helpful every day. hot damn |
| 12:52 | pdk | where is it |
| 12:52 | TimMc | choffstein: You may wish to turn *read-eval* on or off. |
| 12:53 | TimMc | ...although I suppose it is unlikely in Clojure source code! |
| 12:53 | choffstein | pdk: http://clojure.org/cheatsheet |
| 12:54 | choffstein | TimMc: I don't quite understand what *read-eval* is for |
| 12:54 | gfrlog | choffstein: no matter how many times I read the clojure cheat sheet to my son as a bedtime story, I still see things I swear I've never seen before. |
| 12:55 | gfrlog | choffstein: there's a syntax for telling the reader to eval something: #=(foo bar) |
| 12:55 | dark_src | Vinzent: is there a wiki or help for installing durendal? |
| 12:55 | choffstein | gfrlog: oh. Hmm. never seen that. |
| 12:56 | gfrlog | choffstein: it's not used too often I don't think. So the *read-eval* var is provided for reading something you don't trust. |
| 12:56 | TimMc | ,(read-string "#=(println \"What, me worry?\")") |
| 12:56 | clojurebot | #<RuntimeException java.lang.RuntimeException: EvalReader not allowed when *read-eval* is false.> |
| 12:56 | choffstein | gotcha. |
| 12:56 | Vinzent | dark_src, if you use el-get, just add durendal to your sources |
| 12:56 | Vinzent | if not, you should do ;) |
| 12:57 | Vinzent | but maybe it's available in the ELPA too |
| 12:57 | dark_src | Vinzent: ok.. (again) I am a emacs newbie ;) will check it out |
| 12:57 | technomancy | dark_src: just use marmalade. though the jack-in stuff from durendal has been ported to clojure-mode, so no need if you just want that. |
| 12:58 | dnolen | technomancy: do you know if the clojure-mode w/ the ClojureScript enhancements made it to marmalade yet? |
| 12:58 | dark_src | I have spent so much time setting up my clojure environment for emacs |
| 12:58 | Vinzent | oh, didn't know it |
| 12:59 | dark_src | i am pretty sure someone has putup all the common stuff in github or something |
| 12:59 | dark_src | i just don't know where to find it. |
| 13:00 | dark_src | you know things like lein,swank,. common shortcuts for clojure on emacs |
| 13:01 | technomancy | dnolen: it has, though it's a separate package, not part of clojure-mode. |
| 13:02 | Vinzent | dark_src, maybe technomancy's emacs-starter-kit? It was very helpful for me when I started to use emacs |
| 13:02 | bhenry | dark_src: this doesn't have the new clojure script stuff with it, but it's a great starting point. https://github.com/overtone/live-coding-emacs |
| 13:03 | dark_src | Vinzent: really? |
| 13:03 | Vinzent | technomancy, by the way, thank you very much, I've just realized how many cool stuff you have wrote! |
| 13:04 | dark_src | Vinzent: let me check it out. |
| 13:04 | Vinzent | dark_src, yes, but it's not very clojure-specific and imho you have to rebind everything anyway |
| 13:05 | dark_src | Vinzent: too bad |
| 13:06 | bhenry | dark_src: the love-coding-emacs project is clojure specific. clone the project and rename it to .emacs.d and when you launch emacs you can work on clojure out of the box. |
| 13:06 | Vinzent | dark_src, what can i say... it's emacs |
| 13:06 | bhenry | s/love/live |
| 13:06 | lazybot | <bhenry> dark_src: the live-coding-emacs project is clojure specific. clone the project and rename it to .emacs.d and when you launch emacs you can work on clojure out of the box. |
| 13:07 | dark_src | my clojure-emacs stuff on github : https://github.com/nishantrayan/home |
| 13:07 | technomancy | Vinzent: heh; great |
| 13:07 | dark_src | only a handfull of stuff for clojure so far. |
| 13:07 | dark_src | Vinzent: I would love to hear your say how much i have missed in this ;) |
| 13:10 | dark_src | lazybot: let me check it out . thanks does it work with lein..swank? |
| 13:10 | bhenry | dark_src: yeah it does. it uses durendal |
| 13:11 | dark_src | bhenry: thanks mate ;) |
| 13:11 | Vinzent | dark_src, well, I can send you my config so you can compare :) but it's a big mess in its clojure part... I think better to follow bhenry's advice and took that live-coding-emacs setup... |
| 13:14 | Vinzent | you know, it would be pretty cool to create emacs-based clojure editor with normal shortcuts and easy installation process on both systems |
| 13:15 | dark_src | "both" systems ? |
| 13:15 | manutter | yeah, ubuntu and kubuntu |
| 13:15 | manutter | :) |
| 13:16 | technomancy | "We play both kinds of music here; country _and_ western." |
| 13:16 | dark_src | ^_^ |
| 13:17 | gfrlog | vim and windows 98? |
| 13:18 | Vinzent | emacs 23 and emacs 24? |
| 13:18 | gfrlog | wait one of them has to be google docs |
| 13:30 | anttih | so I'm trying to connect to a cljs repl from a compojure app running at :9000 but it's not connecting. The sample page works, just not my own. I wonder what the problem is. |
| 13:31 | anttih | are there any known quirks? |
| 13:40 | dark_src | just tried live-coding-emacs |
| 13:40 | dark_src | it does some weird stuff |
| 13:41 | dark_src | bhenry: my screen refreshes for each line navigation and my source is getting messy! :( |
| 13:41 | bhenry | dark_src: that doesn't happen to me. |
| 13:44 | dark_src | bhenry: is there any doc or demo on how to work with clojure on live-coding-emacs |
| 13:44 | gfrlog | waitaminute. If the clojurescript compiler is written in clojure, then shouldn't porting it to clojurescript be as simple as just changing the not-clojurescript parts? |
| 13:45 | gfrlog | is there some more fundamental barrier related to how gclosure is mixed in? |
| 13:45 | technomancy | gfrlog: FSVO "just" |
| 13:45 | gfrlog | :) |
| 13:46 | gfrlog | in theory at least it sounds like more of a pure-algorithm sort of thing that could live in both worlds than an inherently java-bound thing |
| 13:46 | gfrlog | ignoring, of course, all the gclosure complication |
| 13:49 | miltondsilva | Hi, any ideia why this code blows the stack? http://pastebin.com/iDkHmjQk |
| 13:51 | gfrlog | miltondsilva: what type are the vertices? |
| 13:51 | amalloy | miltondsilva: you're building up a huge chain of (lazy) map expressions and never realizing any of them, and then at the end you finally realize the whole thing |
| 13:51 | amalloy | $google stackoverflow clojure primes |
| 13:51 | lazybot | [primes - Clojure: Avoiding stack overflow in Sieve of Erathosthene ...] http://stackoverflow.com/questions/2992123/clojure-avoiding-stack-overflow-in-sieve-of-erathosthene |
| 13:52 | gfrlog | oh. so he is. |
| 13:53 | miltondsilva | hm.. and here I thought that I had understood lazy-seqs.. tsk.. thanks amalloy |
| 13:53 | edw | Is there a way to get a full stack trace out of 'lein compile'? I'm hunting for the source of an exception and I can't see a reference to my code. |
| 13:54 | technomancy | edw: you can call clojure.core/compile from the repl |
| 13:54 | edw | technomancy: Thanks. I'll check that out. |
| 13:55 | miltondsilva | doall resolved the issue |
| 13:56 | choffstein | anyone familiar with lein plugins? |
| 13:57 | dark_src[1] | how do i execute clojure code in live-coding-emacs? |
| 13:57 | amalloy | technomancy: i wish clojurebot had a ~technomancy i could use like ~anyone, except i'm not sure what i'd want him to respond with |
| 13:58 | technomancy | amalloy: as long as it responds with http://p.hagelb.org/riker.gif at least 7% of the time you have my blessing. |
| 14:00 | hiredman | ~technomancy |codes| while wearing gravity boots to increase the blood flow to the face transplant he got after discovering the world does not treat build tool creators kindly |
| 14:00 | clojurebot | Ik begrijp |
| 14:00 | hiredman | ~technomancy |
| 14:00 | clojurebot | technomancy is to blame for all failures |
| 14:00 | hiredman | close enough |
| 14:00 | hiredman | :) |
| 14:01 | bhenry | dark_src[1]: are you in a lein project ? |
| 14:04 | edw | technomancy: My exception was due to having an ":aot mynamespace" and not an ":aot [mynamespace]"; in a perfect world there'd be some more explicit "bad package.clj" exception. |
| 14:05 | technomancy | edw: yeah, it's hard to know where to draw the line for stuff like that; you can't catch all the unsupported behaviours. |
| 14:05 | dark_src[1] | bhenry: its my putty. |
| 14:05 | edw | Yeah. For future reference I'll just try to remember that lein outputs "Compiling NSNAME" if it can actually parse the ns list. |
| 14:06 | dark_src[1] | on ubuntu live-coding-emacs works beautifully |
| 14:06 | dark_src[1] | i am impressed ^_^ |
| 14:06 | technomancy | edw: a simple check might be nice though; I'd take a patch. |
| 14:09 | mabes_ | has anyone seen this error when trying to run clojure-jack-in? "rlwrap: Oops, crashed (caught SIGFPE) " |
| 14:10 | mabes | has anyone seen this error when trying to run clojure-jack-in? "rlwrap: Oops, crashed (caught SIGFPE) " |
| 14:11 | pjstadig | mabes: nope...sounds like a problem with rlwrap...how did you install rlwrap? |
| 14:11 | mabes | I don't know why rlwrap would even be called for "lein jack-in"... running it by myself in the terminal it works file |
| 14:12 | pjstadig | you don't have any wrapper scripts for leiningen or anything? |
| 14:12 | mabes | pjstadig: with homebrew (OSX) and it hasn't given me any issues... |
| 14:13 | technomancy | the only way that would be possible is if you messed up your clojure-swank-command |
| 14:13 | pjstadig | a difference between CLI and emacs also tends to point towards some kind of environmental difference |
| 14:13 | technomancy | or possibly some nutty shell aliases I guess |
| 14:13 | mabes | I think you are on to something pjstadig... I think I may be using an older and modified lein script that I added some rlwrap stuff too.. |
| 14:14 | technomancy | no, rlwrap always crashes if it doesn't have a real terminal; that's standard behaviour |
| 14:14 | mabes | technomancy: but does the lein script use rlwrap by default? |
| 14:15 | technomancy | mabes: only for repl and interactive |
| 14:20 | TimMc | mabes: I assume you have a recent lein? A distressing number of leningen questions can be solved by upgrading. |
| 14:21 | mabes | no.. upgrading now |
| 14:33 | mabes | thanks for the help.. I found the issue.. I am exporting a RLWRAP in my .bashrc file.. if I remove that then it works |
| 14:36 | choffstein | Will someone with lein plugin experience take a look at https://github.com/newfoundresearch/clj-doc-test for me. I'm getting a "java.lang.ClassNotFoundException: leiningen.doc-test" error I can't seem to scrub out. Would love some insight from anyone with experience. |
| 14:50 | michaelr525 | hey! |
| 14:51 | michaelr525 | lot's of people here |
| 14:51 | michaelr525 | I wonder how many |
| 14:53 | jorgeb_ | I can't get lein jack-in to work with Emacs. I have Leiningen 1.6.1.1 |
| 14:54 | choffstein | is it okay to call a macro on a gensym within a macro? |
| 14:54 | jorgeb_ | *swank* says lein: command not found |
| 14:55 | jorgeb_ | #>lein jack-in says that task doesn't exist. |
| 14:55 | amalloy | choffstein: it's okay to do anything you want |
| 14:55 | jorgeb_ | I know lein is in the exec-path |
| 14:58 | amalloy | (but without more specifics, nobody can know whether what you're describing is a good idea) |
| 14:59 | choffstein | amalloy: Well, really I just didn't know if it was legal. |
| 15:00 | choffstein | My guess is I am doing something stupid since I keep getting an "unable to resolve var: " error on my gensymed var. |
| 15:00 | amalloy | ~bug report |
| 15:00 | clojurebot | A bug report has three parts: What you did; what you expected to happen; what happened instead. If any of those three are missing, it is awfully hard to help you. |
| 15:01 | choffstein | Yeah. I know. |
| 15:01 | choffstein | I was just pushing the source to git so I could show you |
| 15:02 | amalloy | *chuckle* |
| 15:02 | choffstein | If you have a spare second … https://github.com/newfoundresearch/clj-doc-test/blob/master/src/leiningen/doc_test.clj |
| 15:03 | choffstein | I am getting "Caused by: java.lang.Exception: Unable to resolve var: p1__566__571__auto__ in this context" -- but I can't seem to find anything wrong with my gemsym statements. |
| 15:06 | amalloy | &`(map #(foo %) bar) |
| 15:06 | lazybot | ⇒ (clojure.core/map (fn* [p1__21711__21712__auto__] (clojure.core/foo p1__21711__21712__auto__)) clojure.core/bar) |
| 15:07 | amalloy | well, that doesn't *look* wrong |
| 15:08 | amalloy | but the error message sounds like it's coming from #(core/doc-test %) |
| 15:08 | amalloy | which, by the way, is just a cumbersome way to write core/doc-test |
| 15:08 | choffstein | I know |
| 15:08 | choffstein | but it wouldn't take core/doc-test since doc-test is a macro |
| 15:09 | choffstein | "Caused by: java.lang.Exception: Can't take value of a macro: #'clj-doc-test.core/doc-test" |
| 15:09 | amalloy | ah |
| 15:09 | amalloy | well then this version won't work either |
| 15:09 | amalloy | &(doc inc) |
| 15:09 | lazybot | ⇒ "([x]); Returns a number one greater than num." |
| 15:09 | amalloy | &(let [f-sym 'inc] (doc f-sym)) |
| 15:09 | lazybot | java.lang.Exception: Unable to resolve var: f-sym in this context |
| 15:10 | choffstein | hmmm |
| 15:11 | amalloy | you need a version of doc-test that is a function taking a var, instead of a macro taking a symbol |
| 15:12 | choffstein | okay. |
| 15:21 | choffstein | I'm having a spot of trouble here. doc-test is supposed to take a symbol (e.g. (doc-test some-func)). If I try to create a function to wrap around doc-test, the var should hold the symbol right? So I can't just call (doc-test some-var) anymore … I would need evaluate some-var in doc-test now? |
| 15:24 | amalloy | you can't just create a function that wraps around a macro |
| 15:24 | choffstein | Well, what if I define the macro within the function -- such that the macro is redefined with each function call? |
| 15:25 | choffstein | so the macro only exists for the life of the function? Would I be able to use the variable bindings of the function then? |
| 15:26 | hiredman | choffstein: code inside a fn is only executed when the fn is run, which is after it is compiled, which is after macroexpand time |
| 15:27 | choffstein | hmm. crap. |
| 15:27 | hiredman | so not only is defining macros in side a fn bad form, it is also almost completely pointless |
| 15:27 | choffstein | it would seem my plan of attack is no good. |
| 15:27 | jorgeb_ | Does anyone know why lein would claim jack-in is not a task? |
| 15:29 | hiredman | jorgeb_: wrong version of swank-clojure |
| 15:29 | kjeldahl | Has anybody used congomongo with a unique index and managed to figure out whether an insert failed or not, due to a duplicate key? |
| 15:29 | hiredman | choffstein: why not just step back and try to solve your problem instead of working the system |
| 15:30 | hiredman | (you seem to be off yak shaving) |
| 15:31 | choffstein | hiredman: Well, I am still pretty new to clojure / lisp -- so sometimes I don't know what is "working the system" or "solving the problem" until I get to a dead end :) |
| 15:31 | jorgeb_ | hiredman: swank-clojure-1.3.2.jar in .lein/plugins |
| 15:31 | choffstein | Be back in a couple minutes. Need to get up and stretch the legs out. |
| 15:31 | hiredman | jorgeb_: and in lib for the project? |
| 15:32 | jorgeb_ | hiredman: ah, not there... |
| 15:33 | kjeldahl | Ah, Google turned up something set-write-concern which looks like it might solve my problem. |
| 15:33 | amalloy1 | choffstein: i seem to have been disconnected. did you figure anything out? |
| 15:35 | bhenry | what resources are there for getting a cljs repl that interacts with the browser? |
| 15:36 | thorwil | hmm, is this the best i can do to return a string if it is in a list, otherwise nil? (not-empty (filter #(= % "a") ["a" "b"])) |
| 15:36 | choffstein | amalloy1: No. I think I am approaching the problem the wrong way. |
| 15:36 | bhenry | &(not-empty (filter irc://irc.freenode.net:6667/#(= % "a") ["a" "b"])) |
| 15:36 | lazybot | java.lang.ClassNotFoundException: irc://irc.freenode.net:6667 |
| 15:37 | choffstein | Basically, I found a library "clj-doc-string" that pretty much boils down to a macro. So you call "(doc-test my-fn)" and it runs some tests based on your doc-string. I thought it would be cool to write a lein plugin that would automatically rip all your function names and automatically call doc-test on them. |
| 15:38 | bhenry | thorwil: what would you want as input from what output? |
| 15:39 | choffstein | So from what I can tell, I have read all the source documents, ripped out the function names -- but now can't figure out a way to call the macro |
| 15:39 | bhenry | other way around* |
| 15:40 | thorwil | bhenry: http://paste.pocoo.org/show/474852/ |
| 15:40 | amalloy | choffstein: you can't wrap a function around a macro |
| 15:40 | choffstein | amalloy: Yeah … I've sort of discovered that :( |
| 15:40 | amalloy | you have to implement the macro's functionality as a function, and then optionally wrap a macro around that |
| 15:40 | bhenry | thorwil do you know about some? |
| 15:41 | amalloy | fwiw, not-empty is silly there. just use seq |
| 15:41 | amalloy | though ##(doc some) is better |
| 15:41 | lazybot | ⇒ "([pred coll]); Returns the first logical true value of (pred x) for any x in coll, else nil. One common idiom is to use a set as pred, for example this will return :fred if :fred is in the sequence, otherwise nil: (some #{:fred} coll)" |
| 15:41 | bhenry | ,(some #(= % "a") ["a" "b" "c"]) |
| 15:41 | clojurebot | true |
| 15:42 | amalloy | &(some #{"a"} ["a" "b" "c"]) |
| 15:42 | lazybot | ⇒ "a" |
| 15:42 | bhenry | ah. amalloy i was looking for that. |
| 15:42 | thorwil | oh, i was aware of some, but no the #{"a"} construct |
| 15:42 | bhenry | i thought some returned the item, but you have to make the item into a set to use as the predicate |
| 15:43 | thorwil | thanks! |
| 16:30 | eipiten-work | question about a namespace conflict I'm getting. |
| 16:30 | gfrlog | ~anyone |
| 16:30 | clojurebot | Please do not ask if anyone uses, knows, is good with, can help you with <some program or library>. Instead, ask your real question and someone will answer if they can help. |
| 16:32 | eipiten-work | I'm require-ing a library that includes a function named get that is conflicting with the core get (I get a warning that the core get is being replaced) |
| 16:33 | gfrlog | you get the warning when merely require-ing rather than use-ing? |
| 16:33 | eipiten-work | yes |
| 16:33 | cemerick | It's just a warning. Unless you're aiming to use clojure.core/get in the namespace as well as your library's get, don't worry about it. |
| 16:33 | gfrlog | the warning references your ns specifically? |
| 16:34 | technomancy | well... it's probably not a good idea to get in the habit of ignoring warnings like that |
| 16:34 | eipiten-work | WARNING: get already refers to: #'clojure.core/get in namespace: clj-facebook-graph.client, being replaced by: #'clj-facebook-graph.client/get |
| 16:34 | technomancy | eipiten-work: (:refer-clojure :exclude [get]) in your ns clause and you can avoid that |
| 16:34 | gfrlog | eipiten-work: and clj-facebook-graph is the library? |
| 16:34 | technomancy | eipiten-work: either that or use :require :as instead of :use |
| 16:35 | eipiten-work | yeah |
| 16:35 | gfrlog | technomancy: cemerick: isn't it possible the lib itself is ignoring the warnings? |
| 16:35 | eipiten-work | unfortunately, I need to call get |
| 16:35 | gfrlog | he said he was using :require |
| 16:35 | cemerick | eipiten-work: care to paste you code somewhere? |
| 16:35 | eipiten-work | later on it pukes with this: |
| 16:35 | technomancy | gfrlog: oh, good point. |
| 16:36 | eipiten-work | java.lang.IllegalStateException: Var clj-facebook-graph.client/get is unbound. (NO_SOURCE_FILE:0) |
| 16:36 | eipiten-work | cemerick: just a sec |
| 16:38 | gfrlog | the library does seem to be causing it: https://github.com/maxweber/clj-facebook-graph/blob/master/src/clj_facebook_graph/client.clj#L112 |
| 16:39 | gfrlog | there is no refer-clojure in that namespace |
| 16:39 | mattmitchell | anyone have nice idiomatic way/suggestion to split a list of numbers into groups, based on a range? Something like (split-by-range 10 [1 2 12 15 20 100]) => [[1 2] [12 15] [20] [100]] ? |
| 16:39 | gfrlog | assuming that's the lib he's using |
| 16:39 | gfrlog | mattmitchell: how would ##(group-by #(quot % 10) [1 2 12 15 20 100]) do? |
| 16:39 | lazybot | ⇒ {0 [1 2], 1 [12 15], 2 [20], 10 [100]} |
| 16:40 | gfrlog | could then call vals on that |
| 16:40 | eipiten-work | yeah - that's it. |
| 16:40 | eipiten-work | I assume it's something that I'm doing on my end, but I've tried to pare down what I've written and am at a loss |
| 16:40 | eipiten-work | cemerick: http://pastebin.com/EPCZnWvB |
| 16:40 | gfrlog | eipiten-work: I say clone the library, add a refer-clojure, and send a pull request |
| 16:41 | mattmitchell | gfrlog: yeah that's pretty good. Thanks! I'll play around with that. |
| 16:41 | gfrlog | mattmitchell: np |
| 16:41 | cemerick | eipiten-work: so you're getting a client/get is unbound error? |
| 16:42 | eipiten-work | yes |
| 16:42 | cemerick | That doesn't make a lot of sense. |
| 16:42 | cemerick | Which version of clojure? |
| 16:42 | eipiten-work | 1.2.1, I think |
| 16:45 | cemerick | eipiten-work: so, you get only one warning, and then a runtime error when your code attempts to call client/get? |
| 16:45 | eipiten-work | yes |
| 16:46 | cemerick | eipiten-work: are other vars from that namespace available? e.g. client/post? |
| 16:46 | hiredman | most likely client/get is declared |
| 16:46 | hiredman | and you are missing a binding |
| 16:46 | cemerick | hiredman: appears to be a simple defn in the source *shrug* |
| 16:47 | gfrlog | eipiten-work: are you using the lib from leiningen? I would have tried it out myself right now but the readme doesn't suggest how to get it. |
| 16:47 | gfrlog | s/right/by/ |
| 16:47 | lazybot | <gfrlog> eipiten-work: are you using the lib from leiningen? I would have tried it out myself by now but the readme doesn't suggest how to get it. |
| 16:48 | eipiten-work | I am using it via leiningen. version 0.2.0 |
| 16:50 | eipiten-work | cemerick: I'm looking at facebook's api to see if there's a post target |
| 16:50 | cemerick | eipiten-work: No, in the same namespace you're aliasing to `client` — there's a `post` fn |
| 16:53 | danlarkin | ,(let [e Exception] (new e)) |
| 16:53 | clojurebot | #<CompilerException java.lang.IllegalArgumentException: Unable to resolve classname: e, compiling:(NO_SOURCE_PATH:0)> |
| 16:53 | danlarkin | what's the right way to do that? |
| 16:53 | eipiten-work | strange. So, I can create a request, but not a post |
| 16:54 | gfrlog | When I try to use the lib from a fresh project/repl, I get the same expected warning, but calling client/get seems to go fine |
| 16:55 | gfrlog | danlarkin: since new is a special form, I'm wondering if that requires interop with the reflection API |
| 16:55 | danlarkin | balls |
| 16:55 | gfrlog | ,(let [e Exception] (.newInstance e)) |
| 16:55 | clojurebot | #<Exception java.lang.Exception> |
| 16:55 | gfrlog | danlarkin: not _too_ painful eh? |
| 16:55 | pjstadig | beat me |
| 16:56 | danlarkin | oh! |
| 16:56 | gfrlog | :) |
| 16:56 | danlarkin | perfect |
| 16:56 | danlarkin | why couldn't they have called it .new! |
| 16:56 | danlarkin | thanks |
| 16:56 | gfrlog | cuz that's syntactically prohibited :P |
| 16:56 | pjstadig | danlarkin: that is non-portable... it will not work in ClojureScript |
| 16:56 | technomancy | because they didn't know smalltalk? |
| 16:56 | pjstadig | there's actually already a .new in java |
| 16:56 | danlarkin | pjstadig: THANKS PAUL |
| 16:56 | pjstadig | as a special form |
| 16:56 | pjstadig | or syntax of somekind |
| 16:56 | technomancy | herp derp; we're going to invent something that's like a static method, but is totally different called a constructor. |
| 16:56 | gfrlog | pjstadig: what does it do? |
| 16:56 | hiredman | .newInstance doesn't work for all constructors |
| 16:57 | pjstadig | i guess special form isn't the right word for java |
| 16:57 | pjstadig | grflog it creates an instance of a non static inner class |
| 16:57 | gfrlog | oh golly inner classes |
| 16:57 | gfrlog | can those be arbitrarily nested? |
| 16:57 | pjstadig | you have to have an instance of the outer class and you do x.new FooBar() |
| 16:58 | gfrlog | ah yes I have seen that |
| 17:01 | pjstadig | http://download.oracle.com/javase/tutorial/java/javaOO/nested.html <-- the very last section |
| 17:03 | hiredman | I imagine those are a java lang notion, and the jvm doesn't care |
| 17:05 | pjstadig | right |
| 17:05 | pjstadig | as i said, there's a .new in java, which is what danlarkin asked |
| 17:06 | cemerick | hrm, I've *never* seen that (outerInstance.new InnerClass()) |
| 17:06 | pjstadig | cemerick: i've only seen it a few times |
| 17:08 | gtrak` | if an api is making you do that, it should have used a factory instead |
| 17:08 | TimMc | That actually tickles some faint memory. |
| 17:09 | gtrak` | i can't see how that's in any way superior to a factory |
| 17:09 | cemerick | That must have been fun for the poor fools writing Java source parsers. |
| 17:09 | pjstadig | gtrak`: you mean this? http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/aop/framework/AbstractSingletonProxyFactoryBean.html |
| 17:09 | amalloy | man, foo.new Bar(). that's something i remember reading once but i've never seen anyone use it |
| 17:10 | gtrak` | pjstadig, no I mean like a GoF static factory pattern factory |
| 17:10 | cemerick | All that trouble just to avoid the implicit Foo.this ctor reference. |
| 17:10 | gtrak` | doesn't have to be static I guess |
| 17:10 | cemerick | s/implicit/explicit |
| 17:10 | lazybot | <cemerick> All that trouble just to avoid the explicit Foo.this ctor reference. |
| 17:10 | pjstadig | gtrak`: i know i was being facetious |
| 17:11 | gtrak` | ya never know :-) |
| 17:11 | amalloy | cemerick: i don't follow that last. you're suggesting something instead of the fooInst.new Bar()? |
| 17:12 | gtrak` | pjstadig, though I suppose if you're in #clojure, you're probably not a spring-zombie :-) |
| 17:12 | pjstadig | hehe |
| 17:12 | pjstadig | safe assumption |
| 17:13 | cemerick | amalloy: The reference to Bar's outer instance of Foo is referred to as Foo.this — I presume the ctors for inner classes have a param implicitly added by the compiler to provide that reference. If Foo.this (or the implicit `this` in general) weren't part of the Java regime, then you could just do new Bar(fooInst), and not mess with the "it's a method....no, it's syntax" bizarreness. |
| 17:13 | amalloy | clojurebot: second is <reply>Motion seconded and carried. Next agenda item. |
| 17:13 | clojurebot | Ik begrijp |
| 17:14 | TimMc | second? |
| 17:14 | clojurebot | Motion seconded and carried. Next agenda item. |
| 17:14 | TimMc | did you mean seconded? |
| 17:14 | gtrak` | seconds are good time units |
| 17:14 | gfrlog | ~second |
| 17:14 | clojurebot | Motion seconded and carried. Next agenda item. |
| 17:14 | amalloy | TimMc: i think i said what i meant, though i'm an idiot re: committee/parliamentary procedure |
| 17:15 | gfrlog | I think it makes sense in present tense |
| 17:15 | gfrlog | as one of those "doing by saying" verbs |
| 17:15 | gfrlog | e.g., "I agree.", "I do", etc. |
| 17:15 | gfrlog | "I say there, ..." |
| 17:15 | TimMc | amalloy: I just think it's unlikely to come up normally in the form clojurebot is going to react to |
| 17:16 | amalloy | TimMc: yeah but now i can force him to second things for me |
| 17:16 | gfrlog | ~negative-first |
| 17:16 | clojurebot | It's greek to me. |
| 17:16 | pjstadig | i have this idea for a programming language where all the keywords are UUIDs |
| 17:16 | TimMc | amalloy: ah |
| 17:16 | hiredman | drewr will use them all |
| 17:17 | pjstadig | so like 'if' would be 'e108d8ad-ce1a-4372-af85-a45e11493408' |
| 17:17 | TimMc | pjstadig: ... |
| 17:17 | TimMc | ~guards |
| 17:17 | clojurebot | SEIZE HIM! |
| 17:17 | hiredman | I like long descriptive identifiers, so you've solved half of that |
| 17:17 | amalloy | holy cow, UUIDs for keywords? is this a great idea or what?? |
| 17:17 | lazybot | amalloy: What are you, crazy? Of course not! |
| 17:17 | pjstadig | they're kinda inconvenient but you could solve that with macros |
| 17:17 | gfrlog | (inc pjstadig) |
| 17:17 | lazybot | ⟹ 1 |
| 17:18 | pjstadig | modules would be easy too |
| 17:18 | hiredman | no no! |
| 17:18 | hiredman | builts should be the base64 encoding of the bytecoded used! |
| 17:18 | hiredman | builtins |
| 17:18 | pjstadig | every function would be named uniquely so there would be no need for namespaces really |
| 17:18 | gfrlog | hiredman: a single bytecode? that'd amount to just a few characters... |
| 17:18 | hiredman | intrinsics indeed |
| 17:19 | hiredman | gfrlog: if is not a single bytecode |
| 17:19 | TimMc | That reminds me of my idea to have every string literal require a unique prefix value so that you could always track down how a string was built, back to the original line. |
| 17:19 | hiredman | clojure's if is not a single bytecode |
| 17:19 | hiredman | and even if it was just a few characters it would represent the op uniquely |
| 17:21 | gtrak` | pjstadig, it really needs an xml schema to go with it |
| 17:21 | TimMc | hiredman: In fact, you could require *every* function to be named in terms of its bytecode. They could then have empty bodies. |
| 17:21 | pjstadig | gtrak`: sure...patches welcome |
| 17:21 | gtrak` | pjstadig, for data corruption |
| 17:22 | gfrlog | TimMc: heck! why not go all the way and just require all code to be written in jvm bytecode! |
| 17:22 | pjstadig | TimMc: yes...that's the next step |
| 17:22 | gfrlog | then the compiler is just the identity function |
| 17:22 | pjstadig | move from UUIDs to cryptographic hashes |
| 17:22 | pjstadig | then a function is just the hash of its code |
| 17:22 | gtrak` | can you put SOAP web services in there, too? |
| 17:22 | pjstadig | totally unique, and no need to keep the code around |
| 17:23 | pjstadig | it would be a breaking change though, so it would have to be for 2.0 |
| 17:23 | hiredman | pjstadig: so in 2035? |
| 17:24 | pjstadig | gtrak`: we'd have our own version of SOAP called DIRT that uses UUIDs to encode the SOAP and XML |
| 17:24 | pjstadig | so '<' would be 'b8a32ffa-41be-4094-a988-309d850ece23' |
| 17:24 | gtrak` | ah... each instruction can be a session key |
| 17:25 | pjstadig | and '>' would be 'dd773367-1153-4436-9fa3-4529698683dd' |
| 17:25 | pjstadig | and each character would have its own UUID like 'x' would be '1e022e6b-1015-42eb-af76-f79c305a9e7f' |
| 17:25 | gfrlog | man those things are so totally universally unique. |
| 17:25 | hiredman | much better than the uuids that, say, ruby generates |
| 17:26 | gfrlog | hiredman: ruby sucks at uuids? |
| 17:26 | sdeobald | Not nearly as much as Oracle. |
| 17:26 | eipiten-work | cemerick, gfrlong, others: thanks for your help. I kept on cutting and it magically started working after a clean-deps-repl cycle. It would have been nice to know what what going on, but... c'est la vie |
| 17:27 | gfrlog | def gen_uuid; "f764942f-e92b-4884-84ce-c6eb51eeb0f0"; end |
| 17:27 | hiredman | gfrlog: some of them differ by a single letter, etc |
| 17:27 | pjstadig | gfrlog: nice |
| 17:27 | gfrlog | pjstadig: I stole it from http://xkcd.com/221/ |
| 17:28 | gfrlog | hiredman: gross; that reminds me of couch's default UUIDs, but those aren't so bad |
| 17:32 | TimMc | pjstadig: I suppose Emacs keybindings would with writing all those UUIDs. |
| 17:32 | pjstadig | absolutely |
| 17:32 | pjstadig | M-/ completion |
| 17:32 | TimMc | help with, even |
| 17:32 | pjstadig | i mean i always say, why do something yourself when you can have an IDE or editor or some other tool do it |
| 17:33 | pjstadig | better off not knowing the details of things, ya' know? |
| 17:33 | gfrlog | when your code consists of nothing but a UUID per line, you have good job security. |
| 17:33 | TimMc | Speaking if which, this is how all programming languages should be named from now on. |
| 17:33 | pjstadig | also good security |
| 17:33 | gfrlog | :D |
| 17:34 | pjstadig | because if your processing user input, what are the odds that a user is going to guess the UUID of your function's name |
| 17:34 | gfrlog | just got my 18876972-5bf9-4d51-af3f-4a7fd2e54fa1Script env set up |
| 17:34 | gfrlog | sanitization is a thing of the past |
| 17:34 | TimMc | gfrlog: No more trouble googling for R functions |
| 17:34 | gfrlog | ha |
| 17:35 | gfrlog | the library names could share the first 8 characters of the language name |
| 17:35 | TimMc | Also, I'm gonna name my kid 76313946-700a-4899-948a-57af06495579 |
| 17:35 | pjstadig | oh man, can you imagine how exact google searches will be for my new language? |
| 17:36 | pjstadig | one search result |
| 17:36 | TimMc | pjstadig: Perhaps most importantly, your functions would only be callable via getters. |
| 17:36 | gfrlog | speaking of which, I wonder if google will return anything for any of the UUID's we've been using yet |
| 17:37 | gfrlog | $google b8a32ffa-41be-4094-a988-309d850ece23 |
| 17:37 | TimMc | 14d2d103-c079-4dc4-950e-3b3a3185a43e.getFunction("35be73d0-2090-4629-9aba-98b4702f18ca").invoke() |
| 17:37 | clojurebot | 27 |
| 17:37 | gfrlog | ...I guess that means 0 hits? |
| 17:37 | TimMc | See? clojurebot can already run my code! |
| 17:37 | TimMc | That's how efficient it is. |
| 17:38 | gfrlog | strange that getFunction and invoke have normal-looking names |
| 17:38 | TimMc | gfrlog: That's transitional syntax. |
| 17:38 | gfrlog | very good |
| 17:38 | TimMc | Anything beyond version e72639b9-aff3-4d13-8319-e74980ee7520 would have strict UUID requirements. |
| 17:39 | pjstadig | yeah way too many non-UUIDs...parens, quotes, dot |
| 17:39 | gfrlog | lol |
| 17:39 | pjstadig | but you have to bootstrap amirite? |
| 17:40 | TimMc | of course |
| 17:40 | gfrlog | I can't wait to see the first book from O'Reilly |
| 17:41 | gfrlog | maybe a centipede would be a good animal? |
| 17:41 | TimMc | It would have an East Asian giant softshell turtle as the cover animal |
| 17:41 | TimMc | being the only individual of its species in existence |
| 17:42 | amalloy | i can already see the language schisming over creative differences like the cover animal |
| 17:42 | TimMc | s/an/the/ |
| 17:42 | gfrlog | okay well 75f8f348-be0e-4fb9-8c51-07316c5473a8, which is the superior of the two languages, will have a centipede. |
| 17:43 | pjstadig | amalloy: that's totally fine...forks aren't a problem since all identifiers are globally unique |
| 17:43 | gfrlog | if we gave buildings UUIDs then mailing addresses would be a lot simpler |
| 17:43 | TimMc | We also need a central site where people can register their function UUIDs (if we're not using the bytecode approach) to *guarantee* uniqueness. |
| 17:44 | TimMc | That way we can be *double* sure. |
| 17:44 | pjstadig | maybe we should just generate a new UUID for a function every time you call it, then we wouldn't have to worry about collisions |
| 17:44 | gfrlog | so instead of calling a function by its name directly, you'd have to call another function that looks up what the name for this call should be |
| 17:45 | pjstadig | brilliant! |
| 17:50 | TimMc | The type system should also be based around the functions. So, a value would have to be typed as 63415ec4-3fc2-4be4-add3-11e5be07cf6c[2] to be passed to 63415ec4-3fc2-4be4-add3-11e5be07cf6c as the 3rd argument. |
| 17:51 | pjstadig | yeah but those brackets and the number '2' should be UUIDs too |
| 17:51 | gfrlog | based around the functions? |
| 17:51 | TimMc | Oh, obviously. |
| 17:52 | TimMc | pjstadig: Actually, I was envisioning a typedef syntax. Anyway, "2" is not a proper UUID... |
| 17:52 | gfrlog | somehow this makes me really want to take a class on komolgarov complexity. |
| 17:53 | gfrlog | s/molga/molgo |
| 17:53 | lazybot | <gfrlog> somehow this makes me really want to take a class on komolgorov complexity. |
| 17:54 | TimMc | channel-sniping |
| 17:54 | TimMc | everyone is reading wikipedia |
| 17:57 | gtrak` | pjstadig, I think I'm going to fork your lang, it's really been getting out of hand |
| 17:57 | gtrak` | but i will strive to stay backwards compatible |
| 17:57 | gfrlog | okay everybody guess what gtrak` will name his fork |
| 17:57 | gfrlog | we'll see if anyone gets it right |
| 17:58 | pjstadig | 604671e6-23b7-4a5b-bf5c-4bda73b24740? |
| 17:58 | gtrak` | haha |
| 17:58 | gfrlog | I guess be68e7e7-e3c9-4d4a-98e5-32d5c846fff5 |
| 17:59 | gtrak` | and it will have a millipede |
| 18:23 | PPPaul | would someone be able to help me out with a simple macro? |
| 18:25 | neotyk | Good morning everyone |
| 18:25 | gfrlog | ~anyone |
| 18:25 | clojurebot | Please do not ask if anyone uses, knows, is good with, can help you with <some program or library>. Instead, ask your real question and someone will answer if they can help. |
| 18:26 | gfrlog | PPPaul: I'd be glad to take a look :) |
| 18:26 | gfrlog | neotyk: hello |
| 18:35 | gfrlog | PPPaul: well I'm leaving in a few minutes, so... |
| 18:36 | PPPaul | ok... i'll post something on gist for you gfrlog |
| 18:37 | neotyk | I'm writing a macro right now as well, please comment https://gist.github.com/1212643 |
| 18:37 | gfrlog | neotyk: I don't think one normally uses the hash# suffix outside of a back-quote |
| 18:39 | gfrlog | neotyk: the purpose of using a macro is just so the fourth argument can be a literal expression instead of a function? |
| 18:40 | PPPaul | https://gist.github.com/1212685 |
| 18:40 | amalloy | more importantly why is this a macro at all? |
| 18:41 | gfrlog | amalloy: the reason I gave would be legitimate, if he really wanted that |
| 18:41 | amalloy | meh. write it as a function and wrap a macro around it |
| 18:41 | gfrlog | amalloy: yeah, that was about to be my advice |
| 18:42 | amalloy | PPPaul: defDBs is confused about the difference between compile time and runtime |
| 18:43 | neotyk | gfrlog: so I can attach flash message to any api response and keep it dry |
| 18:43 | gfrlog | neotyk: you should be able to write it as a function where the 4th argument is a function |
| 18:44 | gfrlog | then if you really want a macro that lets you pass in a body expression, then make a macro that does nothing except turn the 4th arg into a function and call your other function |
| 18:44 | amalloy | PPPaul: see http://stackoverflow.com/q/7313133/625403 for example |
| 18:45 | PPPaul | thanks |
| 18:46 | gfrlog | neotyk: essentially, the macro should only do the task that requires a macro, and defer to a regular function for everything else |
| 18:46 | neotyk | gfrlog: I will put it in fn and call from macro |
| 18:47 | neotyk | thanks gfrlog amalloy |
| 18:47 | gfrlog | neotyk: it's better for function-composability and it means less debugging macros |
| 18:47 | gfrlog | neotyk: you're welcome |
| 18:53 | neotyk | gfrlog: amalloy: body (4th arg) has to be executed in context of binding provided by params# |
| 18:53 | neotyk | how do I rewrite it as fn? |
| 18:55 | neotyk | or that should be no problem |
| 18:56 | amalloy | neotyk: well, you didn't make it especially clear that this was for compojure GET stuff |
| 18:57 | amalloy | but now i hate it even more. just make it a middleware that goes around your GET handler |
| 18:59 | neotyk | when I started writing this macro I felt like yak shaving |
| 18:59 | amalloy | (defn wrap-json-flash [handler] (fn [request] (binding [*my-flash* (:flash request)] (let [ret (handler request)] (assoc ret :flash *my-flash*))))) |
| 19:00 | amalloy | or something similar to that |
| 19:00 | neotyk | amalloy: even simpler, handler should not care about :flash |
| 19:02 | amalloy | at this point we're just reinventing a bad version of sandbar though, right? |
| 19:02 | neotyk | never checked sandbar |
| 19:03 | neotyk | amalloy: so what you are saying is that it is done already? |
| 19:03 | neotyk | let me run to my browser |
| 19:03 | amalloy | i think so. it's still not clear to me exactly what you want, but it has flash stuff |
| 19:06 | technomancy | we should add some more forms to clojure.test/assert-expr |
| 19:06 | technomancy | stuff like (is (re-find [...])) should be able to give more details about the failure |
| 19:07 | technomancy | has something like that been done? |
| 19:07 | technomancy | it's a defmulti, so it could be done in an external lib |
| 19:08 | neotyk | amalloy: what I wanted to get is first sample of sandbar readme :o |
| 19:10 | amalloy | technomancy: lancepantz has been doing some of that recently, for some internal things less generally-useful than regexes |
| 19:12 | technomancy | amalloy: I've also got a defmethod somewhere here that outputs a . for every passing test, for those that miss ruby's test/unit |
| 19:12 | amalloy | (is (matching? {:foo 2 :bar 9} (...))) tells you what keys were missing |
| 19:12 | amalloy | or something in that vein |
| 19:12 | technomancy | hm... and once you throw in pattern matching... |
| 19:39 | jli | anyone know if someone is working on externs support in clojurescript? |
| 19:39 | jli | I thought I'd have a crack at it if not |
| 19:43 | scottj | jli: is that diff from ^:export ? |
| 19:44 | hiredman | externs are a feature of google closure |
| 19:45 | jli | scottj: yeah, it's for asking closure to not rename calls to external functions |
| 20:22 | brehaut | mdeboard: link? |
| 20:23 | jli | the clojure blip.tv channel I think |
| 20:23 | mdeboard | brehaut: http://vimeo.com/27860102 + slides http://www.scribd.com/doc/62571669/Patterns |
| 20:23 | brehaut | thanks |
| 20:23 | jli | oh, vimeo |
| 20:23 | jli | I had the good fortune of seeing it live :) |
| 20:25 | mdeboard | WELL ARENT YOU FANCY |
| 20:25 | jli | YUP |
| 20:25 | mdeboard | agreed |
| 20:28 | scottj | that presentation is really good |
| 20:29 | mdeboard | But seriously, this presentation is really good, especialyl since I'm taking discrete math right now and this ties in nicely |
| 20:30 | technomancy | rebranding is totally easy. see? https://github.com/clojure/clojure/pull/6 |
| 20:30 | mdeboard | surprised to hear prolog mentioned, had no idea it was anything besides a toy :P |
| 20:30 | gfrlog | technomancy: :P |
| 20:31 | scgilardi | surprisingly short diff |
| 20:31 | technomancy | like a week late for april 1st though, what the heck |
| 20:34 | mdeboard | Fun fact, I am a tadpole, so you're correct in doing so |
| 20:34 | technomancy | mdeboard: heh. http://www.penny-arcade.com/comic/2003/11/07/ |
| 20:35 | mdeboard | lol |
| 20:36 | mdeboard | Hm I really don't understand what he's talking about re: open v. closed dispatching. jli or scottj, have any explanation? |
| 20:37 | jli | I think open means extensible outside the library |
| 20:37 | jli | vs. closed, having to add it in the library itself |
| 20:38 | mdeboard | I guess maybe I don't understand dispatching |
| 20:38 | mdeboard | at least how it pertains here |
| 20:38 | mdeboard | not pertains, but what it means in this context |
| 20:38 | mdeboard | I understand context to be, like, a function does a thing depending on what its input is |
| 20:38 | amalloy | i think his point is you can add new types of patterns yourself |
| 20:39 | mdeboard | er |
| 20:39 | mdeboard | understand dispatching to be* |
| 20:39 | hiredman | I think open vs. closed dispatching refers to patter matching vs. predicate dispatch |
| 20:40 | hiredman | pattern matching is closed like a cond, predicate dispatch is open like a multimethod |
| 20:40 | hiredman | if you have a (match [x] ...) there is no way to add a clause to the match outside of editing the code |
| 20:41 | hiredman | where as for predicate dispatch I think the idea is at anytime you can add a clause by saying "oh, and if this set of predicates match, do X" and it adds those predicates to the graph |
| 20:46 | mdeboard | hiredman: Yeah, I've never used a multimethod and haven't really read about them, so tough for me to internalize. Need to crack one of these clj books |
| 20:47 | brehaut | mdeboard: have you encountered the visitor pattern? |
| 20:47 | mdeboard | brehaut: Not afaik |
| 20:47 | brehaut | ok |
| 20:48 | brehaut | well that comparison wont help then |
| 20:48 | mdeboard | lol |
| 20:50 | mdeboard | brehaut: I googled it, and I can see the relation |
| 20:50 | mdeboard | roughly |
| 20:52 | brehaut | multimethods are more general (because they dont have to be dispatched on type) |
| 20:53 | mdeboard | brehaut: I see |
| 20:57 | mdeboard | I don't get the "no need to test a column once a wildcard is encountered in a row |
| 21:00 | jli | I don't remember the specify example - can you remind? |
| 21:42 | srid | how do I recompile changed files in a REPL? |
| 21:42 | brehaut | (use :reload 'namespace) |
| 21:42 | brehaut | or (use :reload-all 'namespace) |
| 23:21 | jli | man, it's hard to debug advanced compiled clojurescript |
| 23:22 | jli | and closure inspector doesn't work on firefox 6 |
| 23:48 | jli | whoo, I think I got externs working |