#clojure log - May 25 2012

The Joy of Clojure
Main Clojure site
Google Group
List of all logged dates

0:00 hiredman: but if that proxy is the top leval it might not make a huge difference

0:00 mikera: it still gets called a few million times.....

0:01 because of anti-aliasing, you might have 16 calls per pixel etc.

0:09 pat_thomas: Opinions: should I go straight into learning Clojure, or learn Common Lisp first and then Clojure?

0:09 gf3: pat_thomas: They're very different

0:09 pat_thomas: I vote Clojure because I think you'll have more fun with it

0:09 mikera: hey hiredman thanks reify works well - speeded up the code a lot!!

0:10 pat_thomas: gf3: Does that have to mainly with the Java interop?

0:10 gf3: pat_thomas: Not necessarily, but it certainly helps

0:10 mikera: I prefer clojure syntax a lot to Common Lisp

0:10 more clean / functional

0:11 The Java iterop is a huge bonus for actually getting stuff done

0: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.

0:11 mikera: Common Lisp certainly still worth learning! Clojure doesn't (yet( have anything like CLOS

0:12 for example

0:12 pat_thomas: What differentiates CLOS from the ability for Clojure to use Java objects?

0:13 mikera: Well CLOS is a whole object system. it's dynamic rather than static, very flexible

0:13 pat_thomas: Interesting

0:13 mikera: so quite different from Java objects

0:13 pat_thomas: Right

0:14 mikera: I think Clojure style though is to avoid OOP entirely

0: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

0:14 mikera: CLOS will feel more familiar if you know JavaScript well I think

0:15 pat_thomas: I only know a little JavaScript, but I know a good deal of Java.

0:15 mikera: though it's not strictly prototype-based

0:15 brainproxy: pat_thomas: I find cloj quite refreshing, and I'm learning some java stuff along the way to be sure

0: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.

0:16 mikera: Yeah, all the Lispy parts are basically the same principles

0:16 just slightly differnt syntax

0:16 pat_thomas: That's what it seems like

0:17 mikera: main differentiators for Clojure are being more functional, great concurrency and exploiting the JVM platform

0:17 pat_thomas: Yes, which all seem to make it a more compelling language for "useful" software

0: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.

0:18 mikera: yeah the setup is tough. I was lucky because I came from the Java direction....

0: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

0:19 mikera: it depends a lot of you want to go the emacs/leiningen route of the eclipse/countercoskwise/maven route

0:19 brainproxy: true

0:19 pat_thomas: How would you go about setting up a machine for Clojure?

0:19 brainproxy: i was already doing nodejs/coffee with emacs

0:19 mikera: I only really use the later because I do 50% of my work in Java

0:20 brainproxy: so emacs wasn't new, but swank and inferior lisp ,etc. are new to me

0:20 mikera: never got the hang of emacs myself... looks awesome once you have a few years experience

0:20 but I never found the time to get up the learning curve....

0:20 brainproxy: pat_thomas: what os do you dev on?

0:20 mikera: WIndows

0:20 pat_thomas: Ubuntu

0:21 brainproxy: pat_thomas: if you've got java installed, there's not that much to it

0:21 pat_thomas: Yup, I have the Oracle JDK and JRE installed

0:21 And the clojure jar downloaded

0:21 brainproxy: simple thing would be to get leiningen installed and then start playing with it, invoking repl, learning about project.clj

0:22 that's probably easier than going at raw clojure jar

0:22 but ymmv

0:22 pat_thomas: what editor/ide?

0:22 pat_thomas: Vim about 80% of the time, Sublime Text a bit, Eclipse for large Java projects

0:24 brainproxy: gotcha, haven't tried setting up vim to do much with clojure

0:24 mikera: counterclockwise plugin for Eclipse is very good if you want to do Clojure+Java in the same project

0:24 brainproxy: mostly been using emacs and swank-clojure

0:24 gf3: Yay vim!

0:25 pat_thomas: mikera: Is that commonly done?

0:25 brainproxy: gf3: is there a good writeup for how to setup vim to play nicely with clojure, it's repl, etc?

