2012-05-25
| 00:00 | hiredman | but if that proxy is the top leval it might not make a huge difference |
| 00:00 | mikera | it still gets called a few million times..... |
| 00:01 | mikera | because of anti-aliasing, you might have 16 calls per pixel etc. |
| 00:09 | pat_thomas | Opinions: should I go straight into learning Clojure, or learn Common Lisp first and then Clojure? |
| 00:09 | gf3 | pat_thomas: They're very different |
| 00:09 | gf3 | pat_thomas: I vote Clojure because I think you'll have more fun with it |
| 00:09 | mikera | hey hiredman thanks reify works well - speeded up the code a lot!! |
| 00:10 | pat_thomas | gf3: Does that have to mainly with the Java interop? |
| 00:10 | gf3 | pat_thomas: Not necessarily, but it certainly helps |
| 00:10 | mikera | I prefer clojure syntax a lot to Common Lisp |
| 00:10 | mikera | more clean / functional |
| 00:11 | mikera | The Java iterop is a huge bonus for actually getting stuff done |
| 00:11 | pat_thomas | I'm just wondering because I have to learn a fair bit of Common Lisp during one of my college courses next semester, so I figured it might be worth it anyway. |
| 00:11 | mikera | Common Lisp certainly still worth learning! Clojure doesn't (yet( have anything like CLOS |
| 00:12 | mikera | for example |
| 00:12 | pat_thomas | What differentiates CLOS from the ability for Clojure to use Java objects? |
| 00:13 | mikera | Well CLOS is a whole object system. it's dynamic rather than static, very flexible |
| 00:13 | pat_thomas | Interesting |
| 00:13 | mikera | so quite different from Java objects |
| 00:13 | pat_thomas | Right |
| 00:14 | mikera | I think Clojure style though is to avoid OOP entirely |
| 00:14 | brainproxy | pat_thomas: I'm coming to clojure from spending most of my time with javascript and coffeescript over the past couple of years |
| 00:14 | mikera | CLOS will feel more familiar if you know JavaScript well I think |
| 00:15 | pat_thomas | I only know a little JavaScript, but I know a good deal of Java. |
| 00:15 | mikera | though it's not strictly prototype-based |
| 00:15 | brainproxy | pat_thomas: I find cloj quite refreshing, and I'm learning some java stuff along the way to be sure |
| 00:15 | pat_thomas | Ok cool. It sounds like I should tackle both languages. At least the basic stuff should have a decent amount of overlap. |
| 00:16 | mikera | Yeah, all the Lispy parts are basically the same principles |
| 00:16 | mikera | just slightly differnt syntax |
| 00:16 | pat_thomas | That's what it seems like |
| 00:17 | mikera | main differentiators for Clojure are being more functional, great concurrency and exploiting the JVM platform |
| 00:17 | pat_thomas | Yes, which all seem to make it a more compelling language for "useful" software |
| 00:18 | brainproxy | in my experience so far, the toughest thing is figuring out how to get all setup properly, given a lack of background experience with java, jvm, classpath, etc. |
| 00:18 | mikera | yeah the setup is tough. I was lucky because I came from the Java direction.... |
| 00:18 | brainproxy | at some point I'll probably sit down and write a blog post like ... how to get effectively get up to speed with a cloj environment if you don't have java experience |
| 00:19 | mikera | it depends a lot of you want to go the emacs/leiningen route of the eclipse/countercoskwise/maven route |
| 00:19 | brainproxy | true |
| 00:19 | pat_thomas | How would you go about setting up a machine for Clojure? |
| 00:19 | brainproxy | i was already doing nodejs/coffee with emacs |
| 00:19 | mikera | I only really use the later because I do 50% of my work in Java |
| 00:20 | brainproxy | so emacs wasn't new, but swank and inferior lisp ,etc. are new to me |
| 00:20 | mikera | never got the hang of emacs myself... looks awesome once you have a few years experience |
| 00:20 | mikera | but I never found the time to get up the learning curve.... |
| 00:20 | brainproxy | pat_thomas: what os do you dev on? |
| 00:20 | mikera | WIndows |
| 00:20 | pat_thomas | Ubuntu |
| 00:21 | brainproxy | pat_thomas: if you've got java installed, there's not that much to it |
| 00:21 | pat_thomas | Yup, I have the Oracle JDK and JRE installed |
| 00:21 | pat_thomas | And the clojure jar downloaded |
| 00:21 | brainproxy | simple thing would be to get leiningen installed and then start playing with it, invoking repl, learning about project.clj |
| 00:22 | brainproxy | that's probably easier than going at raw clojure jar |
| 00:22 | brainproxy | but ymmv |
| 00:22 | brainproxy | pat_thomas: what editor/ide? |
| 00:22 | pat_thomas | Vim about 80% of the time, Sublime Text a bit, Eclipse for large Java projects |
| 00:24 | brainproxy | gotcha, haven't tried setting up vim to do much with clojure |
| 00:24 | mikera | counterclockwise plugin for Eclipse is very good if you want to do Clojure+Java in the same project |
| 00:24 | brainproxy | mostly been using emacs and swank-clojure |
| 00:24 | gf3 | Yay vim! |
| 00:25 | pat_thomas | mikera: Is that commonly done? |
| 00:25 | brainproxy | gf3: is there a good writeup for how to setup vim to play nicely with clojure, it's repl, etc? |
| 00:26 | gf3 | brainproxy: Yes but they all suck, vim is not good at repls |
| 00:26 | brainproxy | gotcha |
| 00:26 | gf3 | brainproxy: Your best bet is just to pop open a shell in vim and start a clojure repl manually |
| 00:26 | gf3 | Which is unfortunate :( |
| 00:27 | gf3 | brainproxy: It's totally possible to get a fancy Clojure repl session going, I've just personally never been happy with the final solution |
| 00:27 | Raynes | I wish sublime text 2 didn't suck so hard for lisps. |
| 00:28 | pat_thomas | Is it easy to set up Emacs with Clojure? |
| 00:28 | gf3 | I wish Vico didn't suck! |
| 00:29 | gf3 | So much promise |
| 00:29 | brainproxy | pat_thomas: yes, it's pretty easy |
| 00:30 | Raynes | http://sublimetext.userecho.com/topic/98139-clojure-auto-indentation-is-almost-never-correct/ <-- If anyone else is interested in ST2 for Clojure, upvote the shit out of this. |
| 00:31 | Raynes | Paredit and stuff probably wouldn't even be that difficult to add to ST2. The hard part is getting indentation and basic syntax highlighting to even work. |
| 00:32 | gf3 | Raynes: vim-clojure does a REALLY good job of this |
| 00:32 | Raynes | The syntax definition is several thousand lines of XML. |
| 00:33 | mikera | @pat - depends what you are doing. I do a lot of numerical code, so you often want to drop into Java for number crunching |
| 00:33 | mikera | also I'm using a lot of my own Java libraries |
| 00:34 | mikera | so I'm stuck with a mix of Java+Clojure for the moment |
| 00:52 | mtkoan | can I scrape DOM elements with enfocus like enlive can with html/select? |
| 00:52 | mtkoan | or if not, is there a clojurescript lib to do that? |
| 01:04 | lynaghk | mtkoan: you can just drop down to (.querySelector js/document ".my > selector") |
| 01:05 | McMartin | Oh, is js/document the whole doc? |
| 01:06 | lynaghk | mtkoan: also, you can extend the NodeList and HTMLCollection types with ISeqable, which lets you use all of the usual clojure collection fns. See https://github.com/lynaghk/c2/blob/master/src/cljs/c2/dom.cljs#L10 |
| 01:06 | lynaghk | McMartin: js/document is the native document object, yeah. |
| 01:07 | McMartin | So I can just do (.getElementbyId js/document "screen")? |
| 01:07 | McMartin | If I have a <div id="screen"> |
| 01:08 | lynaghk | yep |
| 01:08 | tomoj | mtkoan: (select "selector") ? |
| 01:08 | lynaghk | the "js/" prefix gives you whatever is in the global JS namespace; same as if you typed directly into a JS console. |
| 01:08 | McMartin | nice, thanks |
| 01:08 | McMartin | OK, that makes sense |
| 01:09 | McMartin | nice, thanks |
| 01:09 | McMartin | OK, that makes sense |
| 01:09 | McMartin | (In case you dropped there) |
| 01:09 | lynaghk | McMartin: no problem. Oh yeah. I just opened my laptop. =P |
| 01:09 | McMartin | heh |
| 01:11 | McMartin | Can you set! stuff in those globals like you can Java fields? |
| 01:12 | lynaghk | yep. |
| 01:12 | McMartin | woohoo |
| 01:12 | lynaghk | (set! (.-foo js/my-obj) "val") |
| 01:12 | McMartin | That's pretty much all I need for Phase 3 of my Cunning Master Plan to learn ClojureScript |
| 01:17 | lynaghk | McMartin: do it = ) |
| 01:17 | lynaghk | McMartin: ClojureScript is a blast. |
| 01:18 | McMartin | Phase 1 is just about done |
| 01:18 | McMartin | (Which was to make a program in regular old Clojure) |
| 01:18 | McMartin | Phase 2 got added partway through, to automate it and play with trampolines |
| 01:18 | McMartin | Phase 3 is "make it a webapp" |
| 01:21 | McMartin | But then I got distracted by Python Project Other People Actually Care About =( |
| 01:49 | kushal | can anyone help me with webnoir ? I am trying to understand how to use noir.statues/set-page! to show a static page |
| 02:57 | muhoo | wow, the world of security/authentication/authorization is just crawling with incidental complexity |
| 02:58 | muhoo | what. a. zoo. |
| 03:08 | Dvyjones | Hi. I'm trying to get clojure-jack-in to work in emacs, but it complains that the lein2 command doesn't exist. I have lein2 in ~/bin, and it is executable and in my PATH (I can execute it from a freshly opened shell). Any ideas on how to fix this? |
| 03:08 | Dvyjones | ~/bin is in the exec-path |
| 03:08 | clojurebot | 'Sea, mhuise. |
| 03:08 | Dvyjones | (#emacs told me to try here) |
| 03:11 | amalloy | Dvyjones: sounds like you're using a mac? |
| 03:11 | scottj | Dvyjones: M-: clojure-swank-command |
| 03:11 | Dvyjones | amalloy: Nope, ArchLinux. |
| 03:11 | amalloy | hm |
| 03:11 | Dvyjones | amalloy: My mac worked perfectly with this. |
| 03:12 | amalloy | there's some known issue where on a mac emacs (or at least some builds) ignore your PATH unless you do some special magic |
| 03:12 | Dvyjones | scottj: "echo \"lein2 jack-in %s\" | $SHELL -l" |
| 03:13 | scottj | Dvyjones: I don't have latest clojure-mode.el (lein2 supporting one), but in mine I think that means it didn't find lein in your exec-path |
| 03:13 | amalloy | the readme also suggests for macs (and perhaps it works for you too): On Mac OS X, Emacs sessions launched from the GUI don't always respect your configured $PATH. If Emacs can't find lein, you may need to give it some help. The quickest way is probably to add this elisp to your config:(setenv "PATH" (shell-command-to-string "echo $PATH")) |
| 03:14 | Dvyjones | amalloy: ~/bin is in both $PATH and exec-path |
| 03:14 | Dvyjones | (The expanded version, that is) |
| 03:14 | scottj | Dvyjones: maybe (setq clojure-swank-command "~/bin/lein2 jack-in") |
| 03:15 | scottj | (I don't use jack-in so these are all guesses) |
| 03:16 | Dvyjones | Ah, now I get "jack-in" is not a task, but I can fix that. |
| 03:16 | Dvyjones | scottj: Thanks :) |
| 03:23 | scottj | Dvyjones: what shell are you using? |
| 03:24 | Dvyjones | scottj: zsh |
| 03:25 | scottj | Dvyjones: btw maybe should have been "~/bin/lein2 jack-in %s" |
| 03:26 | Dvyjones | scottj: Yeah, I just changed the lein2 to ~/bin/lein2. Worked perfectly. |
| 03:29 | kral | namaste |
| 03:34 | sophian | Hi all, this is my first time in this chat. I'm having trouble with korma due to some log4j logging issue. Any help on this would be greatly appreciated! |
| 03:41 | pesd | hello |
| 03:42 | pesd | i have a problem |
| 03:42 | pesd | with casting i think |
| 03:42 | pesd | (def line (cast javax.sound.sampled.TargetDataLine (javax.sound.sampled.AudioSystem/getLine dlinfo) |
| 03:42 | pesd | line should then be a targetdataline, right? |
| 03:42 | pesd | but when i do (. line open af) it tells me |
| 03:42 | pesd | error: java.lang.IllegalArgumentException: Can't call public method of non-public class: public void com.sun.media.sound.AbstractDataLine.open(javax.sound.sampled.AudioFormat) throws javax.sound.sampled.LineUnavailableException |
| 03:43 | pesd | if instead of (cast) i use #^ecc. to do the casting it works |
| 03:43 | pesd | but only in emacs, when i compile it it gives the same problem |
| 03:48 | sophian | never mind, I found something that worked off of here: http://wiki.apache.org/logging-log4j/Log4jXmlFormat |
| 04:12 | amalloy | sophian: glad you found a solution. next time, the proper IRC etiquette is to just ask your actual question; otherwise someone interested in helping you has to say "sure! what do you need help with?", which is a hassle especially if they turn out unable to help |
| 04:14 | sophian | amalloy: gotcha. thanks for the tips! |
| 04:18 | _KY_ | Clojure.language.RT not found in my java code, what should I do? |
| 04:18 | _KY_ | clojure.lang.RT not found in my java code, what should I do? |
| 04:18 | _KY_ | Do I need to include some jar file? |
| 04:20 | bobry | why does clojurescript uses such an old version of closure library? any particular reason for this? |
| 04:20 | bobry | _KY_: can you show the code sample, which causes the error? |
| 04:20 | _KY_ | It's in java |
| 04:20 | _KY_ | import clojure.lang.RT; |
| 04:21 | _KY_ | It was working just minutes ago |
| 04:21 | bobry | ah |
| 04:21 | _KY_ | Not it's complaining "package clojure.lang does not exist" |
| 04:21 | _KY_ | *Now |
| 04:24 | _KY_ | Oh, problem solved -- forgot to add jar file to project |
| 06:08 | lypanov | anyone know if i can use promises etc in a noir app? |
| 06:11 | lypanov | i'm guessing that aleph is being used in production but anyone know if noir-async is? |
| 06:13 | bobry | is there a reference for standard clojure protocols somewhere? |
| 06:13 | bobry | can't find it in the docs :/ |
| 06:39 | madsy | Hm, I have some classes that derived from Class. I,e the API requires me to invoke functions with "SomeConcreteType.class". Is that the same as (class SomeConcreteType) in Clojure? |
| 06:41 | clgv | madsy: you can just use the name of the class - it'll be resolved to the clas object |
| 06:48 | lypanov | bobry: i'd read the source. thats usually where i turn eventually :) |
| 06:49 | bobry | lypanov: yup, that's what i'm doing right now :) |
| 06:50 | madsy | clgv: Ah, sweet |
| 07:01 | kilon | what are advantages of clojure over python ? I am still trying to decided between clojure and python for a javascript game i want to make |
| 07:02 | ivan | kilon: persistent data structures, protocols, macros, faster VM available, libraries with less mutable state, compiles to JavaScript |
| 07:03 | ivan | ClojureScript is not exactly Clojure though |
| 07:03 | kilon | sorry i meant clojurescript , you are correct of course and thanks for the points |
| 07:04 | kilon | i am already a python developer and trying to figure out how much i really need the additional feature clojurescript gives to me |
| 07:04 | kilon | of course i am ready to learn and do my own tests |
| 07:04 | kilon | but some personal opinion would not hurt either |
| 07:06 | lucian | i like clojure, as a python developer |
| 07:06 | ivan | ClojureScript produces output that Closure Compiler can compile with its advanced optimizations, which is very cool |
| 07:06 | lucian | i haven't used clojure in anger, so far i've used CoffeeScript for my JS needs |
| 07:07 | ivan | some people used CLJS in the latest Ludum Dare |
| 07:07 | lucian | cljs is indeed even saner than CoffeeScript |
| 07:07 | lucian | but arguably harder to debug |
| 07:11 | lypanov | coffee script is worse to debug. |
| 07:11 | lypanov | repl in cljs makes it sane. |
| 07:11 | lypanov | without chrome and coffee script maps coffee script is hell. |
| 07:11 | ivan | Coffee has a REPL too, no? |
| 07:14 | kilon | http://clojurescriptone.com/index.html |
| 07:15 | kilon | the repl looks cool here |
| 07:17 | kilon | yeah i am not considering coffeescript, i love python, I only consider clojure because i got big respect for it as a language |
| 07:17 | kilon | and lisp in general of course |
| 07:18 | lypanov | ivan: nothing like what i've got with noir-cljs etc |
| 07:21 | kilon | what is noir ? |
| 07:23 | kilon | trying google but does not give me useful result |
| 07:23 | lypanov | noir-cljs == https://github.com/ibdknox/noir-cljs |
| 07:23 | lypanov | noir == http://webnoir.org |
| 07:23 | kilon | lol just fount it too |
| 07:23 | kilon | thanks lynaghk |
| 07:24 | kilon | lypanov: |
| 07:24 | lypanov | kilon: you're very experienced in js already? |
| 07:24 | kilon | lypanov: nope i have not coded a line of js yet, but i am learning it |
| 07:24 | lypanov | then start with JS |
| 07:24 | lypanov | i made that mistake in past. its a bad one. |
| 07:25 | lypanov | use clojure/python backend. but JS for frontend. |
| 07:25 | kilon | learning js wont be a problem , but yes i will learn it |
| 07:25 | lypanov | JS has great advantage that there is an insane amount of code you can reuse. |
| 07:25 | kilon | well python has pyjamas which compiles python to javascript like clojurescript compiles to js too |
| 07:25 | kilon | it also allows to mix js code with python |
| 07:25 | lypanov | last time i checked out pajamas it was basically useless :) |
| 07:26 | lypanov | py* |
| 07:26 | kilon | i assume the same happens for javascript |
| 07:26 | kilon | sorry i mean clojurscript |
| 07:26 | lypanov | yup. |
| 07:26 | kilon | useless, really ? it comes always highly recomended |
| 07:26 | lypanov | but then much tighter javascript than pyjamas can produce. |
| 07:26 | kilon | and found several blog post stating that is the second coming of christ :D |
| 07:27 | lypanov | i'd still heavily suggest that you start with raw javascript. |
| 07:27 | kilon | by tigher you mean ? readable js code ? |
| 07:27 | lypanov | lots of the work you'll be doing is integrating libraries. |
| 07:27 | lypanov | tighter meaning it generates very compact js code. |
| 07:28 | kilon | can clojurescript produce human readable javascript coder like parenscript does for common lisp ? |
| 07:28 | lypanov | kilon: yes. but i wouldn't suggest reading it :) |
| 07:28 | kilon | yes that is indeed a big advantage |
| 07:29 | kilon | i will learn javascript , dont worry , knowning js was in my plans before finding clojure |
| 07:29 | kilon | i love learning programming languages |
| 07:30 | dan_b | if you feel like spending money, Douglas Crockford's "Javascript the good parts" is imo the canonical book |
| 07:30 | Borkdude | I started using Clojure because I had to use Java more and Clojure makes me use Java and think about Java more ;) |
| 07:30 | kilon | yeah i hear that A LOT |
| 07:31 | kilon | "good parts" that is |
| 07:31 | Borkdude | maybe the same for Javascript… I think the language itself is not so big… it's the way you build apps, DOM manipulation etc that comes with it |
| 07:31 | Borkdude | and I think using clojurescript a lot and reading examples will give me some sense of it |
| 07:32 | Borkdude | learning Java or javascript on their own would be too boring for me, clojure is what adds the extra fun to it |
| 07:33 | kilon | the problem with javascript vs java is that js is actually a very good functional language |
| 07:33 | kilon | at least that is the vibe i am getting from reviewers |
| 07:34 | ivan | not really. there isn't even a repr() or proper equality |
| 07:34 | dnolen | kilon: JS is a good functional language? |
| 07:34 | Borkdude | kilon: yes, but it's also a language in which you can make a mess :) |
| 07:34 | ivan | Array sort sorts numbers wrong, etc. it's a minefield. |
| 07:34 | dnolen | kilon: I've been using it for 7 years, it's not a "good" functional language. |
| 07:34 | kilon | well i have read many blog claiming js as the new lisp |
| 07:34 | dnolen | kilon: it's an interesting hybrid. |
| 07:34 | dnolen | kilon: snort |
| 07:35 | kilon | i am no way claiming anything |
| 07:35 | Borkdude | I saw the video from Crockford on javascript and the brain |
| 07:36 | Borkdude | it made me interested in the book javascript the good parts |
| 07:36 | kilon | i dont think any language can stop your from writting bad code |
| 07:36 | kilon | at least i have not meet on yet |
| 07:37 | Borkdude | kilon: I agree |
| 07:37 | Borkdude | kilon: but some languages more than others ;) |
| 07:37 | dan_b | I found that java quite effectively stopped me fron writing *any code at all* |
| 07:37 | kilon | the only thing slowing me down in learning clojure, because i will learn it sooner or later, is how needed really is a functional language |
| 07:37 | dan_b | good or bad |
| 07:38 | kilon | its the same question i asked myself when studying common lisp |
| 07:38 | lypanov | it depends on what you're doing. and what your background is. |
| 07:38 | Iceland_jack | kilon: Common Lisp is hardly functional... |
| 07:38 | Borkdude | kilon: what is the need of good abstractions |
| 07:38 | lypanov | just like c++. cl can be functional. :)) |
| 07:39 | dan_b | map/reduce/filter/etc is stuff that every programmer should know |
| 07:39 | kilon | that is , that i am not doing anything complicated as coding, nor i have huge project to work on, i rarely exceed few thousands lines |
| 07:39 | Borkdude | Common Lisp is as functional as Javascript or Python, is that safe to say? (they all lack immutability to the degree that most "pure" FP-languages have it) |
| 07:40 | dan_b | it's less unwieldy than javascript. python I at all |
| 07:40 | kilon | python is really bad at being functional i am afraid :D |
| 07:40 | dan_b | s/I/I don't know/ |
| 07:40 | kilon | I love python but truth must be told :D |
| 07:41 | Iceland_jack | Not being functional isn't inherently bad kilon |
| 07:42 | Borkdude | ah well… https://twitter.com/fakerichhickey/status/200963481565011969 |
| 07:42 | kilon | Iceland_jack: good point |
| 07:42 | Iceland_jack | > Metro is an internal code name for a typography-based design language created by Microsoft, originally for use in Windows Phone 7. Early uses of the Metro principles began as early as Microsoft Encarta 95 and MSN 2.0,[1][2] and later evolved into Windows Media Center and Zune.[3] Later the principles of Metro were included in Windows Phone, Microsoft's website, the Xbox 360 dashboard update, and Windows 8.[4] A key design principle of Metro is bette |
| 07:42 | Iceland_jack | hell.. |
| 07:43 | Iceland_jack | *sorry, wrong channel |
| 07:44 | kilon | i really dont like haskell syntax, too perly for my taste |
| 07:44 | kilon | though i dont dispute it might be an awesome language |
| 07:44 | Borkdude | kilon: I really hate the string concatenation I see sometimes all over the place in haskell code |
| 07:44 | ivan | the epidemic of tab/space mixing in the Java community makes it really easy to tell which code is new |
| 07:45 | lypanov | obviously not using intellij then. |
| 07:45 | lypanov | (death to tabs!) |
| 07:45 | kilon | thanks for the guidness people |
| 07:45 | Borkdude | for example: https://gist.github.com/2787518 |
| 07:46 | ivan | IntelliJ might actually be part of the problem by not detecting tab/space per-file |
| 07:47 | kilon | will certainly give a try to clojure and clojurescript during this weekend |
| 07:47 | kilon | see you all later |
| 07:48 | lypanov | ivan: my java experience was that eclipse users are unable to use a consistent coding style. never worked in a project without a coding style so the entire concept of "not detecting" is a bit crazy to me. |
| 07:48 | ivan | well, sometimes there's multiple styles or imported code in a project |
| 07:49 | lypanov | anyone around using slimv rather than vimclojure? trying to figure out if i should switch. |
| 07:55 | lypanov | dnolen: delimited continuations hurt my brain. i'm looking for a way to execute part of a clojurescript function on one page, and then the second half on another after doing a redirect. is this at all related to delimited continuations or am i on completely the wrong track? |
| 07:57 | dnolen | lypanov: I don't see how that can work *client side* across page refreshes. |
| 07:58 | lucian | why not just explicitly split it in two functions? |
| 07:59 | lypanov | dnolen: its for a selenium like testing framework i'm writing using phantomjs. currently my code is in js and has an array of functions, each function executed on each page navigation. a cookie saves the end state. i'd like to write a macro which abstracts away "awaiting ajax response" and "redirect after clicking link". |
| 07:59 | lypanov | maybe best just just have the macro produce the same array of functions. |
| 08:00 | dnolen | lypanov: oh so on the same page - then yes probably. |
| 08:00 | dnolen | lypanov: I'm waiting for clojure-tco to evolve a bit more, should be a good foundation for that kind of thing eventually. |
| 08:01 | lypanov | dnolen: in the case of "redirected after clicking line", not on same page. delimited is more about keeping external state but doesn't allow recreation of that state? |
| 08:02 | lypanov | sorry i mean internal state. |
| 08:02 | tomoj | since you have the phantomjs context across the redirect, why would you need continuations? |
| 08:03 | tomoj | I mean, suppose the redirect returns a 404 - you want the test to fail, not hang, so there has to be some code in the phantomjs context (not the page context) which says "did we redirect successfully?" |
| 08:03 | tomoj | right? |
| 08:03 | clojurebot | Equal Rights for Functional Objects is Baker's paper on equality and why it's impossible to define sensible equality in the presence of mutable data structures: http://www.pipeline.com/~hbaker1/ObjectIdentity.html |
| 08:03 | lypanov | i'm keeping state external to phantomjs so i can use feasibly the same tests in selenium to do IE screenshotting also. |
| 08:04 | lypanov | yes there is fallback code but its more of a "nothing happens for 10 seconds" like system. |
| 08:06 | dnolen | lypanov: delimited continuation means you need some place to store the fn, I don't know how that can work across page refreshes. |
| 08:06 | tomoj | I'd wildly guess that it would be easier to write a testing api that supports both selenium and phantom, similar to capybara |
| 08:07 | tomoj | which would be strictly more powerful I think, making e.g. "this url should 404" tests easy |
| 08:07 | lypanov | tomoj: "this should be 404" tests don't belong in this testing framework though. |
| 08:07 | lypanov | this is a "run a bunch of js then take a screenshot" system. |
| 08:08 | lypanov | doing it because i'm pretty much sole maintainer of app and i have to start refactoring css or i'll go crazy |
| 08:08 | Borkdude | has anyone in here read "Collective Intelligence" (and translated some of the examples to Clojure?) |
| 08:08 | tomoj | s/"this url should 404"/"they should redirect and then I'll take a screenshot"/ say |
| 08:08 | tomoj | or whatever |
| 08:10 | lypanov | tomoj: at the moment i'm up to a few hundred lines of code and i'm happier playing with this than i've ever been before with one of the random testing "frameworks". part of that is that my tests are written in jquery that runs entirely in page context meaning i can write the tests in web inspector and copy and paste them into my test.js files . only thing i want now is to remove the excessive indent that callbacks are causing. |
| 08:11 | lypanov | tomoj: but based on conversation with dnolen now understand that i can't (de)marshal delimeted continuation state. |
| 08:11 | tomoj | oh, you have it working across redirects already? |
| 08:11 | lypanov | delimited* |
| 08:11 | lypanov | yes. everything works. |
| 08:11 | lypanov | just that i now want to port to clojurescript and get pretty code. |
| 08:13 | lypanov | tomoj: (background its a rails app with clojurescript). have a web app shell which dumps screenshots to screen using web socket notifications. dumps all logging from the js running in phantomjs and logs all requests to app. |
| 08:14 | lypanov | tomoj: working on SPI (single page interface) and i was going crazy getting back/forward handling Right. |
| 08:26 | _KY_ | How do I use Integer/parseInt? |
| 08:27 | ivan | ,(Integer/parseInt "34") |
| 08:27 | clojurebot | 34 |
| 08:35 | lypanov | w00t. found example i can extend: https://bitbucket.org/puffnfresh/clojurescript-timeout-cps/src/1a8065fbf65a/src/puffnfresh/timeout.clj |
| 08:39 | bderooms | is there absolutely no way to wait inside an agent for an other agent? |
| 08:45 | beffbernard | bderooms: use a promise? |
| 08:45 | _KY_ | Lol I spelt Integer as Interger |
| 08:47 | bderooms | beffbernard: mm checking it |
| 08:58 | bobry | why doesn't clojure script support :require without :as? what if I just want to make sure the module is loaded? |
| 09:00 | dnolen | bobry: oversight |
| 09:00 | dnolen | bobry: http://dev.clojure.org/jira/browse/CLJS-272 |
| 09:02 | bobry | dnolen: cool :) |
| 09:09 | lypanov | nice. wanted that too. |
| 09:10 | Borkdude | using sqlite requires no native driver/code, the sqlite jdbc driver is enough, am I right? |
| 09:15 | bobry | is it possible to make a relation between to protocols, for instance when methods of protocol Foo can be implemented in terms of Bar? |
| 09:16 | bobry | so I don't have to manually extend my type with Bar, if it already implements Foo |
| 09:18 | dnolen | bobry: nope |
| 09:18 | dnolen | bobry: the closest you're going to get is to build some component abstraction - extend-type default allows for delegation. |
| 09:20 | bobry | i see, thanks |
| 09:32 | almostobsolete | I'm trying out clojure following the steps for compojure here: https://github.com/weavejester/compojure/wiki/Getting-Started but when I visit the server it starts (with "lein ring server") I get a NullPointerException and stack trace sent to the browser |
| 09:32 | bobry | okay, one more silly question -- why is '(. "foo" (symbol "substring") 1 2)' not a valid dot form, while '(. "foo" substring 1 2)' is? |
| 09:32 | almostobsolete | Is there a common mistake that this might be? |
| 09:33 | ivan | please pastebin the stacktrace |
| 09:34 | almostobsolete | Here's the stacktracke: https://gist.github.com/2788187 |
| 09:35 | almostobsolete | *stacktrace |
| 09:37 | antares_ | bobry: because forms are evaluated at compile time and (symbol …) is a function call that happens at runtime |
| 09:38 | ivan | almostobsolete: maybe http://stackoverflow.com/questions/7222376/clojure-compojure-hiccup-nullpointerexception |
| 09:38 | ivan | (no idea really, that stack trace is not great) |
| 09:39 | almostobsolete | it's all just copy pasted from the tutorial, no changes |
| 09:42 | S11001001 | bobry: because substring is the symbol substring, whereas (symbol "substring") is the list of two elements, whose first element is the symbol symbol, and second element is the string "substring" |
| 09:43 | almostobsolete | Does anyone know some starting points for playing with clojure web apps that work? |
| 09:43 | almostobsolete | I think maybe the tutorial for compojure has bit-rotted :( |
| 09:44 | the-kenny | almostobsolete: Start at the compojure Github page :) |
| 09:44 | the-kenny | Noir is hot too |
| 09:44 | pandeiro | almostobsolete: i would start with cljs-template or clojurescript-one |
| 09:44 | S11001001 | or what antares_ said |
| 09:45 | pandeiro | cljs-template sets up a noir/cljs env and one uses a more barebones compojure |
| 09:45 | almostobsolete | I'll take a look at those, the thing I was following before was: https://github.com/weavejester/compojure/wiki/Getting-Started |
| 09:46 | almostobsolete | I'll try noir |
| 09:46 | pandeiro | almostobsolete: if you're trying to grok how things work you can go straight to ring, too |
| 09:47 | pandeiro | i started with noir and worked backwards, maybe not how i would do it if i started over |
| 09:48 | pandeiro | ie 1) build hello world with ring, 2) build hello /route with compojure 3) build hello to-do-list with noir 4) ... 5) profit! |
| 09:48 | almostobsolete | pandeiro: that makes a lot of sense |
| 09:50 | pandeiro | almostobsolete: yeah so ignore my earlier recommendation to go straight to cljs-template and its 6 million moving parts |
| 09:51 | pandeiro | though it will build you a fully functional webapp that you can then modify... maybe that would be good for step 3 |
| 09:51 | pandeiro | although in the spirit of the 'learn x the hard way', perhaps it's better to actually have to type all the boilerplate out? |
| 09:52 | the-kenny | almostobsolete: If you want to try compojure a second time, tell us the stacktrace :) |
| 09:52 | the-kenny | Just a NPE isn't helpful |
| 09:53 | ivan | <almostobsolete> Here's the stacktracke: https://gist.github.com/2788187 |
| 09:54 | the-kenny | whoops |
| 10:00 | almostobsolete | the-kenny: Still trying, although at pandeiro's suggestion I'm now trying to just use ring |
| 10:00 | almostobsolete | Which also isn't working for me, but trying a few things before asking :) |
| 10:02 | almostobsolete | Ok, very simple question. I have a project with a core.clj at the top of my core.clj I have (ns almost.core) I start the repl with "lein repl" and type (use 'almost.core) |
| 10:02 | almostobsolete | at this point I expected to be able to use the functions I defined with defn in core.clj |
| 10:03 | almostobsolete | but instead I get: |
| 10:03 | almostobsolete | CompilerException java.lang.RuntimeException: Unable to resolve symbol: handler in this context, compiling:(NO_SOURCE_PATH:0) |
| 10:03 | almostobsolete | Am I being stupid? :) |
| 10:03 | jedmtnman | almostobsolete: your namespace needs to match the file structure |
| 10:03 | jedmtnman | with your current namespace, its looking for your core inside the almost dir |
| 10:04 | almostobsolete | I'm running lein repl from within the "almost" dir. It also contains a project.clj |
| 10:04 | pandeiro | almost > project.clj | src > almost > core.clj ? |
| 10:04 | almostobsolete | I get no error when I type the (use 'almost.core) line |
| 10:05 | almostobsolete | almost > project.clj |
| 10:05 | jedmtnman | almostobsolete: no thats setup right |
| 10:05 | almostobsolete | is core.clj meant to be like the index file? |
| 10:06 | jedmtnman | almostobsolete: no, its more like main |
| 10:06 | pandeiro | almostobsolete: i think it has no special meaning though, could be anything |
| 10:06 | Chousuke | core is just the convention for the main namespace |
| 10:06 | Chousuke | mimicking clojure.core |
| 10:08 | almostobsolete | so how would I use stuff from core in the repl? tutorials seem to imply that you just use (use 'almost.core) but that's not working for me |
| 10:10 | almostobsolete | Here's what I'm doing right now: https://gist.github.com/2788329 |
| 10:11 | almostobsolete | aha! lein created a src/almost/core.clj file! That's what it must be loaded. I'd just created a core.clj in the root project directory |
| 10:12 | pandeiro | almostobsolete: that's what i was trying to show with my one-dimensional dir tree above :) |
| 10:12 | almostobsolete | pandeiro: Makes sense now, thanks :) |
| 10:37 | pandeiro | is there a way to use the cljs browser repl while using something like python's simple http server for serving just static resources? |
| 10:37 | _KY_ | How to turn (a b c d) into ((1 a) (2 b) (3 c) (4 d))? |
| 10:37 | S11001001 | _KY_: map list |
| 10:38 | pandeiro | when i do it the browser console complains about a robots.txt which is just bizarre, there's no robots.txt anywhere in the code or the directory |
| 10:38 | gfredericks | &(map list (rest (range)) '(a b c d)) |
| 10:38 | lazybot | ⇒ ((1 a) (2 b) (3 c) (4 d)) |
| 10:38 | _KY_ | Interesting... |
| 10:39 | _KY_ | That "map" has 3 arguments? |
| 10:39 | gfredericks | yep |
| 10:39 | gfredericks | &(doc map) |
| 10:39 | lazybot | ⇒ "([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 coll, until any one of the colls is exhauste... https://www.refheap.com/paste/2869 |
| 10:39 | clgv | map has arbitrary many arguments ;) |
| 10:39 | pandeiro | ,(map-indexed #(conj % %2) '(a b c d)) |
| 10:39 | _KY_ | Interesting...=) |
| 10:39 | clojurebot | #<ExecutionException java.util.concurrent.ExecutionException: java.lang.ClassCastException: java.lang.Long cannot be cast to clojure.lang.IPersistentCollection> |
| 10:39 | pandeiro | oops think i wanted cons there? |
| 10:39 | pandeiro | ,(map-indexed #(cons % %2) '(a b c d)) |
| 10:40 | clojurebot | #<ExecutionException java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: Don't know how to create ISeq from: clojure.lang.Symbol> |
| 10:40 | pandeiro | heh ok nevermind me |
| 10:40 | clgv | ,(map-indexed #(list % %2) '(a b c d)) |
| 10:40 | clojurebot | ((0 a) (1 b) (2 c) (3 d)) |
| 10:40 | gfredericks | &(doc map-indexed) |
| 10:40 | lazybot | ⇒ "([f coll]); Returns a lazy sequence consisting of the result of applying f to 0 and the first item of coll, followed by applying f to 1 and the second item in coll, etc, until coll is exhausted. Thus function f should accept 2 arguments, index and item." |
| 10:40 | Borkdude | Macros: "so let it be written, so let it be done" |
| 10:41 | lypanov | pandeiro: i don't know much about cljs browser repl but locally i use noir-cljs with rails. |
| 10:41 | lypanov | pandeiro: sharing same hostname by using haproxy to send requests to the right backend. |
| 10:41 | S11001001 | ,(apply map #(map inc %) (repeat (repeat 42))) |
| 10:41 | clojurebot | Execution Timed Out |
| 10:41 | S11001001 | hmm |
| 10:44 | Chiron_ | Hi all. any idea why I'm getting this error? Exception namespace 'pallet.crate.jenkins' not found after loading '/pallet/crate/jenkins' clojure.core/load-one (core.clj:5203) |
| 10:45 | Chiron_ | (require ['pallet.crate.jenkins :as 'jenkins] :reload) |
| 10:45 | pandeiro | lypanov: do you use just the noir.cljs.repl ns then? |
| 10:46 | Chiron_ | clojurebo: marry me! |
| 10:46 | Chiron_ | clojurebot: marry me! |
| 10:46 | clojurebot | No entiendo |
| 10:47 | almostobsolete | I'm using clojure slime in emacs. I've made changes to my project.clj, how do I reload it? |
| 10:48 | pandeiro | almostobsolete: good question |
| 10:48 | lypanov | pandeiro: i don't use a repl in general. prefer using watcher, instant mode, and having a simple function which is executed every time code is updated. |
| 10:48 | pandeiro | i usually just do clojure-jack-in again |
| 10:48 | pandeiro | lypanov: ah ok i am specifically wanting to use the repl to debug some stuff |
| 10:49 | pandeiro | seems really weird that something is requesting a robots.txt parameter |
| 10:49 | almostobsolete | Cool, seems reasonable as I guess you don't change project.clj often |
| 10:49 | pandeiro | http://localhost:9000/?xpc=%7B%22cn%22%3A%22eebCOEdFWC%22%2C%22tp%22%3Anull%2C%22ppu%22%3A%22http%3A%2F%2Fpang%3A8000%2Frobots.txt%22%2C%22lpu%22%3A%22http%3A%2F%2Flocalhost%3A9000%2Frobots.txt%22%7D |
| 10:49 | almostobsolete | How about when I change any other clj file in the project? Can I just slime-compile-and-load? |
| 10:50 | pandeiro | almostobsolete: probably, i usually use slime-eval-buffer or something like that and then retype (use 'whatever) |
| 10:50 | pandeiro | maybe slime-compile-and-load combines those |
| 10:50 | pandeiro | ? |
| 10:50 | lypanov | pandeiro: whats xpc= |
| 10:50 | almostobsolete | Awesome! It does seem to work :) |
| 10:50 | llasram | almostobsolete, pandeiro: yah, you can. C-c C-k go! |
| 10:50 | lypanov | isn't that just the repl talking to the server it expects to find but finding instead your python app? |
| 10:52 | lypanov | pandeiro: i'm a evil printf debugger. mah momma born me dat way. |
| 10:53 | _KY_ | ,(Integer/parseInt "123") |
| 10:53 | clojurebot | 123 |
| 10:54 | _KY_ | But I get "class not found error" |
| 10:56 | _KY_ | Is that from Java? |
| 10:57 | _KY_ | I'm compiling it in Java |
| 10:58 | S11001001 | what |
| 11:00 | _KY_ | I got a run time exception when using Integer/parseInt |
| 11:01 | _KY_ | I exported my program as a jar |
| 11:01 | lypanov | are you using leiningen. |
| 11:03 | _KY_ | Well, I use lein uberjar to create the jar, yes |
| 11:03 | _KY_ | Then the jar is used by my java program |
| 11:03 | _KY_ | When building the java program it complains, and then it won't run |
| 11:04 | KaiSforza | Just curious, what distro and DE do most of you guys use? |
| 11:04 | S11001001 | _KY_: so, clearly, you aren't making the class |
| 11:04 | almostobsolete | I'm using wrap-resource like this (def handler (wrap-resource hello-handler "public")) but where will it actually server the files from? |
| 11:04 | _KY_ | clojure-1.3.0 |
| 11:05 | almostobsolete | I've created a resources/public/test.txt file (from the project root, or maybe it should be in src?) |
| 11:05 | _KY_ | S11001001: what class? the program works alright if I don't use Integer/parseInt |
| 11:05 | _KY_ | The error is specifically about that function |
| 11:06 | S11001001 | _KY_: "class not found"? |
| 11:06 | uvtc | KaiSforza, I don't know what most people use, but I'm using Ubuntu and Emacs 24. |
| 11:06 | _KY_ | "java.lang.ClassNotFoundException: Integer/parseInt" |
| 11:07 | S11001001 | _KY_: did you put an extra dot |
| 11:07 | _KY_ | There is no dot, right? |
| 11:07 | S11001001 | yes |
| 11:07 | _KY_ | ,(Integer/parseInt "123") |
| 11:07 | clojurebot | 123 |
| 11:08 | _KY_ | i called it using map, so it was #Integer/parseInt |
| 11:08 | S11001001 | no. |
| 11:08 | S11001001 | Integer/parseInt is not a function |
| 11:08 | gfredericks | is there a memfn for static functions? |
| 11:08 | _KY_ | Ohh |
| 11:08 | gfredericks | static methods* |
| 11:08 | S11001001 | IIRC memfn is deprecated |
| 11:08 | gfredericks | wat |
| 11:09 | Borkdude | https://gist.github.com/2764700 |
| 11:09 | gfredericks | &(doc memfn) |
| 11:09 | lazybot | ⇒ "Macro ([name & args]); Expands into code that creates a fn that expects to be passed an object and any args and calls the named instance method on the object passing the args. Use when you want to treat a Java method as a first-class fn." |
| 11:09 | S11001001 | _KY_: please paste actual code+actual error in future; it helps to more quickly see what is wrong |
| 11:10 | S11001001 | there was a clojure.contrib.import-static that aliased reflective calls to clojure functions, but I guess it wasn't so great, and now it's gone |
| 11:13 | TimMc | S11001001: I'm maintaining a non-contrib version of that now. |
| 11:13 | gfredericks | S11001001: how do you know it's deprecated? |
| 11:14 | KaiSforza | uvtc: thanks. I'm in the process of making an archlinux based distributino specific to clojure programming (with all the stuff pre-configured/installed), and I was looking for some input on what to include in the live dvd. |
| 11:14 | terom | ,(map #(Integer/parseInt %) ["123", "456"]) ; maybe use something like this, _KY_ |
| 11:14 | clojurebot | (123 456) |
| 11:14 | TimMc | S11001001: https://github.com/baznex/imports |
| 11:15 | pbostrom | KaiSforza: Mint/vim |
| 11:15 | _KY_ | Yeah I did and is resolved... |
| 11:16 | S11001001 | gfredericks: I don't remember; I heard it somewhere. Perhaps they were wrong |
| 11:16 | S11001001 | making me wrong |
| 11:17 | S11001001 | ah, baznex |
| 11:17 | TimMc | :-) |
| 11:23 | goodiebo_ | I'm working on moving a library from clojure 1.2 to 1.3. In the 1.2 tests, we use binding to test certain vars that, under normal circumstances are not dynamic. Is there anything besides adding :dynamic to these vars that I can do? |
| 11:23 | goodiebo_ | ^^ the :dynamic stuff is really only for testing |
| 11:24 | gfredericks | goodiebo_: if global binding is acceptable (like it testing) you can use with-redefs |
| 11:24 | gfredericks | in testing* |
| 11:24 | goodiebo_ | gfredericks: interesting, i'll look that up thanks |
| 11:29 | goodiebo_ | org.clojars.racoon/string sounds interesting, but what the heck is it?! |
| 11:31 | bderooms | is there any vectorlike sturcture which gets O(1) access? Vectors seem to implement log32N access, but they are still the slowest part in my program. I tried java vectors but they appear even slower (because of the java interop overhead?) |
| 11:33 | raek | bderooms: java array lists should have O(1) random access. do you get warnings with *warn-on-reflection*? |
| 11:33 | bderooms | no |
| 11:33 | pandeiro | lypanov: it shouldn't be finding the python server if it's sending a request to localhost:9000 right? |
| 11:34 | bderooms | I just changed from a map to a java array, and the procedure that does it now takes 50% of the time in my program (accodring to visualvm) |
| 11:34 | raek | without reflection there shouldn't be any interop overhead at all |
| 11:35 | bderooms | maybe that's not the problem |
| 11:35 | bderooms | I'll search on |
| 11:40 | timvisher_ | how do i extend io/copy to a new type? |
| 11:40 | timvisher_ | do-copy is private |
| 11:40 | lypanov | pandeiro: sorry really no idea never used the browser repl :) |
| 11:41 | pandeiro | lypanov: no worries, thans |
| 11:43 | goodiebo_ | gfredericks: what is the difference between binding and with-redefs? |
| 11:46 | raek | goodiebo_: with-redefs mutates the root binding of the var and binding adds a thread local binding to a var. |
| 11:46 | goodiebo_ | raek: wow very cool |
| 11:47 | goodiebo_ | raek: i'm not clear on how with-redefs-fn would be used though? |
| 11:48 | gfredericks | with-redefs-fn is probably just the function version of with-redefs, which is a macro |
| 11:48 | gfredericks | no need to look at it probably |
| 11:48 | stobix | hi! Is there any way to get clj or lein to load faster? (Precompiling or whatnot) |
| 11:48 | goodiebo_ | gfredericks: ahh i see |
| 11:50 | timvisher_ | stobix: read https://github.com/technomancy/leiningen/blob/master/doc/FAQ.md (search for `speed up launch`) |
| 11:51 | pandeiro | stobix: http://icylisper.in/jark/index.html |
| 11:52 | raek | stobix: you can speed up the launch of a project by using ahead of time compilation, but that will get in the way when doing interactive development in a repl |
| 11:52 | raek | so it's better to only use AOT compilation when the application is finished |
| 11:53 | raek | (get in the way = cause redefined functions to not be recognized some times) |
| 12:00 | nDuff | Hmm. |
| 12:04 | nDuff | I have a macro in which I'm trying to refer to a local var, but macroexpand keeps going to clojure.core/my-var rather my-ns/my-var. |
| 12:05 | Bronsa | can you post the macro? |
| 12:07 | S11001001 | nDuff: is my-ns/my-var defined later than the macro? |
| 12:07 | nDuff | S11001001: no -- and this happens when I define the macro in the REPL, with my-var interactively available. |
| 12:10 | nDuff | Bronsa, https://gist.github.com/153833c315cdde8361f4 |
| 12:11 | Bronsa | nDuff try using (deref) instead of @ |
| 12:12 | nDuff | Bronsa: I have. |
| 12:12 | gfredericks | ,(read-string "@foo") |
| 12:12 | clojurebot | (clojure.core/deref foo) |
| 12:12 | gfredericks | ^ should be equivalent |
| 12:13 | S11001001 | nDuff: #'auth-context gives? |
| 12:13 | nDuff | #'com.indeed.jira-releng-plugin.jira/auth-context |
| 12:13 | gfredericks | nDuff: when I run that in a repl I get user/auth-context |
| 12:13 | Bronsa | yeah me too |
| 12:14 | gfredericks | nDuff: what is your *ns*? |
| 12:14 | gfredericks | (at the repl) |
| 12:14 | nDuff | #<Namespace com.indeed.jira-releng-plugin.jira> |
| 12:14 | gfredericks | *clojure-version*? |
| 12:14 | nDuff | {:major 1, :minor 4, :incremental 0, :qualifier nil} |
| 12:15 | gfredericks | same on 1.4 |
| 12:16 | gfredericks | nDuff: what if you just entery `auth-context at the repl? |
| 12:16 | gfredericks | ,`auth-context |
| 12:16 | clojurebot | sandbox/auth-context |
| 12:16 | nDuff | clojure.core/auth-context |
| 12:16 | gfredericks | okay well at least you extracted the problem from your macro |
| 12:17 | gfredericks | how about `foo-context? |
| 12:17 | nDuff | clojure.core/foo-context |
| 12:17 | Bronsa | that's weird |
| 12:17 | S11001001 | huh, maybe your repl's reader is nsing to clojure.core |
| 12:17 | S11001001 | #=(do *ns*) gives? |
| 12:18 | nDuff | #<RuntimeException java.lang.RuntimeException: Can't resolve do> |
| 12:18 | S11001001 | ick |
| 12:18 | S11001001 | #=(list *ns*) |
| 12:18 | gfredericks | #=(str *ns*) |
| 12:18 | S11001001 | whatever |
| 12:18 | gfredericks | bork bork bork |
| 12:19 | nDuff | #=(str *ns*) => "*ns*" |
| 12:19 | gfredericks | woah. |
| 12:19 | TimMc | S11001001: *ns* is a symbol in that context |
| 12:19 | Bronsa | use symbol. |
| 12:19 | gfredericks | oh right |
| 12:19 | gfredericks | it did that for me too |
| 12:19 | TimMc | #=() only "enlivens" the call position |
| 12:19 | Bronsa | #=(symbol *ns*) |
| 12:20 | nDuff | #=(symbol *ns*) ;=> #<Namespace com.indeed.jira-releng-plugin.jira> |
| 12:20 | S11001001 | that wouldn't do what we want |
| 12:20 | gfredericks | wait that's the same as just evaling *ns* then |
| 12:20 | Bronsa | oh, right |
| 12:20 | mabes | is the clojurescriptone video still a good starting point for clojurescript? |
| 12:20 | mabes | video/project |
| 12:21 | dnolen | mabes: not really I would just start with lein-cljsbuild |
| 12:21 | Bronsa | #=(vector *ns*) then? |
| 12:21 | S11001001 | (def print-ns-dammit [] (str *ns*)) #=(com.indeed.jira-releng-plugin.jira/print-ns-dammit) |
| 12:21 | mabes | dnolen: cool, thanks for the direction |
| 12:22 | S11001001 | defn, whichever |
| 12:22 | gfredericks | S11001001: that seems to work for me |
| 12:25 | jsabeaudry | I would like to show the version of my application in it, is there a way for me to access the version that is in my project file (the source isnt there as I'm running from uberjar) |
| 12:25 | hiredman | nDuff: euroclojure |
| 12:25 | nDuff | ahhh. |
| 12:26 | gfredericks | clojeuro? cleujure? |
| 12:26 | Bronsa | lol@cleujure |
| 12:26 | gfredericks | there must be some way to take advantage of the fact that all the letters in "euro" are in "clojure" |
| 12:26 | jsabeaudry | clojur€ |
| 12:28 | jsabeaudry | I am getting used to it or is lein 1.7 much faster than 1.6 at uberjaring? |
| 12:29 | nDuff | Well -- AOT-compiling the same code, rather than getting it in through the REPL, all works well |
| 12:29 | nDuff | so in the interim, I'll just be *grumble* restarting whenever I have to change the macro *grumble*. |
| 12:31 | gfredericks | clojure = euro + clj |
| 12:35 | technoma` | jsabeaudry: 1.7.1 fixed a bug regarding AOT |
| 12:35 | technoma` | gfredericks: bind: blown |
| 12:36 | jsabeaudry | technoma`, I'm loving it |
| 12:37 | uvtc | ♫ "We are the three clojeuros, we are the three clo o ....... jeuros." ♫ |
| 12:37 | technoma` | jsabeaudry: wait till you try lein2 |
| 12:39 | eggsby | dang gfredericks |
| 12:39 | TimMc | jsabeaudry: clojur€ is definitely a win |
| 12:39 | abedra | ^^ |
| 12:40 | TEttinger | technoma`, have you seen lein bin ? it is so clever! |
| 12:40 | uvtc | TimMc, Clojur€script uses Clo$ure? |
| 12:41 | TEttinger | https://github.com/Raynes/lein-bin |
| 12:41 | technoma` | TEttinger: is that the one that makes jars that you can run with ./foo.jar? |
| 12:42 | TimMc | concatenation? |
| 12:42 | TEttinger | it makes .bat files that are also shell scripts :D |
| 12:42 | TEttinger | TimMc, yes |
| 12:42 | technoma` | that's wild |
| 12:42 | TEttinger | it is a very neat trick, it seems to work cross-platform with one file, without appearing to be a jar |
| 12:43 | TEttinger | and without requiring all your users to have double-click-to-open-a-jar set up correctly |
| 12:47 | fil512 | what's the best way to change the values in a map? |
| 12:47 | uvtc | The lein wiki plug-ins page doesn't list lein-bin as being up-to-date for lein2, and neither does the lein-bin readme, however, it looks like Raynes updated it back in March for lein2. |
| 12:47 | TEttinger | uvtc, correct, and it does work with lein2 -- i have confirmed it |
| 12:48 | sjl | can anyone tell me why the group-by in this Incanter call breaks? http://paste.stevelosh.com/4fbfb702a3ec1b0007000000?clojure |
| 12:48 | technoma` | I think I probably added the compatibility markers to the readme after march |
| 12:48 | technoma` | if you could update that it would be super |
| 12:48 | sjl | without the :group-by it plots fine, with :group-by it crashes with: Don't know how to create ISeq from: java.lang.Long |
| 12:49 | TEttinger | fil512, is the map a ref or atom or something? |
| 12:49 | TEttinger | or just a {:foo "bar"} |
| 12:49 | jedmtnman | anyone mind helping a noob with sort-by? |
| 12:49 | fil512 | string key, map value |
| 12:50 | fil512 | {"foo" |
| 12:50 | fil512 | {"foo" { |
| 12:50 | fil512 | arrgggg |
| 12:50 | fil512 | {"foo" {"a" 1}} |
| 12:50 | TEttinger | http://clojuredocs.org/clojure_core/clojure.core/update-in |
| 12:50 | timvisher_ | jedmtnman: doesn't hurt to ask ;) |
| 12:50 | S11001001 | nDuff: your repl doesn't support file reloading? |
| 12:51 | fil512 | this laptop keyboard has a poorly placed enter key... :-/ |
| 12:51 | jedmtnman | timvisher_: is it best just to post a pastie? |
| 12:51 | eggsby | TIL you can provide an 'else' in map lookups.. |
| 12:51 | timvisher_ | probably if the code is extended |
| 12:51 | S11001001 | nDuff: iff your file was source-loaded, (require :reload 'module.name) should work |
| 12:51 | eggsby | ({:a 1 :b 2} :c 3) :o |
| 12:53 | fil512 | thanks TEtt that is exactly what I was looking for! |
| 12:53 | TEttinger | np fil512 |
| 12:53 | TEttinger | I haven't used update-in yet in my noob code... i probably should... |
| 12:54 | nDuff | S11001001: my repl is into a remote system with no access to my local files. |
| 12:54 | TEttinger | jedmtnman: http://clojuredocs.org/clojure_core/clojure.core/sort-by |
| 12:54 | TEttinger | examples there help any, jedmtnman? |
| 12:54 | jedmtnman | TEttinger: yes, was reading there |
| 12:54 | fil512 | so for update-in, how can I modify a bunch of nested values at once? |
| 12:54 | jedmtnman | http://pastie.org/3967068 i'm doing something wrong and its probably my misunderstanding of comp |
| 12:55 | jedmtnman | I want to sort the services based on the values of scores |
| 12:55 | TEttinger | comp is for function composition, right? |
| 12:55 | jedmtnman | TEttinger: right |
| 12:56 | timvisher_ | jedmtnman: it's actually returning the right thing there |
| 12:56 | timvisher_ | you're asking it to sort-by the value for the key in scores, and it sorts ascending |
| 12:56 | jedmtnman | timvisher_: ahhh right *hand palm* |
| 12:57 | jedmtnman | timvisher_: I just had it in my head higher it first, bc thats the way I want them |
| 12:57 | TimMc | facepalm, surely |
| 12:57 | TEttinger | heh |
| 12:57 | jedmtnman | TimMc: lol |
| 12:57 | jedmtnman | right |
| 12:57 | TEttinger | rev should reverse it, right? |
| 12:58 | TEttinger | oh, http://clojuredocs.org/clojure_core/clojure.core/reverse |
| 12:58 | jedmtnman | TEttinger: yes |
| 12:58 | TEttinger | oh, rseq may be preferable |
| 12:59 | jedmtnman | diff being lazy eval? |
| 12:59 | jedmtnman | TEttinger: ^ |
| 12:59 | timvisher_ | ,jedmtnman: you don't need to do reverse, you can just give sort a comparator |
| 12:59 | clojurebot | #<ExecutionException java.util.concurrent.ExecutionException: java.lang.RuntimeException: Invalid token: jedmtnman:> |
| 12:59 | Bronsa | lol |
| 12:59 | timvisher_ | lol |
| 13:00 | timvisher_ | ,(sort-by identity [3 2 1]) |
| 13:00 | clojurebot | (1 2 3) |
| 13:00 | timvisher_ | ,(sort-by identity < [3 2 1]) |
| 13:00 | clojurebot | (1 2 3) |
| 13:00 | timvisher_ | ,(sort-by identity > [3 2 1]) |
| 13:00 | clojurebot | (3 2 1) |
| 13:00 | timvisher_ | so for you you'd just need to add the `>` function into the mix |
| 13:00 | jedmtnman | timvisher_: cool |
| 13:02 | jedmtnman | the gt lt operators are the only prefix operators that always trip me up (that i know). |
| 13:03 | timvisher_ | same for me |
| 13:03 | TEttinger | same here... |
| 13:04 | AeroNotix | gt/lt prefix is the most natural for me o.O |
| 13:04 | jedmtnman | gfredericks: come up with a mnemonic for us |
| 13:05 | AeroNotix | ,how are you? |
| 13:05 | clojurebot | #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: how in this context, compiling:(NO_SOURCE_PATH:0)> |
| 13:05 | AeroNotix | ,do you need fixing? |
| 13:05 | clojurebot | #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: do in this context, compiling:(NO_SOURCE_PATH:0)> |
| 13:05 | AeroNotix | ,lol |
| 13:05 | clojurebot | #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: lol in this context, compiling:(NO_SOURCE_PATH:0)> |
| 13:05 | timvisher_ | AeroNotix: now don't start that again ;) |
| 13:05 | Bronsa | well < is smaller at the head an bigger at the tail :) |
| 13:05 | jedmtnman | Brona: good call. |
| 13:06 | TEttinger | ,(sort-by (comp {"abc123" 2.34, "def567" 1.23} :id) > [{:name "foo", :id "def567"} {:name "bar", :id "abc123"}]) |
| 13:06 | clojurebot | ({:name "bar", :id "abc123"} {:name "foo", :id "def567"}) |
| 13:06 | AeroNotix | So, I've been away from Clojure for a little while. Are there any web-frameworks for it? |
| 13:06 | AeroNotix | ,(+ 1 1) |
| 13:06 | clojurebot | 2 |
| 13:06 | AeroNotix | oh man, awesome |
| 13:06 | timvisher_ | AeroNotix: seems like Noir is the new hotness |
| 13:06 | TEttinger | AeroNotix, Noir looks great |
| 13:06 | timvisher_ | i'm using compojure still |
| 13:06 | AeroNotix | I'll check it out, thanks :) |
| 13:06 | TEttinger | ClojureScript One looks neat if you want to use CLJS |
| 13:06 | S11001001 | web framework, who wants that? every web project needs a custom HTTP server |
| 13:07 | S11001001 | optimized for that app |
| 13:07 | AeroNotix | S11001001: You forgot about Node.js |
| 13:07 | TEttinger | right, every framework needs node.js, of course :P |
| 13:07 | AeroNotix | TEttinger: Also, ZERO front-end work without Twitter's bootstrap |
| 13:08 | TEttinger | AeroNotix, what does that? |
| 13:08 | TEttinger | CLJS1? |
| 13:08 | AeroNotix | TEttinger: sorry, what? |
| 13:08 | TEttinger | i was confused by the conversation |
| 13:09 | AeroNotix | No problem :) |
| 13:09 | TEttinger | the irony was getting all-encompassing |
| 13:09 | TEttinger | i can't tell if i am being ironically ironic sometimes |
| 13:09 | AeroNotix | :D |
| 13:10 | TEttinger | anyway, Noir is cool. very little code to get up and running, built on solid tools... |
| 13:10 | TEttinger | http://www.webnoir.org/ |
| 13:10 | timvisher_ | beware of the hairball! ;) |
| 13:11 | AeroNotix | TEttinger: thanks :) |
| 13:11 | AeroNotix | is lein/noir in the arch repo? |
| 13:11 | espeed | I defined a method named "get" on a record/protocol which pulls data from the DB, but "get" is a built-in method for records so evidently this causes errors about it already being defined -- is defining method names like "get" on records generally a bad idea? |
| 13:11 | TEttinger | AeroNotix, also, use lein2 |
| 13:12 | AeroNotix | TEttinger: thanks again |
| 13:12 | TEttinger | AeroNotix, I don't think it needs to be in arch |
| 13:12 | TEttinger | it is a tiny script... |
| 13:12 | AeroNotix | TEttinger: I've not looked into what it actually is |
| 13:12 | AeroNotix | TEttinger: It's been about 6 months since I touched Clojure |
| 13:12 | technoma` | I think the version in arch is messed up |
| 13:12 | timvisher_ | espeed: it's certainly not 'simple' |
| 13:12 | TEttinger | https://github.com/technomancy/leiningen/tree/preview/bin |
| 13:12 | AeroNotix | ty |
| 13:12 | technoma` | I've had a few bug reports regarding it |
| 13:13 | timvisher_ | if you wanted to do that you might be better off with deftype and/or pulling apart the defrecord machinery and doing it by hand |
| 13:13 | timvisher_ | or you could just pull the data from the db using a function that returns maps and then use the `map->RecordName` function to turn it into your record |
| 13:15 | espeed | timvisher: thanks -- I'll rework my design |
| 13:20 | gfredericks | &(for [n (range 7)] (-> n (repeat "`") ((partial apply str)) (str "foo") read-string flatten count)) |
| 13:20 | lazybot | ⇒ (0 2 8 41 221 1202 6548) |
| 13:24 | stobix | thanks, timvisher_, pandeiro, raek . I'll look into it! |
| 13:31 | stobix | Another question: I don't think I grasp #( fully. Why isn't (#(%) 3) and ((fn [x] x) 3) doing the same thing? |
| 13:32 | gtrak | stobix, fixed it for you: ((fn [x] (x))) |
| 13:32 | timvisher_ | #(%) is trying to call `3` as a function |
| 13:32 | timvisher_ | ,(#(identity %) 3) |
| 13:32 | clojurebot | 3 |
| 13:32 | timvisher_ | may be what you were thinking of |
| 13:33 | Bronsa | ,(identity 3) |
| 13:33 | clojurebot | 3 |
| 13:33 | stobix | ah |
| 13:34 | timvisher_ | is there something like macroexpand-1 for reader macros? |
| 13:34 | hiredman | read-string? |
| 13:34 | clojurebot | read-string |is| as unsafe as eval unless *read-eval* is bound to false. |
| 13:35 | timvisher_ | (read-string #(%)) |
| 13:35 | hiredman | clojurebot: fi fi fi |
| 13:35 | timvisher_ | ,(read-string "#(%)") |
| 13:35 | clojurebot | (fn* [p1__84#] (p1__84#)) |
| 13:35 | clojurebot | fib is reply See #haskell |
| 13:35 | timvisher_ | stobix: see above |
| 13:36 | raek | or quote |
| 13:37 | raek | ,'#(%) |
| 13:37 | clojurebot | (fn* [p1__109#] (p1__109#)) |
| 13:37 | timvisher_ | raek: ah hah |
| 13:39 | Bronsa | ,`s# |
| 13:39 | clojurebot | s__136__auto__ |
| 13:39 | stobix | timvisher_: thanks. |
| 13:42 | stobix | ,(let [ŭ #(+ 2 %)] (ŭ 3)) |
| 13:42 | clojurebot | 5 |
| 13:46 | TimMc | Clo𝑗ure |
| 13:46 | TimMc | Hrm, no font support here. |
| 13:47 | raek | I think that character was damaged during encoding in your irc client |
| 13:47 | raek | I received a "U+FFFD REPLACEMENT CHARACTER" |
| 13:48 | raek | CloƷure |
| 13:48 | timvisher_ | i saw the character fine |
| 13:48 | timvisher_ | i think, at least ;) |
| 13:48 | raek | which one was it? |
| 13:48 | TimMc | U+1D459 I think |
| 13:49 | TimMc | raek: I fixed my terminal's Unicode settings. |
| 13:49 | raek | ah, I'm not sure my setup handles echaracters in the astral plane correctly |
| 13:49 | TimMc | I had "export LC_ALL=C" from a past project. |
| 13:50 | raek | "U+1D459 MATHEMATICAL ITALIC SMALL L"? |
| 13:50 | TimMc | U+1D457 then |
| 13:50 | TimMc | J |
| 13:50 | raek | I see :) |
| 13:50 | raek | hrm, I thought I had non-BMP chars working |
| 13:51 | TimMc | It works in my browser and text editor. |
| 13:51 | raek | how am I supposed to chat in gothic now? |
| 13:51 | TimMc | Oh man, full-width chars do weird things in fixed-width displays... |
| 13:53 | jayunit100 | arg irc was acting funny. |
| 13:53 | TimMc | Hello! |
| 13:53 | Bronsa | lol |
| 13:53 | jayunit100 | anyone use relative paths with compojure routing ? |
| 13:56 | timvisher_ | anyone have a fix for paredit-forward such that `"this is a test|"` -> `"this is a test"|`? |
| 13:59 | timvisher_ | also, is there a standard way to fix the clojure-jack-in repl such that it knows about things like [] and {}? |
| 14:02 | TimMc | timvisher_: C-f :-P |
| 14:02 | zamaterian | jayunit100, i do |
| 14:02 | timvisher_ | TimMc: lol |
| 14:02 | timvisher_ | not exactly what I had in mind |
| 14:02 | timvisher_ | but yes |
| 14:02 | timvisher_ | also " |
| 14:03 | timvisher_ | but more importantly, the behavior is pretty unexpected |
| 14:04 | timvisher_ | ("foo bar baz|") (lots) (of) (other) (sexps) (with) (no) (quotes) ("whee!") -> ("foo bar baz") (lots) (of) (other) (sexps) (with) (no) (quotes) ("|whee!") |
| 14:06 | TimMc | ohai |
| 14:15 | tdrgabi1 | I'm having trouble structuring my noir (first) website. do you guys have an example I could check? |
| 14:15 | tdrgabi1 | where to put css, how to read it, how you guys generate html etc |
| 14:15 | eggsby | how can I get lein to recognize my /usr/local/lib ? https://www.refheap.com/paste/2873 |
| 14:15 | gf3 | tdrgabi1: https://github.com/ibdknox/webnoir |
| 14:16 | austinh | tdrgabi1: https://github.com/ibdknox/noir-example |
| 14:16 | tdrgabi1 | thank you |
| 14:16 | technomancy | eggsby: :native-path describes where to extract native dependencies found in jars, not where to look for existing native code |
| 14:17 | technomancy | eggsby: have you tried the zeromq native jars? |
| 14:17 | eggsby | I haven't, I was able to fix it by updating my ld_library_path though, apparently it wasn't listed there... |
| 14:17 | eggsby | now I'm troubleshooting another issue :) |
| 14:18 | technomancy | eggsby: making everyone who wants to run your code put stuff in /usr/local/lib is annoying =\ |
| 14:18 | technomancy | better if you can make your project self-contained |
| 14:19 | eggsby | technomancy: the native zmq deps in clojars, I just add those to my lein deps? |
| 14:19 | eggsby | and then they don't need to install jzmq or what? |
| 14:19 | technomancy | eggsby: that's how it's supposed to work. haven't tried it for myself. |
| 14:19 | eggsby | I agree that having to build jzmq locally, include the built jar in lib/ and ensure they have the files in /usr/local/lib/ is a bit of a headache, I just wasn't aware of a better way |
| 14:20 | technomancy | eggsby: it's not very well-documented unfortunately |
| 14:20 | technomancy | mostly because not very many projects need it |
| 14:21 | eggsby | ya |
| 14:22 | eggsby | I'm wondering whether it's worth it to use zmq for pubsub style communication or if I should just use redis |
| 14:22 | technomancy | amqp is another option |
| 14:22 | eggsby | rabbitmq or something? |
| 14:22 | technomancy | yeah, it's a lot more common on the JVM |
| 14:22 | eggsby | hm |
| 14:23 | jayunit100 | zamaterian: Hey ! |
| 14:24 | jayunit100 | Im wondering, how can we retain relative path logic when using forwarding in compojure |
| 14:26 | amalloy | (add-hook 'slime-repl-mode-hook (lambda () (setq lisp-indent-function 'clojure-indent-function) (set-syntax-table clojure-mode-syntax-table))) ;; timvisher_ |
| 14:28 | samedhi | I am attempting to do a clojurescript build using lein-cljsbuild, I am getting a "ERROR: JSC_MISSING_PROVIDE_ERROR. required "jayq.util" namespace never provided at ..." |
| 14:29 | samedhi | How do I add the jayq.util namespace? |
| 14:32 | lynaghk | samedhi: you have jayq in your projects.clj? |
| 14:32 | timvisher_ | amalloy: lot's of promise but that doesn't seem to do the trick |
| 14:33 | amalloy | check with technomancy about the implications of jack-in bootstrapping its own version of slime, then, i guess; it works for me with a manually installed slime |
| 14:34 | timvisher_ | gotcha |
| 14:34 | timvisher_ | thanks for the pointer |
| 14:35 | timvisher_ | do you fix the repl technomancy? |
| 14:36 | technomancy | no |
| 14:37 | technomancy | I never write more than a line directly into a repl buffer, so indentation has never been an issue |
| 14:37 | timvisher_ | is your workflow more typing into a buffer and then evaling forms? |
| 14:37 | technomancy | yeah, anything complicated goes in the file |
| 14:38 | timvisher_ | interesting |
| 14:38 | timvisher_ | that's not a bad idea, i suppose |
| 14:39 | amalloy | plus, in a source buffer you can use paredit without every dang RET sending your form to the repl |
| 14:39 | amalloy | having to remember to type C-j instead is a hassle |
| 14:40 | hiredman | I just want paredit to work in the source blocks in org-mode |
| 14:41 | samedhi | lynaghk, actually, no. I am using shorleave, which uses noir. Is there any good way to find out who is requiring jayq? |
| 14:42 | samedhi | I figure if somebody needs create, they would have put it in their requirements, but I will try just adding it myself. |
| 14:42 | timvisher_ | amalloy: true, what I'm really looking for is the motion commands |
| 14:43 | timvisher_ | i rarely type something that I really need over more than a line or two at the repl |
| 14:43 | uvtc | samedhi, `lein deps :tree` |
| 14:43 | timvisher_ | but moving around inside whatever i'm typing is annoying |
| 14:43 | amalloy | which ones? C-M-f and C-M-b work already, and if you're working on small forms i can't see up/down being that useful |
| 14:43 | timvisher_ | those specifically |
| 14:44 | timvisher_ | for me the don't know how to skip over [ and { |
| 14:44 | timvisher_ | yay! |
| 14:44 | uvtc | samedhi, oh wait. cljs? n/m then --- that may've been gibberish. |
| 14:45 | amalloy | timvisher_: did you restart your repl after adding the hook i suggested? it wouldn't apply retroactively |
| 14:45 | timvisher_ | https://gist.github.com/2789754 |
| 14:45 | timvisher_ | well, there were a number of problems with what i was doing |
| 14:45 | timvisher_ | i don't load slime out of the gate |
| 14:45 | timvisher_ | nor paredit |
| 14:45 | timvisher_ | so i needed to put it in an eval-after-load form |
| 14:46 | timvisher_ | and then the lambdas were screwed up somehow |
| 14:46 | timvisher_ | so I needed to pull those out |
| 14:46 | timvisher_ | but now it seems to work fine |
| 14:46 | timvisher_ | although i think that fix-paredit-repl should no longer be necessary |
| 14:46 | amalloy | right, it shouldn't |
| 14:46 | timvisher_ | considiring your clojure-mode-syntax-table dealio |
| 14:47 | amalloy | also, why three lambdas in a hook, instead of a lambda with three expressions? |
| 14:47 | timvisher_ | feels better to me? ;) |
| 14:47 | lynaghk | samedhi: I don't know how ready Paul is for people to be using shorleave. If it's using jayq, it should be defined somewhere in shoarleave's project.clj (or one of its dependencies) and picked up automatically |
| 14:48 | Borkdude | banseljaj: maybe you should add a rationale of the linux distro and why Lambda… Leinux was way cooler ;) |
| 14:49 | banseljaj | Borkdude: I lost access to the list here. I'll update it now. :D |
| 14:49 | samedhi | lynaghk, uvtc, fair enough, here is my tree http://pastebin.com/qf0SME1U . |
| 14:50 | samedhi | I was actually fine with fetch (ibdknox) but using cljs-noir seemed to always downgrade me to clojure 1.3.0, and datomic is 1.4.0 |
| 14:50 | Borkdude | banseljaj: one of the reasons I would like to have it, is for example, I don't want to download eclipse, install plugins etc, only to try it out, a preconfigured beast is much easier |
| 14:51 | lynaghk | samedhi: yeah. I forked fetch last time I used it to drop the noir dependency |
| 14:51 | Borkdude | banseljaj: actually I use eclipse, but for netbeans / intellij with preconfigured plugins and projects to try out, would be nice |
| 14:52 | Borkdude | banseljaj: also a preconfigured clojurescript setup is much needed I think for people to just try it out |
| 14:52 | samedhi | lynaghk, and so you are just running directly on ring/compojure or something? |
| 14:52 | lynaghk | samedhi: yep. |
| 14:53 | timvisher_ | and then there were 3 https://gist.github.com/2789801 amalloy, technomancy |
| 14:53 | lynaghk | it's not something I want to support though, which is why I never made a library out of it. I'll probably use shoarleave next time it comes up. |
| 14:53 | samedhi | lynaghk, and without noir you can use 1.4.0? |
| 14:54 | banseljaj | Borkdude: Crap. I forgot about clojure script. :( |
| 14:54 | banseljaj | Well, so far the distro is about 1GB |
| 14:54 | uvtc | Borkdude, banseljaj : I was just thinking the other day, "What's the easiest way to draw simple lines & shapes with Clojure?". Then I guessed, "oh, probably using Clojurescript and html5 canvas" or somesuch, but I haven't yet tried that. Not sure how much installing/configuring it would take to set up something like that. |
| 14:54 | technomancy | uvtc: I'd say quil is definitely the easiest to get started with |
| 14:55 | banseljaj | uvtc: Once almbda is up, 0 minutes. :D |
| 14:55 | kilon_alios | quil ? |
| 14:55 | uvtc | https://github.com/quil/quil I presume. |
| 14:55 | lynaghk | samedhi: there is nothing noir specific in fetch, so yeah. It's easy to split out and just throw the same functionality together on compojure (or whatever) |
| 14:55 | timvisher_ | most definitely + 1 for quil |
| 14:55 | technomancy | banseljaj: the suggestion to use nix on the mailing list is interesting; it would allow you to offer something that people could use with their current OS rather than switching to something completely new. |
| 14:56 | lynaghk | uvtc: Use C2 to generate SVG in Clojure or ClojureScript =) |
| 14:56 | dnolen | uvtc: quil is probably the easiest, though working w/ canvas from CLJS not particularly challenging. |
| 14:56 | uvtc | technomancy, thanks for the heads-up about quil. |
| 14:56 | uvtc | lynaghk, C2? |
| 14:57 | kilon_alios | processing is the most pythonic non pythonic library out there :D |
| 14:57 | lynaghk | Same idea as D3.js: http://keminglabs.com/c2/ |
| 14:57 | banseljaj | technomancy: Yeah. That's the point. |
| 14:57 | kilon_alios | thanks for the quil suggestion |
| 14:57 | lynaghk | uvtc: it's for working with the DOM, though. Depends if you prefer drawing with that scenegraph or rolling your own and using canvas. |
| 14:57 | dnolen | kilon_alios: pythonic? :) Processing is one giant regex conversion to a Java program. |
| 14:57 | uvtc | Oh my. Here's an idea for anyone who wants it: set up a site that allows users to run clojure code to draw their own picutures. |
| 14:58 | technomancy | banseljaj: nix already has eclipse, leiningen, and a bunch of what you want. if you can get the rest in there and create a metapackage that pulls in the basics, that would be very slick |
| 14:58 | kilon_alios | dnolen: it is, i did not know that, i only have glanced through the library, it looked to me very simple |
| 14:58 | banseljaj | technomancy: I have that, but making that metapackage for every distro would be too much time |
| 14:58 | uvtc | like http://tryclj.com/ , but with support for simple drawing. |
| 14:59 | technomancy | banseljaj: well that's the thing, if you make a nix metapackage it should work everywhere nix is supported |
| 14:59 | banseljaj | I'm thinking I can use Lambda as a general Programmer's linux. With flavors for Haskel, Ruby, Python etc. |
| 14:59 | banseljaj | technomancy: Hmm. |
| 14:59 | uvtc | lynaghk, I'm talking about a box with x,y coords in it that lets you draw lines and shapes using those x,y coordinates. |
| 14:59 | technomancy | banseljaj: nix co-exists with existing OS-level package managers |
| 14:59 | technomancy | so people don't have to ditch what they're used to |
| 15:00 | Borkdude | banseljaj: technomancy who came up with this idea anyway? does that person get any credits? :P http://clojure-log.n01se.net/date/2012-05-20.html#13:32c |
| 15:00 | banseljaj | And bash scripts can set up all the environments. |
| 15:00 | lynaghk | uvtc: if you want to draw from clojurescript immediately, you can use Himera to mess with the browser window it's running in |
| 15:01 | banseljaj | Borkdude: Who are yoU? I don't even know you. ::P |
| 15:01 | technomancy | banseljaj: also possibly relevant as prior art: https://github.com/Seajure/emacs-clojure-vagrant |
| 15:01 | timvisher_ | Borkdude: You should start a kick starter campaign ;) |
| 15:01 | banseljaj | A kickstarter for a linux distro. :D |
| 15:01 | banseljaj | LOL |
| 15:01 | Borkdude | timvisher_: hell no, I'd rather let banseljaj do all the work for me ;) |
| 15:02 | timvisher_ | oh well, you know, this is the year of linux on the desktop, after all |
| 15:02 | Borkdude | timvisher_: how is that? |
| 15:02 | nDuff | again? |
| 15:03 | timvisher_ | Borkdude: http://en.wikipedia.org/wiki/Desktop_Linux#Year_of_Desktop_Linux |
| 15:03 | uvtc | lynaghk, thanks for the tip about himera. |
| 15:04 | kilon_alios | isnt Desktop dead ? :D |
| 15:04 | Borkdude | timvisher_: actually I run linux and windows in vms now, my main os is osx since a year |
| 15:05 | timvisher_ | i can't wait till i read some tech report about the year of linux on the cloud |
| 15:05 | timvisher_ | completely missing the fact that most of the web is run on LAMP stacks |
| 15:05 | kenneth | hey, so i take it there's a better way to average things than this… (-> (map (fn [e] [e 1 0]) coll) (reduce (fn [a b] (let [sum (+ (first a) (first b)) cnt (+ (second a) (second b))] [sum cnt (/ sum cnt)]))) (apply (fn [cnt sum avg] avg))) |
| 15:05 | Borkdude | timvisher_: hehe |
| 15:05 | banseljaj | ,(-> (map (fn [e] [e 1 0]) coll) (reduce (fn [a b] (let [sum (+ (first a) (first b)) cnt (+ (second a) (second b))] [sum cnt (/ sum cnt)]))) (apply (fn [cnt sum avg] avg))) |
| 15:05 | clojurebot | #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: coll in this context, compiling:(NO_SOURCE_PATH:0)> |
| 15:06 | Borkdude | kenneth: yes, use the reducer library |
| 15:06 | kenneth | (also it doesn't work, but that's a different problem) |
| 15:06 | timvisher_ | ,(let [coll (take 10 (iterate inc 1))] (/ (apply + coll) (count coll)))) |
| 15:06 | clojurebot | 11/2 |
| 15:07 | Borkdude | timvisher_: that reminds me of the thing we get a lot with students: "why do we have to do all this java crap, I can do this in PHP in 5 minutes" |
| 15:07 | kenneth | oh smart |
| 15:08 | timvisher_ | lol |
| 15:08 | timvisher_ | did i do that right? |
| 15:08 | amalloy | it's not actually trivial to do that with reducers, is it? |
| 15:08 | timvisher_ | long week… |
| 15:08 | Wild_Cat | Borkdude: I'm assuming "this" is "an SQL injection vulnerability", right? :p |
| 15:08 | timvisher_ | amalloy: i didn't spot a way to do it immediately |
| 15:08 | timvisher_ | hense that code |
| 15:08 | amalloy | you need to either look at the collection twice (once to count and once to sum), or else reduce over a pair |
| 15:09 | timvisher_ | i have a niggling feeling you could |
| 15:09 | kenneth | so is (apply + coll) faster than (reduce + coll)? |
| 15:09 | Borkdude | amalloy: I guess you are right, average isn't really a good function you can parallelize I guess |
| 15:09 | amalloy | Borkdude: no, a reducing implementation will naturally also be foldable with just a little more work |
| 15:09 | timvisher_ | kenneth: often have i asked myself that very question |
| 15:10 | Borkdude | amalloy: yes, with a little more work |
| 15:10 | Borkdude | kenneth: timvisher_ why would it be faster |
| 15:10 | amalloy | &((fn average [coll] (apply / (reduce (fn [[sum count] item] [(+ sum item) (inc count)]) [0 0] coll))) (range 10)) |
| 15:10 | lazybot | ⇒ 9/2 |
| 15:11 | uvtc | lynaghk, C2 looks very interesting for data visualization. Will keep that in-mind. Though, for simple drawing, I'll probably look into quil and/or dealing with html5 canvas. |
| 15:11 | amalloy | that would work as a reducer, but i think the fact that it has to allocate a new pair at every iteration makes it little faster (no faster?) than the lazy-seq approach |
| 15:11 | timvisher_ | Borkdude: no reason. I simply think of that because they both seem to be doing the same thing. variadic functions seem to always be able to use reduce rather than apply |
| 15:11 | drewr | tlowrimore: regards |
| 15:12 | timvisher_ | is it possible to apply to + with a billion arguments? |
| 15:12 | tlowrimore | drewr: hey man! |
| 15:12 | kilon_alios | uvtc: also this -> http://processingjs.org/ |
| 15:12 | timvisher_ | is apply really just reduce under the hood? |
| 15:12 | timvisher_ | i've never bothered looking beyond that |
| 15:12 | kilon_alios | if you are into processing that is |
| 15:12 | Borkdude | timvisher_: no |
| 15:12 | amalloy | timvisher_: that's rubbish. lots of variadic functions don't use reduce |
| 15:12 | timvisher_ | lol |
| 15:12 | timvisher_ | i didn't say they did |
| 15:13 | timvisher_ | i'm saying i've never bothered looking |
| 15:13 | amalloy | "I simply think of that because they both seem to be doing the same thing. variadic functions seem to always be able to use reduce rather than apply" |
| 15:13 | Borkdude | Wild_Cat: haha |
| 15:13 | llasram | timvisher_: apply isn't reduce, but may functions (including +) which accept unbounded sequences of arguments use reduce in their impl |
| 15:13 | llasram | s,may,many, |
| 15:13 | timvisher_ | amalloy: that was meant of their use not their implementation |
| 15:14 | amalloy | timvisher_: right, but it's rubbish in that context too |
| 15:14 | timvisher_ | i.e. (reduce + coll) and (apply + coll) always do the same thing |
| 15:14 | amalloy | it's true for + and *, and not a lot else really |
| 15:14 | timvisher_ | ah, well, i've never really thought to use it anywhere else that takes variadic arguments |
| 15:14 | AimHere | Isn't there a chatlog where Rich Hickey says that reduce is the better way to do it, since it's possible it gets optimized better |
| 15:14 | uvtc | kilon_alios, thanks (for the link to processing.js). |
| 15:14 | timvisher_ | AimHere: Google! |
| 15:14 | banseljaj | technomancy: that vagrant thingie looks like what I was going for. I am sad. :( |
| 15:14 | amalloy | AimHere: it depends |
| 15:15 | amalloy | for +, you get a teeny tiny boost using reduce |
| 15:15 | technomancy | banseljaj: don't be sad; there's plenty of opportunity to improve it. |
| 15:15 | S11001001 | it's true for any monoid where append being strict is okay |
| 15:15 | amalloy | for str, you get a pretty big boost using apply |
| 15:15 | timvisher_ | What's an example of a function that you can't use reduce for but you can use apply? |
| 15:15 | technomancy | banseljaj: it's pretty bare-bones |
| 15:15 | amalloy | timvisher_: assoc, for example |
| 15:15 | banseljaj | Yes. |
| 15:15 | Borkdude | ,(reduce print ["a" "b" "c"]) |
| 15:15 | clojurebot | a bnil c |
| 15:15 | Borkdude | ,(apply print ["a" "b" "c"]) |
| 15:15 | clojurebot | a b c |
| 15:15 | kilon_alios | uvtc: your are welcome , though there are a gazillion of similar libraries for javascript ... web dev is going nuclear lately with ios and android, and there does not seem to be a slow down |
| 15:16 | banseljaj | Also, what's SLIME? |
| 15:16 | timvisher_ | well i'll be |
| 15:16 | timvisher_ | :) |
| 15:16 | AimHere | Slime is a lisp mode for emacs |
| 15:16 | banseljaj | Is it something other than clojure-mode? |
| 15:16 | AimHere | Yes, it's like 'inferior-lisp' only much better |
| 15:16 | kilon_alios | Slime is what makes emacs into an IDE |
| 15:16 | timvisher_ | banseljaj: Please watch https://www.youtube.com/watch?v=_B_4vhsmRRI |
| 15:16 | timvisher_ | and be amazed ;) |
| 15:17 | technomancy | banseljaj: clojure-mode is just static; slime connects to a running process |
| 15:17 | AimHere | It has it's own repl |
| 15:17 | AimHere | *its |
| 15:17 | timvisher_ | but don't take his advice of working with the cvs version |
| 15:17 | banseljaj | Oh. |
| 15:17 | timvisher_ | just use technomancy's version |
| 15:17 | banseljaj | so it lets you test running code? |
| 15:17 | timvisher_ | swank-clojure |
| 15:17 | timvisher_ | way way more than that |
| 15:17 | Borkdude | at #euroclojure people saw Rich is still using inferier-lisp |
| 15:18 | timvisher_ | https://github.com/technomancy/swank-clojure |
| 15:18 | technomancy | is he still on aquamacs? =( |
| 15:18 | AimHere | Think of it as leveraging emacs into your own little lisp machine |
| 15:18 | timvisher_ | Rich never struck as a tool-hound :) |
| 15:18 | Borkdude | inferior |
| 15:18 | timvisher_ | struck me* |
| 15:19 | nDuff | Borkdude: emacs terminology -- "subprocess", roughly |
| 15:19 | technomancy | timvisher_: it took a lot of doing to get him off svn |
| 15:19 | amalloy | technomancy: rich probably lost a bet, and is required to troll the developer community by pretending aquamacs is cool |
| 15:19 | Borkdude | nDuff: inferior is not to say: the lisp you are going to use now is way worse then elisp? ;) |
| 15:19 | technomancy | amalloy: doubtless |
| 15:19 | AimHere | Inferior mode, not inferior lisp ;) |
| 15:19 | AimHere | Despite the name of the mode being 'inferior-lisp |
| 15:20 | nDuff | Borkdude: correct. The emacs world also refers to "inferior haskell", "inferior shell", etc. |
| 15:20 | amalloy | it's inferior because it's not Superior Lisp Interaction Mode for Emacs |
| 15:20 | technomancy | inferior just means subprocess |
| 15:20 | timvisher_ | amalloy: troll! |
| 15:20 | kilon_alios | its inferior because humans use it, superior is used only by god |
| 15:20 | Borkdude | amalloy: got it |
| 15:20 | technomancy | in this case it applies in both senses, but that's a coincidence =) |
| 15:20 | kilon_alios | or aliens |
| 15:20 | nDuff | Borkdude: ...err, amalloy was trolling there. |
| 15:20 | timvisher_ | in this case (= emacs god) |
| 15:21 | kilon_alios | depending on your theory of creation of cosmos |
| 15:21 | AimHere | Presumably inline elisp is the egalitarian lisp mode for emacs |
| 15:21 | amalloy | nDuff: not really. it might not be the right interpretation, but it's a reasonable one |
| 15:21 | Borkdude | I guess S being superior is kind of a pun toward inferior-lisp mode? |
| 15:21 | kilon_alios | god does not use shortcuts, he is everywhere so your point is wrong |
| 15:21 | nDuff | amalloy: ...except that the words "inferior" and "superior" are used in the rest of the emacs world pretty much all over the place to refer to relative process-tree locations |
| 15:22 | timvisher_ | technomancy: i always remember that his comment when asked about re-implementing clojure in clojure was: "You know that thing about when you have something that works?" |
| 15:22 | timvisher_ | if i could learn that i think my life might be a lot cleaner |
| 15:22 | timvisher_ | ^_^ |
| 15:22 | uvtc | The Emacs inferior mode is just letting me connect to the same repl I get with `lein repl`, but within Emacs, correct? |
| 15:23 | technomancy | uvtc: yeah, it's just easier to send code straight to it w/o copy/paste |
| 15:23 | AimHere | Well that plus you can talk to it from other emacs buffers |
| 15:23 | timvisher_ | uvtc: you have to configure it to do that |
| 15:23 | kilon_alios | timvisher_: well after learning smalltalk, i kinda have to disagree with that point, a lot |
| 15:23 | timvisher_ | kilon_alios: which one? |
| 15:23 | uvtc | timvisher, I have to configure it specifically to use the `lein repl`, right? |
| 15:23 | timvisher_ | yep |
| 15:23 | kilon_alios | timvisher_: squeak and pharo |
| 15:23 | ideally_world | timvisher_ it works ? until it doesn't? :) |
| 15:24 | technomancy | timvisher_, uvtc: not any more; it'll use lein repl now by default |
| 15:24 | timvisher_ | M-x customize-group inferior-lisp inferior-lisp-program |
| 15:24 | beffbernard | uvtc: (setq inferior-lisp-program "lein repl") |
| 15:24 | kilon_alios | the ability to deep dive inside the language not to change it but so much to understand has been always helpful |
| 15:24 | timvisher_ | technomancy: how'd you swing that, you tricksy magician? |
| 15:24 | uvtc | Ok. I need to try out this "inferior mode" of which you speak. |
| 15:24 | technomancy | timvisher_: I bribed jochu. |
| 15:25 | timvisher_ | of course… |
| 15:25 | Borkdude | technomancy: what uses lein repl by default? |
| 15:25 | timvisher_ | kilon_alios: ah |
| 15:25 | timvisher_ | point cedede |
| 15:25 | timvisher_ | ceded* |
| 15:26 | kilon_alios | the problem is rewriting a existing language in itself is not that well... simple task |
| 15:26 | technomancy | Borkdude: M-x run-lisp from clojure-mode |
| 15:26 | Borkdude | technomancy: ah k |
| 15:26 | kilon_alios | and certainly not absolutely necessary, i would prefer a Clojure ide written in Clojure than Clojure written in clojure |
| 15:26 | Borkdude | technomancy: so, this is easier than slime-connect, etc? |
| 15:27 | timvisher_ | Borkdude: nothing's easier than `clojure-jack-in` |
| 15:27 | timvisher_ | ;) |
| 15:27 | technomancy | Borkdude: not really in most cases |
| 15:27 | Borkdude | timvisher_: you have to be in a project to do that |
| 15:27 | Borkdude | timvisher_: right? |
| 15:27 | ideally_world | kilon_alios, reading the Java code for Clojure and there's a bunch of Clojure functions floating around in there in Java land |
| 15:27 | technomancy | I guess there is one step fewer and not as many moving parts |
| 15:27 | timvisher_ | anywhere in the project space |
| 15:27 | timvisher_ | but yeah |
| 15:27 | Borkdude | timvisher_: a lot of times I just want to spin up a repl and throw things at it from emacs |
| 15:28 | kilon_alios | by the way is there such a thing, a Clojure IDE (GUI) written in Clojure , free and open source ? |
| 15:28 | timvisher_ | mmm. in that case inferior lisp ftw |
| 15:28 | amalloy | $google clojure clooj |
| 15:28 | lazybot | [arthuredelstein/clooj · GitHub] https://github.com/arthuredelstein/clooj |
| 15:28 | Borkdude | kilon_alios: it is called Clemacs, and you are starting tomorrow |
| 15:28 | technomancy | there's no reason jack-in can't work outside a project; just nobody's cared enough to implement it |
| 15:28 | amalloy | (inc Borkdude) |
| 15:28 | lazybot | ⇒ 1 |
| 15:28 | timvisher_ | technomancy: I care! |
| 15:29 | timvisher_ | but not enough to implement it… |
| 15:29 | technomancy | haha; exactly |
| 15:29 | AimHere | kilon_alios, well seesaw is just a bunch of clojure bindings for seesaw, written in clojure and free and open source; I don't know if that counts as 'written in Clojure' |
| 15:29 | kilon_alios | Borkdude: i said Clojure not common lisp |
| 15:29 | AimHere | *bindings for swing |
| 15:30 | kilon_alios | amalloy: thanks |
| 15:30 | Borkdude | cljmacs then |
| 15:30 | kilon_alios | clooj looks like a very good start |
| 15:32 | uvtc | kilon_alios, Climacs == Common Lisp Emacs. Clemacs is the Clojure-based emacs-alike that you've apparently begun work on. ;) |
| 15:32 | kilon_alios | oh i suppose to make it eehhh :D |
| 15:32 | p_l | Clojmacs |
| 15:32 | kilon_alios | I have not even coded a line of Clojure yet, still reading docs :D |
| 15:33 | Borkdude | cljpad |
| 15:33 | Borkdude | neh |
| 15:33 | p_l | Viclj |
| 15:33 | kilon_alios | i am amazed how fast this language become popular |
| 15:33 | Borkdude | I'm trying to run clooj |
| 15:34 | Borkdude | I get a maven error, it can't find clojure 1.3.0.. huh? |
| 15:34 | p_l | kilon_alios: power of the internet and certain changes in environment that let alternatives to PHP/perl become available on cheap |
| 15:34 | technomancy | Borkdude: missing group-id? |
| 15:35 | kilon_alios | i think the alternative to java and javascript seems a lot more appealing than php/perl |
| 15:35 | Borkdude | technomancy: http://twitpic.com/9p5f6i/full |
| 15:35 | technomancy | Borkdude: missing group-id. |
| 15:36 | Borkdude | technomancy: ic, this worked in lein1 then? |
| 15:36 | p_l | kilon_alios: previously, you couldn't get java either |
| 15:36 | ideally_world | Is it correct to say that all Clojure functions implement IFn? |
| 15:36 | kilon_alios | p_l: clojure did not work with java ? |
| 15:36 | technomancy | Borkdude: lein1 had a special case |
| 15:36 | Borkdude | wow it runs |
| 15:36 | p_l | kilon_alios: no, you couldn't get hosting that would let you run java on the cheap either. Or that provided a shell :) |
| 15:37 | technomancy | special cases kinda suck |
| 15:37 | gfredericks | ,(map (partial instance? clojure.lang.IFn) [#(%) {} [] ()]) |
| 15:37 | kilon_alios | p_l: you mean web dev or desktop as well ? |
| 15:37 | clojurebot | (true true true false) |
| 15:37 | Borkdude | ah file -> unable to save |
| 15:38 | technomancy | gfredericks: or just ifn |
| 15:38 | gfredericks | ,ifn |
| 15:38 | clojurebot | #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: ifn in this context, compiling:(NO_SOURCE_PATH:0)> |
| 15:38 | timvisher_ | anyone have any experience working with rar files from java? |
| 15:38 | technomancy | ifn? |
| 15:38 | gfredericks | ,ifn? |
| 15:38 | clojurebot | #<core$ifn_QMARK_ clojure.core$ifn_QMARK_@1a79947> |
| 15:38 | gfredericks | technomancy: you and your fancy "functions" |
| 15:39 | Borkdude | it's a bit weird, highlighting works in the repl, but not in the source editor |
| 15:39 | technomancy | http://www.threadbombing.com/data/media/4/hellomrfancypants.jpg |
| 15:39 | banseljaj | ,zero? |
| 15:39 | clojurebot | #<core$zero_QMARK_ clojure.core$zero_QMARK_@2c06a9> |
| 15:39 | gfredericks | ,(map (juxt fn? ifn?) [#(%) {} [] ()]) |
| 15:39 | clojurebot | ([true true] [false true] [false true] [false false]) |
| 15:39 | banseljaj | ,(doc juxt) |
| 15:39 | clojurebot | "([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 applying each fn to the args (left-to-right). ((juxt a b c) x) => [(a x) (b x) (c x)]" |
| 15:40 | Borkdude | technomancy: ok you're right, special cases sometimes confuse users also |
| 15:41 | gfredericks | ideally_world: I don't know why not |
| 15:41 | Borkdude | clooj is more of an idea than an IDE right now ;) |
| 15:41 | gfredericks | IDEa |
| 15:41 | amalloy | ideally_world: yes, all functions implement IFn - that is exactly the definition of a function, in clojure |
| 15:42 | Borkdude | clooj in Dutch means something like "fool around" |
| 15:42 | Borkdude | ,(ifn? {:a 1}) ;;=> true |
| 15:42 | clojurebot | true |
| 15:43 | Borkdude | hmm... |
| 15:43 | Borkdude | ,(doc ifn) |
| 15:43 | clojurebot | Cool story bro. |
| 15:43 | gfredericks | ,(doc ifn?) |
| 15:43 | clojurebot | "([x]); Returns true if x implements IFn. Note that many data structures (e.g. sets and maps) implement IFn" |
| 15:43 | Borkdude | ,nil |
| 15:43 | clojurebot | nil |
| 15:43 | gfredericks | ,,,,,,,,,,,,,,,,,,,,,,:.,,,,,,,,,,,,,,,, |
| 15:43 | clojurebot | :. |
| 15:44 | gfredericks | (braille in clojure) |
| 15:44 | gfredericks | aka brojure |
| 15:44 | TimMc | /trout gfredericks |
| 15:44 | Borkdude | why do I get (doc ifn) => nil, but when I just eval "ifn" it can't resolve the symbol |
| 15:44 | Borkdude | (I know, without the ?) |
| 15:44 | gfredericks | Borkdude: doc doesn't creash if you give it something undefined |
| 15:45 | gfredericks | it's a macro, so it doesn't have to eval the arg |
| 15:45 | gfredericks | ,(source doc) |
| 15:45 | clojurebot | Source not found |
| 15:45 | Borkdude | gfredericks: so it doesn't distuinghish between unresolvables and var that just don't have documentation |
| 15:46 | Borkdude | &(source doc) |
| 15:46 | lazybot | java.lang.RuntimeException: Unable to resolve symbol: source in this context |
| 15:46 | Borkdude | why!!! |
| 15:46 | Borkdude | oh well |
| 15:47 | amalloy | ~def doc |
| 15:48 | TimMc | &(let [⠠⠓⠑⠇⠇⠕ "hi"] ⠠⠓⠑⠇⠇⠕) |
| 15:48 | lazybot | ⇒ "hi" |
| 15:48 | gfredericks | hmm |
| 15:48 | TimMc | gfredericks: ^ No. *That* is brojure. |
| 15:48 | gfredericks | *** trout: Unknown command |
| 15:49 | Borkdude | amalloy: that's a cool command |
| 15:49 | gfredericks | I couldn't figure out based on the source why it doesn't crash on (doc foo) |
| 15:50 | gfredericks | but I was looking at 1.3 code I think |
| 15:50 | gfredericks | no 1.2 |
| 15:50 | Borkdude | gfredericks: TimMc when I didn't read the braille thing, I thought brojure was clojure written by brogrammers |
| 15:51 | amalloy | that's a really old blob that clojurebot just linked to |
| 16:14 | Borkdude | ,(doc clojure.xml/parse) |
| 16:14 | clojurebot | Huh? |
| 16:14 | Borkdude | my REPL hangs when I tried this.. |
| 16:15 | Borkdude | not in an outside project repl.. nm |
| 16:29 | Borkdude | … http://i.imgur.com/Mev10.jpg |
| 16:32 | Borkdude | am I the only one to find function composition and the order of tunctions in comp counter-intuitive? |
| 16:33 | Borkdude | I know it is how it is generally notated in calculus, Haskell, etc, but still |
| 16:34 | amalloy | ((comp a b c) x) => (a (b (c x))) |
| 16:34 | matthavener | just use ->> |
| 16:34 | matthavener | isn't it just comp with args reversed? |
| 16:35 | amalloy | no |
| 16:36 | solussd | is it the fact that clojurescript macros are really clojure macros that expand into clojurescript code the reason for the 'use-macros' declaration for ns? |
| 16:36 | Borkdude | (-> x a b c) instead of ((comp c b a) x)? |
| 16:36 | S11001001 | -> works if a b c name non-function things |
| 16:37 | S11001001 | that is, comp is the true functor map for functions, whereas -> is a syntax rewriter |
| 16:37 | amalloy | -> is a replacement for comp only if you're using named functions, and immediately calling the function you create |
| 16:38 | dnolen | solussd: pretty much |
| 16:39 | Borkdude | anyway, I always have to look up the docs for comp to remember what function is applied first, but it might be just me :) |
| 16:41 | Borkdude | has anyone here ever had the need to use "while" in clojure? |
| 16:43 | S11001001 | didn't even know it existed for like first year |
| 16:43 | lypanov | dnolen: for me it made sense mainly because you get clojure specific context. e.g. system/getenv |
| 16:44 | dnolen | ideally_world: the core data structures are in sunlight of Clojure in ClojureScript |
| 16:44 | lypanov | until i knew that defmacro needed to be in .clj i didn't expect it possible to use that from cljs |
| 16:44 | jedmtnman1 | is there a better, or more idiomatic way, to do the following? http://pastie.org/3968068 |
| 16:45 | amalloy | i used `while` recently, but it's pretty rare |
| 16:45 | technomancy | clojure has while? |
| 16:45 | dnolen | lypanov: macros are external because client oriented target like JS benefits little from hosting the compilation environment. |
| 16:46 | lypanov | *nod* |
| 16:46 | Borkdude | ,(doc while) |
| 16:46 | clojurebot | "([test & body]); Repeatedly executes body while test expression is true. Presumes some side-effect will cause test to become false/nil. Returns nil" |
| 16:46 | lypanov | technomancy: my thoughts exactly. |
| 16:46 | technomancy | we should get kibit to yell at while users =) |
| 16:48 | Borkdude | technomancy: isn't (while true ..) useful for writing REPLs or do you prefer the longer (loop [] (… (recur))) |
| 16:48 | technomancy | Borkdude: you have the repl input changing for each recursion, so IMO loop is better |
| 16:49 | lypanov | dnolen: is :foreign-libs okay to be used for including .js with closure library code? |
| 16:49 | TimMc | The latter allows you to carry local state. |
| 16:49 | lypanov | dnolen: seems to work fine but didn't expect that :) |
| 16:49 | Borkdude | technomancy: yes, I agree actually :) |
| 16:49 | dnolen | lypanov: that's what it's for I thought |
| 16:49 | technomancy | even better, if your whole function is the loop then it's just a call to recur |
| 16:49 | lypanov | dnolen: aha! that explains. thx :) |
| 16:50 | Borkdude | yes, I wonder if someone has ever used while in a good way in Clojure |
| 16:51 | lypanov | oops. ignore |
| 16:51 | Borkdude | clojure 1.5, new features: while is no longer supported ;-) |
| 16:52 | S11001001 | I wish ignore was in clojure.core |
| 16:52 | uvtc | jedmtnman1, that looks good to me, though I'm still pretty new to Clojure. |
| 16:52 | Borkdude | S11001001: what's ignore? |
| 16:53 | S11001001 | (constantly nil) |
| 16:54 | S11001001 | yet we have if-not |
| 16:54 | amalloy | (while (not @stop) (do-stateful-work)) ;; run this on a background worker thread |
| 16:55 | uvtc | if-not java.util.Date., when? |
| 17:00 | TimMc | uvtc: I just got that. >_< |
| 17:01 | uvtc | TimMc, :) If not you, who? |
| 17:10 | Borkdude | ,(time (for [some (rest [])] \ )) |
| 17:10 | clojurebot | "Elapsed time: 1.222 msecs" |
| 17:10 | clojurebot | () |
| 17:17 | lypanov | anyway around using clojurescript with goog.dom.query? |
| 17:20 | emezeske | lypanov: what do you mean "around"? |
| 17:20 | lypanov | as in, online :) |
| 17:20 | lypanov | oh |
| 17:20 | lypanov | "anyone around" |
| 17:20 | lypanov | hehe |
| 17:21 | emezeske | Ah, that makes more sense! |
| 17:26 | fil512 | with update-in can I modify a bunch of nested values at once? |
| 17:26 | emezeske | lypanov: ^_^ |
| 17:26 | lypanov | and https://groups.google.com/forum/#!msg/clojure-dev/TiJGSmM1gTo/4ysX_JvquLsJ |
| 17:26 | lypanov | but i have no idea how to use any of this. |
| 17:27 | lypanov | i'm too dumb to do anything more than copy and paste from leiningen partials. |
| 17:27 | amalloy | fil512: sorta |
| 17:27 | amalloy | &(update-in {} [:a :b :c] assoc :foo 1 :bar 2) |
| 17:27 | lazybot | ⇒ {:a {:b {:c {:bar 2, :foo 1}}}} |
| 17:28 | dnolen | lypanov: have you look at domina? |
| 17:28 | dnolen | looked |
| 17:28 | lypanov | dnolen: i'm using jayq for new stuff and played with domina but i release next week and have to get existing code running. |
| 17:29 | lypanov | dnolen: we ran into severe production issue in IE due to "clojure.string.escape = function escape()" in very old clojurescript |
| 17:30 | dnolen | lypanov: what was the problem there? and which versions of IE? |
| 17:30 | lypanov | dnolen: twas ancient. modern don't do it. escape is a js/browser builtin. the above line overrode it. |
| 17:30 | lypanov | t. |
| 17:30 | lypanov | huh. *stabs colloquy* |
| 17:30 | dnolen | lypanov: I see |
| 17:31 | lypanov | dnolen: anyway now on v short schedule to get code running on top of initial clojurescript release running on current. |
| 17:31 | dnolen | lypanov: cool public project? |
| 17:32 | lypanov | previously on rails using my forked clementine gem and built my own jars etc. but not used to the whole dep model in clojure. |
| 17:32 | lypanov | dnolen: libersybooking.com non open source but all production for months already |
| 17:33 | Raynes | Man, colloquy. Hate that thing. |
| 17:33 | Raynes | lypanov: Check out Textual. Excellent client that actually works like a client. |
| 17:33 | lypanov | Raynes: aye. hate/love relationship. use irc once every 2-3 months. no time to learn something new. |
| 17:33 | Raynes | Ah, that makes sense. |
| 17:34 | Raynes | lypanov: Adium is an excellent alternative for people who don't use it very often. Not really any learning curve. |
| 17:38 | lypanov | still utterly lost. anyone any clue how i can use https://oss.sonatype.org/content/groups/staging/org/clojure/google-closure-library-third-party/0.0-1376/google-closure-library-third-party-0.0-1376.jar in a clojurescript? |
| 17:38 | lypanov | project* |
| 17:43 | technomancy | maybe if you got a better client you'd hang out more on IRC =) |
| 17:43 | lypanov | technomancy: yeah, so i'll skip that :P |
| 17:44 | lypanov | dnolen: afaict domino conflicts with pretty much everything else wrt version needed of goog.jar. |
| 17:45 | lypanov | domina* |
| 17:45 | dnolen | lypanov: you mean domina requires an out of date goog.jar? |
| 17:45 | lypanov | yeah. |
| 17:46 | lypanov | i should just go for custom build. i really need positioning.js fixes that aren't even in the released version. |
| 17:47 | Borkdude | dnolen: I'm looking at domina and I think I will certainly use this lib when I will do some clojurescript |
| 17:47 | lypanov | aye, its the nicest one i've seen also. |
| 17:47 | lypanov | not a big fan of the whole dep on jquery thing. |
| 17:47 | dnolen | Borkdude: it seems pretty cool, sounds like people need to push them a bit on staying abreast of Closure. |
| 17:48 | dnolen | lypanov: yes, as the CLJS ecosystem matures the whole Closure compat code will pay off - dead code eliminate all the parts of the lib dep you don't actually you use. |
| 17:48 | lypanov | "ClojureScript release 0.0-1236 Options" now i get it! |
| 17:48 | mwillhite | hey there - I'm working with condp and trying to figure out what to do with an unwanted argument |
| 17:48 | mwillhite | please take a look at the following pastie: http://pastie.org/3968372 |
| 17:49 | lypanov | so the cljs versions track the library versions. |
| 17:49 | Borkdude | Raynes: tnx for the tip, will check out Textual… as I'm having some problems with colloquy |
| 17:49 | mwillhite | as you can see, when a condition is met, I call a fn, but I don't want the arg that it passes in |
| 17:49 | mwillhite | what can I do? |
| 17:49 | Raynes | Borkdude: If you don't want to pay for it and have some experience with xcode, you can build it yourself. |
| 17:49 | lypanov | dnolen: *nod*. 25kb for highly customized google date picker + lots of date logic that i couldn't have even imagined writing in raw js. |
| 17:49 | mwillhite | and of course as it is now, it throws an Arity error |
| 17:49 | lypanov | dnolen: vs 200kb for unextensible crap that jquery ui provide :) |
| 17:50 | dnolen | lypanov: the jquery plugin scene is abysmal |
| 17:50 | lypanov | dnolen: closure library is scary at first. but the right choice. |
| 17:50 | lypanov | dnolen: main problem is there belief in this whole "theming" concept. |
| 17:50 | lypanov | its like working with AWT again. |
| 17:51 | amalloy | mwillhite: just...don't use the :>> or the anonymous function? (condp = response-type "json" (assoc ...)) |
| 17:52 | lypanov | dnolen: other thing about the use of clojure compiler etc is that its compilation will always beat the js engines. they can never (for short page life cycle reasons) do what a up front compile process can do. |
| 17:53 | lypanov | emezeske: "I just pushed out lein-cljsbuild 0.1.10, with the sole change being that it depends on ClojureScript 0.0-1236. " |
| 17:53 | lypanov | emezeske: and again you appear :P does lein-cljsbuild do any instant code change things like noir-cljs? |
| 17:53 | mwillhite | ah ahaha, cool thanks amalloy |
| 17:53 | dnolen | lypanov: and what the ClojureScript compiler can do as well :) I'm loving warnings about simple mistakes that plague JS. |
| 17:54 | lypanov | dnolen: *nod*. i jumped on clojurescript before clojure itself so went the closure library via js path for pragmatic "release on time" reasons but regretting now. |
| 17:56 | lypanov | dnolen: any thoughts on clojurescript and FRP btw? |
| 17:56 | dnolen | lypanov: don't know enough about FRP, but something like RxJS for CLJS does sound interesting. |
| 17:56 | lypanov | i'm using knockout.js (like backbone.js etc) heavily and would love a more idiomatic clojure approach to the same issue. |
| 17:57 | dnolen | lypanov: yes some people seem to like knockout.js, haven't looked at it closely enough to have any opinions. |
| 17:58 | lypanov | dnolen: summary: rxjs best for algmic eventing work. ko.js for easy to code frontend. |
| 17:59 | lypanov | dnolen: i at the back of my head have the idea that things like reactive bindings relate heavily to core.logic etc thus the question :) |
| 18:00 | emezeske | lypanov: I don't know a whole lot about noir-cljs. lein-cljsbuild does have an auto mode, where it watches your files for changes, though |
| 18:00 | dnolen | lypanov: yes David Herman brought that up at JSConf. |
| 18:00 | dnolen | lypanov: for high level GUI programming I think that could be very interesting. |
| 18:01 | Borkdude | Raynes: I don't really have any experience with xcode and I'm running into this error: The identity '3rd Party Mac Developer Application' doesn't match any valid certificate/private key pair in the default keychain |
| 18:01 | lypanov | dnolen: ko.js is a bit more high level. more or less you bind data objects to ui with statements such as text: binding, or style: "invisible" when binding |
| 18:01 | lypanov | the actual binding process feels like core.logic to me. |
| 18:01 | Raynes | Borkdude: Yeah, I don't remember how I got that working. I also just went ahead and bought the thing for like 4 bucks on the app store. |
| 18:01 | dnolen | lypanov: interesting, I should take a closer look. |
| 18:02 | lypanov | when watching the datomic talks i couldn't help feel like i should just be binding it to my ui directly. |
| 18:02 | technomancy | leveraging XCode's crappiness as a revenue stream... brilliant =) |
| 18:02 | lypanov | especially in a world with application level caches in browser.s |
| 18:03 | Raynes | technomancy: Yeah, heh. |
| 18:03 | dnolen | lypanov: I know that some very interesting GUI work has been done with AOP + Datalog - perhaps all of this is related ... |
| 18:03 | lypanov | i need to read my joy of clojure book. its sitting on the shelf for 3 months already. |
| 18:04 | TimMc | &(apropos 'rotate) |
| 18:04 | lazybot | java.lang.RuntimeException: Unable to resolve symbol: apropos in this context |
| 18:04 | lypanov | emezeske: does it push changes to browser or requires reload? |
| 18:11 | wilfredh | hi all |
| 18:11 | wilfredh | I was wondering if anyone could shed some insight on http://stackoverflow.com/questions/10740265/macro-with-anonymous-functions |
| 18:12 | wilfredh | which is just asking why you can't do: (-> 4 #(+ % 1) #(- % 1) #(+ % 1)) |
| 18:13 | samedhi | can cljs only see other cljs files? Is it possible to have cljs require/use a clj file? |
| 18:14 | amalloy | wilfredh: there's already a lot of content on that page, and on the two nearly-identical questions linked from it. if you're still having trouble you need to ask a better question than "plz help" |
| 18:14 | alexyakushev | wilfredh: because -> is a macro that has this calling policy: (-> v & args), where each one from `args` is either a symbol that represents a function, or a list, which after macroexpansion would look like: (f v .....) |
| 18:16 | alexyakushev | wilfredh: since #() is a reader macro, it probably gets expanded first - to (fn [x] (+ x 1)) for example, which is a list. So -> simply transforms it to (fn 4 [x] (+ x 1)) which is a nonsense to pass further. |
| 18:18 | metellus | the page he linked explains why it doesn't work and shows how to fix it |
| 18:19 | alexyakushev | I see now, thank you. But I still think it is a terrible way to do this. |
| 18:21 | wilfredh | amalloy: I'm sorry, I'd felt 'why' was an acceptable question but I don't visit #clojure often. It was just a behaviour counter to my expectations. I hadn't noticed the linked question -- thanks. That one has a more enlightening answer. |
| 18:21 | emezeske | lypanov: Ah, no, it doesn't push them |
| 18:21 | emezeske | lypanov: That would be a cool feature to add though, and not very hard |
| 18:22 | Borkdude | Raynes: it was actually pretty easy, just turn code signing off |
| 18:22 | Raynes | Borkdude: Cool. :. |
| 18:22 | lypanov | emezeske: noir-cljs has the code, one file. quite easy. |
| 18:24 | samedhi | I have a clojure namespace that I want to use in clojurescript and clojure. I can obviously (use the file in clojure, but how do I (use it in a clojurescript namespace? |
| 18:24 | wilfredh | alexyakushev, metellus: thanks. |
| 18:25 | espeed | having to put (refer-clojure :exclude ['get]) everywhere since "get" is a core function is somewhat clunky -- is this what most people do, or is there a better way? |
| 18:25 | hiredman | :require :as |
| 18:26 | Chiron_ | Hi, for a project that doesn't have project.clj . how to run lein repl? for example this https://github.com/pallet/upstart-crate I got an exception |
| 18:26 | Chiron_ | clojurebot: come fly with me |
| 18:26 | clojurebot | Huh? |
| 18:27 | lypanov | samedhi: i know you can use macros from clojure in clojurescript. thats all i know. |
| 18:28 | fil512 | I've got a map of map of values and need to perform the same operation on all the end-values. Any idea? |
| 18:29 | technomancy | ,(doc vals) |
| 18:29 | clojurebot | "([map]); Returns a sequence of the map's values." |
| 18:29 | fil512 | {:a {:x 5 :y 6}, :b {:x 7 :y 8}} |
| 18:29 | fil512 | say I wanted to inc 1 all those end values |
| 18:29 | fil512 | {:a {:x 5, :y 6}, :b {:x 7, :y 8}} |
| 18:30 | samedhi | lynaghk, I figure it must be possible, I thought they are basically using clojure code for the majority of functionality, it is just the edges that are connected with some sort of protocol magic, so seems that it must be possible. |
| 18:30 | samedhi | But I get errors when I try to require. :/ |
| 18:30 | fil512 | values of :a, :b, :x, :y are unknown at compile time |
| 18:31 | fil512 | they're actually strings... |
| 18:31 | technomancy | fil512: any level of nesting or just one? |
| 18:31 | fil512 | just one |
| 18:31 | fil512 | in actuality, it's host -> week -> uptime |
| 18:32 | fil512 | I looked at update-in, but it looks like it's designed to just work on one leaf at a time |
| 18:32 | fil512 | I need to modify all leafs |
| 18:33 | technomancy | ,(let [m {:a {:x 5, :y 6}, :b {:x 7, :y 8}}] (zipmap (keys m) (for [m2 (vals m)] (zipmap (keys m2) (map inc (vals m2)))))) |
| 18:33 | clojurebot | {:b {:x 8, :y 9}, :a {:x 6, :y 7}} |
| 18:33 | technomancy | there's a cleaner solution involving recursion, but for one level that's probably overkill |
| 18:33 | fil512 | zipmap eh? |
| 18:33 | fil512 | I considered that |
| 18:33 | fil512 | it just seems kind of messy |
| 18:34 | technomancy | it's a bit messy; it would be better if map-vals existed |
| 18:34 | fil512 | there's no simple way to just change all the leaf nodes? |
| 18:34 | fil512 | ya! |
| 18:34 | fil512 | that's what I want! |
| 18:34 | fil512 | :-) |
| 18:34 | fil512 | there's no sort of map-vals? |
| 18:34 | technomancy | (defn map-vals [m f] (zipmap (keys m) (map f (vals m)))) |
| 18:34 | technomancy | it really should be in clojure.core, but it's not, so there you go =) |
| 18:34 | fil512 | back to zipmap again |
| 18:34 | fil512 | just seems sort of unclojurish to use zipmap |
| 18:35 | fil512 | but I guess it's what we got. |
| 18:35 | fil512 | thanks! |
| 18:35 | technomancy | sure |
| 18:35 | amalloy | technomancy: c'mon, it should take varargs so you can write (map-vals m map-vals inc) |
| 18:36 | technomancy | oh snap |
| 18:36 | technomancy | yes |
| 18:36 | technomancy | amalloy: may I assume useful does this already? =) |
| 18:36 | Borkdude | now using Textual |
| 18:36 | amalloy | no, map-vals is ninjudd's function and he doesn't have as many cool ideas as i do |
| 18:37 | amalloy | personally i don't like map-vals enough, philosophically, to want to improve it |
| 18:37 | technomancy | you prefer the more general map-map? |
| 18:37 | amalloy | naw. i just like into...for |
| 18:37 | amalloy | (defn map-vals [m f & args] (into {} (for [[k v] m] [k (apply f v args)]))) would probably work, right? |
| 18:38 | technomancy | I think so |
| 18:39 | amalloy | &(letfn [(map-vals [m f & args] (into {} (for [[k v] m] [k (apply f v args)])))] (map-vals {:a {:x 5, :y 6}, :b {:x 7, :y 8}} map-vals inc)) |
| 18:39 | lazybot | ⇒ {:a {:y 7, :x 6}, :b {:y 9, :x 8}} |
| 18:39 | amalloy | technomancy: okay, i was wrong. map-vals already does that |
| 18:40 | amalloy | and i added that feature myself |
| 18:40 | technomancy | too clever for your own good |
| 18:41 | amalloy | the version in useful is *slightly* more efficient, because it uses a clojure.lang.MapEntry instead of a vector |
| 18:47 | Borkdude | Raynes: what about logs in Textual? |
| 18:47 | Borkdude | Raynes: it's disabled in the menu it seems |
| 18:48 | Raynes | Borkdude: Preferences -> Advanced -> Logs |
| 18:48 | amalloy | technomancy: i also wrote knit, which is a cousin to juxt, especially useful for maps |
| 18:48 | Borkdude | Raynes: ah … tnx |
| 18:48 | amrk | old school crt console for todays clojure louge: https://plus.google.com/113913703302067206043/posts/BhMBjS5Kaiw |
| 18:49 | Borkdude | amrk I saw it on twitter, cool :) |
| 18:49 | amalloy | (let [m {"x" "1", "y" "2"}] (into {} (map (knit keyword #(Integer/parseInt %)) m))) |
| 18:49 | technomancy | ,(.deref (promise) 10 java.util.concurrent.TimeUnit/MILLISECONDS) |
| 18:49 | clojurebot | #< MILLISECONDS> |
| 18:50 | technomancy | srsly? |
| 18:50 | Borkdude | Raynes: so have you written a plugin of any kind to highlight clojure code in Textual?: ) |
| 18:50 | technomancy | clojurebot: google glasstty font |
| 18:50 | clojurebot | http://lmgtfy.com/?q=glasstty+font |
| 18:50 | technomancy | huh, works for me |
| 18:50 | Raynes | Borkdude: Nope. I don't write applescript. |
| 18:51 | Raynes | $google glasstty font |
| 18:51 | lazybot | [Hacking with Style: TrueType VT220 Font] http://sensi.org/~svo/glasstty/ |
| 18:51 | amalloy | technomancy: the third arg is a not-found value, not a timeunit |
| 18:51 | amalloy | it always waits in ms whether you like it or not |
| 18:51 | technomancy | amalloy: ok, I was thinking of it as being parallel to .get on futures for some reason |
| 18:51 | technomancy | hard-coding to ms makes way more sense; I wish futures did that |
| 18:52 | lypanov | Raynes: good rule. i regret my wasted months learning that. |
| 18:52 | technomancy | or at least defaulted to them |
| 18:52 | Borkdude | Raynes: ah it uses that for scripting? ok... |
| 18:52 | amalloy | technomancy: so use deref instead of get for futures too |
| 18:53 | Raynes | lypanov: I once pretended to write some applescript in that I deleted a bunch of stuff from textual's really verbose now playing command. |
| 18:53 | technomancy | amalloy: but I'm so stuck in my 1.2-leaning ways |
| 18:53 | lypanov | Raynes: its hell. |
| 18:53 | amalloy | technomancy: either way though, probably best to use deref, not .deref |
| 18:53 | Raynes | The devil, even. |
| 18:53 | technomancy | yeah, realized that right after I pasted that |
| 18:56 | talios | hrm, looks like a killed my tmux ;( doh |
| 18:59 | talios | looks like arbscht has bailed on joining us for #clojure-lounge today :( |
| 19:02 | Borkdude | Raynes: I ready Python and Ruby scripts are also possible, haven't found out yet how though |
| 19:02 | talios | ahh and here is arbscht :) |
| 19:05 | ibdknox | you know what might be really interesting? a CLJS impl the emits go |
| 19:05 | ibdknox | that* |
| 19:06 | Borkdude | ibdknox: why specifically? |
| 19:06 | ibdknox | go routines and the potential to use the type safety as a safety net |
| 19:07 | ibdknox | startup time |
| 19:07 | ibdknox | and it actually has a fairly solid base library to build off of |
| 19:07 | Borkdude | ibdknox: and compile to native code? |
| 19:07 | ibdknox | yup |
| 19:09 | ibdknox | I wonder how things would evolve if the Clojure worked on a host with extremely cheap threads |
| 19:16 | dnolen | ibdknox: go routines don't really seem like a good fit for Clojure thought right? |
| 19:16 | dnolen | though |
| 19:16 | ibdknox | I don't know that I would say that |
| 19:16 | ibdknox | but I honestly have no idea |
| 19:16 | dnolen | ibdknox: no reads |
| 19:18 | ibdknox | true |
| 19:18 | dnolen | ibdknox: which is a horrible fit :) |
| 19:19 | dnolen | ibdknox: I also thought fork/join basically gives you something akin super cheap threads. |
| 19:20 | ibdknox | dnolen: haven't looked into it really, so it could very well be exactly that |
| 19:20 | talios | sweet - webnoir/lein project using my HalBuilder library - already rocking the clojure lounge |
| 19:21 | hiredman | dnolen: fork/join is, from what I have seen, just an evolution of the executor framework, their aren't any magic changes to the jvm or something |
| 19:21 | hiredman | it is still threadpools and tasks |
| 19:21 | hiredman | just more composable |
| 19:21 | technomancy | we'd have to go back to Java 1.1 or whatever to get green threads =) |
| 19:22 | hiredman | ugh |
| 19:22 | ibdknox | I just like the idea of a platform built with concurrency in mind |
| 19:22 | ibdknox | and having automatic constructs for asynchrony |
| 19:23 | hiredman | hanging out in #go-nuts for a few days was enough to cure me of any interest |
| 19:23 | ibdknox | lol |
| 19:23 | ibdknox | why's that? |
| 19:24 | hiredman | "hey, can I use this instead of php?" |
| 19:24 | ibdknox | as |
| 19:24 | ibdknox | ah* |
| 19:24 | technomancy | and they have this whole aura of "Go is the thing that makes static typing not horrible!" as if they invented inference or something. |
| 19:25 | hiredman | it doesn't have the clean feeling from a functional language, or the light feeling of a dynamic language |
| 19:25 | hiredman | which, I guess is subjective |
| 19:25 | Borkdude | Go is to C what Scala is to Java? |
| 19:25 | dnolen | ibdknox: it's not clear to me that Go offers anything over Clojure's constructs, but what do I know - I'd be interested in seeing side-by-side translations. |
| 19:25 | hiredman | I think I signed up for a go workshop at strangeloop? I forget |
| 19:26 | dnolen | ibdknox: the whole write / compile / run your programs completely disinterests me. |
| 19:26 | ibdknox | dnolen: yeah, didn't think through that bit. |
| 19:27 | dnolen | ibdknox: I downloaded it a while back all excited, but then I realized it's the standard C workflow. |
| 19:27 | dnolen | delete |
| 19:27 | hiredman | and there isn't enough adoption of Go for it to be a nice target platform in terms of "reach" |
| 19:28 | ibdknox | dnolen: heh, it kills me going back to that now |
| 19:28 | ibdknox | dnolen: node and python seemed like ancient technologies to me |
| 19:28 | technomancy | no repl? |
| 19:28 | ibdknox | dynamic evaluation of some kind |
| 19:28 | hiredman | in 2012, can you believe it? |
| 19:28 | dnolen | technomancy: I don't think so. |
| 19:28 | hiredman | even C# has a repl these days |
| 19:29 | ibdknox | srsly |
| 19:29 | technomancy | and mirah just got a repl like a week ago |
| 19:29 | dnolen | technomancy: certainly wasn't one the last time I tried. |
| 19:29 | technomancy | geez |
| 19:29 | ibdknox | I think it's more than just a repl |
| 19:29 | ibdknox | python has a repl, but its facilities for doing dynamic things are half-baked at best |
| 19:30 | ibdknox | I had to do some hackery to make my flask thing in Light Table work |
| 19:35 | Borkdude | clojure 2 F#: http://msdn.microsoft.com/en-us/library/dd233250.aspx |
| 19:36 | Borkdude | I don't know of what use that would be though… ;) |
| 19:42 | Borkdude | does anyone know if Lisp in the Tiobe index (http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html) includes Clojure? |
| 19:43 | Raynes | I think it does. |
| 19:43 | Raynes | Actually, apparently not. |
| 19:43 | scottj | Borkdude: says lisp #15 and clojure #77 |
| 19:43 | Borkdude | yes, what do they mean with "Lisp" then? |
| 19:44 | scottj | common lisp |
| 19:44 | Raynes | And scheme, I think. |
| 19:44 | Raynes | Or not.. |
| 19:44 | Raynes | Damn it. |
| 19:44 | Raynes | I thought they said they combined those at some point. |
| 19:44 | kwertii | A lot of non-Lisp programmers seem to think that Lisp == Common Lisp |
| 19:45 | Borkdude | It's not entirely clear |
| 19:45 | Raynes | kwertii: And it makes me want to strangle kittens. |
| 19:45 | scottj | Borkdude: what, if anything, the TIOBE index even means is not entirely clear |
| 19:46 | Borkdude | scottj: true |
| 19:48 | austinh | Are JDBC errors considered opaque, programmatically, or does anyone actually dispatch on their types or fields? |
| 19:48 | austinh | s/errors/exceptions |
| 19:50 | austinh | I'd like to distinguish between a duplicate key violation and other exceptions, for example. |
| 19:51 | austinh | But the only difference I see is a human readable description of the error. |
| 19:53 | kwertii | austinh: They're coded with both SQLState and implementation-specific error codes (at least, they're supposed to be as per the spec; no idea whether specific implementations actually implement that) |
| 19:54 | austinh | kwertii: Yeah, I'm seeing the same error code of 0 for two distinct types of errors, in my case (with Postgres) |
| 19:54 | kwertii | austinh: the getSQLState method is supposed to return a standardized string error code, too |
| 19:54 | hiredman | interesting fact: jdbc drivers have a jdbcCompliant method that returns a boolean |
| 19:55 | austinh | kwertii: Ok, thanks, I'll look into that. I wasn't sure what that value signified. |
| 19:55 | kwertii | hiredman: Liar's Paradox... |
| 19:56 | technomancy | dunno bout JDBC, but java exception class hierarchies are annoying enough that in a lot of cases people straight up ignore them |
| 19:56 | technomancy | stringly typed |
| 19:56 | austinh | The exception stuff is currently my least favorite part of Clojure. |
| 19:56 | hiredman | the lack of patronymics |
| 19:56 | kwertii | austinh: in theory, there's a set of standardized error codes called SQLState |
| 19:57 | technomancy | austinh: slingshot is a nicer take on the whole exception problem |
| 19:58 | austinh | technomancy: I agree, but I don't like the idea of mixing in a second concept of exceptions, especially when there are ones I can't control, like these JDBC ones. |
| 19:58 | technomancy | austinh: yeah, a new way of doing things is only valuable insofar as various parties participate in it |
| 19:59 | amalloy | technomancy: 1.4 provides the building-block slingshot needs, to work without AOT/java, right? so it's a little more "blessed" now |
| 19:59 | technomancy | amalloy: I wouldn't say it's blessed; rich has issues with the implementation |
| 20:00 | technomancy | the fact that you can "throw" arbitrary objects seems a bit silly, limiting it to throwing maps only would be better |
| 20:00 | technomancy | which I guess is coming soon? or is that in 1.4? |
| 20:00 | amalloy | technomancy: 1.4 does that |
| 20:00 | technomancy | ok, cool |
| 20:01 | amalloy | c.l.ExceptionInfo contains: public final IPersistentMap data |
| 20:01 | kwertii | technomancy: I admire Common Lisp's bidirectional condition/restart passing system. Though I admit I've never seen any non-trivial uses of it in practice. |
| 20:01 | technomancy | I think decoupling the exception class from the catch mechanism kinda makes sense |
| 20:01 | hiredman | slingshot uses 1.4's exception stuff if it is available |
| 20:01 | technomancy | hiredman: oh cool |
| 20:01 | hiredman | (and it uses it to support throwing arbitrary objects) |
| 20:01 | amalloy | hiredman: it probably compiles Stone anyway ro put it in the jar, right? |
| 20:01 | technomancy | hiredman: so in that case slingshot is more about the fancy destructuring catch macro then? |
| 20:01 | amalloy | in case 1.4 turns out not to be available when it runs |
| 20:01 | amalloy | technomancy: yes |
| 20:02 | hiredman | yes |
| 20:02 | hiredman | https://github.com/scgilardi/slingshot/blob/master/src/slingshot/support.clj#L22 |
| 20:02 | jayunit100 | http://en.wikibooks.org/w/index.php?title=Compojure/Core_Libraries&stable=0#Route_Parameters <--- compojure tutorial needs a little bit of updating.. I added some stuff hopefully someone else can sanity check. |
| 20:03 | hiredman | wikibooks is dead, let it rot |
| 20:03 | technomancy | I love the fact that slingshot didn't have to do anything to support destructuring exceptions |
| 20:04 | amalloy | jayunit100: yeah, i would never recommend anyone look at wikibooks. better to submit a pull request to the compojure wiki |
| 20:04 | amalloy | or...just edit it? i don't know what github's wiki permissions are like |
| 20:04 | austinh | I found the list of all the "sqlstate" error codes: http://www.postgresql.org/docs/8.3/static/errcodes-appendix.html |
| 20:04 | austinh | ...but I have a hard time believing this is the route I should be going down. |
| 20:05 | kwertii | austinh: other than parsing the actual text of the error message, I think that's about the best you're going to get for the Postgres driver |
| 20:06 | austinh | kwertii: Right, but it smells funny, and coupled with the fact that I don't see anyone else addressing the problem this way, I'm thinking maybe I should take a different course. |
| 20:07 | technomancy | austinh: you can use slingshot's fancy catch stuff to write catch clauses that match against the message with a regex IIRC |
| 20:07 | austinh | But, maybe I'll give it a shot and see how it goes. |
| 20:07 | austinh | technomancy: That's interesting. |
| 20:07 | kwertii | austinh: faced with the overall opacity of JDBC exceptions you've notice, most programmers don't even bother and just throw any exception back up to the user and abort |
| 20:08 | austinh | kwertii: That was my assumption. |
| 20:09 | kwertii | austinh: at most you might get a retry with a new connection here and there |
| 20:10 | austinh | I'm new to databases, too, so I don't really know what the common idioms are. |
| 20:11 | hiredman | avoid violating constraints |
| 20:11 | austinh | I liked the idea of trying to add a row and being able to determine why it was rejected, without having to make a check for uniqueness first. |
| 20:16 | kwertii | austinh: there's some esoteric hackery that can do that, but no nice way |
| 20:17 | austinh | I'm going to try this sqlstate string. I see know that the myriad of values are grouped by prefix, so maybe that'll help keep it clean and simple. |
| 20:18 | austinh | s/know/now |
| 20:19 | kwertii | which is weird, since "SELECT x, or else if it doesn't already exist, INSERT x" is one of the more common operations in SQL. you'd think they'd have included something to do that in the language by now. |
| 20:20 | austinh | Clojure's jdbc interface has update-or-insert-values, but that doesn't fit my use case. |
| 20:20 | austinh | http://clojure.github.com/java.jdbc/#clojure.java.jdbc/update-or-insert-values |
| 20:21 | kwertii | austinh: that still does 2 separate SQL statements and just glues them together at the app level. that function should be in there at the SQL level. |
| 20:22 | austinh | kwertii: Yeah, that's one reason (perhaps irrationally in my case) that I don't like it, eithe. |
| 20:22 | kwertii | or at least it should be possible to do it more concisely than this: http://stackoverflow.com/a/6722460/157510 |
| 20:23 | kwertii | austinh: also, you can always *shudder* use stored procedures |
| 20:30 | kwertii | Anyone know whether it's possible to use cursors and fetchsize with unmodified Korma (select)s? |
| 20:32 | amalloy | kwertii: i'm not a database expert, but i think jdbc automatically does "chunked lazy" fetching in the background with cursors for you, so usually you don't have to fiddle with that |
| 20:33 | kwertii | amalloy: Postgres default is to get all results at once - http://jdbc.postgresql.org/documentation/head/query.html#fetchsize-example |
| 20:37 | ibdknox | kwertii: It's not there |
| 20:37 | kwertii | ibdknox: what's not where? |
| 20:38 | ibdknox | kwertii: in korma there's no way to do that currently |
| 20:38 | ibdknox | never needed it since I wasn't working with gigantic datasets :( |
| 20:38 | ibdknox | I actually was unaware of it haha |
| 20:38 | kwertii | ibdknox: ahh |
| 20:39 | kwertii | it appears that clojure.java.jdbc/with-query-results returns a lazy sequence over what it gets back from the underlying JDBC, but the Postgres driver is set to grab the entire result set by default |
| 20:40 | ibdknox | kwertii: korma also realizes that sequence since you can't pass it around otherwise |
| 20:40 | kwertii | ibdknox: it's simple enough to set the JDBC driver into chunked mode, I just can't figure out the Right Way to pass that information through Korma in a nice way |
| 20:40 | ibdknox | that lazy-seq has bitten almost everyone who uses c.j.jdbc |
| 20:41 | ibdknox | kwertii: is that something you'd want to set globally or per query? |
| 20:42 | kwertii | ibdknox: hm. if it realizes the whole results sequence anyway, it won't matter if JDBC is fetching in chunks; it'll be forced to grab everything |
| 20:42 | ibdknox | kwertii: yeah, that's what I was saying |
| 20:43 | ibdknox | kwertii: you can't retain the semantics of korma with that lazy seq |
| 20:43 | kwertii | ibdknox: in my particular case, I'd want it per connection, though I suppose it wouldn't matter if it was for everything, since most queries will return fewer results than the chunk size |
| 20:44 | kwertii | ibdknox: how about a nice neat way to give up some of the Korma stuff in specific cases where you want the lazy-seq? |
| 20:44 | kwertii | (with-lazy-results ... ) |
| 20:44 | ibdknox | kwertii: sounds reasonable |
| 20:45 | hiredman | you could just use korma to generate the query string |
| 20:45 | hiredman | and use clojure.java.jdbc directly |
| 20:46 | kwertii | hiredman: yeah, this would essentially be a convenience function to do that |
| 21:21 | xeqi | I was trying to use cljs for http://www.scribd.com/jobs/botrace_api. is there a way to define a non-namespaced function in cljs? |
| 21:47 | emezeske | xeqi: I don't know of a way. It would be trivial to write a js function that called an :export -ed cljs function though |
| 21:53 | xeqi | emezeske: I ended up doing (set! js/make_move make-move) and its working with :advanced |
| 21:57 | emezeske | xeqi: Makes sense that js/* would have to be left unmangled |
| 21:57 | xeqi | thanks for cljsbuild btw, its working nicely for me |
| 21:58 | emezeske | xeqi: glad to hear it! |
| 22:04 | pandeiro | is there a way to emulate a for x in obj loop in cljs w/o resorting to js->clj ? |
| 22:32 | kwertii | ibdknox: First pass at https://github.com/pjlegato/Korma/blob/feature/with-lazy-results/src/korma/db.clj#L182 , but it seems to freeze up after a few runs. Probably not releasing db connections back to the pool or something like that. Not sure if chunking is working properly apart from that, either. |
| 22:48 | emacsen | Is there a clojurescript contrib? |
| 23:15 | emezeske | emacsen: I don't believe so. There isn't even a Clojure contrib anymore. |
| 23:16 | emacsen | emezeske, so what about those nice contrib functions I rely on? |
| 23:16 | emezeske | ~contrib |
| 23:16 | clojurebot | Monolithic clojure.contrib has been split up in favor of smaller, actually-maintained libs. Transition notes here: http://dev.clojure.org/display/design/Where+Did+Clojure.Contrib+Go |
| 23:16 | emacsen | well I mean for cljscript specifically |
| 23:16 | ibdknox | it might be worth having a clojurescript version of something like useful |
| 23:17 | ibdknox | but specifically for random things related to JS |
| 23:17 | ibdknox | e.g. setTimeout and the like |
| 23:17 | ibdknox | I end up writing a few of those functions in every project because they don't seem to belong anywhere |
| 23:18 | emacsen | I'm halfway between doing the same (rewriting) and just using coffeescript for this relatively simple project |
| 23:19 | emezeske | emacsen: Can you give an example of what you're missing? |
| 23:19 | emacsen | emezeske, the seq function position |
| 23:20 | mabes | emezeske: thanks a ton for lein-cljsbuild! I finally started using clojurescript today (been using clojure since 09) and your project made things very easy :) |
| 23:20 | emacsen | from clojure.contrib.seq |
| 23:20 | emacsen | erm positions |
| 23:20 | emezeske | mabes: Glad to hear it! |
| 23:21 | emezeske | emacsen: I see. Does that have a clojure 1.3 home? Or is it stuck back in the 1.2 days? |
| 23:21 | emacsen | I'm fairly sure it's in 1.3 but I may be wrong |
| 23:21 | mabes | emezeske: btw, are you an emacs user? I'm trying to find the best way to start a clojurescript repl in emacs a'la clojure-jack-in/slime-connect |
| 23:21 | emezeske | emacsen: Well, I mean, contrib died with 1.3, so it would have to be in a different ns |
| 23:22 | emacsen | emezeske, ah right |
| 23:22 | emezeske | mabes: No, I'm a vimster, I'll be little help :) |
| 23:22 | emezeske | emacsen: I'm just curious because some things are relatively easy to port to cljs |
| 23:22 | emezeske | emacsen: But it would depend a lot on the particular thing |
| 23:23 | emacsen | emezeske, right, I'm just trying to decide which is more important to me right now: getting my project done or improving clojurescript |
| 23:23 | emezeske | emacsen: Sure. Depending on how many contrib functions you need, you could do some pasting (as horrible as that is) |
| 23:24 | emacsen | emezeske, yeah. we'll see how far I get I guess |
| 23:47 | ivan | can REPLy work well on Windows, perhaps with mintty or SSL client + some SSH server? |
| 23:48 | ivan | where "work well" must be outside of conhost, of course :) |
| 23:49 | ivan | maybe not https://groups.google.com/group/leiningen/browse_thread/thread/b8a3d36ebe1b6377 |
| 23:50 | ivan | probably fixable |
| 23:52 | scottj | emezeske: did you see the guy asking yesterday about a way to tell lein-cljsbuild what namespace to build from so that he could have three artifacts from one code base? |
| 23:53 | emezeske | scottj: I talked to someone about something similar to that, not sure if it was the same person |
| 23:53 | emezeske | scottj: Basically, I think it's not a good idea to do that in general |
| 23:56 | scottj | emezeske: ok, mostly wanted to know if there was that functionality hidden somewhere or if it was a planned feature, guess that answers it |
| 23:56 | emezeske | scottj: Is that something you wanted for your project? What kind of project? |
| 23:58 | scottj | emezeske: nope but I thought I might end up with a situation like his. he wanted to build mobile and desktop artifacts of his app |
| 23:58 | emezeske | scottj: Oh! That was definitely a different person than who I talked to |
| 23:58 | scottj | I'll look in backlog for his name |
| 23:59 | emezeske | scottj: So there is a way to accomplish that if you have a good reason (which the one you mentioned might be) |