2013-01-18
| 00:24 | handojin | quiet |
| 00:24 | handojin | quiet |
| 00:25 | cemerick | luminus? |
| 00:25 | cemerick | luminus? |
| 00:25 | handojin | ? |
| 00:25 | cemerick | What is luminus? |
| 00:25 | handojin | lein new luminus <projectname> |
| 00:25 | handojin | replaces noir |
| 00:26 | handojin | http://www.luminusweb.net/docs |
| 00:29 | handojin | it was a bad question - i just started the server from the shell in ~home/workspace/<project> |
| 00:31 | bbloom | any easy way to get the stack trace of an exception that happened on a non-repl tread? |
| 00:31 | bbloom | thread* |
| 00:41 | handojin | @cemerick - friend looks really nice - thanks! |
| 00:42 | cemerick | oh, right (re: luminus) |
| 00:42 | cemerick | handojin: you're welcome...though probably best to thank me after you have it working :-) |
| 00:42 | cemerick | bbloom: if you can get a reference to the exception :-P |
| 00:43 | bbloom | cemerick: i assume that :-P face means there isn't an easy way to do that? heh |
| 00:43 | bbloom | try/catch/(def omgwtfbbq e) ? |
| 00:44 | cemerick | bbloom: That's certainly one way. Is the exception going entirely uncaught right now? |
| 00:44 | bbloom | cemerick: it was more of a hypothetical question, since the problem occurred in a pure function |
| 00:44 | djwonk | luminous, would you say that I have a plethora of pinatas? |
| 00:44 | djwonk | from the site: "Have access to the plethora of existing Clojure and Java libraries" |
| 00:44 | bbloom | i just printed out the inputs, copy pasted them into a buffer, and ran the function in isolation |
| 00:45 | bbloom | for some odd reason, i find that clojure.core/+ is your worst nightmare when it comes to figuring out what's going wrong in your function |
| 00:45 | bbloom | math functions seem to hate stack traces |
| 00:46 | cemerick | bbloom: well, there's a couple of janky things you can do to backstop uncaught exceptions |
| 00:46 | cemerick | (1) http://docs.oracle.com/javase/6/docs/api/java/lang/Thread.html#setDefaultUncaughtExceptionHandler%28java.lang.Thread.UncaughtExceptionHandler%29 |
| 00:46 | cemerick | and the higher-level (2) http://docs.oracle.com/javase/6/docs/api/java/lang/ThreadGroup.html#uncaughtException%28java.lang.Thread,%20java.lang.Throwable%29 |
| 00:47 | bbloom | hmmm... would it be exceedingly janky for nrepl & friends to do that for me? :-) |
| 00:47 | cemerick | The most common problem is that the exceptions you're interested in are *already* being caught, just by code you don't control |
| 00:47 | cemerick | bbloom: yes :-) |
| 00:48 | cemerick | Although you could readily sling together an nREPL middleware that could do useful things, like push successive exceptions into a stack, thus providing history |
| 00:48 | bbloom | my kingdom for a restart! |
| 00:49 | luxbock | what is the difference between let and let*? |
| 00:49 | cemerick | oh, well, there's at least 2 or 3 restart libs for Clojure |
| 00:49 | bbloom | cemerick: that work with arbitrary exceptions that i didn't throw? |
| 00:50 | cemerick | bbloom: sure, but that's not really the problem, is it? |
| 00:50 | cemerick | it's the exceptions you don't catch that you want to get at |
| 00:50 | bbloom | *shrug* i'm just getting spoiled by how nicely some things work: nrepl, lein, etc... i want my debugging cake too :-) |
| 00:51 | bbloom | i just want to `lein update` or upgrade or whatever it is and have all this work... i'm just being greedy and whiney, so ignore me :-) |
| 00:52 | cemerick | bbloom: oooh, you want break-on-exception in a debugger |
| 00:52 | handojin | @djwonk - is russlish maybe? more horrorshow than nadsat anyway |
| 00:52 | bbloom | and i want it to Just Work (tm) |
| 00:53 | cemerick | bbloom: I used it in ccw just today. 'tworks just fine. :-) |
| 00:53 | bbloom | is that via ritz ? |
| 00:53 | cemerick | Ritz has break-on-exception as well AFAIK |
| 00:53 | bbloom | bah. why is this not in `lein repl?` |
| 00:53 | bbloom | `? |
| 00:53 | cemerick | no, ccw just usess Eclipse's debugger |
| 00:53 | bbloom | oh |
| 00:53 | bbloom | boo |
| 00:54 | cemerick | hah |
| 00:54 | cemerick | I thought you wanted it to Just Work™? :-P |
| 00:54 | bbloom | And Use Less RAM (R) |
| 00:54 | bbloom | and VIM (C) |
| 00:54 | cemerick | gtfo with your netbook ;-) |
| 00:54 | djwonk | handojin: ?… I was laughing at the 'plethora' use -- reminds me of Three Amigos |
| 00:54 | bbloom | heh, i'm on a mbp |
| 00:55 | cemerick | I run Eclipse with 512 heap FWIW. |
| 00:55 | cemerick | Ritz isn't going to be much more lightweight, since there's 3 JVMs. |
| 00:55 | handojin | teh RAM be cheap these days |
| 00:56 | cemerick | Though I appreciate that some people inexplicably prefer textmode stuffs. |
| 00:56 | bbloom | i don't just write clojure |
| 00:56 | xeqi | I've gotten ritz's break-on-exception to work on the repl thread |
| 00:56 | bbloom | i need one text editor that keeps me sane across the board |
| 00:56 | xeqi | never tried in another one |
| 00:57 | cemerick | sure, I use vim for everything but clojure |
| 00:58 | bbloom | i'd rather vim than a debugger :-P |
| 00:58 | cemerick | xeqi: you should be able to do it for all threads in the vm |
| 00:58 | bbloom | i also prefer command line debuggers anyway |
| 00:58 | xeqi | cemerick: yeah, I'd expect it to owrk |
| 00:59 | cemerick | bbloom: well, just bring up jdebug only when you need it |
| 00:59 | cemerick | sorry, jvisualvm |
| 01:12 | bbloom | ibdknox: i'm github stalking ppl lately... saw you forked dommy. is template speed an issue at all for you? |
| 01:35 | handojin | anybody working with datomic? |
| 01:46 | holo | hi |
| 01:47 | holo | in korma, any way to increment a value without making two queries? |
| 02:18 | syrinx_ | i think i might be in love with noir |
| 02:25 | bbloom | i think i'm in love with writing functions that concatenate a sequence of side effects to be evaluated later |
| 02:26 | syrinx_ | :D |
| 02:36 | alex_baranosky | bbloom: yes! hallelujah, yes |
| 02:36 | alex_baranosky | holo: don't think there is, no |
| 03:00 | cbp` | anyone here using emacs live |
| 03:00 | cbp` | i keep getting segmentation faults :/ |
| 03:02 | tomoj | &((juxt #(do %& %1) (fn [& args] (nth args 1))) 1 2 3) |
| 03:02 | lazybot | ⇒ [1 2] |
| 03:02 | tomoj | hmmm |
| 03:07 | bbloom | ,(#(-> %&) 1 2 3) |
| 03:07 | clojurebot | (1 2 3) |
| 03:07 | bbloom | heh, what-ya know... i had no idea %& was a thing |
| 03:07 | AtKaaZ | what am I doing wrong here: https://gist.github.com/4563026 |
| 03:08 | bbloom | ,(macroexpand '#(-> [%1 %2 %&])) |
| 03:08 | clojurebot | (fn* [p1__56# p2__57# & rest__58#] (-> [p1__56# p2__57# rest__58#])) |
| 03:09 | bbloom | AtKaaZ: call deref on var |
| 03:09 | bbloom | v.deref() |
| 03:09 | bbloom | you want the current value of that var |
| 03:09 | AtKaaZ | oh very nice, thank you! |
| 03:10 | AtKaaZ | interesting, so in clojure when the symbol for that var is encountered a deref is done |
| 03:13 | alex_baranosky | bbloom: so I think your idea of building up a sequence of io operations to execute later is a really important "design pattern" for clojure apps |
| 03:14 | bbloom | alex_baranosky: yup. i'm taking it to a tad of an extreme though :-) |
| 03:15 | bbloom | alex_baranosky: https://www.refheap.com/paste/8737 |
| 03:15 | alex_baranosky | I hate side-effects, I wonder how extreme is too extreme. Now you have me curious |
| 03:15 | bbloom | that's a really simple example |
| 03:15 | bbloom | the dom/ namespace contains a bunch of factjor words |
| 03:16 | bbloom | notice how it recurses and creates children stuff before wrapping the create-element and append |
| 03:16 | alex_baranosky | not sure that's so extreme |
| 03:16 | bbloom | if those were normal side effects, i'd be forced to use doseq and put the children order in the middle |
| 03:17 | bbloom | well, it's extreme because i implemented a conatenative language interpreter to be able to do this :-) |
| 03:17 | bbloom | haha |
| 03:17 | alex_baranosky | yep; that's where you went over the limit |
| 03:17 | alex_baranosky | hehe |
| 03:18 | alex_baranosky | interesting though… so you are using the sequence as a way to also add on the parameters? |
| 03:18 | alex_baranosky | I would have tended to use currying or partials for that |
| 03:18 | bbloom | the words in factjor are applicable & they do right-currying |
| 03:19 | bbloom | so these two things are equiv: ["the-rect" element-by-id :fill "red" set-attribute] |
| 03:19 | bbloom | and: [(get-by-id "the-rect") (set-attribute :fill "red")] |
| 03:19 | AtKaaZ | ,(#(%&_) 1 2 3) |
| 03:19 | clojurebot | #<ExecutionException java.util.concurrent.ExecutionException: java.lang.IllegalStateException: arg literal must be %, %& or %integer> |
| 03:20 | AtKaaZ | ,(#(%_%&) 1 2 3) |
| 03:20 | clojurebot | #<ExecutionException java.util.concurrent.ExecutionException: java.lang.IllegalStateException: arg literal must be %, %& or %integer> |
| 03:20 | AtKaaZ | ,(#(%_&) 1 2 3) |
| 03:20 | clojurebot | #<ExecutionException java.util.concurrent.ExecutionException: java.lang.IllegalStateException: arg literal must be %, %& or %integer> |
| 03:20 | AtKaaZ | ,*clojure-version* |
| 03:20 | clojurebot | {:interim true, :major 1, :minor 4, :incremental 0, :qualifier "master"} |
| 03:20 | alex_baranosky | right, makes sense. You could do the same kind of things by saying [#(get-by-id "the-rect") #(set-attribute :fill "red")] no? then just calling each after? |
| 03:21 | bbloom | alex_baranosky: to some extent |
| 03:21 | nonuby | can anyone help with making this more pragmatic, function to replase any to or from key with value 1000. here what Ive come up with but feel icky https://www.refheap.com/paste/8738 |
| 03:21 | bbloom | set-attribute needs an element to operate on |
| 03:21 | bbloom | so really it would be: [#(set-attribute (get-by-id "the-rect") :fill "red")] |
| 03:22 | bbloom | alex_baranosky: see the "stack effects" defined here: https://www.refheap.com/paste/8739 |
| 03:22 | bbloom | notice how all the operations leave elements on the stack |
| 03:22 | AtKaaZ | ah ofc I typoed: &(#(#_%&) 1 2 3) |
| 03:22 | alex_baranosky | bbloom: the idea is one worth pushing, we're moving our current design at work toward this kind of thing |
| 03:22 | bbloom | there's also a cat/ namespace for generic concatenative operators |
| 03:22 | bbloom | like cat/each |
| 03:22 | AtKaaZ | ,(#(#_%&) 1 2 3) |
| 03:22 | clojurebot | () |
| 03:22 | bbloom | so you could do [(elements-with-tag "div") [cat/prn] cat/each] |
| 03:23 | bbloom | and that would print out each div on the page |
| 03:23 | bbloom | :-) |
| 03:23 | bbloom | the result is a jquery-like api.... it's like threading macros on steroids! |
| 03:24 | alex_baranosky | on thing you seem to loose is the ability to look at the data structure that holds the planned ii-executions, and manipulate it nicely… Because the args and the function names are mixed together |
| 03:24 | bbloom | alex_baranosky: i'm working on a solution to that too :-) |
| 03:24 | alex_baranosky | bbloom: so is this part of the API of your library? |
| 03:24 | bbloom | alex_baranosky: yeah |
| 03:25 | bbloom | alex_baranosky: i'm gonna make a polymorphic method to take a factjor program and return it in literal form |
| 03:25 | alex_baranosky | neat stuff. the more you can see your IO effects as data the better, imho |
| 03:25 | bbloom | alex_baranosky: which will be useful for serializing programs and sending them across the wire |
| 03:25 | Raynes | alex_baranosky: Did you ever get your IRC client stuff sorted? |
| 03:25 | Raynes | I guess you forgot the znc creds |
| 03:26 | juxovec | what is the best Clojure book? |
| 03:26 | alex_baranosky | Raynes: hey dude, I have been so dan busy with everything I back-burnered it. Linkinus mysteriously stopped being buggy for now |
| 03:26 | alex_baranosky | juxovec: read them all :P |
| 03:26 | AtKaaZ | ,(= '() (#__) (list)) |
| 03:26 | clojurebot | true |
| 03:26 | Raynes | juxovec: Clojure Programming is a good one. |
| 03:26 | alex_baranosky | yeah I like the O'Reailly one |
| 03:26 | AtKaaZ | ,#__ |
| 03:26 | clojurebot | #<ExecutionException java.util.concurrent.ExecutionException: java.lang.RuntimeException: EOF while reading> |
| 03:26 | juxovec | Raynes: this one? http://www.clojurebook.com/ |
| 03:27 | Raynes | Yes. |
| 03:27 | juxovec | thanks |
| 03:34 | bbloom | i put together a little pong game to test some UI framework code... it's requiring ALL OF MY WILLPOWER to avoid writing a little physics engine |
| 03:34 | bbloom | the manual hacky repetitive bounds checks make me cringe :-P |
| 03:49 | augustl | anyone here successfully used korma + clojure.java.jdbc to work with an in-memory h2 database? |
| 03:57 | augustl | there seems to be a lack of interop there. I need to use the very same connection for all operations, since creating a new connection means creating a new in-memory database |
| 03:58 | augustl | and korma works with their encapsulation, while clojure.java.jdbc works with the raw connections. |
| 03:59 | ebaxt | augustl: I assume you are aware that the connection string affects the mode? http://www.h2database.com/html/features.html#connection_modes |
| 03:59 | ebaxt | ? |
| 04:01 | tomoj | :( https://www.refheap.com/paste/882fea4675b8b7dc8fc4e9d99 |
| 04:01 | tomoj | oh, #(-> %1) is very cute |
| 04:03 | borkdude | tomoj ah yes, that's nice |
| 04:04 | augustl | ebaxt: yeah, I'm using "jdbc:h2:mem:" |
| 04:04 | pisketti | tomoj: mmmm, when would you use/need that? (pardon my ignorance) |
| 04:05 | borkdude | pisketti same as (fn [x] x) |
| 04:05 | tomoj | which is better written `identity` |
| 04:05 | pisketti | how about identity? |
| 04:05 | pisketti | :) |
| 04:05 | tomoj | but I see #(-> %2) or #(-> %3)... occasionally |
| 04:05 | tomoj | also #(-> [%1 %2]) oslt |
| 04:06 | tomoj | I mean I've never seen it written that way — I've seen equivalent functions |
| 04:06 | borkdude | pisketti yolo |
| 04:06 | augustl | seems like clojure.java.jdbc isn't made with in-memory h2 support in mind. It always takes the connection spec, not a raw connection object |
| 04:07 | tomoj | it's too bad clojure.core.reducers doesn't expose its gerundives |
| 04:07 | ebaxt | augustl: Can't you just name the in-memory db so you can use multiple connections? jdbc:h2:mem:foo? |
| 04:08 | augustl | ebaxt: then I need to make sure I kill it though, was hoping to avoid that |
| 04:09 | augustl | then again, the fact I'm passing a connection to my API is not very good anyway.. Implementing connection pooling later would suck |
| 04:14 | augustl | feels a bit like I'm a pioneer by wanting to use in-memory h2 for my tests :) |
| 04:23 | xificurC | does anyone have a working windows batch file for starting clj files? I tried the one mentioned in wikibooks but I get "Exception in thread "main" java.io.FileNotFoundException" |
| 04:26 | AtKaaZ | I'm on windows but I don't know what you mean |
| 04:27 | xificurC | http://en.wikibooks.org/wiki/Clojure_Programming/Getting_Started#Create_clj_Script |
| 04:28 | AtKaaZ | the batch is for very old clojure 1.2.0 which had contrib, you could try using leiningen instead |
| 04:39 | clgv | xificurC: better use leiningen 2.0 - it has a much better REPL built-in |
| 04:44 | augustl | Korma returns "{:scope_identity() 1}" for an insert, the docs say it is supposed to return just the ID. Anyone know what's going on there? |
| 04:49 | augustl | seems that Clojure isn't a good fit for talking to SQL databases |
| 04:50 | xificurC | clgv: I wanted to be able to run clj files from the command prompt, not opening the repl. Or am I not understanding you correctly? |
| 04:52 | clgv | xificurC: ah ok. |
| 05:08 | alex_baranosky | august1: Korma really returns whatever java.jdbc returns |
| 05:09 | alex_baranosky | that's a bit of a PITA, because it seems like different DBs return different things… However there is also some possibility that a recent change broke something |
| 05:10 | augustl | alex_baranosky: yeah I just noticed, tried raw jdbc, same thing |
| 05:10 | alex_baranosky | so we should update the Korma docs |
| 05:10 | augustl | alex_baranosky: it seems that I need to use an ORM or some kind of abstraction layer in order to be able to use different DBS anyway |
| 05:10 | alex_baranosky | not sure how much can be done about changing it, because it probably goes all the way down to the JDBC implementation for the db in question |
| 05:10 | augustl | just got lots of errors I didn't get on H2 when switching to MySQL |
| 05:11 | augustl | so then at least I can write db specific hacks :) |
| 05:12 | alex_baranosky | db specific changes is potentially a lot of work. I already did a DB specific change for COUNT on Mysql. On th done hand it make some sense to be able to generate the SQL you can use, on the other hand it will make Korma much more compilcated |
| 05:13 | augustl | are there any general approaches to doing db reset between tests for jdbc/mysql? |
| 05:13 | alex_baranosky | augustl: specifically which errors are you seeing? are you setting your delimiters to "`"? I need that for MySQL |
| 05:13 | augustl | alex_baranosky: I got an error when inserting a date as a string, h2 accepted it but mysql barfed |
| 05:13 | alex_baranosky | augustl: not sure, but I like th idea of using an in memory db |
| 05:14 | alex_baranosky | oh, I see. I guess its best to stick to the most standard approaches you can find |
| 05:14 | augustl | alex_baranosky: that's what I've been trying to set up, but it seems I would have to do a _lot_ of work to set it up |
| 05:14 | alex_baranosky | have you tried SQLLite? |
| 05:15 | augustl | no, but the fact that mysql and h2 behaved differently made me decide not to use in-memory for tests.. |
| 05:15 | alex_baranosky | you could preparse inputs into Timestamps if running in test…. but that kinda stinks |
| 05:16 | alex_baranosky | I think the approach has a lot of merit, esp if you have a lot of tests that want to hit the DB |
| 05:18 | augustl | I want my tests to be correct, not fast :) |
| 05:18 | ebaxt | augustl: Have you tried setting compatibility mode in H2? jdbc:h2:~/test;MODE=MySQL |
| 05:19 | augustl | hmm, seems clojure.java.jdbc doesn't support dropping databases |
| 05:20 | alex_baranosky | ebaxt: nice one |
| 05:20 | augustl | ebaxt: no, but now that I'm aware of the fact that jdbc doesn't abstract away differences (which makes sense tbh), I'm inclined to use MySQL itself |
| 05:22 | ebaxt | augustl: We use oracle in prod, and h2 for tests. By setting compatibility mode we at least shave of some sharp edges. We use an ORM, but a lot of the queries are native so it does at least help in some ways :) |
| 05:25 | augustl | ebaxt: I suppose money would be an issue in that case :) |
| 05:25 | augustl | using Oracle as the database when running the tests, that is |
| 05:27 | augustl | I'll just do a full drop, create and load schema for every test. And switch to h2 if it gets too slow |
| 05:28 | augustl | alex_baranosky: does Korma do anything magic with dates etc for inserts? Or do I need to fix that myself? I.e. convert the string I get from JSON to a java.sql.Date |
| 05:29 | alex_baranosky | Korma does no magic. It aims to just be a way to turn sexps into SQL queries |
| 05:29 | augustl | I see |
| 05:38 | ejackson | augustl: are you using anything clever for the schemas ? |
| 05:39 | augustl | ejackson: no, it's pretty basic stuff |
| 05:40 | ejackson | Just wondering :) |
| 05:41 | augustl | ejackson: it's just DROP DATABASE IF EXISTS, CREATE DATABASE, and the create table stuff in clojure.java.jdbc |
| 05:42 | ejackson | ok, some time back I had a look at thing that could infer FKs and the like and build a tree of the schema. Only they were in their infancy. I was hoping you might be using one so I could get a free update on their status ;) |
| 05:58 | AWizzArd | currently nrepl.el shows me the buffer *nrepl-connection*. This is of no use for me — how can I have emacs hide it from me? |
| 05:59 | AWizzArd | Ah okay, found it. |
| 06:38 | augustl | is there a way to "touch" the results in with-query-results of clojure.java.jdbc, so I can return a list of maps for all the data in the result? |
| 06:41 | augustl | or: how do I return all rows for a SELECT with clojure.java.jdbc |
| 06:42 | augustl | "doall" seems to work |
| 06:44 | ska2342 | can someone tell me how to pursuade maven to run just the tests for one namespace in the clojure project itself? |
| 07:22 | augustl | anyone here used a data validation library other than the clojurewerkz one? |
| 08:08 | Bodil | augustl: Does core.logic count? :) |
| 08:25 | bozhidar | Hey, guys! I've been working recently on a Clojure coding style guide and would really like to hear your thoughts, feedback and suggestions to improve/extend it. Here's a link to the current version https://github.com/bbatsov/clojure-style-guide |
| 08:34 | hyPiRion | bozhidar: I've always wondered about "Limit the use of commas in collection literals." |
| 08:36 | hyPiRion | A quick glance at e.g. {132 3145 3345 88 1045 0 192387 5} doesn't easily show us whether 0 is a key or a value, whereas {132 3145, 3345 88, 1045 0, 192387 5} makes it easy to see. |
| 08:36 | bozhidar | hyPiRion: personally I have nothing against them, but several people commented that their use was considered bad style, therefore that particular rule |
| 08:36 | hyPiRion | I can see it when you have a map with keywords as keys and non-keywords as values though. |
| 08:37 | loliveira | bozhidar: i liked. |
| 08:37 | bozhidar | hyPiRion: I don't imagine someone has to deal with such map that often :-) |
| 08:37 | bozhidar | maps* |
| 08:39 | hyPiRion | bozhidar: An extreme example, I know. It's just that I find commas at times useful for grouping key-value pairs |
| 08:39 | Bodil | bozhidar: I don't use commas in map literals myself, but that rule is a bit odd given that Clojure itself serialises them with commas. |
| 08:42 | bozhidar | hyPiRion Bodil: It's not me that you need to convince, I'm generally with you on this one |
| 08:43 | stain_ | bozhidar: yes, there should be counterexamples for when commas are good |
| 08:44 | hyPiRion | bozhidar: Argh, and I was here hoping for a fight. Oh well. |
| 08:44 | cmdrdats | bozhidar: nice work on the style guide, i like it :) |
| 08:44 | hyPiRion | I'll possibly voice my concerns later on. |
| 08:44 | bozhidar | Here's some feedback I received initially when I suggested the use of commas in maps https://github.com/bbatsov/clojure-style-guide/issues/1 (and I received more via other mediums) |
| 08:44 | hyPiRion | /s/concerns/views/ |
| 08:44 | stain_ | "Start every namespace with a comprehensive ns" should probably say the preferred order |
| 08:44 | mpenet | indentation or commas, pick your choice |
| 08:45 | bozhidar | stain_: good point |
| 08:45 | mpenet | at least for maps, for the other DS I dont bother |
| 08:46 | stain_ | bozhidar: but lots of good stuff in there, mate/lass! |
| 08:46 | bozhidar | stain_: Could you please open a ticket about this so I won't forget to add it? |
| 08:47 | bozhidar | stain_: mate :-) Bozhidar is an obscure male name in the Cyrillic parts of the world (like the infamous Eastern Europe) |
| 08:47 | clgv | bozhidar: why are commas in maps bad? they really help if you have a lot of kv-pairs |
| 08:48 | stain_ | bozhidar: "This rule should obviously be ignored if the complementing predicate exists in the form of a separate function (e.g. even? and odd?)." - make this into a separate rule - something like "Use predicate functions directly if they exists" |
| 08:48 | stain_ | bozhidar: I kind of guessed it would be.. like Baltazar |
| 08:48 | stain_ | ah man.. tickets! This is too much! |
| 08:48 | ChongLi | isn't there some point where your map literal grows too large to reasonably keep in your source file? |
| 08:49 | ChongLi | perhaps then it can have commas when it's serialized to another file |
| 08:50 | bozhidar | ChongLi: As Bodil already mentioned maps are serialized with commas anyways |
| 08:51 | ChongLi | yeah so that seems like a reasonable guideline |
| 08:51 | bozhidar | ChongLi: I guess so |
| 08:52 | ChongLi | though I guess those commas might use more bandwidth on the wire |
| 08:52 | stain_ | bozhidar: Naming should discourage overlapping of clojure.core except for specialized reimplementations |
| 08:52 | ChongLi | which is kind of silly |
| 08:53 | bozhidar | stain_: Why so? After all we do have namespaces in Clojure and we all know that the use of use is bad :-) |
| 08:55 | stain_ | bozhidar: where does it say..? :) |
| 08:56 | ChongLi | bozhidar: it is a style guide, after all |
| 08:56 | ChongLi | do not take anything for granted |
| 08:56 | ChongLi | the reader may be completely new |
| 08:56 | stain_ | bozhidar: I meant also that you should try not to make a function argument called 'map' |
| 08:57 | bozhidar | stain_: ah, now I see. I'll add something on the subject. |
| 08:57 | stain_ | so perhaps two.. don't shadow functions from clojure.core in local bindings - and the second, which would give you warnings anyway, is to not 'redefine' those functions unless you are really intending to |
| 08:58 | bozhidar | ChongLi: Indeed. At some point I plan to add a bit of rationale behind some of the advices (especial the more obscure ones) |
| 08:59 | bozhidar | stain_: sounds good to me |
| 09:02 | stain_ | I would want to see specific guideline on the recommended way to access maps - I don't know what is the current best practice. I use the dictionary as a function if it's being passed to something, but I call the (:keyword the-dict) if I just want something there and then. I almost never do (the-dict :keyword) and only use the (get) function on strings coming from elsewhere - (get the-dict (:name the-request)) |
| 09:02 | stain_ | but I don't know if that is the standard |
| 09:02 | stain_ | perhaps the last one should be (the-dict (:name the-request)) |
| 09:03 | stain_ | no need for get there either unless it's being used in a higher-level function |
| 09:04 | bozhidar | (:key map) is the idiomatic way to get an element out of a map; of that I'm certain |
| 09:04 | stain_ | so that should be in |
| 09:04 | bozhidar | indeed |
| 09:04 | stain_ | and the exceptions would be where you are doing some functional magic or have other kind of keys |
| 09:08 | iamedu | Hi! I'm looking for some help... with jdbc and the jvm... this roughly explains my problem... http://eugeneciurana.com/pastebin/pastebin.php?show=45650 |
| 09:18 | zby | I've decided to tryout clojure - can I get some help here? https://gist.github.com/4564733 - why it is not looking into 'src'? |
| 09:19 | zby | I followed the README from https://github.com/ring-clojure/ring/wiki/Getting-Started |
| 09:19 | aperiodic | zby: your syntax is incorrect. it should be (use 'login_app.core) |
| 09:19 | zby | ah |
| 09:19 | aperiodic | zby: note there's only one quotation mark |
| 09:20 | zby | I see it now |
| 09:24 | zby | thaks a lot! |
| 09:26 | aperiodic | you're welcome! |
| 09:29 | amalloy | also should be login-app, not login_app |
| 09:31 | amalloy | stain_: i don't think i ever use (m k), always preferring instead (get m k). perhaps i'm silly, or perhaps i'm prepared for the possibility that my map might be nil |
| 09:34 | zby | yeah - that one I found myself :) |
| 09:40 | amalloy | huh! i didn't realize that ##(let [stuff (fn [])] stuff) caused the function's classname to include "stuff"; i thought only (fn stuff []) did that |
| 09:40 | lazybot | ⇒ #<sandbox47486$eval79130$stuff__79131 sandbox47486$eval79130$stuff__79131@144cbe2> |
| 10:26 | augustl | been failing for a while now to implement this: https://www.refheap.com/paste/8744 any suggestions? |
| 10:26 | augustl | a nested filter, so to speak |
| 10:26 | djcoin_ | Whats are the preferred way to shrink the start up time of the jvm ? Can't recall the name of the differents libs and who is the best |
| 10:28 | joegallo | if you aot your clojure code, and you put your stuff on the bootstrap classpath, then i think you're basically getting as fast as you can get |
| 10:28 | joegallo | leiningen does a fair amount of that stuff, you can look at what phil does there |
| 10:29 | chouser | djcoin_: for your development cycle, or some other context? |
| 10:29 | S11001001 | augustl: it's a map, where the f you give to map uses filter |
| 10:29 | augustl | S11001001: ah, I've only used filter |
| 10:30 | djcoin_ | chouser: I can't remember but I saw somewhere tricks like keeping a jvm somewhere so it will actually already be started or something like this. It is just for accessing quickly the repl |
| 10:31 | augustl | S11001001: btw, the nesting can be infinitely deep.. Guess that doesn't help? :) |
| 10:32 | chouser | yeah, there are tools for that, but they all have various caveats. I'd recommend getting comfortable with and editor integration, like nrepl.el or foreplay |
| 10:32 | S11001001 | augustl: then keep mapping until the structure is the right one for filter |
| 10:32 | augustl | S11001001: so a recursive map should work? |
| 10:32 | S11001001 | augustl: yes |
| 10:38 | djcoin_ | chouser: any hints for a vim user ? |
| 10:39 | chouser | djcoin_: I haven't tried it yet, but I've heard this is the new hotness: https://github.com/tpope/vim-foreplay |
| 10:39 | progo | I don't understand what's bad about VimClojure |
| 10:40 | ChongLi | ahh, this is interesting |
| 10:40 | ChongLi | if only I could get vim back into my head |
| 10:40 | ChongLi | it's so confusing switching back and forth between emacs and vim |
| 10:41 | chouser | ChongLi: I recommend evil in emacs. That's what I use. |
| 10:41 | ChongLi | oh yeah? |
| 10:41 | ChongLi | I tried a few of the other modes and they were kinda janky |
| 10:41 | progo | evil made me convert as well |
| 10:42 | ChongLi | what's better about evil? |
| 10:42 | progo | it's done very well indeed |
| 10:42 | ChongLi | I'm so damn used to emacs default keybindings |
| 10:42 | ChongLi | does evil strictly add to those? |
| 10:42 | chouser | ChongLi: yes, the other modes generally try to provide vi bindings. evil provides vim bindings. |
| 10:43 | ChongLi | do all of the vim modes work? rectangular visual etc? |
| 10:43 | chouser | yes |
| 10:43 | ChongLi | hmmm |
| 10:43 | ChongLi | I'll definitely give it a try then |
| 10:43 | chouser | and it keeps getting better, pretty rapidly |
| 10:44 | ChongLi | and it meshes well with emacs plugins like paredit? |
| 10:44 | ChongLi | or is insert mode just regular emacs? |
| 10:44 | progo | insert mode maps to emacs mode, but there is also an "Emacs mode" |
| 10:45 | chouser | It's pretty fun to combine a multi-stroke vim command like ca( with a paredit like slurp, and the repeat the whole thing as needed with vim's . |
| 10:45 | ChongLi | that's pretty crazy |
| 10:46 | chouser | ChongLi: it's not perfect, especially in other special mode like org, package-list, etc. For those you often either have to toggle in and out of emacs mode with C-z or escape individual emacs commands with \ |
| 10:46 | progo | btw, what's the best tutorial on setting up clojure-mode on emacs with all the goodness. WHEN I already have an emacs with existing settings. I don't want any starter kit or 'clojure-in-box' solutions that google offers me so much. |
| 10:47 | chouser | like in org mode I usually stay in insert mode and type \<tab> to expand things |
| 10:47 | ChongLi | C-z? I thought that'd be a SIGSTP |
| 10:47 | ChongLi | suspending the process |
| 10:47 | progo | chouser, ChongLi: oh but evil provides decent support for appending to org-mode-map-{normal,insert,etc} |
| 10:48 | progo | it's manual tinkering, yes. But you can go very vim in these most emacs of modes. |
| 10:48 | ChongLi | it's amazing how deep the rabbit hole goes |
| 10:49 | maleghast | I gave up and started to learn emacs |
| 10:49 | ChongLi | I learned emacs as well |
| 10:49 | ChongLi | the main reason I'd be interested in this is for vim's useful command grammar |
| 10:49 | ChongLi | which is something I've always missed |
| 10:50 | maleghast | Fair enough - I don't even know what you're referring to. |
| 10:50 | maleghast | (not kidding or judging, I am not that über when it comes to vim or emacs ;-) ) |
| 10:51 | ChongLi | emacs's strength has always been in domain-specific programs (major modes) |
| 10:51 | ChongLi | maleghast: vim uses a simple grammer of single letter commands and modifiers |
| 10:51 | ChongLi | such as c10w (change 10 words) |
| 10:51 | maleghast | Indeed |
| 10:51 | maleghast | I like those commands |
| 10:52 | ChongLi | it's very powerful and composable |
| 10:52 | ChongLi | especially when you get into text objects and such |
| 10:52 | progo | Try evil. You'll be surprised how close to real thing it can be. |
| 10:53 | maleghast | Oh I agree, I've just never got more than "head in" in terms of the rabbit hole. |
| 10:53 | ChongLi | the idea of using evil to extend emacs to this crazy hybrid |
| 10:53 | maleghast | I tried eVil mode - it just confused me wrt learning emacs. |
| 10:53 | ChongLi | yeah I think it's probably best saved for after you've become comfortable in emacs |
| 10:56 | maleghast | *nods* |
| 10:56 | ChongLi | so much to learn - so little time |
| 10:56 | ChongLi | I'm trying to learn webgl by implementing this tutorial stuff in clojurescript |
| 10:57 | ChongLi | it's pretty ugly transcribing the javascript directly into interop forms |
| 10:57 | ChongLi | later on I'll have to build some library to abstract that away |
| 10:58 | muhoo | progo: package-list-packages, install nrepl-mode, install leiningen per the instructions, then read the nrepl docs, i guess |
| 10:58 | ChongLi | are there any good FRP libs for clojurescript? |
| 10:58 | maleghast | FRP? |
| 10:58 | ChongLi | anyone trying anything there? |
| 10:58 | ChongLi | functional reactive programming |
| 10:58 | piranha | ChongLi: flapjax :)) there is shafty, but it's not completed yet |
| 10:58 | muhoo | foberglass reinforced plastic |
| 10:59 | piranha | https://github.com/cmeiklejohn/shafty |
| 10:59 | ChongLi | anyone here looked at Elm? |
| 10:59 | progo | muhoo: I'll check nrepl, thanks. |
| 11:00 | amalloy | clojurebot: FRP is functional reactive programming, or maybe fiberglass reinforced plastic |
| 11:00 | clojurebot | In Ordnung |
| 11:00 | piranha | ChongLi: I tried |
| 11:00 | piranha | but without much success, I don't know Haskell and tutorial isn't good enough |
| 11:00 | piranha | it just says: put this code in your file and you'll get something |
| 11:00 | ChongLi | elm seems really nice but it's incomplete |
| 11:00 | piranha | and then 5 lines of code |
| 11:01 | piranha | yeah, and examples are surely lacking, etc |
| 11:01 | ChongLi | yeah it's basically a one man project |
| 11:01 | ChongLi | the guy wrote the language as part of his thesis I believe |
| 11:01 | piranha | yep |
| 11:02 | piranha | I'm trying to get up and running with flapjax, but not finished yet |
| 11:02 | ChongLi | I really like the simple syntax elm uses for lifting an ordinary function into one that acts on reactive values |
| 11:02 | ChongLi | http://elm-lang.org/edit/examples/Reactive/Position.elm |
| 11:03 | ChongLi | this example, in particular, just seems so elegant |
| 11:03 | piranha | oh |
| 11:03 | ChongLi | asText is just a function that returns strings |
| 11:04 | ChongLi | and <~ is an infix function that lifts the first function into a function on reactive values |
| 11:04 | ChongLi | and Mouse.position is a source of reactive values |
| 11:04 | ChongLi | an event |
| 11:05 | ChongLi | I guess it's called a signal in Elm |
| 11:05 | ChongLi | so (<~) :: (a -> b) -> Signal a -> Signal b |
| 11:05 | piranha | ChongLi: behavior |
| 11:06 | piranha | <~ is an alias for lift, it seems, no? |
| 11:06 | ChongLi | it is |
| 11:06 | piranha | ah, yes, signal in elm, and behavior in flapjax |
| 11:09 | ChongLi | I like this flapjax demo |
| 11:10 | ChongLi | http://alandipert.github.com/flapjax-demo/ |
| 11:10 | ChongLi | main.js is 708KB |
| 11:10 | ChongLi | haha |
| 11:10 | piranha | well it's not minified |
| 11:10 | ChongLi | yeah |
| 11:10 | muhoo | with advanced compilation? |
| 11:11 | ChongLi | no it's in full whitespace-preserving mode |
| 11:11 | ChongLi | pretty printed |
| 11:11 | ChongLi | and huge amounts of dead code |
| 11:12 | ChongLi | how many people are working on/with cljs? |
| 11:13 | ChongLi | it still seems like very early days |
| 11:13 | ChongLi | I really love the language though so I want to see it succeed |
| 11:13 | muhoo | lots,but yes its early |
| 11:13 | muhoo | dive in and help. source maps would be nice |
| 11:15 | ChongLi | this seems to be a big thing in general with minified stuff |
| 11:16 | ChongLi | it's like symbol tables all over again |
| 11:16 | ChongLi | javascript really is becoming the "assembly language of the web" |
| 11:18 | systemfault | Normal... JS itself sucks |
| 11:18 | ChongLi | yeah, that's obvious enough to everyone I think |
| 11:19 | ChongLi | but instead of fixing it we introduce all these workarounds that serve to further ingrain the language |
| 11:20 | muhoo | i think of technology as immutable |
| 11:20 | ChongLi | well in that case |
| 11:21 | ChongLi | we're holding onto these old references and stopping the GC from doing its job! |
| 11:21 | ChongLi | or I guess you could say the browsers are doing that |
| 11:21 | ChongLi | (the installed base of browsers) |
| 11:22 | muhoo | if you're on an intel cpu running unix,that gc is 30 years late.but so what, it works |
| 11:23 | ChongLi | it could be better |
| 11:24 | ChongLi | there's always going to be some frontier where all the innovation happens |
| 11:24 | ChongLi | but if it has to be built upon enough layers of legacy cruft, innovation slows |
| 11:43 | systemfault | So far, I've watched the Rick videos about clojure for java programmers and clojure datastructures... is there other videos that are "must-be seen"? |
| 11:44 | Bodil | ChongLi: There are many credible efforts to fix JS, but with that kind of legacy code base, don't expect it to happen overnight... |
| 11:44 | S11001001 | systemfault: no |
| 11:47 | progo | nrepl-mode <3 |
| 11:47 | scottj | systemfault: "must-be seen" as in "really good" or "have info essential for writing Clojure"? |
| 11:47 | systemfault | As in "I want to learn clojure and want enlightening videos about it" |
| 11:48 | progo | this really motivates me to upgrade old lein1 projects with great haste |
| 11:49 | scottj | systemfault: in that case I'd watch several more by Rich, including the concurrency video, are we there yet, datomic stuff/db as value, etc |
| 11:49 | systemfault | Noted :) Thanks |
| 11:50 | systemfault | I loved the clojure for java programmers talk... but didn't like those on datastructure as most of it was obvious :/ |
| 11:51 | algernon | hammock driven development is pure gold too, altough it is completely language agnostic |
| 11:51 | systemfault | I thought it was a philosophical talk (Nothing technical) |
| 11:53 | matthavener | systemfault: is that talk available online somewhere? |
| 11:53 | pbostrom | kovas: I checked out session, it looks nice, I especially like your editor w/ paredit, I might have to steal that :) |
| 11:53 | systemfault | matthavener: Rick's? Look for clojuretv, they're all there |
| 11:54 | systemfault | http://www.youtube.com/user/ClojureTV |
| 11:55 | algernon | systemfault: it is, yes. still worth watching, imo. |
| 11:56 | matthavener | systemfault: thanks |
| 11:58 | scottj | systemfault: there's tons of good stuff at http://www.infoq.com/author/Rich-Hickey |
| 12:01 | augustl | maybe a bit off-topic.. I'm using clojure.java.jdbc and getting a MySQLIntegrityConstraintViolationException (as expected, from a unique index). Is there a generic way to read out the column name, or even know that this particular exception was due to an unique index? Other than grepping the message with a regexp or something. |
| 12:03 | augustl | I could always do a query first to see if it exists, but there's still the possibility of a race condition, so I would like to handle it via the exception always. |
| 12:04 | augustl | what I actually need to do: create an error message object, like {:email ["is taken"]}, based on that exception |
| 12:04 | maleghast | Have you thought about using (try …) ? |
| 12:05 | augustl | I am catching it yeah, the problem is to know that 1) the exception is for a unique index clash and 2) extract the column in question |
| 12:05 | maleghast | Oh I see, sorry. |
| 12:06 | augustl | can't find much on google |
| 12:06 | maleghast | No, I bet.. |
| 12:06 | augustl | and matching on the message seems very unsafe.. |
| 12:06 | augustl | but I would assume that this is something people do a lot |
| 12:06 | maleghast | Yeah, I reckon you're right... |
| 12:06 | augustl | apparently not.. |
| 12:07 | maleghast | I haven't tried it (yet), but have you looked at sqlkorma? |
| 12:07 | maleghast | It might have a useful way to handle it. |
| 12:08 | augustl | not as far as I can tell |
| 12:09 | augustl | it's mostly a SQL DSL in Clojure and some connection management, it leaves the dirty stuff to the jdbc stack |
| 12:09 | maleghast | Oh right |
| 12:10 | augustl | someone suggested INSERT IGNORE, but that doesn't seem to help either |
| 12:10 | augustl | that means it's just, well, ignored. No insert, no exception |
| 12:10 | augustl | then there's table locking.. |
| 12:12 | augustl | ah nice, the format of the error message is public, and associated with an error code |
| 12:12 | maleghast | Hmmm - it's an interesting problem… I have to run - conference call (yes at 1700h on a Friday *headdesk*) good luck with it! |
| 12:23 | amouat | Can someone explain to me what the clojurescript macro defpartial from the crate library does? |
| 12:30 | amouat | I guess it's just for making sure any functions generating html get wrapped in calls to crate.core/html? |
| 12:30 | ohpauleez | amouat: Yeah, it's just to create smaller partial pieces of HTML that you can use to build out full pages |
| 12:33 | amouat | ohpauleez: Thanks. I couldn't figure out why it was necessary at first, but it makes more sense now (after breaking things by not calling using it...) |
| 12:33 | ohpauleez | cool! np, happy to help |
| 12:36 | piranha | systemfault: I'm not sure if anyone mentioned that, but I love 'simple made easy' |
| 12:37 | loganlinn | $help |
| 12:37 | lazybot | You're going to need to tell me what you want help with. |
| 12:45 | gfredericks | so I google about how to get a jarname from java; it involves calling .getProtectionDomain().getCodeSource() on one of my classes |
| 12:45 | gfredericks | well I guess that works; since I have an uberjar I can do that on clojure.lang.RT |
| 12:45 | tomoj | http://hackage.haskell.org/packages/archive/ZipFold/latest/doc/html/Data-Zip-FoldL.html |
| 12:46 | tomoj | data FoldL b a = F (a -> b -> a) a |
| 12:46 | tomoj | that looks awfully like 'mapping' etc |
| 12:50 | tomoj | but what about WithCont (FoldL b), i.e. WC (F (a -> b -> a) a) (a -> c) |
| 12:51 | tomoj | looks kind of like (fn ([] a0) ([a] c) ([a b] a')) |
| 12:51 | tomoj | but an operator like reducer can't tell whether you pass such a thing |
| 12:52 | tomoj | er, it looks not like 'mapping', but just like the things 'mapping' etc pass around - reducefs |
| 12:52 | TimMc | gfredericks: (-> + class .getProtectionDomain .getCodeSource) ;;= nil |
| 12:57 | konr_tra` | is there a name for clojure's data structure, like CLON? |
| 12:58 | hiredman | konr_tra`: https://github.com/edn-format/edn |
| 12:58 | AimHere | Nah. With clojure you just slurp it and read-string it |
| 12:58 | AimHere | After defining your DSL appropriately, of course |
| 13:04 | TimMc | That's "DSL" in the semantic sense, not some formal programmatic construct. |
| 13:09 | tomoj | if you had something that otherwise looked exactly like a vector, but which conj'd on the front, that would probably be bad, right? |
| 13:11 | kovas | pbostrom: thanks! I got it from https://github.com/achengs/subpar |
| 13:13 | llasram | tomoj: OOC, what's the benefit of `conj`ing onto the front? |
| 13:13 | pbostrom | kovas: just curious, have you looked into trying to start up multiple nrepls, or would that be too heavyweight? |
| 13:13 | kovas | pbostrom: there is a multiplayer mode in session right now |
| 13:13 | kovas | pbostrom: but not multiple nrepls to do the eval |
| 13:16 | pbostrom | kovas: ok, I see, I'll have to look at it a bit closer then, I think there is a bit of overlap in what I put together, it might make sense to do some collaboration |
| 13:18 | kovas | pbostrom: sweet. i'd like to figure out a way to make these sorts of projects more modular |
| 13:18 | kovas | pbostrom: what do you want to achieve with your thing? |
| 13:20 | tomoj | llasram: well, sometimes that's just what you want |
| 13:20 | tomoj | but really, I'm thinking about right folds |
| 13:20 | amalloy | tomoj: isn't that basically a queue, looked at upside-down? |
| 13:21 | tomoj | maybe, but this vector would peek and pop from the front |
| 13:22 | amalloy | so it's a list? |
| 13:22 | amalloy | or is the random access/update important? |
| 13:22 | tomoj | yeah, but indexed |
| 13:22 | llasram | Can't you just read a vector backwards? |
| 13:22 | tomoj | well I don't really want that right now, I'm thinking about how you might make a right-foldable vector |
| 13:22 | tomoj | right |
| 13:23 | tomoj | so you can return a reducer that reduces the vector backwards |
| 13:23 | tomoj | but it seems pretty easy to just let vectors be truly reversible |
| 13:24 | tomoj | maybe not so easy.. |
| 13:25 | mmitchell | anyone here use compojure and friend? I'm attempting to segregate auth-based routes from non-auth routes, but no luck |
| 13:26 | pbostrom | kovas: I'm not quite sure yet, my first thought was to provide a sort of environment where beginners could collaborate with experienced coders to learn some key concepts |
| 13:30 | pbostrom | kovas: I'm hesitant to try to tackle the problem of a full on dev environment, it seems like an intermediate developer can easily set up a shared tmux session, especially given some of the tools like technomancy's syme |
| 13:31 | kovas | pbostrom: yeah. I just think the terminal-based repl need to die |
| 13:31 | Sgeo_ | What's this about the terminal-based REPL needing to die? |
| 13:31 | Sgeo_ | Is this anything like living in a Smalltalk-like image? |
| 13:32 | kovas | representing everything as text doesn't do justice to the stuff we want to create |
| 13:32 | technomancy | FSVO "we" |
| 13:32 | pbostrom | kovas: anything in particular you won't to accomplish with session next? Or should I just look over your issues list on gh? |
| 13:32 | kovas | also, being able to save values is definitely a win |
| 13:33 | kovas | (saving the VM state is too much complexity, but values we can certainly do) |
| 13:33 | pbostrom | s/won't/want/ |
| 13:33 | kovas | pbostrom: the issues like is pretty comprehensive |
| 13:33 | kovas | list |
| 13:35 | pbostrom | kovas: ok, I'll keep an eye on the gh page, FYI, I put my code up, not sure if you'll find it useful, especially since I didn't document anything: https://github.com/pbostrom/cwo-public |
| 13:35 | Sgeo_ | kovas, what's wrong with everything being represented as text if we have manipulation tools that hide the textual representation |
| 13:36 | Sgeo_ | Alternatively: Everything is not text, but can be serialized to text easily |
| 13:36 | clojure-newb | hey guys.. when I put a second when form in my function it is returning nil… I'm not sure what is going on… I'm trying to place two when forms at the same level to catch different predicates, any ideas ? |
| 13:37 | dnolen` | clojure-newb: paste |
| 13:37 | kovas | Sgeo_: Yes I'm good with that, but that set of tools doesn't include the terminal |
| 13:38 | Sgeo_ | kovas, hmm, so what do you have in mind? |
| 13:38 | Sgeo_ | I rather like Smalltalk workspaces, but I can imagine there being better |
| 13:38 | kovas | Sgeo_: browser-based repl can render stuff inline |
| 13:39 | Sgeo_ | Oh, we're talking webdev? |
| 13:39 | kovas | Sgeo_: you just put a protocol on your outputs and they render as whatever you want |
| 13:39 | Sgeo_ | oh |
| 13:39 | kovas | Sgeo_: I'm more interesting in data visualization |
| 13:39 | kovas | Sgeo_: but theres plenty of situations where you want something more than text |
| 13:39 | clojure-newb | dnolen`: https://www.refheap.com/paste/8752 |
| 13:40 | kovas | pbostrom: cool i will check it out! |
| 13:40 | Sgeo_ | kovas, something like DrRacket? |
| 13:40 | kovas | Sgeo_: I'm more inspired by Mathematica, since I used to help built it |
| 13:40 | Sgeo_ | I know DrRacket displays image values as actual images and lets you paste images as code, I imagine it could be extended to other sorts of things |
| 13:40 | kovas | Sgeo_: but yeah they have some basic stuff. its definitely the direction things are gonna go in |
| 13:41 | dnolen` | clojure-newb: that won't work, there's no such thing as early return in Clojure |
| 13:41 | cbp` | so my project starts a web server, anyone know how to make it create a console so that you can view messages and stop the server by closing the console? |
| 13:41 | kovas | Sgeo_: the IPython has that as well, also the Factor repl |
| 13:41 | clojure-newb | dnolen`: what would be the idiomatic clojure alternative ? |
| 13:41 | Sgeo_ | Haven't touched Python in a while |
| 13:42 | kovas | Sgeo_: with clojure we have the benefit of the native dialect in the browser, so we can take it further |
| 13:42 | dnolen` | clojure-newb: use cond |
| 13:42 | Sgeo_ | Also, forgot about Factor, I didn't ... quite remember something like that |
| 13:42 | clojure-newb | dnolen`: thanks |
| 13:42 | Sgeo_ | kovas, there are a few Smalltalk dialects that run in Javascript |
| 13:42 | kovas | Sgeo_: the IPython thing is getting a lot of traction |
| 13:44 | gfredericks | is there any answer to the problem of not being able to put data-reader stuff in your code? |
| 13:44 | gfredericks | (generally) |
| 13:44 | yogthos | clojure-newb: this would probably be cleaner https://www.refheap.com/paste/8753 |
| 13:45 | clojure-newb | yogthos: thanks… still trying to get the basics, that helps |
| 13:46 | yogthos | clojure-newb: no prob, I also hihgly recommend going through at least some problems on http://www.4clojure.com/ |
| 13:46 | yogthos | clojure-newb: if you make an account you can see solutions from others when you solve a problem, this way you can get a feel for idiomatic code |
| 13:46 | clojure-newb | wow, loads on there |
| 13:46 | clojure-newb | thanks |
| 13:54 | seangrove | Hey guys, have a mildly annoying dev/production problem |
| 13:54 | ohpauleez | seangrove: let's hear it |
| 13:55 | seangrove | I have Oauth client-id's that I need to use in the frontend to start oauth flows, but they (obviously) differ between dev/production |
| 13:55 | seangrove | In rails, I pre-processed the js files with erb and put in the correct client-id depending on the RAILS_ENV, but not sure how to approach it with cljs |
| 13:56 | ohpauleez | seangrove: Can you do conditional builds of the frontend. Like pipelining infrastructure |
| 13:56 | seangrove | I could change the server around so the client just asks for the appropriate oauth client-id to use, but not 100% sure about it |
| 13:56 | technomancy | we need a clojurebot factoid for "use environ or carica depending on whether you need nested values or just strings" |
| 13:56 | seangrove | I don't have anything like that setup right now, I just run cljsbuild auto <env> |
| 13:57 | ohpauleez | https://github.com/sonian/carica |
| 13:57 | ohpauleez | I also use lein profiles for some stuff now |
| 13:58 | seangrove | Thanks for these guys, checking them out now |
| 13:58 | technomancy | clojurebot: config? |
| 13:58 | clojurebot | excusez-moi |
| 13:58 | tomoj | can a cljsbuild build pass in configuration somehow to macroland? |
| 13:58 | tomoj | e.g., I guess, set an environment var which tells which carica config file to load |
| 13:59 | hiredman | tomoj: no no, you use the classpath |
| 13:59 | TimMc | ohpauleez: Hot damn that's a nice README. |
| 13:59 | technomancy | clojurebot: config is <reply>use https://github.com/sonian/carica for reading .clj files off the classpath if you have complex structure and need nesting. use https://github.com/weavejester/environ if you can get away with just strings for everything. |
| 13:59 | clojurebot | Ik begrijp |
| 13:59 | tomoj | hmm.. so etc_dev/config.clj, etc_prod/config.clj |
| 13:59 | tomoj | and add one or the other to the classpath in your build? |
| 14:00 | technomancy | tomoj: typically resources/config.clj and dev-resources/config.clj |
| 14:00 | TimMc | tomoj: What are the consequences of using the wrong ID? |
| 14:00 | technomancy | but you can change it if you like for whatever reason |
| 14:00 | tomoj | ah, and the first one will be used |
| 14:00 | tomoj | so you don't have to do anything.. nice! |
| 14:00 | hiredman | tomoj: no, your deployment software (chef, puppet, whatever) overides the default config by writing a config file that ends up first on the classpath |
| 14:01 | gfredericks | so to use #inst with joda I want to create a data-readers.clj and redirect #inst to a clj-time function? |
| 14:01 | tomoj | sure |
| 14:02 | seangrove | And carica should work with cljs, presumably? |
| 14:02 | seangrove | I'm pretty fuzzy on how much clj libraries "just work" with cljs - it seems to be, "almost none" |
| 14:02 | tomoj | so then the stuff you put in your cljsbuild builds is orthogonal to stuff in config.clj |
| 14:02 | TimMc | Carica... that's the genus of papaya. |
| 14:02 | technomancy | seangrove: the cljs compiler is written in clojure, so your configuration should affect the compiled output |
| 14:02 | tomoj | you can run a prod/min build with your dev config.clj or a dev build with your prod config.clj |
| 14:02 | TimMc | Looks like I'm not the only one using biological taxonomy as a source for project names! |
| 14:03 | seangrove | Carica looks pretty awesome. Will try it out now |
| 14:03 | tomoj | seangrove: I think you'd need to define a macro if you just wanted to pull a config value out to js |
| 14:03 | technomancy | leathekd: why does the carica readme say to add a directory to :resource-paths? |
| 14:05 | leathekd | Hmm, I suppose it isn't necessary so long as the config file ends up on the classpath where carica will find it. |
| 14:06 | gfredericks | aaaaaaugh |
| 14:06 | technomancy | leathekd: yeah, just curious if you saw some special value in keeping it separate from other resources |
| 14:06 | leathekd | technomancy: It might be an artificial separation but I like having config separate from src. |
| 14:06 | technomancy | oh right; separate from src/ absolutely |
| 14:06 | TimMc | But why not in ./resources/? |
| 14:06 | technomancy | separate from other resources is what struck me as curious |
| 14:07 | seangrove | Hrm, I'm slightly confused how I set different resource-paths for different cljsbuilds: https://www.refheap.com/paste/88204855cbd6a01879b3aabc5 |
| 14:08 | borkdude | ,(-> 1) |
| 14:08 | clojurebot | 1 |
| 14:08 | leathekd | technomancy: ah, y'know, I don't think I was aware of the resources dir. I may even have personal projects with 'resources' in the resource-paths seq. heh |
| 14:09 | seangrove | Ah, maybe by default it'll build whatever's in :resouce-paths, but that can be changed by passing in ENV vars to affect the class-path at build time? |
| 14:10 | technomancy | seangrove: typically you control those with profiles |
| 14:11 | seangrove | Ok, I'll take a look at profiles then |
| 14:11 | frozenlock | cljsbuild - How can one include the externs.js file in the jar? |
| 14:16 | frozenlock | The .cljs is included, but not the externs.js... does this mean that the user must add the externs.js manually each time? |
| 14:16 | tomoj | hmm.. isa? hierarchies have to be made out of symbols, keywords, or classes, with classes only at the leaves, yes? |
| 14:18 | tomoj | oh, but with collection dispatch values.. I guess I never understood isa? dispatch |
| 14:18 | dnolen` | frozenlock: I don't know this so, you should look at how jayq does this |
| 14:18 | dnolen` | "I don't think so" |
| 14:20 | frozenlock | yeah that was my first reflex.. but jayq really seems to be a special case. Its project.clj --> (defproject jayq "2.0.0" |
| 14:20 | frozenlock | :description "A ClojureScript wrapper for jQuery") |
| 14:27 | dnolen` | frozenlock: oh hmm, then maybe create a resources directory and put your extern file in it? This has come up before. Might be worth going over the mailing list archives. |
| 14:27 | seangrove | tomoj: Yeah, carica doesn't work in cljs as-is, will try the macro route |
| 14:28 | frozenlock | dnolen`: indeed -> https://github.com/emezeske/lein-cljsbuild/issues/95 |
| 14:29 | frozenlock | I moved stuff around in directories and it worked. :-) |
| 14:29 | dnolen` | frozenlock: nice |
| 14:30 | `fogus | dnolen: Are you planning to move infd into the fd ns? |
| 14:34 | dnolen` | `fogus: it's already been done |
| 14:35 | dnolen` | `fogus: infd is now fd/in if you require clojure.core.logic.fd :as fd |
| 14:35 | `fogus | ah! |
| 14:35 | dnolen` | `fogus: I'm removed all cases where names ended w/ a fd suffix |
| 14:36 | dnolen` | it's now fd/distinct, fd/+ etc |
| 14:36 | `fogus | OK. That's more clojurey |
| 14:36 | `fogus | ;-) |
| 14:36 | dnolen` | `fogus: yes :) |
| 14:40 | `fogus | dnolen: I changed the examples page to use fd/ https://github.com/clojure/core.logic/wiki/Examples |
| 14:40 | dnolen` | `fogus: great thanks! |
| 14:41 | dnolen` | `fogus: I had fixed the other examples but missed that one. |
| 14:41 | `fogus | No worries. Thanks for c.l |
| 14:41 | dnolen` | `fogus: it's coming along slowly but surely! |
| 14:44 | borkdude | who wants to test if this Pong game runs? made by first year undergraduate students https://www.dropbox.com/s/i3j5mxwrtmaxioo/Pong.jar |
| 14:50 | ohpauleez | borkdude: Are you trying to root my system? |
| 14:50 | borkdude | lol |
| 14:50 | ohpauleez | blindly accepting executable jars is a no-no now haha |
| 14:50 | ohpauleez | :) |
| 14:50 | bbloom | ohpauleez: you're just doing it wrong. you need to blindly run lots of unverified code to build up your machine's immunities |
| 14:51 | bbloom | i thought you knew stuff about computers! |
| 14:51 | systemfault | What doesn't kill your OS makes it stronger, right? |
| 14:51 | zilti | Can I define some kind of "wildcards" in Compojure? Like saying "(GET "/foo/*" [args] ...) ? |
| 14:51 | seangrove | Ah, damn.. I can't use a macro inside of a function in cljs? |
| 14:51 | ohpauleez | haha, I know I've done a lot of autonomic computing… I suppose this is just the next logical step I should take |
| 14:51 | ohpauleez | bbloom: you've convinced me |
| 14:52 | zilti | seangrove: Only compile-time macros for cljs |
| 14:52 | amalloy | seangrove: you do that every day when you write (defn foo [] (let [...] ...)) |
| 14:52 | seangrove | If zm/env-settings is a macro then, does this look acceptable? https://www.refheap.com/paste/920ca3135bc5627a18483c8e4 |
| 14:54 | seangrove | I of couse get "zm is not defined" in the browser repl, which is reasonable |
| 14:54 | seangrove | I could pull them out into a top-level def so they're executed at compile time, I suppose |
| 14:57 | augustl | with ring.middleware.session and the cookie store, how do I implement a "remember me" checkbox? |
| 14:58 | ohpauleez | augustl: You set the :expires on the session |
| 14:58 | ohpauleez | how you toggle that in your code is up to you |
| 14:59 | augustl | reading the code, seems it also read out :session-cookie-attrs from the response too |
| 14:59 | augustl | ohpauleez: that's what I wanted to hear :) |
| 15:00 | seangrove | Alright, so if carica is telling me that some-path isn't a valid config when running "lein cljsbuild auto dev", but it works in clojure in the repl, is it likely I've messed up the profile? |
| 15:04 | tomoj | I guess check (System/getProperty "java.class.path") inside a cljs macro |
| 15:05 | tomoj | I see strange-looking stuff in cljsbuild about running 'in a subproject' |
| 15:07 | tomoj | bbloom: do you know if dispatch-map suffers contention problems like those recently fixed in multimethods? |
| 15:07 | bbloom | tomoj: link? |
| 15:08 | tomoj | http://dev.clojure.org/jira/browse/CLJ-988 |
| 15:08 | tomoj | I guess since it's an atom, no? |
| 15:09 | bbloom | oh yeah, no mine shouldn't suffer from that at all |
| 15:09 | bbloom | they put the state in an atom |
| 15:09 | tomoj | https://github.com/clojure/clojure/commit/83ebf814d5d6663c49c1b2d0d076b57638bff673 |
| 15:10 | tomoj | just more overhead than multimethods then? |
| 15:10 | bbloom | no, a dispatch-map should be cheaper than a multimethod |
| 15:10 | bbloom | it's a subcomponent of multimethods |
| 15:10 | tomoj | oh, right, but I mean using dispatch-map's reimpl of multimethods |
| 15:11 | bbloom | maaaybe, but that cost would be 1) very small and 2) only paid on defmethod |
| 15:11 | bbloom | shouldn't really have any serious runtime impact |
| 15:12 | tomoj | cool |
| 15:13 | bbloom | yeah you can see for youself in https://github.com/brandonbloom/dispatch-map/blob/master/src/dispatch_map/core.clj |
| 15:13 | bbloom | basically search for @ |
| 15:13 | bbloom | or ! |
| 15:13 | bbloom | just like dispatch map gained a State class |
| 15:14 | bbloom | er i mean just like real multimethods gained a State class |
| 15:14 | bbloom | dispatch map has DispatchCache |
| 15:14 | bbloom | which is stored in an atom |
| 15:14 | bbloom | real multimethods then use a lock for the defmethod, prefer, etc |
| 15:14 | bbloom | but i use an atom for that too |
| 15:15 | bbloom | so atom + lock vs 2 atoms |
| 15:16 | seangrove | Hrm, it seems like resource-paths is ignored by cljsbuild? |
| 15:18 | seangrove | technomancy: Should this be resource-paths here? https://github.com/emezeske/lein-cljsbuild/blob/master/plugin/src/leiningen/cljsbuild/subproject.clj#L66 |
| 15:19 | seangrove | Looks like it might be ignoring resource-paths in project.clj for lein2 projects |
| 15:21 | seangrove | Yeah, that didn't fix my problem, but at least my resource-paths are on the classpath now |
| 15:28 | frozenlock | I need help with cljs... I've done a wrapper for a js library. Everything works fine on its own, but I can't seem to require it from another project. Is there some magic stuff going on with underscores in the namespaces? |
| 15:29 | frozenlock | In my wrapper: (ns envision-cljs.core). In my other project: (ns myprojectname.core (:require [envision-cljs.core :as v])) |
| 15:29 | Bodil | frozenlock: Yeah, if your namespace is called envision-cljs.core, the file path needs to be envision_cljs/core.cljs |
| 15:30 | Bodil | frozenlock: Just a wild guess at what's wrong, mind you, but that's the one I always keep running into :) |
| 15:31 | frozenlock | Yeah I do often too, but in this case I did use the "_" in my path, which is why I'm confused. |
| 15:32 | seangrove | leathekd: Are there any debug options for carica so I can see *why* " (:google_docs :client_id) isn't a valid config"? I can't seem to get values to load when compiling cljs |
| 15:32 | Bodil | frozenlock: In that case I'm confused too... |
| 15:33 | frozenlock | It's my first cljs library that uses an externs.js; I'm not usre if it's related. |
| 15:35 | frozenlock | me 3 days ago "Oh, let me do that in cljs, I'll save time!" |
| 15:36 | frozenlock | I was so young and naive back then. |
| 15:36 | seangrove | Uhg, carica works in the repl, even the cljs repl, but when compiling cljs carica won't put in the value... maybe carica isn't loaded at that point? |
| 15:40 | seangrove | Ah, ok, so it looks like the fix to lein-cljsbuild subproject.clj did the trick. Phew. |
| 15:40 | seangrove | The yaks are out with a vengeance today |
| 15:40 | clojurebot | what should I do today, it is the weekend and all |
| 15:41 | frozenlock | Ok something funny is going on here. Every library is in the .lein-cljsbuild-compiler-X folder, except for my new one. |
| 15:41 | frozenlock | (I did clean and recompile multiple times) |
| 15:44 | seangrove | frozenlock: I wrapper handlebars in cljs with an extern file, but I haven't released it as a jar, so haven't gone through any of this |
| 15:45 | seangrove | Would be much appreciated if you can keep track of what you had to do |
| 15:45 | frozenlock | seangrove: Fear not, I'm on this since yesterday evening... I'm so mad that I won't forget a thing :p |
| 15:59 | frozenlock | omg |
| 15:59 | frozenlock | omg omg omg omg |
| 15:59 | frozenlock | someone please shoot me |
| 15:59 | amalloy | once you said omg five times, i was going to even if you didn't ask |
| 15:59 | frozenlock | core.clj ---> core.cljs |
| 15:59 | aroemers | I think the bots won't let us.. |
| 16:02 | Thallasios_Xelon | hello guys :) |
| 16:03 | Thallasios_Xelon | i want to do something like (let [ (first l) 5] .....) |
| 16:03 | Thallasios_Xelon | its an error right? |
| 16:03 | Thallasios_Xelon | i stuck... |
| 16:03 | nDuff | Thallasios_Xelon: what do you actually want to do? |
| 16:03 | nDuff | Thallasios_Xelon: ...that is -- what's the effect of this supposed to be? |
| 16:04 | nDuff | Do you have a local "l" which already exists outside this scope, and you want to change the value of only its first element within the let? |
| 16:04 | Thallasios_Xelon | i want to bind a variable,inside let |
| 16:04 | Thallasios_Xelon | not a constant symbol |
| 16:04 | nDuff | Thallasios_Xelon: Why is "first" involved? |
| 16:04 | nDuff | ... |
| 16:05 | nDuff | Oh. The easy answer is "you can't". |
| 16:05 | Thallasios_Xelon | (let [ symbol 5] |
| 16:05 | Thallasios_Xelon | i want to determine the symbol on runtime |
| 16:05 | Thallasios_Xelon | can i? |
| 16:05 | nDuff | No. |
| 16:05 | Thallasios_Xelon | :) |
| 16:05 | nDuff | If you really have a legitimate use case for that, use a macro. |
| 16:06 | nDuff | ...but I'd be curious to hear it. |
| 16:06 | ibdknox | Chances are you don't need to |
| 16:06 | Thallasios_Xelon | i am really newbie |
| 16:06 | nDuff | ...and if you do have a real-world use case, there's probably a better way to satisfy it |
| 16:06 | nDuff | (such as a thread-local binding for a var) |
| 16:07 | Thallasios_Xelon | i want to use a thread-local binding,but with a variable symbol like (binding [ symbol_on_run_time_or_macro 5] |
| 16:08 | Thallasios_Xelon | can i use a macro for that? |
| 16:08 | seangrove | Thallasios_Xelon: But *why* do you want to do that? |
| 16:08 | seangrove | What are you trying to accomplish |
| 16:08 | Thallasios_Xelon | a have a boolean formula,that i want to evaluate |
| 16:09 | Thallasios_Xelon | with different bindings |
| 16:09 | Thallasios_Xelon | each time |
| 16:09 | augustl | is there something like form authenticity tokens in Rails for Ring? |
| 16:09 | ibdknox | augustl: https://github.com/weavejester/ring-anti-forgery |
| 16:10 | frozenlock | Thallasios_Xelon: to play with symbols https://www.refheap.com/paste/8756 |
| 16:11 | ibdknox | if you want dynamically bound symbols you can use with-bindings |
| 16:11 | ibdknox | I still doubt that's really what you want though |
| 16:11 | ibdknox | ,(doc with-bindings) |
| 16:12 | clojurebot | "([binding-map & body]); Takes a map of Var/value pairs. Installs for the given Vars the associated values as thread-local bindings. The executes body. Pops the installed bindings after body was evaluated. Returns the value of body." |
| 16:12 | Thallasios_Xelon | thx guys i will try reading and trying |
| 16:16 | augustl | idlecool: nice, thanks |
| 16:16 | aroemers | frozenlock: nice macro, found a good use for it in my current project. |
| 16:17 | frozenlock | aroemers: Thanks. I was pretty sure it could only help me and my idiosyncrasies :) |
| 16:17 | augustl | ibdknox, not idlecool, sorry |
| 16:19 | brainproxy | win +1 |
| 16:19 | Thallasios_Xelon | if you wanted to evaluate a boolean formula, (and a b) for many a,b values what would you do? |
| 16:19 | brainproxy | derp |
| 16:20 | frozenlock | Is there a way to get a function's documentation from a cljs repl? |
| 16:20 | Thallasios_Xelon | i thought that i would be easy not to touch the formula,and evaluate it in different bindings for a and b |
| 16:21 | Thallasios_Xelon | d |
| 16:22 | augustl | ibdknox: semi off-topic, do you need CSRF protection for a JSON API? I can't think of a way for someone to POST JSON to that API from another origin |
| 16:22 | augustl | err, not just ibdknox, anyone :) |
| 16:22 | ibdknox | yes, you can just use curl |
| 16:23 | ibdknox | Thallasios_Xelon: ,(map and [true true] [false true]) |
| 16:23 | augustl | or perhaps an <input type="hidden" name="json here"> would work actually |
| 16:23 | ibdknox | ,(map and [true true] [false true]) |
| 16:23 | clojurebot | #<CompilerException java.lang.RuntimeException: Can't take value of a macro: #'clojure.core/and, compiling:(NO_SOURCE_PATH:0)> |
| 16:23 | TimMc | augustl: Cross-site POST works. |
| 16:23 | dnolen | Thallasios_Xelon: how is that not solved by (defn f [a b] (and a b)) ? |
| 16:23 | ibdknox | ,(map #(and % %2) [true true] [false true]) |
| 16:23 | clojurebot | (false true) |
| 16:24 | TimMc | augustl: So yes, you need CSRF protection of some form. It may be as simple as checking that the request was made by XHR, which I believe adds a special header. |
| 16:24 | Thallasios_Xelon | dnolen the formula isnt stable |
| 16:24 | Thallasios_Xelon | but thanks |
| 16:25 | augustl | TimMc: was thinking that if I only accept JSON, I would be safe. But with that hidden input you should be able to send json anyway |
| 16:26 | Thallasios_Xelon | i want to evaluate any formula |
| 16:26 | ibdknox | augustl: I can send anything I want from curl |
| 16:26 | ibdknox | with xhr headers |
| 16:27 | ibdknox | as json |
| 16:27 | augustl | ibdknox: right, but that's not related to CSRF |
| 16:27 | Thallasios_Xelon | bye guys thx :)) |
| 16:27 | dnolen | Thallasios_Xelon: sounds like you need write some kind of solver then, trying to piggy back of the standard evalution model probably isn't going to work for you. |
| 16:28 | augustl | CSRF = exploiting the fact that POST-ing a form to some foreign origin causes the browser to send any cookies it might have with it, hence the need for a token |
| 16:28 | Thallasios_Xelon | i think i will use refs,as symbols to solve it |
| 16:28 | augustl | so, I was thinking that if the place you can POST to only accepts JSON, that'd be OK, but I guess there are ways to make plain forms to JSON |
| 16:37 | augustl | seems that a web based API shouldn't use cookies for authentication. Eliminating cookies = eliminating CSRF |
| 16:37 | TimMc | augustl: I suppose the form submission would have a "form-encoded" header, which you could check against. |
| 16:38 | augustl | TimMc: I guess there's always some odd browser that doesn't even set that header :) |
| 16:38 | TimMc | bleh |
| 16:38 | TimMc | Actually, I doubt that. |
| 16:39 | augustl | hmm, me too, but that means I'd base security on assumptions |
| 16:39 | TimMc | If I were in your place I would be checking for known solutions. |
| 16:39 | TimMc | I haven't had to worry about CSRF in a while. |
| 16:40 | TimMc | ...but it's a pretty well-solved problem, IIRC. |
| 16:42 | augustl | the only problem is probably that I'm complecting things by having an API and a website that can use that API on the same domain ;) |
| 16:42 | augustl | should separate them so my website doesn't gain additional privileges towards the API from being on the same origin |
| 16:42 | TimMc | Look into the XHR header thing. I think that's pretty solid. |
| 16:45 | seangrove | augustl: Also, CORS |
| 16:47 | bbloom | if you write a java class that has a name endeding in List and you implement precisely ZERO collection interfaces: fuck you. |
| 16:48 | systemfault | Haha |
| 16:50 | tomoj | yes :( |
| 16:50 | tomoj | or a Map |
| 16:52 | augustl | seangrove: I find CORS to be too specific, since I explicitly have to permit hostnames |
| 16:52 | seangrove | I think you can wildcard |
| 16:53 | seangrove | Or you can check the origin of the incoming request and set your cors headers to allow that |
| 16:53 | ohpauleez | you can wildcard |
| 16:53 | ohpauleez | or you can support JSONP |
| 16:54 | augustl | seangrove: you can't wildcard on HTTPS and with cookies |
| 16:54 | augustl | wildcard = no cookies |
| 16:54 | augustl | with good reason :) |
| 16:54 | ohpauleez | ahh |
| 16:54 | ohpauleez | sure, totally |
| 16:54 | seangrove | Ah, I see |
| 16:54 | seangrove | Every request I make that way just includes the api-key, so no cookies |
| 16:54 | augustl | so, I'll separate the webapp and the api, and proxy the api from my webapp, and use CORS protection on the web app only |
| 16:55 | augustl | the api will ignore cookies completely |
| 16:55 | augustl | seangrove: yeah :) |
| 16:55 | augustl | the web app needs to store the api key in a cookie, but that's not a problem, since the web app is XSRF protected |
| 16:55 | augustl | s/and use CORS/and use XSRF proteection/ |
| 16:56 | seangrove | Jesus christ, I think I may have fiished the second have of the ui for Zenbox |
| 16:57 | seangrove | UI (at least in js) is by far the most painful part of dev so far |
| 16:57 | seangrove | I have got to start an open-source project to port something like IB to clojurescript |
| 16:57 | seangrove | As far as I can tell, it's basically entirely declarative, no? |
| 16:58 | augustl | seangrove: if you aren't using AngularJS, there's a high probability you are using the wrong tool :) |
| 16:58 | seangrove | Using cljs and google closure ui |
| 16:58 | augustl | the problem (imo) with google closure UI is that it's essentially just a better DOM |
| 16:59 | augustl | you're still on your own when you want to update your UI when data changes |
| 16:59 | seangrove | augustl: Yeup |
| 16:59 | seangrove | The built-in controls are pretty nice though, still |
| 17:00 | augustl | angular provides the best solution to this problem I've ever seen :) https://twitter.com/silentbicycle/status/269128913572208640/photo/1/large |
| 17:05 | augustl | seangrove: this is very unscientific of course, but I rewrote an app in AngularJS in two weeks that I spent many months trying to program in Google Closure |
| 17:05 | augustl | this app was wery stateful in nature though, lots of new state over the wire and state changes that affected the entire app, making angularjs a perfect fit |
| 17:06 | seangrove | augustl: I've simulated that a bit using shoreleave's pubsub and handlers |
| 17:06 | seangrove | But it's pretty manul |
| 17:06 | seangrove | Haven't found the right patterns to abstract yet |
| 17:08 | ohpauleez | seangrove: Hopefully the new Shoreleave updates help smooth that out |
| 17:08 | seangrove | ohpauleez: Very much looking forward to it |
| 17:08 | seangrove | Trying not to pester you too much about it, now that working off of master for shoreleave-browser works |
| 17:08 | frozenlock | ohpauleez: Is the new version ready? |
| 17:08 | frozenlock | I'm at a point where I need server/client communication, and I would like to use shoreleave :) |
| 17:09 | ohpauleez | (subscribe-> …) has been added, remote-ns is supported on Ring/Compojure, improvements in handling failures better |
| 17:09 | ohpauleez | frozenlock: Getting there: https://github.com/shoreleave/shoreleave-baseline |
| 17:09 | ohpauleez | I'm a little bit behind from where I wanted to be, but I've cut one production app (light traffic, internal use only) over |
| 17:17 | antoineB | hello, what kind of deconstructor we have in clojure? i know vector and map, is there orthers? |
| 17:18 | TimMc | antoineB: It's not really a vector, it's a sequential destructurer. |
| 17:18 | ohpauleez | antoineB: You can destructure any associative or sequential thing |
| 17:18 | TimMc | hmm... |
| 17:19 | TimMc | ,(let [{a 0} [:bar]] a) |
| 17:19 | clojurebot | :bar |
| 17:19 | TimMc | ,(let [{a :foo} {:foo :bar}] a) |
| 17:19 | clojurebot | :bar |
| 17:19 | ohpauleez | TimMc: Are you saying hmmm.. as in, "Records?" or hmmm… "it's probably a protocol" |
| 17:19 | TimMc | So yeah, vectors can be destructured in two different ways. |
| 17:19 | gtrak | ,(let [{a :foo} [[:foo :bar]] a) |
| 17:19 | clojurebot | #<ExecutionException java.util.concurrent.ExecutionException: java.lang.RuntimeException: Unmatched delimiter: )> |
| 17:20 | TimMc | The associative destructuring is probably more performant. :-/ |
| 17:20 | gtrak | ,(let [{a :foo} [[:foo :bar]]] a) ; darnit |
| 17:20 | clojurebot | nil |
| 17:20 | amalloy | TimMc: why would you say that? |
| 17:20 | systemfault | Do you guys think that a small IRC bot would be a good starting project for clojure? |
| 17:20 | systemfault | I have no other idea for now.. |
| 17:20 | TimMc | amalloy: The sequential destructurer uses nth. |
| 17:20 | amalloy | so? |
| 17:20 | amalloy | nth is fast on vectors |
| 17:21 | TimMc | Oh, is it? I thought it forced a seq. |
| 17:21 | ohpauleez | systemfault: Are you looking for starter projects? |
| 17:21 | TimMc | ,(doc nth) |
| 17:21 | clojurebot | "([coll index] [coll index not-found]); Returns the value at the index. get returns nil if index out of bounds, nth throws an exception unless not-found is supplied. nth also works for strings, Java arrays, regex Matchers and Lists, and, in O(n) time, for sequences." |
| 17:21 | TimMc | ,(nth (range 1 10) 1000) |
| 17:21 | gtrak | ah, oops, I did it wrong, ##(let [{a :foo} '(:foo :bar)] a) |
| 17:21 | clojurebot | #<IndexOutOfBoundsException java.lang.IndexOutOfBoundsException> |
| 17:21 | lazybot | ⇒ :bar |
| 17:22 | systemfault | ohpauleez: Exactly.. something that would cover the basics.. data structures, functions, I/O |
| 17:22 | TimMc | gtrak: wat |
| 17:23 | gtrak | ,(let [{a :foo} [:foo :bar]] a) |
| 17:23 | clojurebot | nil |
| 17:23 | antoineB | does exists other deconstructor like (let [#my-stuff[a b] something] a) ? |
| 17:23 | gtrak | ,(let [{a :foo} (seq [:foo :bar])] a) |
| 17:23 | clojurebot | :bar |
| 17:23 | ohpauleez | systemfault: HTML screen scraping using Enlive, a tic-tac-toe AI, a site-generator (like jekyll) |
| 17:23 | gtrak | wat wat |
| 17:24 | systemfault | ohpauleez: Good ideas, thank you :) |
| 17:24 | ohpauleez | totally welcome |
| 17:24 | antoineB | ohpauleez: a jekyll that read clojure maps as data, should be fun |
| 17:25 | TimMc | &(destructure '[{a :foo} (seq [:foo :bar])]) ;; gtrak |
| 17:25 | lazybot | ⇒ [map__79211 (seq [:foo :bar]) map__79211 (if (clojure.core/seq? map__79211) (clojure.core/apply clojure.core/hash-map map__79211) map__79211) a (clojure.core/get map__79211 :foo)] |
| 17:26 | gtrak | yup |
| 17:26 | TimMc | ,(let [{a 0} (range)] a) ;; so this should blow up |
| 17:27 | amalloy | wow, that blew up even more than i expected |
| 17:27 | TimMc | botgone? |
| 17:27 | TimMc | &(let [{a 0} (range)] a) ;; so this should blow up slightly less |
| 17:28 | lazybot | Execution Timed Out! |
| 17:28 | TimMc | $botsnack |
| 17:28 | lazybot | TimMc: Thanks! Om nom nom!! |
| 17:29 | gtrak | &(range) |
| 17:29 | lazybot | java.lang.OutOfMemoryError: Java heap space |
| 17:32 | gtrak | ,(throw (Exception. "##(println $botsnack)")) |
| 17:32 | lazybot | java.lang.RuntimeException: Unable to resolve symbol: $botsnack in this context |
| 17:32 | clojurebot | #<RuntimeException java.lang.RuntimeException: java.lang.Exception: ##(println $botsnack)> |
| 17:33 | gtrak | ,(throw (Exception. "##(println \"$botsnack\")")) |
| 17:33 | clojurebot | #<RuntimeException java.lang.RuntimeException: java.lang.Exception: ##(println "$botsnack")> |
| 17:35 | scottj | yedi: you asked about prismatic and clojurescript the other day. in case you didn't see it, they posted about it yesterday http://blog.getprismatic.com/blog/2013/1/14/bringing-functional-to-the-frontend-clojure-clojurescript-for-the-web |
| 17:35 | yedi | scottj: I saw it |
| 17:35 | TimMc | gtrak: lazybot is snubbing clourebot these days |
| 17:35 | yedi | and wow thanks for remembering and linking |
| 17:35 | scottj | hmm, the url says 1-14 but the article says 1-17, who knows |
| 17:35 | yedi | i asked about prismatic and clojurescript on separate occasions! |
| 17:36 | yedi | scottj: when I saw the title of the article, I was hoping for something more than a new templating library for cljs |
| 17:36 | antoineB | does clojure compiler support inlining functions? |
| 17:36 | hiredman | yes |
| 17:36 | hiredman | ,(doc definline) |
| 17:36 | clojurebot | "([name & decl]); Experimental - like defmacro, except defines a named function whose body is the expansion, calls to which may be expanded inline as if it were a macro. Cannot be used with variadic (&) args." |
| 17:37 | yedi | something along the lines of using clojures powerful abstractions for frontend dev |
| 17:37 | yedi | but i guess hiccup-like templating fits that description |
| 17:38 | hiredman | in some cases the compiler uses inlining of + together with an intrinsic for the static the method (Numbers/add) that it inlines to to emit a jvm iadd or ladd instead of a clojure function or java method call |
| 17:45 | antoineB | hiredman: in the code of definline i don't understand the "~(apply (eval (list `fn args expr)) args)" part |
| 17:46 | akhudek | I was somewhat disappointed to see another templating library when clojure/clojurescript already has several. The justification seems to be "because it fits our style better" rather than any more interesting technical motivation. |
| 17:49 | frozenlock | ohpauleez: Is there a way to get a hold of the things returned from the server, or is it really just `fetch'? Anything in fetch just returns nil. |
| 17:51 | TimMc | akhudek: Which? |
| 17:52 | scottj | akhudek: in the blog and readme the main reason they give is improved performance, they claim ~3-4x |
| 17:52 | TimMc | laser? |
| 17:52 | scottj | TimMc: I think he's talking about https://github.com/prismatic/dommy |
| 17:55 | antoineB | dommy don't support namespace (.createElementNS) used for svg, that's a bad point for me |
| 17:55 | gtrak | dommy is like 100 lines |
| 17:56 | antoineB | but can be easily change by a dynamic var |
| 17:57 | akhudek | scottj: saw that, but they don't compare against domina or enfocus. |
| 17:57 | scottj | akhudek: yeah, and I wonder how fast the jquery technique they used is compared to other js templating options |
| 18:06 | ohpauleez | frozenlock: I'm not sure I understand the question, but whatever the server function returns, will get passed back to the client |
| 18:07 | ohpauleez | If the function returns nil, the client will see nil. If the server function returns a map, the map gets returned. The only limit is: it has to be serializable with (pr-str ...) |
| 18:07 | frozenlock | ohpauleez: In fetch, doing (fm/letrem [a (adder 3 4)] a) will return nil. |
| 18:08 | frozenlock | However (fm/letrem [a (adder 3 4)] (print a)) will print a |
| 18:08 | ohpauleez | frozenlock: Yes, remotes can only call their bodies in a callback - they're non-blocking |
| 18:09 | ohpauleez | so the remote blocks on the client side will always return nil, but their bodies will run when the remote is satisfied (or an error occurs) |
| 18:09 | frozenlock | Ok, I just have to stuck this into my mind and be surprised it happens :) |
| 18:10 | frozenlock | *stop being surprised when it happens |
| 18:28 | brainproxy | weavejester: concerning reload middleware.. for the heck of it, I tried wrapping wrap-reload so that if it throws an error during a reload I could go to a nice-looking 503 page |
| 18:29 | brainproxy | but what I found was that doesn't work -- if there is, for example, a syntax error, then my catch statement/s will run, but the client always gets a 500 response w/ no body |
| 18:30 | brainproxy | i.e. not whatever would otherwise be returned by the return of catch |
| 18:37 | bosie | https://www.refheap.com/paste/c4ca927d6d96ffb4f716a54f3 could someone please tell me why this is what happens? |
| 18:39 | muhoo | ok i'm confused. why would a java class import perfectly well in the repl, but blow up spectacularly in "lein check"? |
| 18:40 | muhoo | specifically https://www.refheap.com/paste/8762 , and this is with RC2 |
| 18:41 | muhoo | is there something radically different about what lein check does to compile namespaces, versus what the repl does? |
| 18:42 | gtrak | interesting that it's a different class than what you're importing, sounds like a problem in your classpath, maybe duplicate deps? |
| 18:42 | technomancy | muhoo: the repl pulls in nrepl and clj-http and friends in order to function |
| 18:42 | chronno | bosie: don't use fn as the name of your first parameter |
| 18:42 | bosie | chronno: right but i am not sure why this error would happen |
| 18:43 | chronno | bosie: third line |
| 18:43 | gtrak | bosie: you're calling inc instead of creating a function |
| 18:43 | chronno | you are appplying inc there |
| 18:43 | muhoo | technomancy: is there some way to coax out a lein deps :tree of what the repl would consider its tree versus what lein check would? |
| 18:44 | chronno | bosie: with two paremeters, an empty vector and the return value of the let |
| 18:44 | muhoo | apparently there's some missing dep, or, more likely, a conflict |
| 18:44 | bosie | chronno: oh true |
| 18:44 | bosie | is there a way to get better error/exception messages? |
| 18:44 | muhoo | i bet either nrepl or clj-http is pulling in a different version of guano than what is specified in the project |
| 18:44 | technomancy | muhoo: that's still an open issue unfortunately: https://github.com/technomancy/leiningen/issues/520 |
| 18:45 | technomancy | haven't thought through a good solution |
| 18:45 | gtrak | bosie: it's an obvious error, how would you detect such a thing? |
| 18:45 | bosie | gtrak: pardon? |
| 18:45 | gtrak | how would you automate detection of such a thing? |
| 18:45 | muhoo | huh, i guess i have a talent for something: running up against open issues. oh well. i'll figure something out |
| 18:45 | dakrone | muhoo: clj-http doesn't pull in guano at all |
| 18:45 | technomancy | wait, is there actually a lib called guano? |
| 18:46 | bosie | gtrak: automate? it gives the wrong line number |
| 18:46 | muhoo | it's a google thing, uh, |
| 18:46 | bosie | gtrak: if anything, giving the wrong line number is a bug |
| 18:46 | muhoo | guava, not guano. it coats my life with guano though. |
| 18:46 | technomancy | hahaha |
| 18:46 | gtrak | bosie: the line number makes sense |
| 18:46 | gtrak | if you look at AFn |
| 18:46 | gtrak | it's not a syntax error, it's a semantics error |
| 18:46 | bosie | gtrak: the line number does not make sense. this is like revealing the C code line number for a ruby exception |
| 18:47 | technomancy | sounds like an april fools project announcement; forking guava -> guano |
| 18:47 | gtrak | you don't get it, it did what you told it to, it has no way to interpret what you meant to do |
| 18:47 | bosie | gtrak: apparently i don't |
| 18:48 | bosie | gtrak: i would have expected to see line 3 here |
| 18:48 | gtrak | core$inc doesn't accept two args, that's pretty clear what it's trying to do. It doesn't clean up the jvm classname munging for you, granted. |
| 18:49 | bosie | gtrak: i overlooked line 3 and thought the error is in line 8 |
| 18:49 | muhoo | cljs pulls in this guan[oa] |
| 18:49 | technomancy | muhoo: for now you can just toss [org.clojure/tools.nrepl "0.2.1"] and [clojure-complete "0.2.2"] into project.clj |
| 18:49 | technomancy | if you want to get a deps tree |
| 18:50 | bosie | gtrak: i didn't think i could actually override fn |
| 18:50 | muhoo | technomancy: cool, thanks. i'm going to try explicitly calling out guan[oa] and see if that helps |
| 18:50 | gtrak | bosie: yea, fn's not a special form |
| 18:50 | bosie | gtrak: right |
| 18:50 | technomancy | muhoo: oh, also [org.thnetos/cd-client "0.3.6"] |
| 18:50 | gtrak | it's a runtime error by nature, since it compiles fine |
| 18:51 | muhoo | web stuff seems to involve a lot of tangled dependencies these days, specifically since lein itself wants web-related stuff in order to work (clj-http in particular) |
| 18:52 | muhoo | technomancy: problem worked-around: [com.google.guava/guava "13.0.1"] and everything works :-/ |
| 18:52 | technomancy | muhoo: another option is to use a raw repl instead of nrepl |
| 18:52 | bosie | gtrak: is there a way to get better line number parsing? |
| 18:52 | technomancy | `rlwrap lein trampoline run -m clojure.main/repl` |
| 18:52 | muhoo | true, but i'd be lost without nrepl.el :-) |
| 18:53 | technomancy | completely avoids the implicit dependencies |
| 18:53 | muhoo | i was using the raw repl on an embedded platform for a while though, worked well. |
| 18:53 | gtrak | bosie: in this case, I'm afraid not. However, if the source is loaded from a file instead of eval'd at the repl, you can see the line number farther down the stacktrace. |
| 18:53 | technomancy | I should add a faq for that or something |
| 18:54 | muhoo | it'd be helpful for debugging these strange dependency tangles, yes. |
| 18:54 | bosie | gtrak: thank you |
| 18:55 | gtrak | bosie: you'll see the line number of the call at that stack frame at the time of error, but the actual exception information is pointing to the appropriate place |
| 18:55 | bosie | gtrak: right |
| 18:55 | technomancy | anybody got any last-minute issues to report on leiningen 2.0.0-rc2? |
| 18:56 | Raynes | technomancy: It isn't pink. |
| 18:56 | muhoo | so far, rc2 seems pretty damn solid |
| 18:56 | bosie | gtrak: the only thing is, its pointing to the very very last line and i can't remember a language doing that. i also can't understand how exactly this is useful information in a debugging scenario. but maybe thats my inexperience speaking |
| 18:56 | Raynes | technomancy: http://code.google.com/p/clementine-player/issues/detail?id=219 |
| 18:56 | frozenlock | I have a bunch of datetime objects on a server that I want to transfert to a cljs app. Perfomance-wise, should I convert them to string, or to millis? |
| 18:57 | technomancy | Raynes: that might need to get pushed back to 3.0 |
| 18:57 | bbloom | frozenlock: shouldn't be too hard to try it and figure it out |
| 18:57 | bbloom | frozenlock: but it's probably irrelevant: use an iso8601 string |
| 18:57 | gtrak | bosie: reading JVM stacktraces is kind of a hassle, agreed.. |
| 18:58 | gtrak | I think this is the state of the art: https://github.com/mmcgrana/clj-stacktrace |
| 18:59 | bosie | let me give that a try |
| 18:59 | Raynes | (pst *e) |
| 19:00 | muhoo | Raynes: wtf, are bronies trolling clementine's bugtracker or something? |
| 19:00 | Raynes | muhoo: This was ages ago. And IIRC, he actually fixed it and made it so you can make it pink. |
| 19:04 | bosie | gtrak: still working on it |
| 19:10 | technomancy | interesting thoughts re: "full-stack is easier": http://words.steveklabnik.com/rails-has-two-default-stacks |
| 19:11 | bosie | gtrak: https://www.refheap.com/paste/8765 mind sharing your wisdom for what i do wrong, again? ;) |
| 19:11 | Raynes | callen: It's Time by Imagine Dragons. |
| 19:12 | gtrak | bosie: firstly, the user profile doesn't go into project.clj, but into ~/.lein/profiles.clj |
| 19:13 | bosie | gtrak: thanks |
| 19:13 | tomoj | s/defmethod/defnmethod/ |
| 19:13 | gtrak | bosie: looks like you no longer need to explicitly use/require after that |
| 19:13 | tomoj | guess it's fairly easy to write a pointfree defmethod, but what to call it? :) |
| 19:14 | bbloom | tomoj: i think clojure.pprint does that and calls it use-method |
| 19:16 | bosie | gtrak: hm. doesn't seem to work for me |
| 19:16 | gtrak | hrm, not sure, then |
| 19:17 | Raynes | muhoo: There is a clementine setting that turns all album art into kitten pictures. |
| 19:17 | bosie | the reason why i use require: https://github.com/mmcgrana/clj-stacktrace/issues/15 |
| 19:17 | xeqi | technomancy: I'm all for a default starting stack, and luminus seem ok for that |
| 19:17 | gtrak | bosie: I think that's irrelevant |
| 19:17 | muhoo | Raynes: i'll have to check this out, thanks. |
| 19:18 | gtrak | looks like he's using it a different way entirely |
| 19:18 | technomancy | xeqi: yeah, it just challenges the whole "everything's easy with a full-stack framework" |
| 19:18 | technomancy | there's always going to be swapping out happening |
| 19:18 | muhoo | Raynes: do you publish your playlist somewhere, like on one of those social music services? |
| 19:18 | xeqi | heh, I came for the prime stack side |
| 19:18 | gtrak | though, isn't new a special form? |
| 19:18 | xeqi | *from |
| 19:19 | technomancy | xeqi: also the article is a bit silly in slapping all those orthogonal choices together; as if a preference for Postgres makes you more likely to use Haml |
| 19:19 | xeqi | though luminous does have weird choices for options, +bootstrap? |
| 19:19 | technomancy | but whatever; Clojure people understand that |
| 19:19 | Raynes | muhoo: I don't have playlists as I tend to listen to entire albums at a time (which *are* playlists, but just playlists of a single album on spotify where they should be public), but I scrobble everything I listen to to last.fm. |
| 19:19 | Raynes | muhoo: https://last.fm/user/RaynesFM |
| 19:20 | seangrove | Hrm, I think I really need to get the CA-as-a-github-service sideproject going |
| 19:20 | muhoo | Raynes: cool, thanks, you seem to be into all kinds of stuff i've never heard before |
| 19:20 | technomancy | are there any music players whose random shuffle is smart enough to only queue christmas music during december? |
| 19:20 | xeqi | technomancy: heh, yet surprisingly accurate from rails people I know |
| 19:21 | bosie | gtrak: was that directed at me? |
| 19:21 | gtrak | bosie: yea, I question his usage of 'new' |
| 19:21 | hiredman | technomancy: I have an itunes smart playlist constructed from searching for "Christmas" and a few other terms, and my regular playlist is "all the music except what is on my christmas playlist" |
| 19:22 | hiredman | seangrove: it's been done |
| 19:22 | muhoo | technomancy: they're called "shopping malls" |
| 19:22 | seangrove | hiredman: Oh? |
| 19:22 | hiredman | seangrove: some one just anounced it |
| 19:22 | bosie | gtrak: i see what you mean |
| 19:22 | technomancy | hiredman: I don't know if matching on terms would be enough |
| 19:22 | Raynes | muhoo: You'll note that MCR is my most listened to band by a fairly wide margin. |
| 19:22 | technomancy | unless you had copiously tagged with genre, etc |
| 19:22 | seangrove | hiredman: Even better, I didn't have to lift a finger for it |
| 19:22 | hiredman | seangrove: http://www.clahub.com/ |
| 19:22 | bosie | gtrak: swapped it out with just an 'n' |
| 19:22 | hiredman | technomancy: works for me |
| 19:23 | bosie | gtrak: and that ha the exact same effect |
| 19:23 | Raynes | muhoo: The interesting bit is that I haven't listened to them often in a while, I just listened to them so much that even in a short amount of time it eclipsed everything else. |
| 19:23 | gtrak | hmm, no idea then, I don't use it myself |
| 19:23 | hiredman | technomancy: actually I match 11 terms |
| 19:23 | bosie | gtrak: new is a special form http://clojure.org/java_interop#new |
| 19:23 | hiredman | it different fields (name, category, album, etc) |
| 19:24 | technomancy | hiredman: do you have a lot of metadata filled out typically? |
| 19:24 | hiredman | technomancy: dunno, what is a lot? |
| 19:24 | hiredman | most at least have album info at least |
| 19:24 | technomancy | categories, tags, genre I guess |
| 19:25 | muhoo | Raynes: i have bands like that too. but i did most of my intense/obsessive music listening in the pre-scrobbling era. |
| 19:25 | hiredman | anyway, I am looking forward to a music player that just exposes a sql interface where playlists are views |
| 19:27 | gtrak | hiredman: sparql? http://techbase.kde.org/Development/Tutorials/Metadata/Nepomuk/QueryService |
| 19:27 | muhoo | hiredman: sounds like a clj project waiting to happen |
| 19:27 | technomancy | mpd has a database; I wonder what they use |
| 19:27 | muhoo | technomancy: sqlite last i checked |
| 19:28 | muhoo | yep libsqlite3-0 (>= 3.5.9 |
| 19:28 | technomancy | cool |
| 19:28 | scottj | http://nhrx.org/mpdc/ lets you do pretty nice queries on mpd |
| 19:29 | muhoo | remember when every sample-code example project for every language and tool was making an mp3 player? |
| 19:29 | bosie | technomancy: may i bother you about a clj-stacktrace lein2 question? |
| 19:29 | muhoo | mp3 library, actually, not player |
| 19:29 | hiredman | scottj: neat |
| 19:30 | xeqi | muhoo: instead of a blog? |
| 19:30 | technomancy | bosie: sure |
| 19:30 | muhoo | xeqi: yep, blogs was a couple years later |
| 19:30 | xeqi | heh, didn't mean to put a ? on the end of that |
| 19:30 | technomancy | scottj: looks like fun |
| 19:32 | bosie | technomancy: https://www.refheap.com/paste/4ea781d471f04a45dc50e5d3b |
| 19:32 | hiredman | technomancy: and then enrique iglesias |
| 19:32 | gtrak | bosie: it looks like it's working |
| 19:32 | gtrak | notice: user/eval872 |
| 19:32 | xeqi | technomancy, yogthos: https://www.refheap.com/paste/8767 wow thats alot of poms and a -SNAPSHOT to download |
| 19:32 | technomancy | bosie: oh yeah, that's reply unfortunately |
| 19:33 | bosie | gtrak: hm. i thought it would look like on the github readme page ;) |
| 19:33 | technomancy | bosie: https://github.com/technomancy/leiningen/issues/799 |
| 19:33 | technomancy | bosie: there's probably a nasty alter-var-root hack that could be used to force it on reply; haven't looked into it myself since I use nrepl.el |
| 19:34 | bosie | i see |
| 19:34 | yogthos | xeqi: heh I don't even know where thneed is getting linked from |
| 19:34 | technomancy | thneed =( |
| 19:34 | technomancy | I thought that was fixed |
| 19:35 | xeqi | technomancy: this is with RC2 for ref |
| 19:35 | technomancy | was it leinjacker? |
| 19:35 | yogthos | at least it's only grabbing the latest jar :) |
| 19:36 | xeqi | gotta run, but I'll check later |
| 19:36 | xeqi | was wondering what sort of tests the generator built |
| 19:37 | xeqi | since I didn't see them much in the docs |
| 19:41 | bosie | thanks technomancy and gtrak |
| 19:57 | bizarrefish | Hi, all |
| 20:03 | bizarrefish | I'm playing with some web stuff, and am trying to implement a fingerprinting mechanism. I have next to no experience with multithreading/refs in clojure, and I'm not convinced that this code is safe: http://pastie.org/5722707 . Could someone take a look, and tell me what they think |
| 20:04 | bizarrefish | Also, is there a more..idiomatic way to include a big expensive operation in a ref-alter than using a lazy-seq? |
| 20:05 | amalloy | bizarrefish: instead of a lazy-seq of one element, you're looking for ##(doc delay) |
| 20:05 | lazybot | ⇒ "Macro ([& body]); Takes a body of expressions and yields a Delay object that will invoke the body only the first time it is forced (with force or deref/@), and will cache the result and return it on all subsequent force calls. See also - realized?" |
| 20:05 | bizarrefish | Ahh, I didn't know about that :) |
| 20:05 | amalloy | your multithreading is safe but awkward |
| 20:06 | amalloy | well, maybe not. my alternative doesn't come out much better |
| 20:07 | bizarrefish | amalloy: Looks to me like the only other way of doing it which might be cleaner is by moving the if into the fn |
| 20:08 | yogthos | wouldn't swap be better (def fingerprints (atom {})) (swap! fingerprints #(if-not (contains % uri) (first (compute-fingerprint body)))) |
| 20:08 | yogthos | err missed assoc there, but you get the idea |
| 20:09 | bizarrefish | Ahh, the atom thing |
| 20:09 | bizarrefish | I'm still trying to get my head around the differece |
| 20:10 | yogthos | here https://www.refheap.com/paste/8768 |
| 20:11 | yogthos | if you don't need it to be coordinated atom is better |
| 20:11 | bizarrefish | It sure looks like a better solution |
| 20:12 | bizarrefish | By coordinated, I take it you mean jumping around between threads, like a producer/consumer kind of situation. |
| 20:12 | yogthos | it would still be safe to use an atom there |
| 20:13 | yogthos | but if you have transactions, then you want a ref |
| 20:13 | amalloy | yogthos: your function sets fingerprints to nil pretty often |
| 20:13 | yogthos | oh right :) |
| 20:13 | bizarrefish | hehe |
| 20:13 | bizarrefish | not so good |
| 20:13 | bizarrefish | But thanks dudes, I see what you're saying. |
| 20:14 | yogthos | hehe |
| 20:14 | yogthos | I'm useless without the repl :P |
| 20:14 | bizarrefish | What's a good way to actually integrate the repl into the devving process? |
| 20:14 | yogthos | what do you use for the editor? |
| 20:15 | bizarrefish | I've been learning noir and such by making a website for my mate. I've generally been using gedit/nano/whatever's available, and "lein run". Sometimes "lein repl", and starting the server so I can poke stuff from there. |
| 20:15 | bizarrefish | Feels like I might be missing a trick |
| 20:16 | yogthos | yeah emacs or eclipse is much nicer for clojure |
| 20:16 | yogthos | if you're comfortable with emacs, it's probably the way to go as most people use it, but eclipse with ccw is very effective too http://code.google.com/p/counterclockwise/ |
| 20:16 | yogthos | the other big thing you get is structural editing |
| 20:16 | bizarrefish | I think I tried the eclipse one a while ago. My machine wasn't fast enough to make it usable, iirc :P |
| 20:17 | yogthos | hehe |
| 20:17 | yogthos | if you get the base eclipse without all the crap addons it's not too bad |
| 20:17 | yogthos | and ccw has had some speed issues in the past, it's much better now |
| 20:17 | yogthos | but emacs and paredit is very nice as well, and not nearly as much of a hog |
| 20:17 | bizarrefish | I'm comfortable with a lot of stuff in the same vein as emacs, I was fooling with emacs the other day and it seems I could quite easily get used to it |
| 20:18 | yogthos | the big advantage is that you can select code by expression, and move expressions around using shortcuts |
| 20:18 | yogthos | it's like playing with lego blocks ;) |
| 20:18 | mattmoss | And once you learn M-x brew-coffee, everything is awesome. |
| 20:18 | yogthos | and if you're in a particular expression, you can just send it to the repl to evaluate |
| 20:18 | yogthos | and it will run it in the context of what's already running |
| 20:18 | bizarrefish | It breaks my heart to say things like this, but: "my current machine could probably cope just fine with everything eclipse has to throw at it" |
| 20:19 | bizarrefish | I'll give it another go...after emacs |
| 20:19 | yogthos | :) |
| 20:19 | bizarrefish | yogthos: So, it's just like the elisp usage |
| 20:19 | yogthos | bizarrefish: precisely |
| 20:20 | yogthos | it makes it a lot easier to tell if your stuff works right, because you can just test functions as you write them |
| 20:20 | yogthos | make something see it work, move to the next one |
| 20:20 | yogthos | you never build up a bunch of code and then hope it all works together :) |
| 20:20 | bizarrefish | It feels like with a homoiconic language like clojure, I should be able to do a certain amount of source editing programmatically. |
| 20:20 | bizarrefish | Would emacs allow me to say, 'walk' through my source code with an fn? |
| 20:21 | yogthos | emacs can do a lot of that :) |
| 20:21 | yogthos | you can do that with macros too right from your code :) |
| 20:21 | bizarrefish | And maintain indentation? :O |
| 20:21 | craigbro | record macros |
| 20:21 | yogthos | clojure has a nice pprint too, which can format code |
| 20:21 | zackzackzack | Let's say that I want to start up a rexster server alongside ring, https://github.com/tinkerpop/rexster |
| 20:22 | yogthos | and afk here |
| 20:22 | craigbro | complex string replaces |
| 20:22 | craigbro | docstring and fn param list reminders when you cursor over fns |
| 20:22 | craigbro | lookup docs at point |
| 20:22 | craigbro | send some code to your repla and get the result |
| 20:22 | zackzackzack | What would the best way to do that? Currently, I'm wrapping rexster inside of a Thread and starting that up independently but ever once in a while the rexster server will stop responding. |
| 20:23 | craigbro | all that, and rainbow colored parenthesis |
| 20:23 | amalloy | ugh, rainbow parens |
| 20:24 | craigbro | zackzackzack if rexster is stopping responding, I would say, you should put a try around the call that starts it up to catch any excpetions, and check your logs |
| 20:24 | bizarrefish | Righto, i'm sold on that :) I just had a play with pprint(another thing I didn't know was there), and it's pretty cool. |
| 20:24 | craigbro | if it's locking up, it prolly has nothing to do with ring |
| 20:24 | amalloy | everyone is entitled to their own emacs setup, of course, but i discourage rainbow parens for someone who isn't already used to them; all they do is make you focus on the parens, when you should be focusing on indentation and ignoring parens |
| 20:25 | technomancy | (inc amalloy) |
| 20:25 | lazybot | ⇒ 42 |
| 20:25 | ibdknox | I think that is highly subjective |
| 20:27 | bizarrefish | Also, just like there is scriptjure to generate javascript, and lithium to generate machine code, is there anything which would generate something around the C kind of level? Seems like if you could write small, high performance programs in clojure that would be pretty sweet. |
| 20:27 | zackzackzack | craigbro: I wonder, if errors are happening inside of a started Thread in clojure, then are they thrown to the main thread? |
| 20:28 | amalloy | i'm nothing if not subjective |
| 20:28 | bizarrefish | I imagine it would be backed by gcc and shared objects in implementation |
| 20:29 | craigbro | zackzackzack: I wouldn't count on it, there could be handlers anywhere in the call chain on that thread, and I would need more details, like your code, to answer more usefully |
| 20:29 | bizarrefish | (defcprogram (:int myfunc [:int a :int b] (+ a b)))) |
| 20:31 | bizarrefish | Would also be sweet if you could marshal back and forth between clojure and those programs, transparently./ |
| 20:31 | hiredman | I really liked rainbox parens, but I had to turn them off because they were really slow for large clojure files (like core.clj) |
| 20:32 | technomancy | hiredman: that was before you started with paredit though, right? |
| 20:32 | hiredman | that was a few years ago, and I don't really remember what rainbox parens were like |
| 20:32 | zackzackzack | craigbro: Good to know then. It all prints to stdout no matter the thread, but I'm just not sure about the errors. I haven't seen any errors on stdout yet, but it still hangs every once in a while. |
| 20:32 | hiredman | technomancy: no, that was with paredit |
| 20:32 | ibdknox | lol |
| 20:32 | ibdknox | what value is there in attacking preference? |
| 20:33 | technomancy | I feel like hiredman can take it |
| 20:34 | ibdknox | haha |
| 20:34 | hiredman | untrue, delicate flower, etc |
| 20:34 | technomancy | but seriously, encouraging newbies to pay more attention to parens can be unhelpful. |
| 20:34 | ibdknox | I would argue it does the opposite |
| 20:35 | tpope | dumb put popular preferences also have a way of sneaking into the defaults |
| 20:35 | ibdknox | though again, I imagine that is very dependent on the person |
| 20:35 | amalloy | i used rainbow parens and paredit mode too. had the same problems with large files |
| 20:35 | technomancy | since they're already likely to be obsessing about parens more than they should be; they need to realize that the parens can just blend into the background and cause zero cognitive load |
| 20:35 | ibdknox | until you need to see the scope of something |
| 20:36 | craigbro | I'm quite capable of perceiving multiple colors without losing my shit |
| 20:36 | hiredman | you may think that... |
| 20:36 | ibdknox | heh |
| 20:36 | ibdknox | we did several studies on highlighting at MSFT |
| 20:36 | amalloy | clojurebot: craigbro is quite capable of perceiving multiple colors without losing his shit |
| 20:37 | technomancy | I'll grant it might be helpful if you don't have paredit turned on |
| 20:37 | ibdknox | trust me, there's no conclusive thing you can say here |
| 20:37 | craigbro | hehe |
| 20:37 | amalloy | hiredman: noooo, why isn't he learning my factoid? |
| 20:37 | technomancy | but "not using paredit" counts as "doing work in your head you could be offloading to the computer" |
| 20:37 | hiredman | clojurebot: ping? |
| 20:37 | bizarrefish | Righto, it's my bedtime. Gotta goo. Thanks for the help doods :) |
| 20:38 | craigbro | you know, I think in all my years of lisp hacking, I have used paredit for a month |
| 20:38 | craigbro | I like it, and I don't think I even know when rainbow parens are on |
| 20:39 | craigbro | I find paredit annoying at times, but learn to turn it off so I can fix it's confusion and then turn it back on |
| 20:39 | hiredman | ,(+ 1 2) |
| 20:39 | clojurebot | 3 |
| 20:39 | craigbro | but I went years without them, and I can't really say it makes as much difference to me |
| 20:39 | amalloy | craigbro: s/it's/my? |
| 20:40 | craigbro | amalloy: no, paredit shits the bed sometimes when using []s and cuttin' and pastering |
| 20:41 | craigbro | BTW< here is a screenshot of my emacs: |
| 20:41 | craigbro | http://raz.z0r.de/266 |
| 20:41 | craigbro | to prove I can deal with colors |
| 20:41 | amalloy | if you cut and paste misbalanced expressions, yes |
| 20:41 | craigbro | (require 'bubble-bobble) |
| 20:41 | amalloy | epilepsy warning on that last link |
| 20:41 | craigbro | amalloy and sometimes I want to, cause I want just the last three args... |
| 20:41 | technomancy | that just means you're using non-paredit-aware operations |
| 20:41 | craigbro | yup |
| 20:42 | craigbro | tho the [] confusion is not me being non paredit |
| 20:42 | technomancy | I think that's due to an old version of paredit |
| 20:42 | craigbro | sweet, I'll upgradinate |
| 20:44 | xeqi | technomancy, yogthos|away: thneed is coming from lein-jacker 0.2.0 in the luminus/lein-template 0.2.9 pom. If you update to lein-jacker 0.4.0 it'll stop |
| 20:44 | amalloy | tbh i'm not sure how "the last three args" could ever cause you to wind up copy/pasting something unbalanced. surely you just type C-M-k three times, or C-3 C-M-k? |
| 20:44 | xeqi | though I'm surprised templates need dependencies |
| 20:45 | technomancy | clojurebot: thneed is coming from an old version of lein-jacker |
| 20:45 | clojurebot | c'est bon! |
| 20:45 | technomancy | I always forget |
| 20:45 | craigbro | amalloy, or doing what my emacs brain has done for the last decade, and C-k... |
| 20:45 | amalloy | C-k is bound to something sensible in paredit also |
| 20:45 | technomancy | it's C-w that will mess you up |
| 20:45 | amalloy | (and C-M-k doesn't come from paredit; emacs has had it built in for ages) |
| 20:46 | xeqi | technomancy: yeah, for alot of people it'll be brought in even further up a chain by something like and old version of lein-ring |
| 20:46 | technomancy | (define-key 'paredit-mode-map (kbd "C-w") (lambda () (message "oh no you don't"))) |
| 20:46 | amalloy | technomancy: can i get a (keyboard-quit) in there so emacs looks mad at me? |
| 20:46 | technomancy | oh, also (interactively) in there |
| 20:47 | xeqi | yogthos|away: Y luminus NO HAVE tags in github? |
| 20:47 | technomancy | amalloy: (message "(╯°□°)╯︵ ┻━┻")) |
| 20:48 | mattmoss | Is one preferable? (Double. "x") vs. (double (read-string "x")) ? |
| 20:49 | hiredman | Double/parseDouble |
| 20:49 | ohpauleez | mattmoss: You might just want to do parseDouble |
| 20:50 | ohpauleez | damnit hiredman, c'mon - I was totally fielding that one haha |
| 20:50 | mattmoss | lolz |
| 20:50 | technomancy | hiredman: at least with Integer the constructor is preferable since it's polymorphic |
| 20:50 | technomancy | not sure if Double is the same |
| 20:51 | hiredman | technomancy: no, if you are parsing you want parsing |
| 20:51 | amalloy | BigDecimal's constructor is polymorphic, which only leads to sadness |
| 20:52 | amalloy | alas, its static valueOf method is also polymorphic, but with only the wrong overloads intstead of the right ones |
| 20:54 | mattmoss | Thanks all. |
| 20:54 | amalloy | i agree with hiredman, though: if you know you have a string, Long/parseLong is definitely preferable to using the constructor |
| 20:55 | craigbro | how does the poymorphic constructor make sad? |
| 20:57 | amalloy | &(java.math.BigDecimal. 0.33333333333333333333333333333) |
| 20:57 | lazybot | ⇒ 0.333333333333333314829616256247390992939472198486328125M |
| 20:57 | amalloy | &(java.math.BigDecimal. "0.33333333333333333333333333333") |
| 20:57 | lazybot | ⇒ 0.33333333333333333333333333333M |
| 20:58 | mattmoss | &(let [foo Double/parseDouble] (foo "3")) |
| 20:58 | lazybot | java.lang.RuntimeException: Unable to find static field: parseDouble in class java.lang.Double |
| 20:58 | amalloy | if you make a bigdec out of a double, you've already lost |
| 20:58 | mattmoss | Is there a way to get a "pointer" to a static class method? |
| 20:58 | amalloy | lambdas, baby |
| 20:58 | amalloy | #(Double/parseDouble %) |
| 20:58 | mattmoss | Man... |
| 20:59 | mattmoss | Why does my brain stop working after 5pm? |
| 21:00 | ChongLi | blood sugar |
| 21:00 | mattmoss | ~brain |
| 21:00 | clojurebot | brain dump is http://clj.thelastcitadel.com/clojurebot |
| 21:01 | mattmoss | That's a blank page, clojurebot. |
| 21:03 | craigbro | amalloy: ah, thanks |
| 21:05 | craigbro | what is current fave neo4j lib/wrapper? |
| 21:08 | bbloom | i need to write a library that provides a little database engine in a map |
| 21:09 | bbloom | i find myself regularly making maps that are essentially just indexes and reverse indexes |
| 21:09 | bbloom | and then i have to write this funny looking atom swap! functions to insert or remove from both indexes |
| 21:09 | hiredman | bbloom: https://github.com/danlarkin/subrosa/blob/master/src/subrosa/database.clj |
| 21:09 | hiredman | bbloom: or look at clojure.set |
| 21:09 | craigbro | bbloom: https://github.com/threatgrid/pldb |
| 21:09 | craigbro | use core.logic 8) |
| 21:09 | bbloom | heh, i'm glad i asked :-P |
| 21:10 | hiredman | http://richhickey.github.com/clojure/clojure.set-api.html#clojure.set/index http://richhickey.github.com/clojure/clojure.set-api.html#clojure.set/project etc |
| 21:10 | lazybot | Nooooo, that's so out of date! Please see instead http://clojure.github.com/clojure/clojure.set-api.html#clojure.set/project and try to stop linking to rich's repo. |
| 21:11 | hiredman | I ran in to https://gist.github.com/3181018 today too |
| 21:11 | hiredman | (speaking of core.logic and databases) |
| 21:12 | ohpauleez | yeah, I saw that last week or so |
| 21:12 | ohpauleez | definitely a cool idea |
| 21:12 | craigbro | oh wow |
| 21:13 | bbloom | im gonna hand roll this case b/c i have 1 insertion path and 2 deletion paths & the asymmetry is subtle :-/ |
| 21:13 | dnolen | neat |
| 21:33 | yogthos | xeqi: didn't seem like it was necessary yet :) |
| 21:34 | yogthos | xeqi: there's much of value in using the older versions of the template |
| 21:38 | TimMc | Hmm, how do I build Leiningen from checkout so I can test out modifications? |
| 21:40 | TimMc | CONTRIBUTING.md seems to indicate that I should be able to simply run the bin/lein in the checkout, but that fails. |
| 21:52 | technomancy | TimMc: did you do `lein1 install` inside leiningen-core? |
| 21:53 | xeqi | yogthos: ah, I was gonna use it to look at what made up the 0.2.9 release. if master is the development branch it requires going back through history to find that (and hope you can tell if releases wer just before or after a version bump) |
| 21:54 | yogthos | xeqi: yeah it makes archeology a bit tricky :) |
| 21:54 | xeqi | thats a good word there |
| 21:54 | yogthos | xeqi: the only major change recently was to use ring server and get rid of run-jetty, otherwise I've been mainly adding new options |
| 21:56 | TimMc | technomancy: Hmm, I think I must have been in the project root. |
| 21:56 | TimMc | Read-o. |
| 22:04 | TimMc | technomancy: I'd like to do some cleanup in leiningen/new/templates.clj -- aside from deprecation and renaming of defns, can this piggyback on existing work in that ns? |
| 22:10 | hadronzoo | I'd like to use EDN for serialization from within ClojureScript. Do I have to use shaunxcode/jsedn, or is there an existing ClojureScript package? |
| 22:13 | xeqi | hadronzoo: pr-str ? |
| 22:13 | xeqi | as in the function |
| 22:13 | hadronzoo | xeqi: How would one deserialize from within ClojureScript? |
| 22:14 | xeqi | cljs.reader/read-string |
| 22:14 | xeqi | at least thats what fetch uses |
| 22:14 | xeqi | https://github.com/ibdknox/fetch/blob/master/src/fetch/remotes.cljs |
| 22:14 | hadronzoo | xeqi: Wow, that's much simpler than I was expecting. Thank you. |
| 22:15 | TimMc | EDN is just a fancy name for Clojure (de)serialization. |
| 22:15 | TimMc | I don't know why it exists. |
| 22:16 | TimMc | Something to do with Datomic, I guess? |
| 22:16 | hadronzoo | TimMc: I suppose it makes sense to document the format so other languages can consume Clojure services |
| 22:26 | TimMc | $latest jkkramer/loom |
| 22:26 | lazybot | [jkkramer/loom "0.2.0"] -- https://clojars.org/jkkramer/loom |
| 22:35 | seangrove | $latest shoreleave-browser |
| 22:35 | lazybot | No project by this name exists on clojars. |
| 23:16 | babyclj | hi guys, thought I need someone here to "pimp" my code -- very newbie here :-) |
| 23:16 | babyclj | src is here https://github.com/seymores/twitter-stats/blob/master/src/twitter_stats/core.clj |
| 23:17 | akhudek | one thing you can do is try running kibit on it https://github.com/jonase/kibit/ |
| 23:18 | technomancy | TimMc: not sure which existing work you're referring to, but I'm planning on cutting a release in a matter of days, so probably best not to move anything unless it's private |
| 23:19 | TimMc | I figured it was either a really bad or really good time to rename stuff. |
| 23:19 | technomancy | heh |
| 23:19 | akhudek | babyclj: also, you want to use if for things that return things and when for mutable things that do not return values |
| 23:19 | TimMc | I was just getting really annoyed at the name of leiningen.new.templates/sanitize |
| 23:19 | technomancy | babyclj: could we maybe find another metaphor that doesn't mean taking a cut of your code's sex work earnings in exchange for protection? |
| 23:19 | akhudek | or rather, when is for things with side effects |
| 23:19 | technomancy | kthx |
| 23:20 | babyclj | lol |
| 23:20 | babyclj | akhudek: hmm yes |
| 23:20 | babyclj | ah kibit looks awesome |
| 23:20 | technomancy | TimMc: pretty sure there are extant templates that would break from that; probably not the right timing |
| 23:21 | TimMc | When would the right timing be? :-) |
| 23:23 | technomancy | we could move it and put a (def ^{:doc "..."} sanitize newname) alias in its place |
| 23:24 | technomancy | but we can't get rid of sanitize until 3.0 |
| 23:24 | technomancy | on the bright side, I have concrete plans for 3.0 happening sooner than the 1->2 gap |
| 23:24 | TimMc | Nice. |
| 23:28 | xumingmingv | anyone have preety emacs color theme to recommand? I know color-theme-soloarized, but it has issue supporting chinese gbk files. |
| 23:29 | TimMc | hyPiRion: This is executable "normal" Clojure that should be compilable into swearjure: https://www.refheap.com/paste/8777 |
| 23:32 | infiniteone | anyone using nrepl and emacs ???? |
| 23:33 | infiniteone | if so i have a question ??? |
| 23:33 | lazybot | infiniteone: How could that be wrong? |
| 23:33 | infiniteone | not wrong |
| 23:34 | infiniteone | looking for a best method to deal with the stack trace which pops up |
| 23:35 | infiniteone | Figured maybe someone in the clojure community had a way of dealing with this |
| 23:36 | TimMc | A bunch of people use Emacs and nREPL. (I don't.) What's the behavior that is problematic? |
| 23:37 | xumingmingv | what will lazybot answer a question even if you didnt ask him? |
| 23:38 | infiniteone | when I get a error I get a stack trace which opens another buffer and would like my cursor to automatically jump to the stack trace so that I can easily q quit the buffer |
| 23:39 | infiniteone | something I would get in slime, but my slime clojure-jack-in is broken :-( |
| 23:40 | xumingmingv | lazybot: what will you answer a question even if you didnt ask him? |
| 23:40 | lazybot | It's AWWWW RIGHT! |
| 23:40 | xumingmingv | lazybot: what will you answer a question even if I didnt ask you? |
| 23:40 | lazybot | It's AWWWW RIGHT! |
| 23:41 | xumingmingv | lazybot: ok, you are brilliant |
| 23:48 | xeqi | infiniteone: it used to do that and people requested it stop. I think theres some customization that can be done to make it come back but I haven't tried to find it |
| 23:48 | xeqi | https://github.com/kingtim/nrepl.el/issues/110 |
| 23:50 | ivan | infiniteone: you can just make that buffer not appear |