0:26 gf3: brainproxy: Yes but they all suck, vim is not good at repls

0:26 brainproxy: gotcha

0:26 gf3: brainproxy: Your best bet is just to pop open a shell in vim and start a clojure repl manually

0:26 Which is unfortunate :(

0:27 brainproxy: It's totally possible to get a fancy Clojure repl session going, I've just personally never been happy with the final solution

0:27 Raynes: I wish sublime text 2 didn't suck so hard for lisps.

0:28 pat_thomas: Is it easy to set up Emacs with Clojure?

0:28 gf3: I wish Vico didn't suck!

0:28 * nDuff has trouble calling counterclockwise "good"; it's missing some pretty significant movements to anyone who's been using paredit in emacs long.

0:29 gf3: So much promise

0:29 brainproxy: pat_thomas: yes, it's pretty easy

0: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.

0:31 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.

0:32 gf3: Raynes: vim-clojure does a REALLY good job of this

0:32 Raynes: The syntax definition is several thousand lines of XML.

0: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

0:33 also I'm using a lot of my own Java libraries

0:34 so I'm stuck with a mix of Java+Clojure for the moment

0:52 mtkoan: can I scrape DOM elements with enfocus like enlive can with html/select?

0:52 or if not, is there a clojurescript lib to do that?

1:04 lynaghk: mtkoan: you can just drop down to (.querySelector js/document ".my > selector")

1:05 McMartin: Oh, is js/document the whole doc?

1:05 * McMartin has been gearing up to poke at that, but all he really needs is a div for use as an HTML "screen"

1: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

1:06 McMartin: js/document is the native document object, yeah.

1:07 McMartin: So I can just do (.getElementbyId js/document "screen")?

1:07 If I have a <div id="screen">

1:08 lynaghk: yep

1:08 tomoj: mtkoan: (select "selector") ?

1:08 lynaghk: the "js/" prefix gives you whatever is in the global JS namespace; same as if you typed directly into a JS console.

1:08 McMartin: nice, thanks

1:08 OK, that makes sense

1:09 nice, thanks

1:09 OK, that makes sense

1:09 (In case you dropped there)

1:09 lynaghk: McMartin: no problem. Oh yeah. I just opened my laptop. =P

1:09 McMartin: heh

1:11 Can you set! stuff in those globals like you can Java fields?

1:12 lynaghk: yep.

1:12 McMartin: woohoo

1:12 lynaghk: (set! (.-foo js/my-obj) "val")

1:12 McMartin: That's pretty much all I need for Phase 3 of my Cunning Master Plan to learn ClojureScript

1:12 * McMartin turns on the Tesla coils

1:17 lynaghk: McMartin: do it = )

1:17 McMartin: ClojureScript is a blast.

1:18 McMartin: Phase 1 is just about done

1:18 (Which was to make a program in regular old Clojure)

1:18 Phase 2 got added partway through, to automate it and play with trampolines

1:18 Phase 3 is "make it a webapp"

