2013-03-11
| 00:36 | hiredman | /win 15 |
| 00:41 | akhudek | is there a summary of the changes going from jdbc 0.2.x -> 0.3.0 somehwere? |
| 00:45 | devn | technomancy: no, but im constantly growing :\ |
| 00:45 | devn | technomancy: 2013-03-11T04:47:00+00:00 heroku[web.1]: Process running mem=685M(133.9%) |
| 00:46 | technomancy | devn: is it ignoring JVM_OPTS? |
| 00:46 | Frozenlock | Hrphm... Any records of GoogleBot not playing nice with ring(jetty)? |
| 00:46 | devn | JAVA_OPTS: -Xmx384m -Xss512k -XX:+UseCompressedOops -javaagent:newrelic/newrelic.jar |
| 00:46 | devn | technomancy: no JVM_OPTS set |
| 00:46 | Frozenlock | In the google webmaster tools, if I try 'fetch as google' it just fails miserably :( |
| 00:46 | technomancy | devn: that's weird; how did that happen? |
| 00:47 | devn | technomancy: i added newrelic according to the instructions on the heroku guide |
| 00:47 | technomancy | JVM_OPTS get set automatically for all new clojure apps |
| 00:48 | devn | technomancy: yeah, I unset it |
| 00:48 | devn | :X |
| 00:48 | devn | technomancy: the newrelic article mixes those two: It says JVM_OPTS in one place, and then gives you a command to set JAVA_OTPS |
| 00:48 | devn | OPTS* |
| 00:48 | creese | what people using these days for db migrations? |
| 00:49 | devn | creese: people were talking about migratus earlier |
| 00:49 | technomancy | creese: defn =) |
| 00:49 | technomancy | https://github.com/technomancy/syme/blob/master/src/syme/db.clj#L50 |
| 00:49 | akhudek | creese: we use flyway |
| 00:50 | technomancy | migratus and ragtime are both decent. I don't like the approaches of lobos and drift. |
| 00:50 | devn | lobos is short for lobotomy |
| 00:51 | devn | i keeed, it's fine, but i like migratus more personally |
| 00:51 | devn | technomancy: im running like this "lein with-profile production ring server" |
| 00:51 | devn | technomancy: Is there a way to trampoline that? Would that make anything better? |
| 00:52 | creese | cool |
| 00:57 | devn | technomancy: nevermind, that did it :) |
| 00:57 | creese | What is the status of korma now that CG has moved on? Is it still the preferred alternative to clojure.java.jdbc? |
| 00:58 | akhudek | I have come to appreciate java.jdbc more myself. |
| 00:58 | akhudek | Though the api for 0.3.0 is still a mystery to me. |
| 00:59 | creese | I'm wondering if anyone has tried an interface like ring? |
| 00:59 | akhudek | I tried to write a simple aggregate in korma and after wrestling with it for 30min yet again, I just gave up and went to jdbc. |
| 00:59 | akhudek | today |
| 00:59 | akhudek | I think korma was supposed to be a simple interface. :-/ |
| 01:07 | creese | migratus seems pretty good if you don't mind writing raw sql |
| 01:11 | akhudek | flywaydb also uses raw sql, it's pretty easy to use. Don't think migratus was around when I chose flyway. |
| 01:11 | akhudek | in any event, raw sql is quite flexible |
| 01:16 | technomancy | creese: honeysql is an attempt at making a compilation target-ish thing for sql |
| 01:16 | technomancy | I would recommend c.j.jdbc more except for the fact that putting SQL in strings where you don't get syntax highlighting makes it hard to catch certain types of mistakes |
| 01:56 | holo | hi |
| 01:59 | holo | did anyone notice that when submiting a form with hiccup, keywords with dots get converted to strings? i'm not sure yet if hiccup is the one doing it though |
| 02:08 | tomoj | $latest com.datomic/datomic-free |
| 02:08 | lazybot | [com.datomic/datomic-free "0.8.3826"] -- https://clojars.org/com.datomic/datomic-free |
| 02:08 | tomoj | tyler__: ^ |
| 02:08 | tyler__ | tomoj: woah cool feature, thnx |
| 02:08 | tomoj | (inc Raynes) |
| 02:08 | lazybot | ⇒ 22 |
| 02:08 | tyler__ | $latest cheshire.core |
| 02:08 | lazybot | No project by this name exists on clojars. |
| 02:09 | tyler__ | derp |
| 02:09 | tyler__ | $latest cheshire |
| 02:09 | lazybot | [cheshire "5.0.2"] -- https://clojars.org/cheshire |
| 02:09 | tyler__ | :) |
| 02:11 | holo | (inc Raynes) |
| 02:11 | lazybot | ⇒ 23 |
| 02:12 | tyler__ | (-> Raynes inc) |
| 02:12 | tyler__ | meh |
| 02:16 | holo | did anyone also noticed that while destructuring maps, keywords with dots are not supported? i get java.lang.ClassFormatError: Illegal field name when trying that |
| 02:17 | amalloy | holo: nothing to do with destructuring, i suspect |
| 02:17 | amalloy | &(let [x.y 1] x.y) |
| 02:17 | lazybot | java.lang.ClassFormatError: Illegal field name "x.y" in class sandbox50899$eval54439 |
| 02:18 | holo | amalloy, yes, in let bindings |
| 02:18 | holo | &(def x.y "foo") |
| 02:18 | lazybot | java.lang.SecurityException: You tripped the alarm! def is bad! |
| 02:19 | holo | hun? def is bad? |
| 02:20 | holo | (def x.y "foo") |
| 02:21 | n_b | ,(def x.y "foo") to activate the other bot |
| 02:21 | clojurebot | #<Exception java.lang.Exception: SANBOX DENIED> |
| 02:21 | n_b | Assumed that would happen |
| 03:05 | clj_idiot | All clojure functions are Runnable. With ".start" on a function, Clojure will create a new thread to execute the function. Is the thread auto destroyed when the function terminates? |
| 03:16 | alandipert | clj_idiot: function invocation doesn't necessarily create a thread |
| 03:16 | clj_idiot | (.start (Thread. my-fun)) does |
| 03:17 | clj_idiot | I should have been clearer with what I meant. |
| 03:17 | clj_idiot | my fault. |
| 03:32 | alandipert | clj_idiot: yeah i think in that case the thread dies when the function returns |
| 05:10 | clj_idiot | I know that Clojure has STM, Agents, and Atoms. Dumb question: is it possible to implement (non-infinite-looping) Semaphores interms of these 3? |
| 05:57 | lispy_ | hey guys, I'm using clojure.string/replace to convert a linux path into a windows path, but its dying on the backslash, is there a tried and tested/recommended way to do this ? currently getting StringIndexOutOfBoundsException String index out of range: 1 when running (replace "/some/path/to/that" #"/" "\\") in repl |
| 05:59 | vijaykiran | lispy_: be lazy and use :http://commons.apache.org/proper/commons-io/javadocs/api-1.4/org/apache/commons/io/FilenameUtils.html :) |
| 06:00 | lispy_ | thanks for the pointer |
| 06:01 | Ember- | I think that is a bug |
| 06:01 | Ember- | it sure as hell should be able to do that replacement |
| 06:03 | Anderkent | it probably tries to interpret the \\ as a pattern instead of string? |
| 06:03 | Ember- | nope, that same bug occurs with java string |
| 06:03 | Ember- | &(.replaceAll "/some/path/to/that" "/" "\\") |
| 06:03 | lazybot | java.lang.StringIndexOutOfBoundsException: String index out of range: 1 |
| 06:03 | Ember- | and |
| 06:03 | Ember- | &(.replaceAll "/some/path/to/that" "/" "\\\\") |
| 06:03 | lazybot | ⇒ "\\some\\path\\to\\that" |
| 06:03 | Ember- | very interesting :) |
| 06:04 | Anderkent | Note that backslashes () and dollar signs ($) in the replacement string may cause the results to be different than if it were being treated as a literal replacement string. Dollar signs may be treated as references to captured subsequences as described above, and backslashes are used to escape literal characters in the replacement string. |
| 06:04 | Anderkent | but curiously \\\\ doesnt do the right thing either |
| 06:05 | Anderkent | oh nvm it does |
| 06:05 | Ember- | yes, it does |
| 06:05 | clgv | Anderkent: you can always check with `println` |
| 06:05 | Anderkent | i was just confused by it being prnd instead of printed |
| 06:05 | Anderkent | yeah yeah |
| 06:05 | Ember- | but imho the first version should work |
| 06:05 | lispy_ | sorry, confused… does : (.replaceAll "/some/path/to/that" "/" "\\\\") work ? |
| 06:06 | lispy_ | is the double char ok in the result ? |
| 06:06 | Anderkent | lispy_: yes |
| 06:06 | lispy_ | oh cool |
| 06:06 | Anderkent | do print |
| 06:06 | lispy_ | thanks |
| 06:06 | Anderkent | ,(println (.replaceAll "/some/path/to/that" "/" "\\\\") |
| 06:06 | lispy_ | oh I see |
| 06:06 | Anderkent | oups |
| 06:06 | clojurebot | #<RuntimeException java.lang.RuntimeException: EOF while reading> |
| 06:06 | lispy_ | cool |
| 06:06 | Ember- | &(.replaceAll "/some/path/to/that" "/" "\\\") |
| 06:06 | lazybot | java.lang.RuntimeException: EOF while reading string |
| 06:06 | Anderkent | :D |
| 06:06 | Ember- | and that comes from clojure.lang.Util.runtimeException (Util.java:219) |
| 06:06 | clgv | ,(println (.replaceAll "/some/path/to/that" "/" "\\\\")) |
| 06:06 | clojurebot | \some\path\to\that\n |
| 06:06 | Anderkent | ember you had 3 backslashes instead of 4 |
| 06:07 | Ember- | yeah I know |
| 06:07 | Ember- | was just trying |
| 06:07 | Ember- | what happens in that case :) |
| 06:07 | clgv | but why would you do that anyway? java is totally fine with slashes in filenames afaik |
| 06:07 | Ember- | c:\\foo\\bar evaluates to c:\foo\bar |
| 06:08 | Ember- | not pretty but works |
| 06:08 | Anderkent | ah, the backslash behaviour is so that you can do |
| 06:09 | Anderkent | ,(println (.replaceAll "/a/s/d/f" "/" "\\$1")) |
| 06:09 | clojurebot | $1a$1s$1d$1f\n |
| 06:09 | Anderkent | which otherwise tries to grab the 1st match group |
| 06:10 | efjboss | still, that behaviour is pretty damn terrible |
| 06:12 | clgv | Anderkent: that is not the entire explanation. another reason is the backslash is used for nonprintable characters like "\n" as well |
| 06:13 | clgv | or say "special characters".. |
| 06:18 | Anderkent | clgv: as in "\\n"? that seems to do the intuitive thing (i.e. print out \n literally). "\n" is of course the newline, no surprise there. Only reason you need to double escape the backslash is because the replacement string is not a literal string, but a pattern-like thing (i.e. it can reference groups) |
| 06:18 | clojurebot | Ik begrijp |
| 07:51 | clj_idiot | in clojure, can https://github.com/swannodette/delimc be used to simulate lightweight co-routines ? |
| 09:25 | nonuby | whats the easiest way of ([:a 1][:b 2][:c 3]) into a map { :a 1 :b 2 :c 3} |
| 09:25 | dan_thiffault | lein ?: If I'm reading eval-in-project correctly it spawns a separate process. Short of manually managing I/O (file, open net port, etc) is there way of returning state to the parent process? |
| 09:26 | clgv | nonuby: (into {} '([:a 1][:b 2][:c 3])) |
| 09:26 | clgv | ,(into {} '([:a 1][:b 2][:c 3])) |
| 09:26 | clojurebot | {:a 1, :b 2, :c 3} |
| 09:27 | bloop | I'm a little confused about how to get around how symbols are qualified in macros. It seems like too much of a pain. What is the best way to write (defmacro mac [exp] `(let [f (fn [n] (max 1 (- n external)))] ~exp)) where "external" is a captured lexical variable in the context where the macro is called and of course f and n are lexical variables the I want to define in the macro, and f being one that I want access to in the code t |
| 09:30 | clgv | bloop: do not use namecapturing. let the user provide the names in the macrocall |
| 09:31 | bloop | clgv: even for the one that does not escape the macro ("n")? |
| 09:31 | clgv | bloop: can you provide a concrete complete example? |
| 09:32 | bloop | clgv: the one I provided is actually exactly what I'm trying to write with the names changed. |
| 09:32 | bsteuber | bloop: no, for ones that don't escape the macro, use n# |
| 09:32 | bloop | also, I'm only using this in two places to save some typing for myself. It's not like, an interface. |
| 09:32 | bsteuber | for those that need to escape in a controlled way, use arguments as clgv said |
| 09:33 | clgv | bloop: I didnt understand the idea of "external" in that code |
| 09:33 | bsteuber | but if you really want to do ugly stuff |
| 09:33 | bsteuber | try ~'foo |
| 09:33 | bloop | exactly, I want ugly-ass CL-style macros :p |
| 09:33 | bsteuber | this will generate the exact symbol foo with all the traps you loce from the c preprocessor :) |
| 09:33 | bsteuber | love |
| 09:33 | clgv | bloop: e.g. (defmacro mac [external, f, exp] `(let [~f (fn [n#] (max 1 (- n# ~external)))] ~exp)) |
| 09:35 | bloop | hm i think the solution here is to not use a macro |
| 09:35 | bloop | liek in scheme, making it hygienic costs mroe typing than i save by using it |
| 09:35 | clgv | bloop: most of the time the solution is to not use a macro ;) |
| 09:36 | bsteuber | yeah that's usually best - but in case you ever feel the need to do dirty things, use ~'my-captured-symbol |
| 09:36 | clgv | I do not think about creating a macro unless I spotted a pattern that can not be implemented via functions for at least 3 times ;) |
| 09:37 | xumingmingv | Does the lein plugin `native-deps` works with lein2? |
| 09:38 | xumingmingv | https://groups.google.com/forum/#!topic/leiningen/dbQBuXWmpko |
| 09:38 | clgv | xumingmingv: leiningen has a list on the wiki with plugins that were confirmed to work with leiningen 2 |
| 09:42 | clgv | xumingmingv: I recall that you do not need a plugin for native deps with lein2 anymore. you can research how overtone does it... |
| 09:43 | xumingmingv | clgv: thanks, I am trying to use this: https://github.com/pkamenarsky/atea |
| 09:43 | jcromartie | stuartsierra: hey, a while back you mentioned keeping global state out of top-level vars? |
| 09:43 | xumingmingv | which tells me to run `lein native-deps` |
| 09:43 | jcromartie | like, if I wanted to have a simple in-memory data model |
| 09:44 | jcromartie | stuartsierra: would bindings be a suitable alternative when handing off the refs from a HTTP (compojure) handler? |
| 09:44 | stuartsierra | I prefer passing all state as explicit arguments. |
| 09:44 | stuartsierra | I will be talking about this at Clojure/West. |
| 09:44 | jcromartie | but where do you get it from in the first place? i.e. where does the long-term state "live"? |
| 09:45 | jcromartie | I will definitely be folling the conf |
| 09:45 | jcromartie | following* |
| 09:45 | clgv | jcromartie: I have it living in a deftype in one of my web applications |
| 09:45 | jcromartie | deftype? interesting |
| 09:46 | clgv | jcromartie: could be an atom with regular clojure data structures as well |
| 09:46 | jcromartie | well yeah, a ref/atom/agent/etc. |
| 09:46 | jcromartie | that's the obvious part |
| 09:46 | jtoy | what am I doing wrong with this regex? (re-find (re-pattern "\bcar\b" ) "car") |
| 09:46 | clgv | jcromartie: I pass it to the function when creating the routes for the webapp |
| 09:47 | jtoy | versus this: (re-find #"\bcar\b" "car") |
| 09:47 | stuartsierra | clgv, jcromartie: Yes, you can create an "instance" of your web app which closes over its state. |
| 09:47 | jtoy | shouldnt they be the samething? |
| 09:47 | jcromartie | :P |
| 09:48 | jcromartie | stuartsierra: that's what I was thinking… would it be easiest to achieve with bindings? |
| 09:48 | jcromartie | I think I get it |
| 09:48 | stuartsierra | I always recommend not to use bindings unless you really have thread-local semantics. |
| 09:48 | clgv | jtoy: (re-find (re-pattern "\\bcar\\b" ) "car") |
| 09:49 | jtoy | ah |
| 09:49 | jtoy | thx |
| 09:50 | jcromartie | hm… yeah, I am going to have some concurrency… I'd love to see an example of this |
| 09:51 | jcromartie | clgv: do you have any example code out there? |
| 09:51 | jcromartie | I guess you wouldn't have any top-level routes either |
| 09:51 | clgv | jcromartie: no. |
| 09:52 | jcromartie | so like, (defn make-routes [foo bar] (routes (GET "/whatever" [] (do-stuff-with foo bar)))) |
| 09:52 | clgv | jcromartie: yes, I create the routes within a function that is called from my main-function which also starts jetty |
| 09:52 | jcromartie | ah ha |
| 09:52 | jcromartie | that makes lots of sense |
| 09:53 | jcromartie | and do you give yourself a way to access that running context? |
| 09:53 | clgv | my deftype contains all the context I need |
| 09:53 | jcromartie | well I mean once you pass it to Jetty, can you access your state via a REPL |
| 09:54 | jcromartie | or your startup routine returns a structure with the Jetty server and the deftype with your state |
| 09:54 | jcromartie | ? |
| 09:56 | clgv | I just return the jetty instance but I could at the context data as well. I did not need it though |
| 09:56 | clgv | *add |
| 09:59 | stuartsierra | I usually have a top-level "system" object, def`d at the REPL, that contains anything I might need access to. |
| 10:01 | ambrosebs | stuartsierra: Any chance you could set up github+maven for tools.analyzer.jvm for me? |
| 10:02 | ambrosebs | It's the last dep for core.typed. |
| 10:02 | stuartsierra | ambrosebs: Working right now, but I'll take a look when I have time. Probably after Clojure/West. |
| 10:02 | ambrosebs | Cool |
| 10:02 | stuartsierra | And I don't have access to GitHub … email clojure-dev for that. |
| 10:02 | jcromartie | stuartsierra: that makes sense |
| 10:02 | jcromartie | thanks for the tips guys |
| 10:03 | ambrosebs | Sure, yep emailed on Friday. Cheers |
| 10:04 | stuartsierra | Everyone's really busy getting ready for Clojure/West, so I'm afraid you can't expect much movement before then. |
| 10:05 | ambrosebs | ok |
| 10:54 | tyler__ | woah in clojure docs it says "Tagged literals are Clojure's implementation of edn tagged elements." |
| 10:54 | tyler__ | did edn come before clojure? |
| 10:55 | hyPiRion | no |
| 10:55 | duck1123 | edn never had a name at first. It was all just the clojure syntax. |
| 10:56 | tyler__ | ah gotcha |
| 10:56 | tyler__ | how new is it? i just realized it was a thing last night when i was playing with datomic |
| 10:57 | duck1123 | initial commit was 6 months ago |
| 11:20 | esmo | hi all, anyone mind explaining this? (clojure.string/replace "BrEaKs?" #"(?i)break" "work") returns "works?" on clj, "BrEaKs?" on cljs |
| 11:20 | esmo | bug in clojurescript's regex implementation, or me being dumb? |
| 11:20 | ljos | esmo: clj uses java regex, but cljs uses javascript regex. |
| 11:21 | esmo | i realize that, but i'd expect the results to be the same? |
| 11:21 | esmo | the cljs compiles to something like this: function Pg(){return clojure.sb.replace.c?clojure.sb.replace.c("BrEaKs?",/break/i,"work"):clojure.sb.replace.call(l,"BrEaKs?",/break/i,"work")} |
| 11:23 | dnolen | esmo: happy to take a patch that fixes the issue, I believe the problem is that it happens at the level of the reader. |
| 11:26 | TimMc | Wow, I didn't realize CLJS did regex translation. |
| 11:26 | leku | &(- 4419 1037) |
| 11:26 | lazybot | ⇒ 3382 |
| 11:27 | esmo | yeah, looks a bit hairy, not sure if i want to start poking into it :) i'll just see if i can get it to work somehow first |
| 11:36 | mrb_bk | good morning #clojure |
| 11:37 | mrb_bk | dnolen: cool details on the hangout! glad you could make it |
| 11:39 | dnolen | mrb_bk: was fun! |
| 11:40 | mrb_bk | dnolen: it's cool to see how much of a back and forth it is right now between mK and core.logic |
| 11:42 | dnolen | mrb_bk: yes! while the implementation details may be different - high level goals are more or less the same. |
| 11:49 | jcromartie | hey |
| 11:50 | ambrosebs | dnolen: I was thinking about the "forgot to wrap in an all block" minikanren issue. Perhaps a little static analysis could help pick up those bugs. I think a goal would very often only be one expression, so it might be useful to warn in other cases. |
| 11:51 | ambrosebs | Some macroexpansions might get in the way though. |
| 11:51 | dnolen | ambrosebs: I'm assuming the analysis would need annotations about what functions are actually goals. |
| 11:51 | ambrosebs | Probably. |
| 11:55 | dnolen | ambrosebs: sounds interesting! our discussion yesterday did make me curious whether it would be easy or hard to reuse some of the core.typed infrastructure to do miniKanren/core.logic specific analyses |
| 11:55 | ambrosebs | It seems like core.typed is a good base to build on. |
| 11:56 | mrb_bk | that would be awesome |
| 11:56 | ambrosebs | I'm looking closer into Mercury. |
| 11:56 | mrb_bk | ambrosebs dnolen: the 'threading the failures through the macro' idea is also awesome |
| 11:57 | dnolen | ambrosebs: it's pretty interesting. I wish it didn't take a 2.66ghz i7 8 hours to compile to damn thing. |
| 11:57 | noidi | ambrosebs, is there a core.typed mailing list / google group? |
| 11:57 | mrb_bk | oh wow, mercury has a JVM backend? wild |
| 11:58 | ambrosebs | noidi: nope, just the clojure ml for now. |
| 11:59 | noidi | ambrosebs, I noticed that the type for clojure.core/seq is too restrictive. It doesn't allow Strings as input (they are not Seqable), although seq supports them. |
| 11:59 | ambrosebs | I've (kinda) fixed that in master. |
| 12:00 | noidi | ok, cool! how did you type it? |
| 12:01 | ambrosebs | Added an "unchecked-ancestors" field for Classes, and added (Seqable Character) as an ancestor for CharSequence and String :/ |
| 12:01 | ambrosebs | A hack I've been procrastinating on for about a year |
| 12:01 | ambrosebs | Feels dirty. |
| 12:01 | noidi | yes, it does :) |
| 12:02 | noidi | ,(instance? clojure.lang.Seqable "foo") |
| 12:02 | clojurebot | false |
| 12:02 | ambrosebs | Yep it sucks. |
| 12:03 | ambrosebs | Seqable doesn't really mean too much in Clojure JVM. There's about 5 corner cases. |
| 12:04 | TimMc | cemerick: Hey, did you decide to do something different with that timing-resistant string comparison in friend? |
| 12:04 | cemerick | TimMc: Refresh my memory :-) |
| 12:05 | technomancy | oh, is friend getting the codahale treatment? =) |
| 12:05 | noidi | https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/RT.java#L480 |
| 12:05 | noidi | there are all sorts of special cases in seqFrom, which IMHO seq's type should reflect |
| 12:06 | noidi | it'll be an ugly union type, but that's what seq's expecting :) |
| 12:06 | TimMc | cemerick: When Micha?el Stone did the walkthrough of friend at the Clojure meetup, he pointed out some code that was doing string comparison with data-independent timing. I can't find it now, so I'm wondering if you outsourced it. |
| 12:06 | cemerick | TimMc: oh, that; he was talking about ring in that case, not friend |
| 12:06 | technomancy | TimMc: related to http://codahale.com/a-lesson-in-timing-attacks/ ? |
| 12:07 | TimMc | cemerick: Ah! Right. |
| 12:07 | cemerick | TimMc: https://github.com/mmcgrana/ring/blob/master/ring-core/src/ring/middleware/session/cookie.clj#L80 |
| 12:07 | TimMc | technomancy: Yeah, I am happen to be in the market for a string comparator like that. |
| 12:07 | ambrosebs | noidi: yes, you're right. |
| 12:07 | ambrosebs | noidi: but it still sucks :) |
| 12:08 | cemerick | TimMc: just make sure you don't use a fn that can return (reduced) ;-P |
| 12:08 | TimMc | I was thinking of just loop/recur over the strings and checking the XOR at the end, but maybe comparing hashes would be better. |
| 12:09 | TimMc | I guess there's not much I can do to avoid leaking string length. |
| 12:09 | technomancy | can't you pad/truncate the unknown string to match the one submitted? |
| 12:09 | cemerick | TimMc: pad |
| 12:10 | TimMc | As long as the time to pad doesn't reveal too much. :-P |
| 12:14 | yedi | is there a service similar to pastebin that deletes the contents of the paste after a period of time? |
| 12:14 | TimMc | yedi: Yeah, use Refheap and set a lazybot timer to tell Raynes to delete the paste. :-P |
| 12:15 | noidi | yedi, pastebin.com has an expiration setting :P |
| 12:16 | yedi | oh derp |
| 12:16 | TimMc | nDuff will still yell at you, though |
| 12:16 | technomancy | http://paste.debian.net has an expiration setting and won't get nDuff yelling at you for ads |
| 12:32 | tyler__ | do i have to worry about clojurewest selling out? i still haven't bought a ticket |
| 12:32 | TimMc | Hmm, how do I make RET behave like C-j with paredit? It worked fine in my Emacs 23... |
| 12:38 | ystael | TimMc: (add-hook 'clojure-mode-hook '(lambda () (local-set-key (kbd "RET") 'newline-and-indent))) |
| 12:39 | TimMc | ystael: Oh man, that is much better! Thank you. |
| 12:39 | chronno | TimMc,ystael: I have it bound to 'paredit-newline |
| 12:40 | chronno | chronno: seems to be a little different. From the docs: |
| 12:40 | TimMc | Yeah, that's what I ended up using. |
| 12:40 | chronno | Insert a newline and indent it. |
| 12:40 | chronno | This is like `newline-and-indent', but it not only indents the line |
| 12:40 | chronno | that the point is on but also the S-expression following the point, |
| 12:40 | chronno | if there is one. |
| 12:40 | rasmusto | I'm a paredit newbie (using paredit.vim) what's C-j do? |
| 12:40 | ystael | chronno: I actually specifically don't want that because occasionally I prefer indents different from what Emacs wants to do. |
| 12:40 | TimMc | rasmusto: *Basically* newline. |
| 12:41 | TimMc | paredit switched how it handled RET vs. C-j in version 20. |
| 12:41 | chronno | ystael: oh, makes sense. I just use emacs indentation blindly :-) |
| 12:41 | rasmusto | TimMc: does it handle indenting differently or something? |
| 12:42 | ystael | chronno: It would probably make more sense for me to fix Emacs's indenter so I can do the same, but, y'know, tuits. |
| 12:42 | chronno | ystael: he |
| 12:42 | hiredman | TimMc: paredit did, or clojure-mode did? |
| 12:42 | piranha | alandipert: hm, are you online already? :) |
| 12:44 | hiredman | https://github.com/technomancy/clojure-mode/commit/c2077d48858a507d03cab4416038bd95b70e1464 |
| 12:44 | TimMc | hiredman: http://mumble.net/~campbell/emacs/paredit.release |
| 12:44 | TimMc | Search for "exchanges". |
| 12:44 | piranha | alandipert: just thought you might be interested what I did in the end with 'list of records': https://github.com/piranha/pairword/blob/master/src/pairwords/templates.cljs#L24 (here el is parent element and data is a cell) |
| 12:45 | zackzackzack | Is there a way to configure leiningen to run each file within test with it's own jvm? |
| 12:46 | hiredman | zackzackzack: https://github.com/joegallo/lein-test-bang-bang but it needs updating to lein2 |
| 12:47 | technomancy | should be an easy fix |
| 12:47 | zackzackzack | Yeah, it's not a super complicated project from the looks of it. |
| 12:48 | zackzackzack | What's the process for upgrading from lein1? |
| 12:48 | technomancy | zackzackzack: just shift over the refers that have moved. bultitude instead of leiningen.util.ns; leiningen.core.eval instead of leiningen.compile |
| 12:49 | zackzackzack | Thanks I'll see what I can do |
| 13:01 | mmitchell | anyone know if there is a convenient way to close the nREPL error buffer in emacs and have emacs go back to the main buffer? |
| 13:04 | mmitchell | The old swank error buffers would go away by pressing 0, I guess I'd like that back :) |
| 13:04 | technomancy | mmitchell: maybe q? |
| 13:05 | mmitchell | technomancy: ahh nope, that'd be perfect though |
| 13:05 | technomancy | hm; at one point that worked |
| 13:06 | mmitchell | oh hmm, "nrepl-popup-buffer-quit-function" might do the trick |
| 13:16 | `fogus | dnolen: Any recommendations for good information on finite domains? |
| 13:17 | dnolen | `fogus: Mozart/OZ tutorial http://doc.rz.ifi.lmu.de/programming/mozart/print/tutorial/FiniteDomainProgramming.pdf |
| 13:20 | dnolen | `fogus: or Bratko 4th edition Prolog for AI |
| 13:25 | `fogus | dnolen: So is it safe to assume that fd is an official core.logic feature? Now and in the future? |
| 13:26 | `fogus | dnolen: Thanks for the refs BTW. |
| 13:27 | dnolen | `fogus: the functionality yes. Probably can't make any promises beyond that - we might get polymorphic constraints. |
| 13:28 | `fogus | dnolen: What about the API? If it grows then that's cool, but will what's there stay stable? |
| 13:29 | `fogus | dnolen: Do you know if earlier Bratko edition has DF? |
| 13:29 | bhenry | how would i decode/encode html form params in an old clojure app? my whitespace is suddenly going to the database as plus signs and i don't know what changed in the app. |
| 13:29 | dnolen | `fogus: well if constraints become polymorphic I'll probably keep around the fd/foo for backwards compat. |
| 13:30 | dnolen | `fogus: I'm assuming it does since it's covered in 3rd ed, and 4th expands on the CLP stuff. |
| 13:42 | `fogus | dnolen: Thank you sir |
| 13:49 | jamiei | silly question: if a method destructures it's params like this (http://pastebin.com/2bA64Ycc), how can I pass in a hash of the params I want? |
| 13:52 | ambrosebs | jamiei: (apply make-conn (mapcat identity {...})) would probably work. |
| 13:52 | ambrosebs | I think people have made functions to handle this, not sure where they live. |
| 13:54 | jamiei | ambrosebs: That's great, thank-you. I also thought there might be an existing method for this. |
| 13:54 | ambrosebs | np |
| 13:54 | zackzackzack | technomancy: https://github.com/joegallo/lein-test-bang-bang/pull/1 |
| 13:55 | `fogus | jamiei: I've used variants of https://gist.github.com/fogus/5136209 |
| 13:56 | technomancy | zackzackzack: nice |
| 13:56 | technomancy | zackzackzack: you shouldn't include changing the group-id as part of the pull request though |
| 13:56 | rasmusto | I never know when to use [& {:keys [arg]}] or [{:keys [arg]}] when I'm only passing in keyworded stuff, any good arguments for either method? |
| 13:56 | technomancy | zackzackzack: also: mapcat instead of map+flatten |
| 13:56 | zackzackzack | I'll fix that right quite |
| 13:59 | rasmusto | ah, I guess partial application of kwargs would be a good argument for the former |
| 14:01 | zackzackzack | technomancy: Thanks! Hope this actually does what I hope it will. |
| 14:02 | jamiei | `fogus: interesting |
| 14:10 | TimMc | Looks like ring's secure-compare will break when given two 0-length strings. |
| 14:44 | jcromartie | is there really any reason not to use a ref when it doesn't need to coordinate with anything else? |
| 14:44 | jcromartie | I know I could use an atom right |
| 14:44 | Raynes | Atoms are cooler. |
| 14:45 | jcromartie | hah |
| 14:45 | jcromartie | but really |
| 14:45 | jcromartie | if my state doesn't need to coordinate with anything right now |
| 14:45 | jcromartie | it might as well be an atom right? |
| 14:45 | jcromartie | but if it *might* need to coordinate with something |
| 14:47 | jcromartie | Raynes: are you being serious? |
| 14:47 | Raynes | jcromartie: Not at all. I don't know the answer since I'm not nearly as thoughtful as you and have never cared one way or the other. |
| 14:47 | jcromartie | hah |
| 14:48 | jcromartie | maybe I should stop caring |
| 14:48 | jcromartie | it would save the channel a lot of overhead |
| 14:49 | pjstadig | jcromartie: less overhead. atoms use compare and swap, but refs use locks |
| 14:55 | pjstadig | jcromartie: https://gist.github.com/pjstadig/5136670 |
| 14:55 | pjstadig | [standard microbenchmark disclaimer and such] |
| 14:55 | jcromartie | thanks, that's enlightening |
| 14:56 | tomoj | took me such a long time to notice :{min,max}-history |
| 14:56 | tomoj | I never use refs :/ |
| 15:01 | jcromartie | tomoj: atoms do it for you huh? |
| 15:01 | jcromartie | I see the need for refs when you need to synchronize two separate references |
| 15:09 | matthavener | seems to me that no refs indicates a really nice separation between parts in a design |
| 15:09 | matthavener | so orthogonal there's nothing to synchronize between them |
| 15:13 | jcromartie | yes |
| 15:18 | jcromartie | why is compojure middleware flattening my JSON objects!? |
| 15:19 | weavejester | jcromartie: Probably because you're returning a raw map rather than wrapping the JSON in a response. |
| 15:19 | jcromartie | weavejester: I should clarify, it's on the way in |
| 15:19 | jcromartie | json params |
| 15:19 | jcromartie | er, a JSON POST body |
| 15:20 | weavejester | jcromartie: What middleware are you using to parse it? |
| 15:20 | weavejester | Compojure itself doesn't touch the parameters. |
| 15:20 | jcromartie | no, it's the handler/api that does it |
| 15:22 | weavejester | jcromartie: Possibly wrap-nested-params is doing it then |
| 15:22 | jcromartie | yeah |
| 15:22 | weavejester | jcromartie: But you don't need to use handler/api. Just apply the middleware you want manually. |
| 15:22 | jcromartie | but it would be nice to figure out how to accept both :| |
| 15:23 | jcromartie | but this whole API should be JSON anyway |
| 15:23 | weavejester | jcromartie: You wanted nested parameters (e.g. foo[bar]=baz) and JSON? |
| 15:23 | jcromartie | I don't see why both shouldn't be able to play together |
| 15:23 | weavejester | You could also put your JSON middleware on the inside |
| 15:23 | jcromartie | no, since the request body stream is already read |
| 15:23 | jcromartie | by wrap-params |
| 15:24 | weavejester | jcromartie: In which case, you have a bad content-type |
| 15:24 | jtoy | can someone recommend me a page to read about that discribes how to resolve issues created from macros that call macros, specifically I get an error: java.lang.ClassCastException: clojure.lang.Symbol cannot be cast to java.lang.String |
| 15:24 | weavejester | jcromartie: wrap-params will only read the request if the content-type header is set to: application/x-www-form-urlencoded |
| 15:24 | jcromartie | hm |
| 15:24 | jcromartie | I see |
| 15:25 | weavejester | jcromartie: For a lot of applications, like curl, that tends to be the default content type unless you specify otherwise. |
| 15:31 | gfredericks | jtoy: could you share some code? |
| 15:31 | gfredericks | jtoy: macros don't normally "call" other macros; they emit code that contains macro calls |
| 15:33 | bloop | I'm using compojure for exlipse and trying to access the filesystem with clojure.java.io. I've set :resource-path "resources/" in project.clj and yet (io/resource "") returns the url for the "test" folder in the project rather than the "resources" folder. What gives? |
| 15:36 | jcromartie | huzzah |
| 15:38 | weavejester | bloop: The test folder is on the classpath as well. I'm surprised (io/resource "") returned anything, since that isn't really a resource. |
| 15:41 | alandipert | piranha: very cool |
| 15:41 | piranha | alandipert: it should track already created elements, of course, but that's a bit harder :)) |
| 15:45 | bloop | weavejester: I'm still confused. I've got it now so that it can find files in test (is this desired just because it's in the classpath? I mean, it can't access files in src...) and also in /resources/, but the URL for files in /resources will say /bin/ instead... |
| 15:46 | weavejester | bloop: A resource, as Java understands it, is any file on the classpath. |
| 15:47 | weavejester | bloop: If you're running using Leiningen, that will include the files in all the jars, the resources directory, the test directory, and the source directory. |
| 15:47 | jcromartie | this is feeling weird |
| 15:47 | weavejester | Probably some system directories as well |
| 15:48 | jcromartie | I want to parse JSON or else fail with a message |
| 15:48 | Raynes | technomancy: http://felixge.de/2013/03/11/the-pull-request-hack.html Someone discovered your project management style. |
| 15:48 | jcromartie | so I'm returning a vector of [succeess json-or-message] |
| 15:48 | bloop | weavejester: hm. ok. thanks |
| 15:50 | gfredericks | jcromartie: exceptions aren't appropriate? |
| 15:51 | jcromartie | gfredericks: that's the tricky part |
| 15:52 | Cinesino89 | hello |
| 15:52 | Cinesino89 | ciao |
| 15:52 | weavejester | I'd have thought the JSON parser would except if it fails |
| 15:52 | weavejester | Hello |
| 15:52 | jcromartie | it does |
| 15:52 | jcromartie | I want to pass the JSON result to a handler |
| 15:52 | jcromartie | but I don't want to mask any exceptions that happen in the handler |
| 15:52 | weavejester | Why would you need to mask exceptions |
| 15:52 | jcromartie | hold on |
| 15:52 | weavejester | ? |
| 15:52 | jcromartie | hold on |
| 15:52 | weavejester | I mean, they'd just bubble up. |
| 15:53 | Cinesino89 | sorry guys |
| 15:53 | Cinesino89 | mirc but do not discharge more files? |
| 15:53 | jcromartie | here https://gist.github.com/jcromartie/8e68edf100684ddcadfd |
| 15:54 | jcromartie | this borrows from the other wrap-json-params |
| 15:54 | jcromartie | but uses clojure.data.json, and it provides a useful HTTP failure mode |
| 15:55 | Raynes | People who don't use cheshire are merely kidding themselves. |
| 15:55 | Raynes | Cheshire is the One Right and True way. |
| 15:56 | weavejester | Hum, I don't like the way of catching the exception... |
| 15:56 | weavejester | It would be better to catch as part of the middleware |
| 15:57 | weavejester | I don't understand why you catch it, then return a value, then use an if statement to test for success |
| 15:57 | weavejester | You're basically doing the same thing twice. |
| 15:58 | weavejester | jcromartie: If the catch statement was in wrap-json-params instead, you'd have an easier time. |
| 16:00 | trptcolin | pretty sweet recruiter line: "[…] join an all-star Clojure team as they work solve the big-data problem." |
| 16:01 | trptcolin | i'll work solve the hell out of the big-data problem |
| 16:01 | bloop | Raynes: what do you like about cheshire? |
| 16:05 | bloop | Raynes: I guess i could just read the github page :p. |
| 16:05 | jcromartie | the big data problem is hard |
| 16:07 | gfredericks | so lein says that the :dev :provided :user and :base profiles are activated for each task. But presumably not for the build tasks like uberjar? |
| 16:09 | gfredericks | I'm trying to figure out the normalest way to have stuff on the classpath for dev that doesn't get deployed |
| 16:11 | jcromartie | how about this for JSON parsing middleware https://gist.github.com/jcromartie/8e68edf100684ddcadfd |
| 16:13 | jonasen | dnolen: ping |
| 16:19 | technomancy | Raynes: I stole it from Evan Phoenix (rubinius) |
| 16:20 | jcromartie | are any of the getprismatic.com guys here? |
| 16:29 | technomancy | gfredericks: that's right; default profiles are explicitly stripped out by jar/uberjar |
| 16:29 | gfredericks | default profiles? like all 4 of them? |
| 16:29 | gfredericks | just trying to make sure I know exactly what's going on |
| 16:30 | technomancy | yeah |
| 16:31 | gfredericks | What is :base intended to be used for? |
| 16:32 | technomancy | gfredericks: stuff like putting :dev-resources on the classpath |
| 16:32 | technomancy | basically :dev but for stuff that ships with lein itself rather than being read out of project.clj |
| 16:33 | gfredericks | oh okay so it's defined in leiningen |
| 16:33 | technomancy | aye |
| 16:33 | solussd | could someone tell me what is going on here? : https://www.refheap.com/paste/54065bed3548d9c12c463ff1c |
| 16:33 | gfredericks | solussd: the whole outer form is compiled at ance |
| 16:33 | gfredericks | once* |
| 16:33 | gfredericks | before line 11 is run |
| 16:34 | technomancy | clojurebot: what is the gilardi scenario? |
| 16:34 | clojurebot | The Gilardi Scenario is where you can't compile a form because the form contains definitions needed to compile itself: http://technomancy.us/143 |
| 16:34 | technomancy | solussd: ^ |
| 16:34 | gfredericks | clojurebot: who is technomancy? |
| 16:34 | clojurebot | technomancy is to blame for all failures |
| 16:34 | solussd | gfredericks: neat. that's the distillation of a problem i'm having in a macro... glad i'm not going crazy. thanks |
| 16:35 | technomancy | clojurebot: I'll take obscure compiler gotchas for 200, Alex. |
| 16:35 | clojurebot | the scala compiler | is | <reply> see: http://harrah.github.com/browse/samples/compiler/scala/tools/nsc/typechecker/ConstantFolder.scala.html#65760 |
| 16:35 | gfredericks | technomancy: so long story short, the :dev profile is appropriate for local dev classpath stuff |
| 16:35 | technomancy | gfredericks: yeah, for stuff that you want everyone hacking on the project to have access to |
| 16:50 | tgoossens | I have some questions about clojure.org (the website). Who should I contact? |
| 16:50 | brehaut | tgoossens: tried the mailing list? |
| 16:50 | tgoossens | maybe not such a bad idea |
| 16:50 | technomancy | I think puredanger helps with it |
| 16:52 | jweiss | "Warning: protocol #'katello.rest/CRUD is overwriting function delete" not very helpful when it doesn't tell me which namespace this is happening in. |
| 16:52 | jweiss | any way to find out? |
| 16:52 | gfredericks | katello.rest is not the appropriate namespace? |
| 16:52 | jweiss | gfredericks: i have (:refer-clojure :exclude (get read delete)) in that ns |
| 16:53 | technomancy | jweiss: did you add it recently? |
| 16:53 | jweiss | technomancy: no, this is a fresh repl |
| 16:53 | technomancy | oh, ok |
| 16:53 | gfredericks | ,clojure.core/delete |
| 16:53 | clojurebot | #<CompilerException java.lang.RuntimeException: No such var: clojure.core/delete, compiling:(NO_SOURCE_PATH:0:0)> |
| 16:53 | jweiss | oh i see now |
| 16:54 | jweiss | silly me, i left a function in there called delete. |
| 16:54 | jweiss | i assumed it was clojure.core that had the conflict |
| 17:07 | bendlas | alandipert: I'm playing with javelin and encountering some behavior where I'm not sure if it's bugs or I'm doing it wrong. Do you have a few minutes to look at it? |
| 17:08 | alandipert | bendlas: sure |
| 17:10 | bendlas | cool, so I have this (defn fetch [path] ...), which returns a cell that will be reset with the content of path, as soon as xhr is finished |
| 17:11 | bendlas | first of all, it'd be great to be able to leave a cell uninitialized, until it's first reset! |
| 17:11 | bendlas | since I couldn't find that possibility, I tried (cell (init-dom (fetch "/path"))) |
| 17:12 | bendlas | here init-dom is passed the cell itself |
| 17:13 | bendlas | next try: (let [res (fetch "/path")] (cell (when res (init-dom res)))), here the when is ignored and init-dom is called with a nil |
| 17:13 | bendlas | alandipert: my question is, how should it behave in those cases and can I help to make it happen? |
| 17:14 | alandipert | bendlas: what kind of data does fetch return? |
| 17:15 | bendlas | fetch returns a cell, which will be reset to a string |
| 17:16 | bendlas | but everything I described, happens in the first update, when it is updated from uninitialized to nil |
| 17:17 | alandipert | bendlas: the javelin-y way would be to have a named (cell "") that is reset! by the fetch fn |
| 17:18 | alandipert | bendlas: and on which formulas dealing in strings are built |
| 17:19 | bendlas | alandipert: ok, that answers the firsst question. What about (cell (when outer-cell (do-something outer-cell))) |
| 17:20 | bendlas | in my test case, the when is ignored, such that do-something is called, even when the current value of outer-cell is nil |
| 17:20 | bendlas | that's not supposed to happen, right? |
| 17:21 | alandipert | bendlas: right, that could be a bug. would you mind pasting code somewhere? |
| 17:23 | bendlas | alandipert: sure, hold on a second |
| 17:26 | bendlas | alandipert: here is an excerpt from my actual code https://gist.github.com/bendlas/5137917 |
| 17:27 | mye | Is there a clojureScript implementation of the 1.5 edn namespace or what is the equivalent? |
| 17:28 | mye | eg. if I send something with #inst or #uuid can cljs read it? |
| 17:29 | technomancy | wait people actually use #uuid? |
| 17:29 | bendlas | mye: clojure.edn is a very recent addition, it hasn't been mirrored to cljs |
| 17:30 | bendlas | but since cljs doesn't do read-eval, you should be able to safely use clojure.core/read |
| 17:32 | alandipert | bendlas: is the idea that when you call load-cache, you want overlay to automatically run? |
| 17:33 | bendlas | mye: sorry, its called cljs.reader/read in clojurescript |
| 17:34 | bendlas | alandipert: the idea is, that load-cached fetches its content only once |
| 17:35 | bendlas | the cell is mainly used to handly asynchronicity |
| 17:36 | bendlas | alandipert: so the cell is used more like a promise in this case |
| 17:37 | bendlas | (which is also the reason I'd like to have a zero-arity for cell) |
| 17:38 | bendlas | mye: in case you missed it, due to your re-login: it's cljs.reader/{read,read-string} in clojurescript |
| 17:39 | alandipert | bendlas: i have to go, but i'll take another look at this later |
| 17:40 | bendlas | alandipert: OK, thanks! Take care! |
| 17:54 | yedi | i'm getting a 404 error when i post to cart/purchase: https://gist.github.com/yedi/5138157 |
| 17:55 | yedi | can someone help me out with this? "making purchases' doesn't even get printed, so it doesn't seem it's even reaching (purchase) |
| 17:56 | abp | yedi: don't use vectors like that in the routes? only for binding parameters later on |
| 17:57 | yedi | what would be a better way? (i assumed this was the only way to define routes) |
| 18:01 | mye | bendlas, thanks! I'm trying to check if cljs support the tagged literals as well, eg. *data-readers* but emacs is misbehaving again :/ |
| 18:01 | mye | btw, any emacs+clojurescript users here with tips/code how to manage two repls and selectively send clojure(script) to them? |
| 18:01 | abp | yedi: you have route like (GET "/" .. that's right |
| 18:02 | iartarisi | mye: https://github.com/brentonashworth/one/wiki/Emacs |
| 18:03 | mye | iartarisi: I should've mentioned I'm trying to reuse nrepl.el for cljs with piggieback, got a bit of trouble still with setting the correct repl-buffer names |
| 18:04 | iartarisi | oh, no idea then |
| 18:04 | mye | I had a manual solution like the "one" before but reusing nrepl makes sense |
| 18:05 | yedi | abp: oh... thanks! i'll see if that helps me |
| 18:07 | iartarisi | Can someone have a look at this newb cljs code I'm writing? I feel like I'm doing something very bad with functions that all take the same 5 params. But I'd like to move the functions to a different file than the constants eventually. Should I use records or something else? https://github.com/mapleoin/goboard.js/blob/master/src/cljs/goboard.cljs |
| 18:09 | dnolen | iartarisi: for something like go which doesn't have demanding drawing you can probably go pretty high-level - use maps. |
| 18:09 | dnolen | instead of 5 params |
| 18:10 | yedi | abp: no luck unfortunately, i changed it to this: https://gist.github.com/yedi/5138157 |
| 18:12 | yedi | ughhhhhhh |
| 18:12 | yedi | was missing a trailing slash |
| 18:13 | yedi | this is bullshit, i quit programming |
| 18:13 | iartarisi | dnolen: I was asking about records after looking at http://clojure.org/data_structures#Data%20Structures-StructMaps . Do you think my use-case is not in the "Most uses ..." case? |
| 18:15 | dnolen | iartarisi: maps usually suffice, you can switch to records if you need the perf. |
| 18:15 | iartarisi | dnolen: ok, thanks! |
| 18:24 | yedi | i printed out a map and it looked like this: {:stripe-token tok_1RWsvwDFHog7kF, :state AL, :town , :zip-code , :saddy-line2 , :saddy-line1 , :last-name , :first-name } |
| 18:25 | yedi | how is that a valid map? |
| 18:25 | amalloy | yedi: don't use the print family of functions to inspect datastructures |
| 18:25 | yedi | oh |
| 18:25 | yedi | what's the conventional methodology |
| 18:26 | amalloy | pr would have shown you that the values are nil |
| 18:27 | gfredericks | ,(println {:foo nil, :bar nil}) |
| 18:27 | clojurebot | {:foo nil, :bar nil}\n |
| 18:28 | yedi | amalloy: pr? |
| 18:28 | gfredericks | yedi: pr is a function |
| 18:28 | gfredericks | as are prn pr-str and prn-str |
| 18:28 | yedi | oh i see |
| 18:28 | gfredericks | all of them having the property he's referring to |
| 18:28 | amalloy | oh, maybe not nil, just the empty string. i forgot println shows nil as nil |
| 18:29 | gfredericks | ,(println {:foo "", :bar " "}) |
| 18:29 | clojurebot | {:foo , :bar }\n |
| 18:29 | yedi | ah, that's what was happening |
| 18:30 | yedi | thanks for letting me know about prn |
| 18:30 | devn | route generation done backwards with core.logic? |
| 18:47 | yedi | is there a builtin fn for getting a subset of a map (based on it's keys) |
| 18:48 | yedi | on the keys you give the fn* |
| 18:48 | yedi | found it, select-keys |
| 18:51 | ivan | should the select-keys implementation be using transients? |
| 18:52 | gfredericks | certainly could |
| 18:52 | gfredericks | I don't know what the eagerness threshold is |
| 19:10 | ravster | hey all |
| 19:28 | yedi | does anyone know who @abengoa (github) is, and if he frequents #clojure? |
| 19:28 | Raynes | Never heard of him. |
| 19:28 | Raynes | And I've heard of everyone. |
| 19:33 | yedi | Raynes: good point... maybe i shouldn't trust clj-stripe |
| 19:33 | technomancy | yeah, I don't use software where the author doesn't hang out on IRC |
| 19:33 | yedi | xD |
| 19:33 | Raynes | It's probably better. |
| 19:34 | Raynes | Less time spent on IRC means more time spent at work which is probably why he wrote this which means he probably needs it at work and if he is getting paid to maintain it you've basically run out of reasons to not use it. |
| 19:37 | zakwilson | Yeah, I don't use software where the author always hangs out on IRC. |
| 19:40 | sshack | Is anyone here using lobos? |
| 19:41 | sshack | I'm getting a IllegalArgumentException with it and I'm wondering if it's a clojure 1.5 incompatibility, or what. |
| 19:41 | clj_idiot | so I have this really stupid idea, where in my gui system, I want evey gui element to be a _light weight thread_ rather than a state machine (i.e. think Rob Pike's NewSqueak system taken to the extreme). Is there anyway to get light weight threads in Clojure? |
| 19:43 | arohner_ | yedi: FWIW, we wrote our own stripe wrappers |
| 19:43 | arohner_ | it's trivial to do |
| 19:44 | sshack | ahh. Found the problem getRoot disappeared from clojure 1.3 |
| 19:45 | yedi | arohner_: i'm still learning clojure, so what may seem trivial to every other person isn't to me =/ |
| 19:59 | Raynes | select * from testtb where x = now()::date; |
| 19:59 | Raynes | Oh, turns out this isn't my psql window. |
| 20:06 | zakwilson | (0 rows) |
| 20:07 | tyler__ | lawl |
| 20:08 | Raynes | zakwilson: 1 row, bro. Get shit right at least. |
| 20:09 | technomancy | Raynes: yeah but now() changed between when you typed it and when zakwilson received it |
| 20:09 | abp | Raynes: Still not your psql window. :P |
| 20:09 | Raynes | technomancy: Yeah, but it's still today so it still matches that one row. |
| 20:10 | abp | Cursing aided debugging would make sql kick datomic into garbage instantly. :) |
| 20:10 | technomancy | Raynes: not in UTC |
| 20:10 | technomancy | =P |
| 20:11 | pjstadig | the hazard of using emacs for everything is after a while all the buffers look the same |
| 20:15 | abp | (map #(first (find-parents [] %)) (seq abblog)) |
| 20:15 | abp | mhm sure.. |
| 20:17 | zakwilson | lib-noir docs mention the public folder, but do not mention that it is hardcoded to be a folder named "public" in the app's working directory. |
| 20:21 | Raynes | zakwilson: If it shouldn't be hardcoded please do open an issue. |
| 20:32 | zakwilson | Raynes: I'm not sure it's unreasonable for it to be hardcoded, but the docs should probably say something about it. |
| 20:49 | ravster | I'm getting --> :body #<HttpInput org.eclipse.jetty.server.HttpInput@14d139ee> <-- as part of my request in ring. How do I expand that? |
| 20:52 | ravster | I'm sending information through a POST request |
| 20:53 | brehaut | ravster: its an java inputstream from memory; how you process that depends what it contains |
| 20:54 | ravster | I have the route wrapped in a wrap-json-body |
| 20:54 | brehaut | ravster: have you sent the correct content type header on the request? |
| 20:55 | brehaut | ravster: https://github.com/ring-clojure/ring-json/blob/master/src/ring/middleware/json.clj#L5-L7 |
| 20:56 | ravster | brehaut: oh, i didn't. :D thanks. |
| 20:56 | brehaut | ravster: no problem |
| 21:16 | chessguy | trying to get the clojure koans working, per http://clojurekoans.com/, but when i 'lein koan run', i get an error like this: ava.io.FileNotFoundException: Could not locate leiningen/core/main__init.class or leiningen/core/main.clj on classpath: (koan.clj:1) |
| 21:17 | chessguy | i can't even find a 'koan.clj' file in the project |
| 21:18 | amalloy | did you upgrade to lein 2, as the page you linked asks? |
| 21:21 | chessguy | oh, huh. i just installed lein the other day, so i assumed it was the latest |
| 21:21 | chessguy | but you're right, it's not |
| 22:25 | clj_idiot | in Java, is there a function to force a JFrame to full screen? |
| 22:26 | clj_idiot | okay, so I see setSize and setLocation |
| 22:27 | clj_idiot | howver, how do I get the max size of the screen? |
| 22:32 | Raynes | clj_idiot: Are you using seesaw? |
| 22:32 | clj_idiot | no |
| 22:32 | clj_idiot | I'm using raw Java APIs |
| 22:32 | Raynes | Why so masochistic? |
| 22:32 | clj_idiot | it has a code hot reloading module I wrote a year ago |
| 22:32 | clj_idiot | matches my mental work flow better |
| 22:33 | Raynes | Anyways, seesaw has a toggle-full-screen! function. |
| 22:33 | Raynes | You can look at how he does that. |
| 22:33 | Raynes | Seesaw works with raw swing objects, so you should be able to mostly just copy the relevant pieces of code. |
| 22:52 | JulioBarros | I need to use a clojure library that I updated but did not write. Is there a way to use my version from github until my pull request is accepted or the original is updated? |
| 22:53 | jeremyheiler | JulioBarros, You can release it under org.clojars.yourusername/clj-project |
| 22:55 | jeremyheiler | Basically you're just changing the group id. |
| 22:56 | JulioBarros | jeremyheiler: Ok. Thanks. |
| 22:56 | jeremyheiler | And clojars kindly sets up the group org.clojars.yourusername for you |
| 23:21 | nonuby | is there a shortcut to (first (filter pred col)) |
| 23:22 | nonuby | i guess 'some' fits the bill thinking about it, weird name though |
| 23:33 | technomancy | nonuby: it is weird. filter first is fine though |
| 23:33 | ohpauleez | ambrosebs: ping? |
| 23:33 | ambrosebs | ohpauleez: hey |
| 23:34 | ohpauleez | hey man, Does AnyFunction do what I think it does |
| 23:34 | ohpauleez | some combination/intersection of Function and IFn? |
| 23:35 | ohpauleez | I just switched to core.typed 0.1.7 and want to type the return as a Function (in this case, an anonymous function) |
| 23:35 | ambrosebs | is AnyFunction in 0.1.7? |
| 23:35 | ohpauleez | I don't think so |
| 23:36 | ambrosebs | But there is some weirdness and crustiness here from Typed Racket. |
| 23:36 | ohpauleez | ahhh |
| 23:36 | ambrosebs | Basically I don't even use IFn or any clojure.lang.Fn/Function/AFn |
| 23:36 | ohpauleez | You just use Any |
| 23:36 | ohpauleez | (thats what I'm using now) |
| 23:36 | ambrosebs | I have a special type that internally is called FnIntersection |
| 23:37 | ambrosebs | eg. [Any -> Any], (Fn [Any -> Any]) are FnIntersections |
| 23:37 | ambrosebs | What should really happen is (IFn (Fn [Any -> Any]) |
| 23:37 | ambrosebs | ) |
| 23:38 | ambrosebs | I can't decide what the default should be. |
| 23:38 | ohpauleez | ahh, gotcha cool. You can ignore my tweet then |
| 23:38 | ohpauleez | :) |
| 23:38 | ambrosebs | Should [Any -> Any] be an IFn, Function, AFn? |
| 23:38 | ambrosebs | Not sure. |
| 23:39 | ohpauleez | Well I have a decorator (takes a function, returns a function), but I know nothing about the fn's args |
| 23:39 | ohpauleez | so right now I'm just saying Any -> Any |
| 23:39 | ambrosebs | Ah, probably should be (All [a b ...] [b ... b -> a]) |
| 23:40 | ambrosebs | That doesn't lose any information on the function you're wrapping. |
| 23:40 | ohpauleez | ahhhh |
| 23:40 | ohpauleez | thank you |
| 23:40 | ohpauleez | that's what I'm looking for |
| 23:40 | ohpauleez | It definitely explodes the typing rabbit hole |
| 23:40 | ohpauleez | "Ok, now I need to type this… whooops, ok now I need to type this..." |
| 23:41 | ambrosebs | Yep, usually does :/ |
| 23:41 | ohpauleez | is there a file in core.typed.typed with all the types in it? |
| 23:41 | ambrosebs | You might want to work off the master branch, there's some improvements to dotted functions there. |
| 23:41 | ohpauleez | cool |
| 23:41 | ambrosebs | clojure/core/typed/ann.clj |
| 23:42 | ambrosebs | (I'll just change the version to be a snapshot) |
| 23:42 | ohpauleez | thanks a ton ambrosebs. I definitely appreciate all of this |
| 23:42 | ambrosebs | sweet, np |
| 23:42 | ohpauleez | It's been a part of my core.specs // sterling project since the short talk we had at Conj |
| 23:43 | ohpauleez | so it'll be all over my ClojureWest talk |
| 23:43 | ohpauleez | haha |
| 23:44 | ambrosebs | oh great! |
| 23:51 | brehaut | ohpauleez: i hit that typing rabbit hole too. finding reasonable boundaries for typed and untyped code looks like its going to be somthing that takes some practise |
| 23:51 | ohpauleez | brehaut: Are you going to ClojureWest |
| 23:52 | brehaut | ohpauleez: only if i win the lottery |
| 23:52 | ohpauleez | :( |
| 23:52 | brehaut | ohpauleez: wrong end of the earth |
| 23:52 | ohpauleez | Well, hopefully my talk will help out that rabbit hole a little bit |
| 23:52 | brehaut | ohpauleez: that'd be great |
| 23:52 | brehaut | hopefully we'll see video and slides sooner rather than later |
| 23:54 | bbloom | ohpauleez: looking forward to your talk. we need more things in the gradual typing category :-) |
| 23:55 | bbloom | ohpauleez: sometimes, i wish i could specify my asserts in first-order logic w/ set theory :-P |
| 23:56 | ohpauleez | bbloom: Your wish should be granted…. sort of |
| 23:56 | brehaut | ohpauleez: the summary of your talk is exactly the stuff im interested in atm |
| 23:56 | brehaut | ohpauleez: tying together contracts, typed and generative testing seems super powerful |
| 23:56 | ohpauleez | brehaut: I think a lot of people are. I see it as a natural progression for a lot of people building serious systems in Clojure |
| 23:56 | technomancy | don't forget inference =) |
| 23:57 | ambrosebs | technomancy: would you be happy if you only had to annotate vars? |
| 23:57 | brehaut | technomancy: ive already forgotten. what ? |
| 23:57 | brehaut | ambrosebs: did you get my lazybot mail? |
| 23:57 | technomancy | ambrosebs: it would help, but it would still be a hard sell |
| 23:58 | technomancy | I found with mirah, having inference on locals only meant it discouraged breaking up functions when they got too big |
| 23:58 | bbloom | technomancy: hmm interesting point |