1:21 But then I got distracted by Python Project Other People Actually Care About =(

1: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

2:57 muhoo: wow, the world of security/authentication/authorization is just crawling with incidental complexity

2:58 what. a. zoo.

3: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?

3:08 ~/bin is in the exec-path

3:08 clojurebot: 'Sea, mhuise.

3:08 Dvyjones: (#emacs told me to try here)

3:11 amalloy: Dvyjones: sounds like you're using a mac?

3:11 scottj: Dvyjones: M-: clojure-swank-command

3:11 Dvyjones: amalloy: Nope, ArchLinux.

3:11 amalloy: hm

3:11 Dvyjones: amalloy: My mac worked perfectly with this.

3: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

3:12 Dvyjones: scottj: "echo \"lein2 jack-in %s\" | $SHELL -l"

3: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

3: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"))

3:14 Dvyjones: amalloy: ~/bin is in both $PATH and exec-path

3:14 (The expanded version, that is)

3:14 scottj: Dvyjones: maybe (setq clojure-swank-command "~/bin/lein2 jack-in")

3:15 (I don't use jack-in so these are all guesses)

3:16 Dvyjones: Ah, now I get "jack-in" is not a task, but I can fix that.

3:16 scottj: Thanks :)

3:23 scottj: Dvyjones: what shell are you using?

3:24 Dvyjones: scottj: zsh

3:25 scottj: Dvyjones: btw maybe should have been "~/bin/lein2 jack-in %s"

3:26 Dvyjones: scottj: Yeah, I just changed the lein2 to ~/bin/lein2. Worked perfectly.

3:29 kral: namaste

3: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!

3:41 pesd: hello

3:42 i have a problem

3:42 with casting i think

3:42 (def line (cast javax.sound.sampled.TargetDataLine (javax.sound.sampled.AudioSystem/getLine dlinfo)

3:42 line should then be a targetdataline, right?

3:42 but when i do (. line open af) it tells me

3:42 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

3:43 if instead of (cast) i use #^ecc. to do the casting it works

3:43 but only in emacs, when i compile it it gives the same problem

3:48 sophian: never mind, I found something that worked off of here: http://wiki.apache.org/logging-log4j/Log4jXmlFormat

4: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

4:14 sophian: amalloy: gotcha. thanks for the tips!

4:18 _KY_: Clojure.language.RT not found in my java code, what should I do?

4:18 clojure.lang.RT not found in my java code, what should I do?

4:18 Do I need to include some jar file?

4:20 bobry: why does clojurescript uses such an old version of closure library? any particular reason for this?

4:20 _KY_: can you show the code sample, which causes the error?

4:20 _KY_: It's in java

4:20 import clojure.lang.RT;

4:21 It was working just minutes ago

4:21 bobry: ah

4:21 _KY_: Not it's complaining "package clojure.lang does not exist"

4:21 *Now

4:24 Oh, problem solved -- forgot to add jar file to project

6:08 lypanov: anyone know if i can use promises etc in a noir app?

6:11 i'm guessing that aleph is being used in production but anyone know if noir-async is?

6:13 bobry: is there a reference for standard clojure protocols somewhere?

6:13 can't find it in the docs :/

6: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?

6:41 clgv: madsy: you can just use the name of the class - it'll be resolved to the clas object

6:48 lypanov: bobry: i'd read the source. thats usually where i turn eventually :)

6:49 bobry: lypanov: yup, that's what i'm doing right now :)

6:50 madsy: clgv: Ah, sweet

7: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

7:02 ivan: kilon: persistent data structures, protocols, macros, faster VM available, libraries with less mutable state, compiles to JavaScript

7:03 ClojureScript is not exactly Clojure though

7:03 kilon: sorry i meant clojurescript , you are correct of course and thanks for the points

7:04 i am already a python developer and trying to figure out how much i really need the additional feature clojurescript gives to me

7:04 of course i am ready to learn and do my own tests

7:04 but some personal opinion would not hurt either

7:06 lucian: i like clojure, as a python developer

7:06 ivan: ClojureScript produces output that Closure Compiler can compile with its advanced optimizations, which is very cool

7:06 lucian: i haven't used clojure in anger, so far i've used CoffeeScript for my JS needs

7:07 ivan: some people used CLJS in the latest Ludum Dare

7:07 lucian: cljs is indeed even saner than CoffeeScript

7:07 but arguably harder to debug

7:11 lypanov: coffee script is worse to debug.

7:11 repl in cljs makes it sane.

7:11 without chrome and coffee script maps coffee script is hell.

7:11 ivan: Coffee has a REPL too, no?

7:14 kilon: http://clojurescriptone.com/index.html

7:15 the repl looks cool here

7:17 yeah i am not considering coffeescript, i love python, I only consider clojure because i got big respect for it as a language

7:17 and lisp in general of course

7:18 lypanov: ivan: nothing like what i've got with noir-cljs etc

7:21 kilon: what is noir ?

7:23 trying google but does not give me useful result

7:23 lypanov: noir-cljs == https://github.com/ibdknox/noir-cljs

7:23 noir == http://webnoir.org

7:23 kilon: lol just fount it too

7:23 thanks lynaghk

7:24 lypanov:

7:24 lypanov: kilon: you're very experienced in js already?

7:24 kilon: lypanov: nope i have not coded a line of js yet, but i am learning it

7:24 lypanov: then start with JS

7:24 i made that mistake in past. its a bad one.

7:25 use clojure/python backend. but JS for frontend.

7:25 kilon: learning js wont be a problem , but yes i will learn it

7:25 lypanov: JS has great advantage that there is an insane amount of code you can reuse.

7:25 kilon: well python has pyjamas which compiles python to javascript like clojurescript compiles to js too

7:25 it also allows to mix js code with python

7:25 lypanov: last time i checked out pajamas it was basically useless :)

7:26 py*

7:26 kilon: i assume the same happens for javascript

7:26 sorry i mean clojurscript

7:26 lypanov: yup.

7:26 kilon: useless, really ? it comes always highly recomended

7:26 lypanov: but then much tighter javascript than pyjamas can produce.

7:26 kilon: and found several blog post stating that is the second coming of christ :D

7:27 lypanov: i'd still heavily suggest that you start with raw javascript.

7:27 kilon: by tigher you mean ? readable js code ?

7:27 lypanov: lots of the work you'll be doing is integrating libraries.

7:27 tighter meaning it generates very compact js code.

7:28 kilon: can clojurescript produce human readable javascript coder like parenscript does for common lisp ?

7:28 * lypanov bows unto dnolen

7:28 lypanov: kilon: yes. but i wouldn't suggest reading it :)

7:28 kilon: yes that is indeed a big advantage

7:29 i will learn javascript , dont worry , knowning js was in my plans before finding clojure

7:29 i love learning programming languages

7:30 dan_b: if you feel like spending money, Douglas Crockford's "Javascript the good parts" is imo the canonical book

7:30 Borkdude: I started using Clojure because I had to use Java more and Clojure makes me use Java and think about Java more ;)

7:30 kilon: yeah i hear that A LOT

7:31 "good parts" that is

7: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

7:31 and I think using clojurescript a lot and reading examples will give me some sense of it

7:32 learning Java or javascript on their own would be too boring for me, clojure is what adds the extra fun to it

7:33 kilon: the problem with javascript vs java is that js is actually a very good functional language

7:33 at least that is the vibe i am getting from reviewers

7:34 ivan: not really. there isn't even a repr() or proper equality

7:34 dnolen: kilon: JS is a good functional language?

7:34 Borkdude: kilon: yes, but it's also a language in which you can make a mess :)

7:34 ivan: Array sort sorts numbers wrong, etc. it's a minefield.

7:34 dnolen: kilon: I've been using it for 7 years, it's not a "good" functional language.

7:34 kilon: well i have read many blog claiming js as the new lisp

7:34 dnolen: kilon: it's an interesting hybrid.

7:34 kilon: snort

7:35 kilon: i am no way claiming anything

7:35 Borkdude: I saw the video from Crockford on javascript and the brain

7:36 it made me interested in the book javascript the good parts

7:36 kilon: i dont think any language can stop your from writting bad code

7:36 at least i have not meet on yet

7:37 Borkdude: kilon: I agree

7:37 kilon: but some languages more than others ;)

7:37 dan_b: I found that java quite effectively stopped me fron writing *any code at all*

7: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

7:37 dan_b: good or bad

7:38 kilon: its the same question i asked myself when studying common lisp

7:38 lypanov: it depends on what you're doing. and what your background is.

7:38 Iceland_jack: kilon: Common Lisp is hardly functional...

7:38 Borkdude: kilon: what is the need of good abstractions

7:38 lypanov: just like c++. cl can be functional. :))

7:39 dan_b: map/reduce/filter/etc is stuff that every programmer should know

7: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

7: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)

7:40 dan_b: it's less unwieldy than javascript. python I at all

7:40 kilon: python is really bad at being functional i am afraid :D

7:40 dan_b: s/I/I don't know/

7:40 kilon: I love python but truth must be told :D

7:41 Iceland_jack: Not being functional isn't inherently bad kilon

7:42 Borkdude: ah well… https://twitter.com/fakerichhickey/status/200963481565011969

7:42 kilon: Iceland_jack: good point

7: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

7:42 hell..

7:43 *sorry, wrong channel

7:44 kilon: i really dont like haskell syntax, too perly for my taste

7:44 though i dont dispute it might be an awesome language

7:44 Borkdude: kilon: I really hate the string concatenation I see sometimes all over the place in haskell code

7:44 ivan: the epidemic of tab/space mixing in the Java community makes it really easy to tell which code is new

7:45 * ivan found some in OpenJDK yesterday

7:45 lypanov: obviously not using intellij then.

7:45 (death to tabs!)

7:45 kilon: thanks for the guidness people

7:45 Borkdude: for example: https://gist.github.com/2787518

7:46 ivan: IntelliJ might actually be part of the problem by not detecting tab/space per-file

7:47 kilon: will certainly give a try to clojure and clojurescript during this weekend

7:47 see you all later

7: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.

7:48 ivan: well, sometimes there's multiple styles or imported code in a project

7:49 lypanov: anyone around using slimv rather than vimclojure? trying to figure out if i should switch.

7:55 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?

7:57 dnolen: lypanov: I don't see how that can work *client side* across page refreshes.

7:58 lucian: why not just explicitly split it in two functions?

7: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".

7:59 maybe best just just have the macro produce the same array of functions.

8:00 dnolen: lypanov: oh so on the same page - then yes probably.

8:00 lypanov: I'm waiting for clojure-tco to evolve a bit more, should be a good foundation for that kind of thing eventually.

8: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?

8:02 sorry i mean internal state.

8:02 tomoj: since you have the phantomjs context across the redirect, why would you need continuations?

8:03 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?"

8:03 right?

8: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

8:03 lypanov: i'm keeping state external to phantomjs so i can use feasibly the same tests in selenium to do IE screenshotting also.

8:04 yes there is fallback code but its more of a "nothing happens for 10 seconds" like system.

8: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.

8: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

8:07 which would be strictly more powerful I think, making e.g. "this url should 404" tests easy

8:07 lypanov: tomoj: "this should be 404" tests don't belong in this testing framework though.

8:07 this is a "run a bunch of js then take a screenshot" system.

8:08 doing it because i'm pretty much sole maintainer of app and i have to start refactoring css or i'll go crazy

8:08 Borkdude: has anyone in here read "Collective Intelligence" (and translated some of the examples to Clojure?)

8:08 tomoj: s/"this url should 404"/"they should redirect and then I'll take a screenshot"/ say

8:08 or whatever

8: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.

8:11 tomoj: but based on conversation with dnolen now understand that i can't (de)marshal delimeted continuation state.

8:11 tomoj: oh, you have it working across redirects already?

8:11 lypanov: delimited*

8:11 yes. everything works.

8:11 just that i now want to port to clojurescript and get pretty code.

8:13 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.

8:14 tomoj: working on SPI (single page interface) and i was going crazy getting back/forward handling Right.

8:26 _KY_: How do I use Integer/parseInt?

8:27 ivan: ,(Integer/parseInt "34")

8:27 clojurebot: 34

8:35 lypanov: w00t. found example i can extend: https://bitbucket.org/puffnfresh/clojurescript-timeout-cps/src/1a8065fbf65a/src/puffnfresh/timeout.clj

8:39 bderooms: is there absolutely no way to wait inside an agent for an other agent?

8:45 beffbernard: bderooms: use a promise?

8:45 _KY_: Lol I spelt Integer as Interger

8:47 bderooms: beffbernard: mm checking it

8:58 bobry: why doesn't clojure script support :require without :as? what if I just want to make sure the module is loaded?

9:00 dnolen: bobry: oversight

9:00 bobry: http://dev.clojure.org/jira/browse/CLJS-272

9:02 bobry: dnolen: cool :)

9:09 lypanov: nice. wanted that too.

9:10 Borkdude: using sqlite requires no native driver/code, the sqlite jdbc driver is enough, am I right?

9: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?

9:16 so I don't have to manually extend my type with Bar, if it already implements Foo

9:18 dnolen: bobry: nope

9:18 bobry: the closest you're going to get is to build some component abstraction - extend-type default allows for delegation.

9:20 bobry: i see, thanks

9: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

9: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?

9:32 almostobsolete: Is there a common mistake that this might be?

9:33 ivan: please pastebin the stacktrace

9:34 almostobsolete: Here's the stacktracke: https://gist.github.com/2788187

9:35 *stacktrace

9:37 antares_: bobry: because forms are evaluated at compile time and (symbol …) is a function call that happens at runtime

9:38 ivan: almostobsolete: maybe http://stackoverflow.com/questions/7222376/clojure-compojure-hiccup-nullpointerexception

9:38 (no idea really, that stack trace is not great)

9:39 almostobsolete: it's all just copy pasted from the tutorial, no changes

9: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"

9:43 almostobsolete: Does anyone know some starting points for playing with clojure web apps that work?

9:43 I think maybe the tutorial for compojure has bit-rotted :(

9:44 the-kenny: almostobsolete: Start at the compojure Github page :)

9:44 Noir is hot too

9:44 pandeiro: almostobsolete: i would start with cljs-template or clojurescript-one

9:44 S11001001: or what antares_ said

9:45 pandeiro: cljs-template sets up a noir/cljs env and one uses a more barebones compojure

9:45 almostobsolete: I'll take a look at those, the thing I was following before was: https://github.com/weavejester/compojure/wiki/Getting-Started

9:46 I'll try noir

9:46 pandeiro: almostobsolete: if you're trying to grok how things work you can go straight to ring, too

9:47 i started with noir and worked backwards, maybe not how i would do it if i started over

9:48 ie 1) build hello world with ring, 2) build hello /route with compojure 3) build hello to-do-list with noir 4) ... 5) profit!

9:48 almostobsolete: pandeiro: that makes a lot of sense

9:50 pandeiro: almostobsolete: yeah so ignore my earlier recommendation to go straight to cljs-template and its 6 million moving parts

9:51 though it will build you a fully functional webapp that you can then modify... maybe that would be good for step 3

9:51 although in the spirit of the 'learn x the hard way', perhaps it's better to actually have to type all the boilerplate out?

9:52 the-kenny: almostobsolete: If you want to try compojure a second time, tell us the stacktrace :)

9:52 Just a NPE isn't helpful

9:53 ivan: <almostobsolete> Here's the stacktracke: https://gist.github.com/2788187

9: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 Which also isn't working for me, but trying a few things before asking :)

10:02 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 at this point I expected to be able to use the functions I defined with defn in core.clj

10:03 but instead I get:

10:03 CompilerException java.lang.RuntimeException: Unable to resolve symbol: handler in this context, compiling:(NO_SOURCE_PATH:0)

10:03 Am I being stupid? :)

10:03 jedmtnman: almostobsolete: your namespace needs to match the file structure

10:03 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 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 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 Here's what I'm doing right now: https://gist.github.com/2788329

10:11 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 That "map" has 3 arguments?

10:39 gfredericks: yep

10:39 &(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 ,(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 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 (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 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 lypanov: ah ok i am specifically wanting to use the repl to debug some stuff

10:49 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 maybe slime-compile-and-load combines those

10:50 ?

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 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 Is that from Java?

10:57 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 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 Then the jar is used by my java program

11:03 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 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 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 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 making me wrong

11:17 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 ^^ 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 in testing*

11:24 goodiebo_: gfredericks: interesting, i'll look that up thanks

11:29 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 I'll search on

11:40 timvisher_: how do i extend io/copy to a new type?

11:40 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 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 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 so it's better to only use AOT compilation when the application is finished

11:53 (get in the way = cause redefined functions to not be recognized some times)

12:00 nDuff: Hmm.

12:04 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 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 (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 tries it on 1.4

12:15 gfredericks: same on 1.4

12:16 nDuff: what if you just entery `auth-context at the repl?

12:16 ,`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 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 * nDuff is using nREPL

12:17 S11001001: #=(do *ns*) gives?

12:18 nDuff: #<RuntimeException java.lang.RuntimeException: Can't resolve do>

12:18 S11001001: ick

12:18 #=(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 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 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:24 * nDuff would ask around on the clojure-tools mailing list (used for nREPL), but best he can tell the moderators are off coding/fishing/not-approving-posts this week.

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 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 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 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 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 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 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 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 {"foo"

12:50 {"foo" {

12:50 arrgggg

12:50 {"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 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 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 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 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 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 right

12:57 TEttinger: rev should reverse it, right?

12:58 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 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 ,(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 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 ,(+ 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 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 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 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 http://www.webnoir.org/

13:10 timvisher_: beware of the hairball! ;)

13:11 AeroNotix: TEttinger: thanks :)

13:11 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 it is a tiny script...

13:12 AeroNotix: TEttinger: I've not looked into what it actually is

13:12 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 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 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 ,(#(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 fib is reply See #haskell

13:35 timvisher_: stobix: see above

13:36 raek: or quote

13:37 ,'#(%)

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 ,(let [ŭ #(+ 2 %)] (ŭ 3))

13:42 clojurebot: 5

13:46 TimMc: Clo𝑗ure

13:46 Hrm, no font support here.

13:47 raek: I think that character was damaged during encoding in your irc client


13:48 CloƷure

13:48 timvisher_: i saw the character fine

13:48 i think, at least ;)

13:48 raek: which one was it?

13:48 TimMc: U+1D459 I think

13:49 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 TimMc: U+1D457 then

13:50 J

13:50 raek: I see :)

13:50 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 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 not exactly what I had in mind

14:02 but yes

14:02 also "

14:03 but more importantly, the behavior is pretty unexpected

14:04 ("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 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 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 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 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 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 mostly because not very many projects need it

14:21 eggsby: ya

14:22 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 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 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 thanks for the pointer

14:34 * technomancy has no idea

14:35 timvisher_: do you fix the repl technomancy?

14:36 technomancy: no

14:37 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 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 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 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 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 for me the don't know how to skip over [ and {

14:44 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 well, there were a number of problems with what i was doing

14:45 i don't load slime out of the gate

14:45 nor paredit

14:45 so i needed to put it in an eval-after-load form

14:46 and then the lambdas were screwed up somehow

14:46 so I needed to pull those out

14:46 but now it seems to work fine

14:46 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 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 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 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 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 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 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 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 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 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 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 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 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 i didn't say they did

15:13 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 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 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 :)

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 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 *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 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 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 * banseljaj puts the video on downlad and watches scrubs

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 if i could learn that i think my life might be a lot cleaner

15:22 ^_^

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 point cedede

15:25 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:26 * timvisher_ remembers getting slammed for trying to put lein repl in the inferior lisp program var because you shouldn't use a build tool for your repl… good times

15:27 timvisher_: Borkdude: nothing's easier than `clojure-jack-in`

15:27 ;)

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 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 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 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 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 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 ,(ifn? {:a 1}) ;;=> true

15:42 clojurebot: true

15:43 Borkdude: hmm...

15:43 ,(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 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 (I know, without the ?)

15:44 gfredericks: Borkdude: doc doesn't creash if you give it something undefined

15:45 it's a macro, so it doesn't have to eval the arg

15:45 ,(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 &(source doc)

15:46 lazybot: java.lang.RuntimeException: Unable to resolve symbol: source in this context

15:46 Borkdude: why!!!

15:46 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 but I was looking at 1.3 code I think

15:50 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 not in an outside project repl.. nm


16:32 am I the only one to find function composition and the order of tunctions in comp counter-intuitive?

16:33 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 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 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 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 #webkit

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 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 ()

17:17 lypanov: anyway around using clojurescript with goog.dom.query?

17:18 * lypanov is reading the threads on this and utterly baffled

17:20 emezeske: lypanov: what do you mean "around"?

17:20 lypanov: as in, online :)

17:20 * emezeske is more confused now.

17:20 lypanov: oh

17:20 "anyone around"

17:20 hehe

17:21 emezeske: Ah, that makes more sense!

17:24 * lypanov reading https://github.com/emezeske/lein-cljsbuild/issues/30 and thinking weird, that guys got the same name as the person that just spoke in #clojure

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 but i have no idea how to use any of this.

17:27 i'm too dumb to do anything more than copy and paste from leiningen partials.

17:27 amalloy: fil512: sorta

17:27 &(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 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 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 t.

17:30 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 dnolen: libersybooking.com non open source but all production for months already

17:33 Raynes: Man, colloquy. Hate that thing.

17:33 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 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 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 didn't get much done at all in the days he used to use irc

17:44 lypanov: dnolen: afaict domino conflicts with pretty much everything else wrt version needed of goog.jar.

17:45 domina*

17:45 dnolen: lypanov: you mean domina requires an out of date goog.jar?

17:45 lypanov: yeah.

17:46 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 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 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 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 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 dnolen: main problem is there belief in this whole "theming" concept.

17:50 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 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 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 * lypanov modifies his noir-cljs fork

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:55 * lypanov still not happy enough with his clojure skills to do actual design in it…

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 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 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 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 gets back to real world :P

18:03 lypanov: i need to read my joy of clojure book. its sitting on the shelf for 3 months already.

18:04 * lypanov can't bring himself to write anything more than basic "integration" code until he's finished every last page

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 I was wondering if anyone could shed some insight on http://stackoverflow.com/questions/10740265/macro-with-anonymous-functions

18:11 * lypanov really should clean up his noir-cljs fork.. can't imagine using noir-cljs without my changes

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 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 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 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 say I wanted to inc 1 all those end values

18:29 {: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 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 they're actually strings...

18:31 technomancy: fil512: any level of nesting or just one?

18:31 fil512: just one

18:31 in actuality, it's host -> week -> uptime

18:32 I looked at update-in, but it looks like it's designed to just work on one leaf at a time

18:32 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 I considered that

18:33 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 ya!

18:34 that's what I want!

18:34 :-)

18:34 there's no sort of map-vals?

18:34 technomancy: (defn map-vals [m f] (zipmap (keys m) (map f (vals m))))

18:34 it really should be in clojure.core, but it's not, so there you go =)

18:34 fil512: back to zipmap again

18:34 just seems sort of unclojurish to use zipmap

18:35 but I guess it's what we got.

18:35 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 yes

18:36 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 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 (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 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 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 $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 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 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:56 * talios returns with textual

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 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 startup time

19:07 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 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 though

19:16 ibdknox: I don't know that I would say that

19:16 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 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 it is still threadpools and tasks

19:21 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 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 why's that?

19:24 hiredman: "hey, can I use this instead of php?"

19:24 ibdknox: as

19:24 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 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 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 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 python has a repl, but its facilities for doing dynamic things are half-baked at best

19:30 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 I don't know of what use that would be though… ;)

19:42 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 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 Or not..

19:44 Damn it.

19:44 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 s/errors/exceptions

19:50 I'd like to distinguish between a duplicate key violation and other exceptions, for example.

19:51 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 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 the fact that you can "throw" arbitrary objects seems a bit silly, limiting it to throwing maps only would be better

20:00 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 technomancy: yes

20:02 hiredman: yes

20:02 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 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 ...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 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 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 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 austinh: also, you can always *shudder* use stored procedures

20:30 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 never needed it since I wasn't working with gigantic datasets :(

20:38 I actually was unaware of it haha

20:38 kwertii: ibdknox: ahh

20:39 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 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 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 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 (with-lazy-results ... )

20:44 ibdknox: kwertii: sounds reasonable

20:45 hiredman: you could just use korma to generate the query string

20:45 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 but specifically for random things related to JS

23:17 e.g. setTimeout and the like

23:17 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 erm positions

23:20 emezeske: mabes: Glad to hear it!

23:21 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 emacsen: I'm just curious because some things are relatively easy to port to cljs

23:22 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 where "work well" must be outside of conhost, of course :)

23:49 maybe not https://groups.google.com/group/leiningen/browse_thread/thread/b8a3d36ebe1b6377

23:50 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 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)

Logging service provided by n01se.net