2013-02-04
| 00:01 | Frozenlock | durka42: Not pro, but I did use it. Question? |
| 00:16 | Frozenlock | I'm tempted to use a reader literal for an application... is there some thing I should be careful with? |
| 00:19 | durka42 | Frozenlock: I think I'm all set |
| 00:20 | durka42 | I wanted the cholcov() function from matlab |
| 00:20 | durka42 | but I realized I can just look at the matlab source and port it |
| 00:20 | Frozenlock | alright |
| 00:21 | Frozenlock | Btw, if you want an alternative to matlab, https://www.gnu.org/software/octave/ |
| 00:21 | durka42 | oh I know :p |
| 00:21 | durka42 | but I hate the matlab language also |
| 00:21 | durka42 | so I'm trying to use clojure as my alternative |
| 00:38 | zerokarmaleft | durka42: julia might be worth looking into as well, and its perf is impressive |
| 00:38 | durka42 | true |
| 00:53 | sshack | Other than emacs, what's the editor de jour for Clojure on OSX these days? |
| 00:58 | JanxSpirit | if I run a 'lein repl' in my project directory, the repl should load with the project dependencies on the classpath correct? |
| 01:00 | durka42 | sshack: I'm using macvim with vim-clojure-static and foreplay |
| 01:01 | sshack | durka42: I should have remembered about vim. |
| 01:02 | durka42 | oh, and RainbowParentheses :) |
| 01:03 | xeqi | JanxSpirit: yes |
| 01:03 | xeqi | though you start in the user namespace, and might need to change or (require ..) them |
| 01:04 | sshack | durka42: So you've recreated a scene from "Hackers" then? |
| 01:04 | JanxSpirit | xeqi: so I have added the monger dependency, but when I try to require it, clojure can't find it |
| 01:04 | durka42 | sshack: don't think I've seen that one |
| 01:04 | JanxSpirit | sorry - I'm new to lein/clojure - just trying to figure out what I have wrong |
| 01:05 | durka42 | but, probably :) |
| 01:05 | sshack | durka42: It's an absolute classic. |
| 01:06 | sshack | A gritty, real life look at the hacker scene in the 90's.; |
| 01:06 | durka42 | okay, I'll put it on the list of "absolute classics I have to get to sometime" |
| 01:06 | xeqi | JanxSpirit: did you start the repl after adding monger to the :dependencies in project.clj? |
| 01:07 | JanxSpirit | I did |
| 01:07 | sshack | durka42: http://www.youtube.com/watch?v=Ql1uLyuWra8 |
| 01:07 | JanxSpirit | and lein classpath shows the jar on the path |
| 01:07 | sshack | Good soundtrack too. |
| 01:11 | xeqi | JanxSpirit: https://www.refheap.com/paste/9390 ; what are you trying to require? |
| 01:14 | lynaghk | dnolen: if we change to `fnc` do you think we should also change `defc` to `defnc` to be consistent? |
| 01:17 | dnolen | lynaghk: yeah that's probably a good idea - I don't think many people are relying yet on `defc` and it's an easy change to account for. |
| 01:18 | JanxSpirit | xeqi: I had everything except the ' |
| 01:18 | JanxSpirit | xeqi: (:require [monger.core :as mg]) |
| 01:18 | JanxSpirit | xeqi: thanks - what does the ' mean? |
| 01:19 | xeqi | JanxSpirit: if you (:require ..) is used in (ns ...). (require '...) is used outside the (ns ..) declaration |
| 01:19 | xeqi | s/if you// |
| 01:19 | JanxSpirit | ah gotcha |
| 01:19 | xeqi | ' makes it a symbol |
| 01:19 | JanxSpirit | thanks! |
| 01:19 | lynaghk | dnolen: cool, pushed. |
| 01:21 | dnolen | lynaghk: I'm kinda leaning towards something that looks like this http://gist.github.com/4705272 |
| 01:21 | dnolen | lynaghk: would mean putting the unifier in it's own namespace, and changing the api somewhat |
| 01:21 | lynaghk | dnolen: not sure what goes in the dots. Why a special let keyword? |
| 01:22 | dnolen | lynaghk: it's annoying that you can't name subforms |
| 01:22 | dnolen | lynaghk: :let would allow you to do that |
| 01:24 | dnolen | lynaghk: gist updated |
| 01:25 | lynaghk | dnolen: whoaaa this is confusing. Same as (unifier '((?y ?z) ?a) '(?b [1 2 3])) ? |
| 01:26 | lynaghk | that can't be right. in that example you're not using ?x twice |
| 01:26 | dnolen | lynaghk: pretty much, the point of :let is that we don't have anything like :as like when you destructuring |
| 01:26 | dnolen | sorry, the example is a bit silly |
| 01:28 | dnolen | lynaghk: updated the gist again |
| 01:29 | lynaghk | ?y and ?z would be bound to "foo" and 9? the unifier doesn't respect the concrete types, right? |
| 01:29 | dnolen | lynaghk: updated yet again w/ comment |
| 01:29 | lynaghk | ah, I see. |
| 01:29 | dnolen | lynaghk: yes, sorry the point is to get some of the flexibity of destructuring |
| 01:30 | dnolen | you want to name ?y ?z and also the list that contains them. |
| 01:30 | lynaghk | dnolen: Yeah, sure---presumably this would be useful when you want to twiddle the inside of some form but pass that entire form to a constraint |
| 01:30 | dnolen | lynaghk: yeah |
| 01:31 | dnolen | perhaps let is bad |
| 01:31 | dnolen | here |
| 01:31 | dnolen | changing to as |
| 01:31 | dnolen | lynaghk: updated |
| 01:31 | lynaghk | dnolen: I think as is better. I'm surprised to see "let" and then a map instead of a binding vector. |
| 01:31 | dnolen | lynaghk: agreed |
| 01:32 | lynaghk | dnolen: do you remember what syntax we agreed on for constraints of multiple lvars? |
| 01:33 | dnolen | lynaghk: I think options as map is better - I'm not sure what else we'll want to add, and keywords args stink unless you're really certain about the api |
| 01:33 | dnolen | lynaghk: a set / vector |
| 01:33 | lynaghk | dnolen: a vector as the key, with the constraint having the realized values in the same order? |
| 01:34 | lynaghk | we can't do a set because of the ordering. |
| 01:34 | dnolen | lynaghk: so we can do both! |
| 01:34 | dnolen | lynaghk: set if you don't care, vector if you do. |
| 01:34 | lynaghk | dnolen: options map is fine with me. I won't be able to say much until I try expressing the grammar of graphics rewrites in this system |
| 01:34 | dnolen | lynaghk: but maybe I'm forgetting precisely what you want to do? |
| 01:35 | dnolen | as far as constraints on multiple vars |
| 01:35 | lynaghk | dnolen: here's the old wishlist: https://gist.github.com/4004131 |
| 01:35 | dnolen | lynaghk: oh I remember |
| 01:35 | dnolen | a constraint relationship between two vars |
| 01:35 | lynaghk | dnolen: yeah |
| 01:37 | lynaghk | dnolen: the simplest being a predicate taking [dataset, dimension] to see if, say, that dimension has string values or numeric values. |
| 01:37 | dnolen | gist updated |
| 01:37 | lynaghk | dnolen: yeah, looks great. |
| 01:38 | lynaghk | the quoting lvars is annoying, but not sure if there's a nice way to get around that without too much hackery/surprise |
| 01:39 | dnolen | lynaghk: yeah I don't really see what we can do about that at all |
| 01:40 | lynaghk | dnolen: do you need me to submit the fnc stuff via JIRA, or is the github fork okay? |
| 01:41 | dnolen | lynaghk: if you like we could just get you push rights to core.logic :) |
| 01:42 | lynaghk | dnolen: dude, I can't handle that! I haven't read any of the miniKanren papers yet! |
| 01:43 | dnolen | lynaghk: :P |
| 01:43 | dnolen | lynaghk: I'm sure you can handle it |
| 01:43 | dnolen | lynaghk: go ahead add a patch to JIRA and I'll ping clojure-dev so that things are easier in the future. |
| 01:44 | dnolen | lynaghk: as far as the defc -> defnc - did you grep for that in the whole project |
| 01:44 | lynaghk | okay, sounds good. |
| 01:44 | lynaghk | yeah |
| 01:44 | dnolen | it's used in a couple places I think |
| 01:44 | dnolen | ok cool |
| 01:53 | lynaghk | dnolen: okay, after going through JIRA and getting git to spit out a patch I changed my mind and am happy to have commit rights on github =) |
| 03:52 | borkdude | a while ago there was this library on twitter about doing OO in Clojure - I know it sounds evil, but what was this library? |
| 03:52 | p_l | borkdude: ummm, clojure is pretty fine with OO... |
| 03:52 | p_l | just maybe not with Java-ish COP |
| 03:53 | borkdude | p_l I mean the more Java-ish OO then |
| 04:07 | broquaint | Was it this, borkdude - https://github.com/bodil/pylon |
| 04:16 | borkdude | broquaint tnx |
| 06:26 | bosie | how common is it to write tests immediately in the function? |
| 06:27 | babilen | bosie: Are you referring to something like doctests in Python? |
| 06:28 | bosie | babilen: yes. and i saw the same happening in clojure |
| 06:29 | babilen | Oh, I haven't. /me waits for an answer too |
| 06:35 | bosie | babilen: are you using vim for clj? |
| 06:35 | babilen | yes, I am |
| 06:36 | bosie | babilen: vimclojure? |
| 06:36 | bosie | babilen: i am trying to find a way to re-indent code |
| 06:36 | babilen | I used to, but I switched to foreplay and lein's nrepl ever since Meikel endorsed it |
| 06:36 | bosie | ok |
| 06:37 | babilen | bosie: Select the code you want to re-indent (visual mode) and run "=" |
| 06:37 | bosie | yea that doesn't work |
| 06:37 | bosie | trying foreplay now |
| 06:37 | qz | babilen: are you using paredit? |
| 06:38 | babilen | bosie: It does! I am using it every single day :) |
| 06:38 | babilen | qz: No, I can't stand it (i.e. "Have not yet grown accustomed to it") |
| 06:39 | qz | babilen: i'm very new to lisp syntax and editing files without it is such a pain.. |
| 06:45 | Bodil | Oops... prebooka speakers for DevoxxFR er annonsert. http://www.devoxx.com/display/FR13/Devoxxians |
| 06:45 | Bodil | Darth Odersky, we meet at last... |
| 06:46 | Bodil | whoa, wrong channel :) |
| 06:46 | Bodil | Too early in the morning for internets. |
| 07:46 | hyPiRion | How dare you fill up #clojure with old norse |
| 07:49 | vagmi | \q |
| 08:06 | pablo__ | Hi |
| 08:07 | pablo__ | I have a little interop question. |
| 08:08 | pablo__ | I'm doing some Java interop, and I'm trying to access an entry in a Clojure map, but the keys are keywords (like :my-key). Is there a way to create a Keyword object from Java or should I convert all my keys to string before handing them over to Java? |
| 08:18 | Sgeo | ,(class :foo) |
| 08:18 | clojurebot | clojure.lang.Keyword |
| 08:18 | Sgeo | https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Keyword.java |
| 08:19 | Sgeo | Hmm |
| 08:19 | Sgeo | ,(clojure.lang.Keyword/intern "foo") |
| 08:19 | clojurebot | #<Exception java.lang.Exception: SANBOX DENIED> |
| 08:20 | Sgeo | http://ideone.com/Exsxb3 |
| 08:20 | Sgeo | So I guess it's clojure.lang.Keyword("foo") to get :foo |
| 08:20 | Sgeo | erm, oops |
| 08:20 | Sgeo | clojure.lang.Keyword.intern("foo") |
| 08:21 | Sgeo | pablo__, ^ |
| 08:23 | pablo__ | Sgeo: thanks |
| 08:23 | Sgeo | You're welcome |
| 08:25 | pablo__ | Sgeo: hum, looks like the String param of intern() is the nsname... |
| 08:25 | pablo__ | Sgeo: I think I found another solution in the end: clojure.walk/stringify-keys |
| 08:26 | Sgeo | http://ideone.com/hGnsfA |
| 08:26 | Sgeo | (= :foo (clojure.lang.Keyword/intern "foo")) gave me true |
| 08:27 | Sgeo | Hmm, are you sure you want to do it like that? That will also affect nested maps |
| 08:27 | Sgeo | ,(require 'clojure.walk) |
| 08:27 | clojurebot | nil |
| 08:27 | Sgeo | ,(clojure.walk/stringify-keys {:foo {:bar :baz}}) |
| 08:27 | clojurebot | {"foo" {"bar" :baz}} |
| 08:28 | pablo__ | I have to read a map from Java, so either I create Keywords in Java or I convert all the Keywords to Strings... |
| 08:29 | Sgeo | ,(= "foo" "foo) |
| 08:29 | clojurebot | #<ExecutionException java.util.concurrent.ExecutionException: java.lang.RuntimeException: EOF while reading string> |
| 08:29 | Sgeo | ,(= "foo" "foo") |
| 08:29 | clojurebot | true |
| 08:29 | Sgeo | ,(identical? "foo" "foo") |
| 08:29 | clojurebot | true |
| 08:30 | Sgeo | Ah, ok, immutable |
| 08:30 | Sgeo | good |
| 08:30 | pisketti | yes, unlike anything else |
| 08:42 | joegallo_ | ,(identical? "foo" (String. "foo")) |
| 08:42 | clojurebot | false |
| 08:43 | joegallo_ | not all strings are interned, though, so you shouldn't necessarily assume that equivalent strings are identical |
| 09:14 | pjstadig | ,(identical? "foo" (.intern (String. "foo"))) |
| 09:14 | clojurebot | #<Exception java.lang.Exception: SANBOX DENIED> |
| 09:14 | pjstadig | interesting |
| 09:15 | pjstadig | normally that would be true, except for clojurebot's security |
| 09:17 | alexnixon | and for fun: &| [(identical? 42 42) (identical? 142 142)] |& |
| 09:17 | lazybot | ⇒ [true false] |
| 09:18 | cemerick | alexnixon: only integers < 128 are fixnums |
| 09:18 | cemerick | that's a jvm thing |
| 09:18 | cemerick | I guess they're all jvm things :-P |
| 09:18 | p_l | ... dafuq. Can't you use the 4byte ones? |
| 09:19 | alexnixon | well I think /technically/ it's a Java thing (i.e. it's the implementation of Integer.valueOf, rather than some JVM magic) |
| 09:20 | alexnixon | and I've used up my week's pedantry quota in one sentence |
| 09:20 | cemerick | quite right |
| 09:20 | p_l | well, internally, there are bytes <-127,127>, shorts (16bit signed), integers (32bit signed) and I think longs were also "native" (64bit signed) |
| 09:20 | p_l | isnt' it? |
| 09:20 | cemerick | alexnixon: you use up a budget; you meet a quota. |
| 09:21 | cemerick | Fight pedantry with pedantry, amirite? |
| 09:21 | cemerick | ;-) |
| 09:21 | alexnixon | -.- |
| 09:21 | p_l | it's hitting the infamous integer cache? |
| 09:21 | p_l | the one that let's you make 2+2 equal 6? |
| 09:22 | p_l | and otherwise returns freshly-allocated object wrappers and does EQ check on them? |
| 09:24 | alexnixon | yeah it's the cache, though I'm not sure I've seen the 2+2=6 example |
| 09:27 | p_l | alexnixon: there's a "logic bomb" posted somewhere which slowly corrupts the cache |
| 09:31 | jcrossley3 | llasram: awesome damballa sponsorship of atl-clj! |
| 10:04 | a|i | when interoping with java, which way is the most used one?: (Classname. args*) or (new Classname args*) |
| 10:04 | Ember- | (Classname. args*) imho |
| 10:10 | biff_tannen | how can i make lein re-generate my README file based on changes in my project.clj ? |
| 10:11 | joegallo_ | like what changes? |
| 10:11 | joegallo_ | https://github.com/technomancy/leiningen/blob/master/resources/leiningen/new/default/README.md |
| 10:11 | joegallo_ | looking at the template itself, i'm not sure it would do anything differently. |
| 10:11 | hyPiRion | biff_tannen: Sounds like something a plugin could do, but leiningen isn't sentient yet :) |
| 10:11 | biff_tannen | well, i dont mean automatically |
| 10:12 | biff_tannen | just a command that will re-write the readme .. |
| 10:12 | biff_tannen | right now my readme has all the default 'FIXME' stuff in it |
| 10:12 | hyPiRion | biff_tannen: Yeah, I get that, but i just wonder what you'd like to have in it. |
| 10:12 | joegallo_ | right. that's for you to correct with an editor. |
| 10:13 | biff_tannen | oh ... so that wasn't generated? that was an assumption on my part |
| 10:13 | joegallo_ | it is generated. it says "FIXME", and if you regenerated it (somehow), it would still say "FIXME". that part of the template isn't parameterized. |
| 10:13 | joegallo_ | see link above. |
| 10:13 | biff_tannen | ok i understand |
| 10:14 | harrigan | in Datomic, is it possible to create a query that will return all entities with a :db.type/bytes attribute having a given value? |
| 10:17 | llasram | jcrossley3: Thanks! If we're going to be the ~1 Atlanta-based company using Clojure in production, it seemed like a good idea :-) |
| 10:18 | jcrossley3 | llasram: :) |
| 10:23 | a|i | wat's the equivalent of javascript (var foo = foo || bar) in clojure? |
| 10:24 | llasram | a|i: (let [foo (or foo bar)] ...), although it isn't an especially common idiom in Clojure |
| 10:25 | a|i | llasram: I want to fetch a big xml only once in repl, in next evaluations I want to re0use that fetched string. what's a better way than the above? |
| 10:26 | llasram | a|i: Why not just (def xml-glob (fetch-xml-glob)) |
| 10:26 | llasram | You can use `defonce` instead of `def` it appears where it will be repeated evaluated |
| 10:27 | nDuff | ...if it weren't in a repl but an actual program, I'd consider a delay -- (def xml-glob (delay (fetch-xml-glob))); that way, it won't try to be fetched during compilation |
| 10:27 | llasram | Or even (defonce ... (delay ...)) :-) |
| 10:30 | a|i | why not defonce with a fn to avoid fetching during compilation? |
| 10:35 | llasram | a|i: Then your semantics conflict. A delay is essentially a zero-argument fn with memoized result. |
| 10:35 | llasram | a|i: If you just defonce a fn, you're storing the fn itself, and thus not caching the result |
| 10:36 | a|i | llasram: ah I was looking for a way to have a 0 arg memoizer :) |
| 10:36 | llasram | Well there you go then :-) |
| 10:37 | llasram | (inc nDuff) |
| 10:37 | lazybot | ⇒ 3 |
| 10:40 | llasram | Good point... It is rather surprising that (inc nickname) doesn't return the same value every time :-) |
| 10:41 | a|i | llasram: does delay require a special treatment in repl? |
| 10:41 | a|i | just trying the example in repl doesn't work: http://clojuredocs.org/clojure_core/clojure.core/delay |
| 10:41 | a|i | giving @my-delay to repl gives me back: @my-delay |
| 10:42 | nDuff | a|i: I can't reproduce that. |
| 10:42 | S11001001 | ,(let [del (delay 100)] [(type del) (type @del) del @del]) |
| 10:42 | Anderkent | a|i: can't reproduce |
| 10:42 | clojurebot | [clojure.lang.Delay java.lang.Long #<Delay@4cbe83ae: 100> 100] |
| 10:42 | S11001001 | a|i: looks right |
| 10:43 | hyPiRion | a|i: What repl do you use? lein repl or clojure? |
| 10:43 | a|i | hyPiRion: I use sublimerepl, which I think uses lein. |
| 10:43 | nDuff | That's a Mac-only thing, no? Can't test here. |
| 10:44 | hyPiRion | a|i: Check if there's an issue with sublimerepl. It may be that sublimerepl treats @ differently. |
| 10:44 | a|i | it worked after I started a fresh repl. |
| 10:44 | hyPiRion | Hmm, funny. |
| 10:44 | a|i | I think I don' understand repl oriented development. |
| 10:44 | a|i | when I keep evaluating my clojure files into the repl,.. things get built up. |
| 10:44 | a|i | so previous definitions can have a side effect. |
| 10:45 | a|i | is evaluating the file into the repl repeatedly the right way? |
| 10:45 | Anderkent | well, you don't want your namespaces to side-effect on being loaded, most of the time |
| 10:45 | Anderkent | and some things like deftype really don't take well to being reloaded (which is kinda dissapointing, really) |
| 10:46 | Anderkent | but in general you should be able to just reevaluate or require :reload your ns |
| 10:46 | nDuff | a|i: In nrepl.el, there are key combinations to recompile your current file as a whole, so it's not _just_ building things up. |
| 10:46 | nDuff | a|i: ...couldn't speak to whatever they've got for sublime. |
| 10:59 | ToBeReplaced | How do you configure clojurescript-mode with lein-cljsbuild? Is that the preferred way to develop cljs now with emacs? |
| 11:01 | ToBeReplaced | I think i'm confused because I'm not sure whether i should be checking out the clojurescript repos and setting the environment variable myself or whether lein-cljsbuild is meant to take care of that for you |
| 11:12 | the-kenny | ToBeReplaced: I'm not familiar with clojurescript-mode, but with lein-cljsbuild, you don't need to clone the repo or similar to build your cljs-project |
| 11:13 | the-kenny | My workflow usually consists in running lein cljsbuild auto and working with clojure-mode on my cljs-files. No repl, though |
| 11:22 | hyPiRion | Hrrm, anyone familiar with Erlang here? |
| 11:22 | hyPiRion | Just wondering if there's any persistent map equivalent. |
| 11:23 | hyPiRion | Which can be used for destructuring. |
| 11:25 | S11001001 | I bet reiddraper's pretty familiar with it :) |
| 11:26 | S11001001 | hyPiRion: based on my limited knowledge of erlang, I doubt very much you'll find such a thing though |
| 11:27 | hyPiRion | S11001001: yeah, looks like there's no keyword arguments either |
| 11:27 | hyPiRion | Oh well, I just have to remember the order then. |
| 11:27 | S11001001 | hyPiRion: yeah, erlang style seems to prefer tuples for that sort of thing over maps |
| 11:30 | hyPiRion | boo |
| 11:39 | hyPiRion | Clojure has spoiled me. Why aren't these goodies available in every language I use? :( |
| 11:40 | DaReaper5 | Hi, does anyone know a good robust lib for working with excel data? |
| 11:40 | DaReaper5 | If not clojure lib then java lib is acceptable |
| 11:41 | hyPiRion | DaReaper5: http://liebke.github.com/incanter/excel-api.html |
| 11:41 | nDuff | Thought I'd seen a Clojure wrapper around the dominant Java library |
| 11:41 | DaReaper5 | (What I need to do is work with an uploaded excel file (possibly has errors) and mass import the data to my DB) |
| 11:42 | DaReaper5 | Ya i saw excel-api. Just thought I would ask you guys anyways ;) |
| 11:42 | nDuff | ...ahh; https://github.com/mebaran/clj-excel is what I had in mind. |
| 11:42 | hyPiRion | Incanter is the dominant data analysis library, though I don't know if it's good for excel data. |
| 11:43 | hyPiRion | I would suppose so. |
| 11:43 | nDuff | anyhow, Apache POI (which they wrap) is definitely robust and well- |
| 11:43 | nDuff | ...-supported |
| 11:43 | TimMc | DaReaper5: https://poi.apache.org/ |
| 11:43 | TimMc | Specifically https://poi.apache.org/spreadsheet/index.html |
| 11:43 | TimMc | "HSSF" stands for "Horrible SpreadSheet Format" |
| 11:44 | DaReaper5 | I briefly looked at incanter. It looks like it does not work well with formulas |
| 11:44 | DaReaper5 | as in it wont take the value or formula it would just leave it blank |
| 11:44 | hyPiRion | That sounds like a useless library then. |
| 11:44 | nDuff | POI proper supports formula evaluation -- see https://poi.apache.org/spreadsheet/eval.html |
| 11:44 | DaReaper5 | ya |
| 11:45 | DaReaper5 | http://data-sorcery.org/2010/05/31/xls-files/ |
| 11:47 | hyPiRion | Humm, I've noticed I'm probably doing "Let over Lambda" (not read the book), where I define functions taking initial values, prepare some values and returns a function utilizing those prepared values plus some input. Is that a common pattern? Bad/good? |
| 11:48 | nDuff | hyPiRion: Using closures is not considered a bad thing. |
| 11:49 | Sgeo | How do people live without closures, exactly/ |
| 11:49 | Sgeo | ? |
| 11:49 | ohpauleez | Sgeo: I don't know, and I don't ever want to know |
| 11:50 | nDuff | Sgeo: Badly. |
| 11:50 | durka421 | well, they're just denied closure... |
| 11:50 | durka421 | (i'll show myself out) |
| 11:50 | ohpauleez | but for real, they use objects or globals |
| 11:50 | hyPiRion | nDuff: Nono, I just wonder if the (defn prepare-fn [p] (let [p* (prepare p)] (fn [v] ...))) is idiomatic, or if it's kind of premature optimization |
| 11:51 | gtrak | hyPiRion: you could implement let with just function args, mit-scheme has 'instantaneous evaluation' of all let bindings, which is a similar semantics to a function call. If you want it sequential like we have it, you could keep building up functions with 1-arg, 2 args, etc.. |
| 11:51 | hyPiRion | gtrak: Yeah, I know. I've read SICP ;) |
| 11:51 | gtrak | :-) |
| 11:52 | gtrak | so let and partial and closures are not so different |
| 11:53 | hyPiRion | Hmm, making it multiarg seems smart, maybe that's the solution. |
| 11:54 | hyPiRion | Maybe I'm a Haskeller at heart, sans the type system. |
| 11:56 | DaReaper5 | Does anyone here use incanter with excel? |
| 11:57 | Sgeo | not written any Haskell in his life >>= \hyPiRion -> |
| 12:00 | hyPiRion | Sgeo: I know some of those characters, but not in that combination |
| 12:01 | Anderkent | hyPiRion: it's a trick, because he implied a `do` statement wrapping your message |
| 12:13 | gfredericks | <- doesn't normally mean anything without do, does it? |
| 12:15 | Anderkent | indeed, though I don't know if it can be overriden |
| 12:19 | bawr | you could, but that way lies madness |
| 12:19 | bawr | madness, I say! |
| 12:20 | Anderkent | but... but... emoticon code! \ -> . <- / |
| 12:32 | gfredericks | did somebody say that a #bytes default data reader would be added eventually? |
| 12:32 | gfredericks | or more directly, is that the case? |
| 12:32 | TimMc | Yes, in version 3.12 "Querulous Quinoa". |
| 12:33 | hiredman | gfredericks: someone (I think stu) mentioned something about maybe adding something like that |
| 12:33 | hiredman | I imagine it would be #base64 "..." |
| 12:33 | gfredericks | #base65 for those who want the extra power |
| 12:34 | hiredman | people have asked about it for datomic, so I imagine it has some change of happening |
| 12:34 | llasram | I'd like a default #byte-string or such which turned strings with "\\xHH" into byte-arrays |
| 12:35 | llasram | Also, a pony! |
| 12:35 | gfredericks | #pony {:name "Buttercups"} |
| 12:36 | llasram | heh |
| 12:42 | biff_tannen | any tuts on clojurescript ? i am able to deploy a running web-server with clojure using ring and clojure, but with implementing clojurescript , i can use some help ... |
| 12:44 | dnolen | biff_tannen: http://github.com/magomimmo/modern-cljs |
| 12:45 | biff_tannen | awesome thx dnolen |
| 12:48 | lancepantz | dnolen: i'm sure you get bugged about this all the time, do do you know what the status of source mapping is in clojurescript? |
| 12:48 | gfredericks | waiting on tools.reader and 1.5 was the last thing I heard |
| 12:49 | lancepantz | i've been out of the loop for a bit |
| 12:50 | lancepantz | gfredericks: is tools.reader a todo? or just waiting for a merge? |
| 12:50 | gfredericks | I have no idea :( I didn't even know the project formally existed already |
| 12:51 | lancepantz | k |
| 12:51 | gfredericks | woah I didn't know namespace prefixes could have .'s |
| 12:51 | gfredericks | I apparently don't know anything about clojure |
| 12:53 | dnolen | lancepantz: I do get bugged about it a lot :) |
| 12:54 | lancepantz | dnolen: i have permission to spend time on it, if there's anything i can do |
| 12:54 | dnolen | lancepantz: there's a source map branch that relies on 1.5.0, when 1.5.0 goes out the door I want to merge it in |
| 12:54 | dnolen | lancepantz: as soon as that happens it'll be easier for people to contribute and I'm happy to explain how it works |
| 12:55 | lancepantz | dnolen: k, just let me know, you know how to reach me :) |
| 12:55 | dnolen | lancepantz: once in - we should look at making sure tools.reader gives us column information for symbols - then switch to tools.reader away from the Clojure reader |
| 12:56 | dnolen | lancepantz: I'd like all symbol emission to go through emit :var, right now emission of symbols is very unprincipled |
| 12:57 | dnolen | lancepantz: that's sweet you've got permission to work on it - could definitely use more help! :) |
| 12:57 | lancepantz | dnolen: so right now, cljs uses the same reader as clojure? |
| 12:57 | dnolen | lancepantz: it does |
| 12:57 | lancepantz | i would expect that to cause problems with interop |
| 12:58 | dnolen | lancepantz: which means that any reader changes have to go through Rich which is understandably slow |
| 12:58 | lancepantz | right |
| 12:59 | dnolen | lancepantz: which is why I was excited about blind -> tools.reader |
| 12:59 | lancepantz | dnolen: right right |
| 12:59 | dnolen | lancepantz: you can poke around the source-map branch feel free to ask me any questions |
| 13:01 | dnolen | lancepantz: http://github.com/clojure/clojurescript/compare/source-map |
| 13:01 | dnolen | I just brought it in sync w/ master |
| 13:02 | lancepantz | dnolen: alright, will do, this is the first i've touched of clojurescript, so i have some catching up to do first |
| 13:03 | lancepantz | dnolen: but we are going to start using it, we've been working with ztellman on an open source metrics system based on aleph, figured we might as well do the ui in cljs |
| 13:03 | dnolen | lancepantz: cool! |
| 13:04 | lancepantz | it's a neat project, essentially a statsd/graphite replacement |
| 13:06 | lancepantz | still way early, although we have ran some trials of it in production: https://github.com/flatland/telemetry |
| 13:07 | durka42 | lancepantz: you win the award for vague README.md :) |
| 13:07 | lancepantz | durka42: let me rephrase, still waaaaaaay early |
| 13:07 | lancepantz | definitely don't want anyone using it! |
| 13:07 | durka42 | fair enough |
| 13:12 | pbostrom | Is there a consensus on :require :refer vs :use :only? I had thought that :require :refer was strongly preferred, but I could be making that up |
| 13:14 | Frozenlock | pbostrom: I had a weird mindset where I used :use and :only... now I regret it. Really better to use :require. (And not refer, just required). IMO it keeps everything cleaner. Also easier if you want to swap libraries or something of this kind. |
| 13:14 | rasmusto | pbostrom: from what I know, :use/:only turns into :require/:refer in a macro, so you should just use :require/:refer in the first place |
| 13:14 | technomancy | pbostrom: :require :refer was introduced specifically to replace :use :only |
| 13:14 | Frozenlock | :require library :as lib ----> lib/some-fn |
| 13:17 | pbostrom | ok, that's what I thought, I was skimming through "ClojureScript: Up and Running", and saw :use :only with no mention of :require :refer, perhaps it was an oversight |
| 13:25 | reiddraper | hyPiRion: late reply, but there is no equivalent of map destructuring in erlang, unfortunately |
| 13:27 | reiddraper | hyPiRion: you _can_ do that with records though, which are basically just macros around tuples |
| 13:32 | magnars | lein midje --lazytest works fine. lein midje (with no --lazytest) does not, but fails with this error: Could not locate bultitude/core__init.class or bultitude/core.clj on classpath http://pastie.org/6045137 --- any ideas? |
| 13:33 | magnars | never mind me, turns out I was using a really old midje version *blush* |
| 13:35 | magnars | ack, that wasn't it either :P still same error |
| 13:35 | technomancy | magnars: I heard that was fixed in the latest midje RC or something |
| 13:35 | magnars | technomancy: excellent, thanks |
| 13:37 | magnars | yes, that did resolve the issue, thanks - I'm still getting seemingly random hangs from leiningen tho - its task is done, but I have to sigint it to stop. |
| 13:38 | technomancy | probably the task is leaving a thread pool open |
| 13:38 | magnars | makes sense |
| 13:38 | bosie | how would you solve querying states for a user? like "if the user has a store and is older than 3month and is XXX then do ABC; else if the user has a store and is older than 1month and is XYZ then do BBC; else....." |
| 13:39 | bosie | almost thinking of doing this with core.logic somehow |
| 13:40 | goracio | hi can it be simplier ? (vec (map str (vec "world"))) |
| 13:40 | hiredman | ,(mapv str "world") |
| 13:40 | clojurebot | ["w" "o" "r" "l" "d"] |
| 13:40 | goracio | great thanks |
| 13:41 | jcromartie | must… save… sanity… must… write… Lisp… |
| 13:41 | wink | yay, more zombie coders! |
| 13:42 | goracio | why split returns this btw ? |
| 13:42 | goracio | ,(clojure.string/split "world") |
| 13:42 | clojurebot | #<ArityException clojure.lang.ArityException: Wrong number of args (1) passed to: string$split> |
| 13:42 | goracio | ,(clojure.string/split "world" #"") |
| 13:42 | clojurebot | ["" "w" "o" "r" "l" ...] |
| 13:42 | hiredman | read the docs for split? |
| 13:42 | jcromartie | goracio: that' san empty regex |
| 13:43 | jcromartie | goracio: empty regex matches nothing (i.e. anything) |
| 13:43 | bosie | jcromartie: why would it return "" though? |
| 13:43 | TimMc | ,(clojure.string/split "" #"") |
| 13:43 | clojurebot | [""] |
| 13:43 | TimMc | ,(clojure.string/split "1" #"") |
| 13:43 | clojurebot | ["" "1"] |
| 13:43 | TimMc | Seems legit. :-) |
| 13:43 | bosie | TimMc: right |
| 13:44 | bosie | but why would it do that? |
| 13:44 | jcromartie | it's an odd case for sure |
| 13:44 | goracio | can split return vector without "" ? |
| 13:44 | bosie | ,(clojure.string/split nil #"") |
| 13:44 | clojurebot | #<NullPointerException java.lang.NullPointerException> |
| 13:44 | jcromartie | but the empty regex in this case actually matches the nothingness before and after the 1 |
| 13:45 | TimMc | bosie: Can you come up with an argument for a different answer? |
| 13:45 | bosie | TimMc: ["" "1" ""] |
| 13:45 | jcromartie | that might make more sense |
| 13:45 | jcromartie | ,(re-seq #"" " ") |
| 13:45 | clojurebot | ("" "") |
| 13:45 | goracio | may be pattern should be of some kind ? |
| 13:46 | jcromartie | goracio: what are you trying to do? |
| 13:46 | bosie | goracio: you could use (filter...) to remove the empty strings |
| 13:46 | goracio | jcromartie: i mean we cann't make split to return it without "" ? |
| 13:47 | jcromartie | goracio: are you looking for the sequence of single-character strings that make up the string? |
| 13:47 | jcromartie | ,(re-seq #"." "hello world") |
| 13:47 | clojurebot | ("h" "e" "l" "l" "o" ...) |
| 13:47 | gerunddev | ,(rest (clojure.string/split nil #"")) |
| 13:47 | clojurebot | #<NullPointerException java.lang.NullPointerException> |
| 13:47 | jcromartie | split is for dividing a string on boundaries |
| 13:47 | gerunddev | ,(rest (clojure.string/split "" #"")) |
| 13:47 | clojurebot | () |
| 13:47 | goracio | exactly |
| 13:48 | jcromartie | an empty regex is pretty much never the answer ;) |
| 13:48 | goracio | ok thanks have to experiment more on this stuff ) |
| 13:50 | jcromartie | experimenting is good |
| 13:56 | TimMc | ,(map str "hello") |
| 13:56 | clojurebot | ("h" "e" "l" "l" "o") |
| 13:56 | TimMc | goracio: ^ even simpler |
| 13:56 | goracio | TimMc: it will return seq |
| 13:56 | goracio | i need vector _ |
| 13:56 | goracio | ) |
| 13:57 | ro_st | ,(vec (map str "try this")) |
| 13:57 | clojurebot | ["t" "r" "y" " " "t" ...] |
| 13:57 | goracio | ,(mapv str "hello") |
| 13:57 | clojurebot | ["h" "e" "l" "l" "o"] |
| 13:57 | goracio | that's fine |
| 13:57 | ro_st | or use mapv :-) |
| 13:57 | ro_st | -learns something new- |
| 13:57 | Frozenlock | jcromartie: What about an empty string? If I want to remove something in a string, I usually use the replace function with an empty replacement. Is there a better way? |
| 13:58 | Frozenlock | Oh wow mapv... could be used at so many places instead of (into [] (map.... |
| 13:59 | Frozenlock | #clojure is amazing, it's as if I was learning by osmosis. |
| 14:00 | bawr | Frozenlock: aye, good language channels work like that. :) |
| 14:00 | babilen | Frozenlock: https://github.com/jonase/kibit/ catches things like this (not sure about this particular one though) |
| 14:00 | jcromartie | yeah, mapv is handy |
| 14:02 | Frozenlock | babilen: I'm somehow afraid it will scream at me :p |
| 14:03 | babilen | Frozenlock: That's ok -- It tells you how to silence it :) |
| 14:10 | mmitchell | dakrone |
| 14:11 | dnolen | for people who have been burned by the CLJS Closure third-party dependency issues - please try this out - http://dev.clojure.org/jira/browse/CLJS-418 |
| 14:15 | ToBeReplaced | i can't even get the browser repl running following the instructions from: https://github.com/clojure/clojurescript/tree/ad0e4af1b20fe829ea3a7feb1b7067250309b1cc/samples/repl ... i just get "Page not found" :( |
| 14:18 | jro_ | in (source +), what is reduce1: ([x y & more] (reduce1 + (+ x y) more))) |
| 14:19 | Bronsa | because + is defined before reduce |
| 14:19 | ro_st | dnolen: thanks, will give it a go |
| 14:20 | tbaldridge | jro_: it's a simpler form of reduce that lacks the features of the normal version, but can be defined before all the stuff reduce needs has been created. |
| 14:20 | tbaldridge | jro_: it's only really used in core.clj |
| 14:24 | ToBeReplaced | Any suggestions for how to get the CLJS browser repl server to accept a connection? if i connect via firefox i just get shipped back "Page not found". |
| 14:29 | Frozenlock | ToBeReplaced: What works and what doesn't? Did you specify a repl-listen-port in your cljsbuild config? What does your html file looks like? |
| 14:31 | ToBeReplaced | Frozenlock: I am running directly from clojurescript/script/repl... no leiningen, no lein-cljsbuild, no html file |
| 14:31 | Frozenlock | Oh... never tried that :( |
| 14:40 | warz | S11001001, yesterday we were talking about reify. i've been reading up about it and messing around with it in the repl and stuff. how would you do the equivalent of a Java Annotation on a class member method, though? |
| 14:41 | S11001001 | hehe, no annotations last I checked |
| 14:41 | warz | dang! heh ok. |
| 14:41 | warz | yea i mean, i did look around for how to do so, but didn't come up with anything. |
| 14:42 | warz | i wonder if i should just use java for these darn plugins. |
| 14:43 | S11001001 | warz: I'd suggest considering scala instead, in concert with https://github.com/joshcough/MinecraftPluginsScalaExample |
| 14:43 | S11001001 | warz: Alternatively, any non-annotation-based approach will work. |
| 14:45 | warz | well ive got it working entirely using the gen-class approach, in clojure. im pretty sure i could eventually figure out my original question yesterday as well, which was just creating my own class constructor so that i could pass in and store a reference to the main plugin object. |
| 14:46 | S11001001 | warz: what I mean is, consider java last |
| 14:46 | warz | but yea, the server im using, called Bukkit, requires these Annotations. |
| 14:46 | dnolen | I thought Clojure had annotation support |
| 14:46 | S11001001 | dnolen: I have no idea really |
| 14:46 | warz | ah yea, only reason im even messing around with the JVM, any Bukkit at all, is because i want to learn Clojure |
| 14:46 | hiredman | dnolen: in some places for somethings |
| 14:47 | warz | yea, based on my readings of the docs and stuff, gen-class seems to support the most of these features |
| 14:47 | hiredman | http://dev.clojure.org/jira/browse/CLJ-948 made it in to 1.5 |
| 14:47 | Sgeo | Someone did make a mod or something for Minecraft in Clojure |
| 14:48 | Frozenlock | Sgeo: I think it was to make `bots' |
| 14:48 | Sgeo | http://metaphysicaldeveloper.wordpress.com/2012/04/20/conjcraft-a-minecraft-mod-implemented-in-clojure/ |
| 14:49 | warz | i was only tangentially interested in minecraft server mods because i knew it was java, and thought itd be something fun to keep my interest while learning clojure. haha. |
| 14:49 | Frozenlock | https://www.youtube.com/watch?v=cV7zbzH37Qo clojurecraft |
| 14:49 | warz | it has turned out that java interop can get hairy kinda quick, though. |
| 14:49 | warz | so probably not the best way to learn. |
| 14:50 | Sgeo | Java interop gets impure from a Clojure perspective |
| 14:50 | Sgeo | ,(map inc [1 2 3]) |
| 14:50 | clojurebot | (2 3 4) |
| 14:50 | warz | i did manage to make one server mod that logs in-game events to mixpanel analytics: https://github.com/ryancole/com.rycole.bukkit.mixpanel |
| 14:50 | Sgeo | ,(map .toString [1 2 3]) |
| 14:50 | clojurebot | #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: .toString in this context, compiling:(NO_SOURCE_PATH:0)> |
| 14:50 | S11001001 | warz: true. |
| 14:50 | Sgeo | ,(map #(% .toString) [1 2 3]) |
| 14:50 | clojurebot | #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: .toString in this context, compiling:(NO_SOURCE_PATH:0)> |
| 14:50 | Sgeo | ,(map #(.toString %) [1 2 3]) |
| 14:50 | clojurebot | ("1" "2" "3") |
| 14:50 | warz | yea thats pretty simple stuff, though |
| 14:50 | Sgeo | .toString is not a Clojure function |
| 14:51 | S11001001 | warz: definitely you're missing out on the clojure experience if using gen-class, because gen-class is tedious, and not at all in the spirit of true clojurian development |
| 14:52 | Sgeo | Write a macro to abstract out the gen-class usage as needed? |
| 14:52 | warz | yea i get that feeling. i just need to think of something cool to make. |
| 15:02 | svedubois | How I can translate this java code to clojure? https://www.refheap.com/paste/9408 |
| 15:04 | ToBeReplaced | dnolen: my cljs problem was caused by this: http://dev.clojure.org/jira/browse/CLJS-418 ... was really hard for me to figure that out trying to set this up for the first time since it breaks the script/repl. this thread had my exact issue and fix https://groups.google.com/forum/?fromgroups=#!searchin/clojure/brent/clojure/DmnPwrVvfW8/qgnp6MTVWusJ ... thanks for the PSA |
| 15:06 | amalloy | svedubois: what have you tried? |
| 15:06 | dnolen | ToBeReplaced: no problem, sooner people confirm the fix the sooner we get a new release that doesn't have the issue |
| 15:13 | svedubois | I have tried something like this https://www.refheap.com/paste/9409 |
| 15:15 | hiredman | I would start off reading the docs for for |
| 15:15 | dnolen | svedubois: I suggest taking a step back and getting a book on Clojure designed for people coming from Java and other imperative languages - I hear the O'Reilly book is good. |
| 15:20 | jcromartie | That's not a bad first try |
| 15:20 | jcromartie | svedubois: |
| 15:21 | cemerick | svedubois: maybe https://www.refheap.com/paste/9410 |
| 15:21 | jcromartie | but I'm a little bit wary of this RealSum class... |
| 15:21 | cemerick | svedubois: and perhaps check out http://clojurebook.com |
| 15:21 | cemerick | "numerical instabilities" |
| 15:22 | jcromartie | yeah |
| 15:22 | cemerick | sounds like the IEEE floating point spec |
| 15:22 | jcromartie | is this an image library? |
| 15:23 | jcromartie | I'd guess http://code.imagej.net/trac/imglib/browser/imglib2/core/src/main/java/net/imglib2/util/RealSum.java?rev=a340a39990fbea0e061121c884a128e698341cf0 |
| 15:25 | pbostrom | cemerick: iterator-seq might not be necessary since input implements Iterable |
| 15:25 | cemerick | pbostrom: oh, right, I misread that as 'Iterator' |
| 15:27 | svedubois | cemerick: It works well, thanks |
| 15:43 | ollivera | hi, .. I am parsing a csv file and I would like to sum all the values of the key "sc-bytes". http://pastebin.com/TPahzhRx |
| 15:44 | nDuff | ollivera: If you're privileged enough to be using an adblocker and thus not see them -- pastebin.com is full of annoying, animated ads. Perhaps you might consider refheap.com (which, being written in Clojure, would also be dogfooding), or gist, or otherwise something different? |
| 15:44 | hyPiRion | reiddraper: But {foo, A, bar, B} != {bar, B, foo, A}, right? So the ordering is still important (though it fails if you give it the arguments in the wrong order, which is something at least) |
| 15:44 | hyPiRion | (late reply for me as well) |
| 15:46 | ollivera | nDuff, https://www.refheap.com/paste/9412 |
| 15:46 | ollivera | okay, nice! :) |
| 15:48 | dnolen_ | man, another paren thread on the mailing list |
| 15:50 | devlol | hello jcromartie |
| 15:50 | rboyd | ollivera: maybe something like this? (reduce #(+ %1 (Integer. (get %2 "sc-bytes"))) 0 rows) |
| 15:50 | rboyd | ollivera: where rows is a seq of your csv rows (maps) |
| 15:50 | nDuff | Heh. What I was coming up with was thus: (reduce + (map #(Integer/parseInt (get % "sc-bytes")) data)) |
| 15:51 | nDuff | could also make that (apply + ...) |
| 15:51 | ollivera | Hum, thanks, I will try |
| 15:51 | Frozenlock | Not really clojure related, but this makes me really happy http://blog.chromium.org/2013/02/hello-firefox-this-is-chrome-calling.html |
| 15:51 | amalloy | dnolen_: newcomers begging to remove parens is the Other Lisp Curse |
| 15:54 | tbaldridge | dnolen: don't they know the first rule of Lisp fight club? (you don't talk about the parens) |
| 15:57 | hyPiRion | tbaldridge: What parentheses? |
| 15:59 | ohpauleez | amalloy: haha |
| 16:00 | ohpauleez | I think we should just reply, "Remember the first time you tried beer - it was bitter, you hated it, you didn't understand why people drank it. Then you stuck with it, and you realized how beautiful it was." |
| 16:01 | rasmusto | how about we replace )))))) with #] or something? |
| 16:02 | ohpauleez | rasmusto: I rarely pay attention to a long list of closing parens |
| 16:02 | amalloy | rasmusto: :((((((((((((((((( |
| 16:02 | rasmusto | amalloy: #] |
| 16:02 | ohpauleez | overtime, your eyes gloss over it, and with paren highlighting in your editor, it's easy to place them when you need to |
| 16:02 | amalloy | #] or an equivalent is a disaster: it serves no purpose, and makes code harder to edit |
| 16:03 | ohpauleez | yeah, it's totally break paredit |
| 16:03 | ohpauleez | it'd** |
| 16:03 | amalloy | ohpauleez: it's worse than that, because it's no longer possible to just wrap some expression with parens |
| 16:03 | amalloy | even manually |
| 16:03 | clojurebot | It's greek to me. |
| 16:03 | ohpauleez | for sure |
| 16:04 | rasmusto | amalloy: wasn't it in a lisp of olde at some point? (btw, I'm 100% joking about putting it in) |
| 16:04 | amalloy | rasmusto: i think some schemes have had it |
| 16:14 | rasmusto | technomancy: someone else brought it up :#] |
| 16:14 | technomancy | we should maintain a list of every time it's been discussed |
| 16:16 | hyPiRion | The qsort example made me wonder how I could implement it with juxt. |
| 16:17 | hyPiRion | Must be some way. |
| 16:20 | TimMc | juxt-sort |
| 16:23 | S11001001 | 1 |
| 16:24 | Bronsa | dnolen_: just added line/column metadata on symbols FYI |
| 16:24 | amalloy | hyPiRion: (interpose [pivot] ((juxt filter remove) smaller xs))? |
| 16:26 | hyPiRion | amalloy: I was thinking of (juxt > == <) somehow. |
| 16:43 | seangrove | Has anyone thought about a paren-free dialect of clojure? |
| 16:43 | dnolen_ | Bronsa: sweet! |
| 16:44 | tbaldridge | seangrove: thought about? yes. |
| 16:44 | hiredman | seangrove: no, no one ever has, please bring your great wisdom down from the mount |
| 16:45 | seangrove | Well, it could be a good way of spending time debating its merits... |
| 16:45 | seangrove | :P |
| 16:45 | seangrove | I'm curious why it couldn't just be an editor-level thing though |
| 16:45 | hyPiRion | Success |
| 16:45 | hyPiRion | ,(let [qsort (fn qs [[p :as l]] (if p (let [{f 1 p 0 l -1} (-> (partial compare p) (group-by l))] (lazy-cat (qs f) p (qs l)))))] (qsort [5 1 8 3 2 0])) |
| 16:45 | clojurebot | (0 1 2 3 5 ...) |
| 16:45 | tbaldridge | (waves Jedi hands) : you do not want paren-free lisp.... |
| 16:45 | hyPiRion | Not with juxt though. |
| 16:45 | seangrove | Parsing clojure is pretty straight-forward, seems like if someone wanted to do it they could just make an emacs-mode |
| 16:45 | tbaldridge | (waves Jedi hands) : You want to go home and re-think your life |
| 16:45 | tbaldridge | :-P |
| 16:45 | amalloy | seangrove: because the whole premise is absurd |
| 16:46 | amalloy | there's not enough information without the parens |
| 16:46 | seangrove | Meh, you'd have to introduce additional semantics, etc |
| 16:46 | seangrove | But clojure has to be one of the easiest language for someone (who wants that) to do it |
| 16:46 | seangrove | No need to request it, it seems |
| 16:46 | hyPiRion | The most difficult thing would be destructuring. |
| 16:47 | hyPiRion | If you're going to be delimiter-free |
| 16:47 | gfredericks | O_O |
| 16:47 | seangrove | Ah, good point |
| 16:48 | seangrove | Doesn't seem like a very high-value project, personally |
| 16:48 | dnolen_ | seangrove: paren-free Lisps are an old idea with few success stories - Dylan being a notable exception, but the macro system looks more like syntax-rules (for better or worse) |
| 16:48 | technomancy | many people have tried it with other lisps, and it works about as well as you'd expect from a project explicitly designed for newbies to abandon once they achieve proficiency |
| 16:49 | seangrove | Heh, sorry, I was speaking tongue-in-cheek about suggesting it |
| 16:49 | seangrove | Pure troll, didn't mean for it to be taken very seriously |
| 16:50 | gfredericks | what about a language that is like clojure but with more parentheses |
| 16:50 | seangrove | haha |
| 16:50 | Raynes | seangrove: People have. |
| 16:50 | cemerick | TimMc has been pioneering that for a while |
| 16:50 | hyPiRion | gfredericks: And more sharp-quoting! |
| 16:50 | rasmusto | gfredericks: ( is a macro for ((((( |
| 16:50 | bawr | how about... |
| 16:50 | pjstadig | uuids! |
| 16:50 | Raynes | And they get surprised when the realize nobody cares about a non-pareny syntax. |
| 16:50 | bawr | a clojure with more APL syntax? xD |
| 16:51 | hiredman | don't make me figure out how to load pl in to clojurebot again |
| 16:51 | gfredericks | at the very least we can have mandatory metadata |
| 16:51 | hyPiRion | (let ((a 10)) (+ a a)) vs (let [a 10] (+ a a)), count the parens. |
| 16:51 | amalloy | gfredericks: like clojure but with more parens? common lisp is a winner |
| 16:52 | gfredericks | (ommon li)(p |
| 16:52 | hyPiRion | And remove car and cdr, such that you have to do destructuring for those values. |
| 16:53 | amalloy | lixp? |
| 16:54 | hyPiRion | Hmm, you could probably make a brainfuck-like version of lisp, where () denotes a function, (()) denotes another function and (() ()) denotes a function call, etc. |
| 16:54 | jballanc | hyPiRion: I've seen raw lambda calculus implementations like that |
| 16:54 | hyPiRion | Not sure how you distinguish (()) from ( () ) though, |
| 16:54 | jcromartie | devlol: hello? |
| 16:54 | gfredericks | hyPiRion: whitespace sensitive s-expressions? |
| 16:54 | hyPiRion | jballanc: Oh, that sounds nice. |
| 16:55 | gfredericks | it's the opposite of clojure: ' ' is not whitespace |
| 16:55 | hyPiRion | gfredericks: Hmm. |
| 16:55 | hyPiRion | That's the opposite of every language in existence though, except Python. |
| 16:55 | gfredericks | you could use two different kinds of spaces and treat them like brackets that have to be balanced |
| 16:56 | gfredericks | hyPiRion: I meant opposite in the sense that clojure has an extra char \, which is whitespace |
| 16:56 | bawr | gfredericks: you evil, evil man. |
| 16:56 | hyPiRion | like ' ' and ' '? |
| 16:56 | gfredericks | hyPiRion: sure |
| 16:56 | jcromartie | you're talking about church numerals? |
| 16:56 | hyPiRion | oh, humm. |
| 16:56 | jballanc | yup, that's the term I was looking for |
| 16:56 | jballanc | http://en.wikipedia.org/wiki/Church_encoding |
| 16:56 | hyPiRion | ,(let [ 10] (+ 2)) |
| 16:56 | clojurebot | #<ExecutionException java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: let requires an even number of forms in binding vector in sandbox:> |
| 16:56 | hyPiRion | ,(let [ 10] (+ 2)) |
| 16:56 | clojurebot | 12 |
| 16:56 | jcromartie | http://en.wikipedia.org/wiki/Church_encoding |
| 16:57 | jcromartie | derp |
| 16:57 | amalloy | hyPiRion: binary lambda calculus |
| 16:57 | amalloy | http://www.ioccc.org/2012/tromp/hint.html |
| 16:57 | jcromartie | "sexpression crimes" |
| 16:58 | hyPiRion | amalloy: That looks nice. |
| 16:58 | technomancy | gfredericks: I'd trade tabs as non-whitespace for non-breaking space as whitespace |
| 16:58 | hyPiRion | I wonder what ' ' munges into. |
| 16:58 | amalloy | it's pretty amazing, yes. i'm glad the IOCCC is finally back in business |
| 16:59 | hyPiRion | We should have IOCLJCC, so that people could hone their Swearjure skills. |
| 17:00 | technomancy | lightning talk on swearjure at clojurewest |
| 17:00 | gfredericks | "Ew, look at those swearjure skills. Have you thought about maybe honing them?" |
| 17:00 | gfredericks | TimMc: now you have to come to clojurewest |
| 17:01 | TimMc | That's what I hear. |
| 17:01 | hyPiRion | What, Swearjure is a topic on Clojurewest? |
| 17:01 | hyPiRion | like, an actual talk? |
| 17:01 | gfredericks | TimMc is presenting |
| 17:02 | hyPiRion | They better be filming it |
| 17:02 | hyPiRion | /s/be filming/film/ |
| 17:02 | gfredericks | with lots of bleeps |
| 17:02 | TimMc | gfredericks: You are such a troublemaker. |
| 17:02 | gfredericks | TimMc: I still can't believe they made it a keynote |
| 17:03 | TimMc | I hear that next year it will be SwearjureWest |
| 17:03 | gfredericks | TimMc: quick what's the smallest swearjure expression that evaluates to "conf" |
| 17:04 | TimMc | Not sure I can do that. |
| 17:04 | TimMc | I could probably get you some of those letters as chars. |
| 17:05 | gfredericks | I think this is a minimum requirement for you having your own conference |
| 17:05 | TimMc | It's a shame that inc doesn't work on chars. |
| 17:06 | TimMc | I could produce a seq which, when pretty-printed, shows a raster rendering of "CONF" though. |
| 17:06 | TimMc | I'm not *going* to, mind you. |
| 17:06 | gfredericks | good to know |
| 17:07 | technomancy | is that a threat then? =) |
| 17:07 | hyPiRion | TimMc: I'll make one for you. For free and all. |
| 17:08 | TimMc | aw |
| 17:08 | abp | What to use to internationalize libs for web development? |
| 17:09 | abp | There's tower, using an atom for the whole config, but I haven't thougt about wether that's good.. |
| 17:10 | TimMc | ,(`[~@(`[~@'`(~+)](*))](+)) |
| 17:10 | clojurebot | clojure.core/concat |
| 17:10 | bawr | abp: internationalize... libs? |
| 17:10 | bawr | I'm not sure I follow |
| 17:11 | abp | bawr, yes, validation with default translations and the like.. Well mostly validation libraries.. |
| 17:11 | augustl | TimMc: can clojurebot do JavaScript? :) |
| 17:12 | bawr | abp: what are you trying to achieve? |
| 17:13 | augustl | abp: I like to use thread local variables for config in servlet settings |
| 17:14 | augustl | s/servlet settings/servlets/ |
| 17:14 | reiddraper | hyPiRion: '{foo, A, bar, B} != {bar, B, foo, A},', correct, but that's not something people do in erlang, idiomatically anyway |
| 17:15 | hyPiRion | gfredericks: I demand that "Macros: Why, When, and How" should be renamed into "Why `{~% ~@%} is legal Clojure and how to utilize it". |
| 17:15 | abp | bawr: Using https://github.com/jkk/formative in a german web app. It uses https://github.com/jkk/verily for validation. I can overwrite the messages all the time, for each validation definition, but changing the defaults would be cleaner. |
| 17:16 | hyPiRion | *will |
| 17:16 | gfredericks | hyPiRion: aaack! |
| 17:16 | bawr | abp: Oooh, I see. |
| 17:16 | hyPiRion | reiddraper: Okay, thanks for confirming. |
| 17:16 | hyPiRion | (inc reiddraper) |
| 17:16 | lazybot | ⇒ 1 |
| 17:16 | bawr | abp: In that case, not sure. :-) |
| 17:16 | abp | augustl, so your approach sure would work, to define translation maps in different ns or one gigantic translation map for all supported languages. |
| 17:17 | pjstadig | i'm going to start a mechanical turk service for obfuscating clojure code, that is basically just a bridge to this irc channel |
| 17:17 | augustl | abp: didn't think of the limitation in most validation frameworks of messages being hardcoded and/or only settable once |
| 17:17 | bawr | pjstadig: pshaw! make a bot thhat learns obfuscations for this channel. |
| 17:18 | bawr | *FROM |
| 17:18 | hyPiRion | pjstadig: "Hello guys, how do you do (mapv + [1 2 3] [4 5 6]) in swearjure?" |
| 17:18 | bawr | arrgh |
| 17:18 | augustl | abp: one hack could of course be to make the messages strings of localization tokens etc |
| 17:18 | hyPiRion | Meh, I'm still frustrated that I can't do vararg mapv in Swearjure. |
| 17:19 | TimMc | vararg mapv? |
| 17:19 | TimMc | That's (mapv f v1 v2 ...)? |
| 17:19 | hyPiRion | TimMc: Variable maps, yesh. |
| 17:20 | hyPiRion | I can't do apply or partial, that's the issue. |
| 17:21 | abp | augustl, sure, but I prefer to "solve" that not only for my app(s). |
| 17:21 | hyPiRion | Oh hey, I think I can do quicksort in Swearjure. Going to take me some time though. |
| 17:22 | hiredman | why don't you just write a clojure to sweajure compiler? |
| 17:22 | hiredman | then you are done |
| 17:23 | bawr | that would be cheating |
| 17:23 | bawr | unless it's written in swearjure |
| 17:23 | hiredman | after you write it you would run it on it |
| 17:24 | hyPiRion | hiredman: TimMc has something on that, but I want to figure out if we can map every piece of Clojure to Swearjure. We have some issues with eval, apply, partial etc right now. |
| 17:24 | bawr | *unless it's written in swearjure to begin with |
| 17:27 | TimMc | hiredman: I've started work on one that translates a *very* limited subset of Clojure. |
| 17:28 | gfredericks | is core.logic good for handling code yet? |
| 17:29 | gfredericks | e.g., vectors vs seqs? |
| 17:29 | hyPiRion | gfredericks: Actually, I think it may be interesting. Let me find the link of something which may be relevant. |
| 17:30 | hyPiRion | http://www.youtube.com/watch?v=5Q9x16uIsKA#t=1104s |
| 17:30 | dnolen | gfredericks: we try to preserve the original type. Far as dealing w/ source there are a couple more tweaks to be made - but making it easy to work with source is a goal. |
| 17:30 | hyPiRion | If we filter out those with alphanumerics, then we're good to go. |
| 17:30 | gfredericks | dnolen: and then let the quine generation begin? |
| 17:31 | TimMc | Generation Quine |
| 17:31 | gfredericks | "A new generation of programmers who call themselves 'The Quine Generation' have ..." |
| 17:31 | hyPiRion | developed a Swearjure Quine. |
| 17:32 | dnolen | gfredericks: heh, well you can already do that today - generate quines relational that can be passed to eval. |
| 17:32 | dnolen | relationally |
| 17:34 | gfredericks | so you (defn evalo [expr res] ...)? |
| 17:35 | technomancy | http://ceaude.twoticketsplease.de/js-lisps.html |
| 17:35 | dnolen | gfredericks: if you mean to ask if you do what Will & Dan demo at their talks - yes |
| 17:36 | gfredericks | technomancy: where's the corresponding list of JS impls written in lisp? |
| 17:36 | technomancy | gfredericks: [] |
| 17:36 | technomancy | actually I think there's one |
| 17:37 | gfredericks | this demonstrates that lisp is not JS-complete |
| 17:37 | qz | how do i make thread-local var? i'm doing (def ^:dynamic var (SomeClass.)) and i'm getting crashes because of not synchnorized access to the SomeClass object |
| 17:37 | technomancy | [https://mxr.mozilla.org/mozilla/source/js2/semantics/README?force=1] |
| 17:37 | gfredericks | qz: its value is not thread-local until you use binding |
| 17:37 | TimMc | Is it possibly to tell programmatically that a Clojure macro is hygienic? |
| 17:37 | gfredericks | qz: so (def ^:dynamic var) (binding [var (SomeClass.)] (do stuff)) |
| 17:38 | gfredericks | TimMc: something to do with &env maybe? |
| 17:38 | qz | gfredericks: aha, will try now |
| 17:39 | amalloy | qz: you can also use https://github.com/flatland/useful/blob/develop/src/flatland/useful/utils.clj#L197 to create a real ThreadLocal object |
| 17:39 | devlol | jcromartie: I googled about compojure + swagger documentation and ended up with a chatlog from this channel. I'm currently on the same path you were on september. Did you pursue this way (generating doc from compojure routes) ? |
| 17:39 | jcromartie | ah ha |
| 17:39 | amalloy | TimMc: i doubt it |
| 17:39 | qz | gfredericks: do i have to work with var only within binding block ? |
| 17:39 | jcromartie | devlol: I think the answer is metadata on vars |
| 17:40 | qz | amalloy: will take a look, thanks.. but i thought clojure supported thread local vars out of the box |
| 17:40 | jcromartie | I never got it wokring |
| 17:40 | amalloy | it supports manual, temporary redefinition of vars per thread |
| 17:40 | jcromartie | but mostly because I was moved off the project after embarassing the Java devs |
| 17:40 | jcromartie | :P |
| 17:40 | amalloy | it doesn't have anything built-in for automatically giving each thread its own copy of something |
| 17:45 | jcromartie | devlol: I do believe that compojure will let you do (defroutes ^{:foo :bar} route-var …) |
| 17:45 | jcromartie | then swagger can inspect a namespace |
| 17:46 | jcromartie | er |
| 17:46 | jcromartie | you can write a routing that inspects a namespace |
| 17:46 | jcromartie | to speak Swagger |
| 17:46 | devlol | jcromartie: ok, i see. I have something working https://gist.github.com/b15be97304bee4e56092 which can then output json for iodocs |
| 17:47 | jcromartie | interesting, did you write your own GET/PUT? |
| 17:48 | devlol | yes, i wrote a small lib on top of compojure which allow groups with docs & wrappers |
| 17:49 | hyPiRion | TimMc: qsort progress: https://www.refheap.com/paste/40edd5d1d3764c7cbb8aff056 |
| 17:50 | hyPiRion | It seems fairly straightforward from here on actually, so now we have a useful program without alphanumerics. |
| 17:50 | devlol | jcromartie: i'm still unsure about whether use swagger or iodocs and wanted to be sure i was not missing something that may already exist for clojure |
| 17:50 | jcromartie | I think they're all kind of silly actually |
| 17:52 | jcromartie | I'd rather just see some good human writing. |
| 17:52 | jcromartie | because Swagger et al just always seem to end up with some quirk in the API that can't be expressed easily |
| 17:55 | devlol | jcromartie: true, however i think having doc in sync with routes definition can be really useful especially if you are in a small team |
| 17:55 | jcromartie | yes, definitely |
| 17:58 | qz | amalloy: flatland utils worked like charm for thread locals, thanks :) |
| 17:58 | Raynes | You're welcome. |
| 18:04 | TimMc | hyPiRion: Nice. That looks compilable, too. |
| 18:05 | devlol | jcromartie: thank you for your response :) |
| 18:05 | hyPiRion | TimMc: Now we can preach the power of Swearjure to everyone |
| 18:05 | hyPiRion | I wonder if I ever get to the point where I implement Dijkstra's algorithm in Swearjure. |
| 18:06 | TimMc | hyPiRion: I bet that whole thing could be modified to emit a fn instead of taking hardcoded input. |
| 18:06 | TimMc | That's the real blocker to adoption, I'm sure of it. |
| 18:07 | hyPiRion | TimMc: I'm all ears. How do you do it? |
| 18:07 | hyPiRion | The #()'s inside a #(), I mean. |
| 18:08 | TimMc | Well, this problem doesn't require a general-case partial. |
| 18:08 | TimMc | I don't have a technique yet, just a hunch. |
| 18:08 | hyPiRion | I'll have a look after some way of getting partial and apply as well. I need it for my mapv. |
| 18:33 | rodnaph | core.logic question - i tried doing (dec x) which i didn't expect to work and didn't - but not sure where to look to explore where to go next - is this anything to do with the fd namespace? |
| 18:43 | TimMc | hyPiRion: OK, maybe not. :-) |
| 18:44 | hyPiRion | TimMc: :'( |
| 18:45 | hyPiRion | This is getting a bit hairy. |
| 18:45 | hyPiRion | Oh well. |
| 18:45 | TimMc | The central problem is that of binding. |
| 18:47 | hyPiRion | Indeed. I have just 12 functions in this qsort, so even larger problems may be hairy. |
| 18:48 | hyPiRion | I think the main concern is that of function literals inside function literals. |
| 18:48 | TimMc | There's probably some combinator that would provide the necessary currying, but I can't imagine that the combinator could be written without function nesting. |
| 18:49 | hyPiRion | TimMc: Have you looked at the #= macro? |
| 18:49 | hyPiRion | I couldn't manage to make anonymous functions with it. |
| 18:49 | hyPiRion | But maybe there's some loophole |
| 18:52 | hyPiRion | OH |
| 18:53 | hyPiRion | #= resolves symbols, i.e. #=(+ 1 2) takes the actual symbol and resolves it. |
| 18:53 | hyPiRion | If we could just prepare a form to #= and let it read it, we could use apply and concat. |
| 18:54 | TimMc | Interesting, but the call-position has to be a literal symbol. |
| 18:54 | hyPiRion | Yeah, that's the problem. Hmm. |
| 18:54 | TimMc | #=((or + *) 1 2) ;; ClassCastException clojure.lang.PersistentList cannot be cast to clojure.lang.Symbol |
| 18:55 | hyPiRion | Same for `[#=~(prepare-form)]. |
| 18:55 | TimMc | ...and we don't have read, anyway |
| 18:56 | TimMc | I think "(" is the only valid follower of #=. |
| 18:56 | TimMc | You can |
| 18:56 | TimMc | You can't unquote into the readerm anyhow. |
| 18:57 | hyPiRion | Yeah, true. |
| 18:57 | TimMc | Oh, we can get various chars, by the way. |
| 18:57 | hyPiRion | Oh? |
| 18:57 | TimMc | ,[\+ \ \"] |
| 18:57 | clojurebot | [\+ \space \"] |
| 18:58 | hyPiRion | Well, space looks interesting. |
| 18:58 | TimMc | We don't have str, int, or char. :-/ |
| 18:58 | hyPiRion | We don't have much, do we. |
| 19:01 | TimMc | ,#!/bin/bash |
| 19:01 | clojurebot | #<ExecutionException java.util.concurrent.ExecutionException: java.lang.RuntimeException: EOF while reading> |
| 19:02 | hyPiRion | ,;;what |
| 19:02 | clojurebot | #<ExecutionException java.util.concurrent.ExecutionException: java.lang.RuntimeException: EOF while reading> |
| 19:02 | hyPiRion | It expects a value before comments/"eof" I suppose |
| 19:04 | TimMc | ,(. #"" '"test") |
| 19:04 | clojurebot | #<IllegalArgumentException java.lang.IllegalArgumentException: No matching method found: quote for class java.util.regex.Pattern> |
| 19:04 | TimMc | Bleh. |
| 19:04 | TimMc | That "would have worked" in Java. |
| 19:06 | TimMc | ,'(. #"some-regex" '"test") ;; for clarity |
| 19:06 | clojurebot | (. #"some-regex" (quote "test")) |
| 19:06 | hyPiRion | Humm |
| 19:07 | hyPiRion | I thought that was static |
| 19:07 | TimMc | It is. |
| 19:08 | TimMc | Java will allow "new Pattern(...).quote(...)". |
| 19:08 | hyPiRion | Weird. |
| 19:09 | hyPiRion | Maybe it's for uncompiled patterns |
| 19:09 | TimMc | What, quote? |
| 19:09 | amalloy | TimMc: you can refer to static members non-statically if you want |
| 19:10 | hyPiRion | Wait. Hrm. |
| 19:10 | amalloy | (in java, not the jvm) |
| 19:10 | TimMc | amalloy: So Java translates someRegex.quote("") into Patter.quote("")? |
| 19:10 | TimMc | *Pattern |
| 19:10 | hyPiRion | That makes sense. |
| 19:10 | amalloy | javac does that, yes |
| 19:10 | hyPiRion | TimMc: Try out ((Pattern) null).quote(...) |
| 19:11 | amalloy | i presume it still produces someRegex and then throws it away, in case of side effects |
| 19:11 | TimMc | Ah, sure. |
| 19:11 | TimMc | Well, I'll sleep on it. |
| 19:11 | Raynes | Sleep!?!?!111! |
| 19:12 | Raynes | It's only 4:12PM! |
| 19:12 | Raynes | It's awesome how quickly I stop caring about my old timezone after I've moved to a different one. |
| 19:12 | hyPiRion | Raynes: 1:12 am here. |
| 19:12 | cbp | hi |
| 19:13 | hyPiRion | Raynes: But you were up very late for some weeks ago for your timezone, I think? |
| 19:13 | Raynes | I was always up late for my timezone, hyPiRion. |
| 19:13 | Raynes | I used to go to sleep at 7AM. |
| 19:13 | cbp | Is there a sqrt function around that returns a BigDecimal? |
| 19:13 | Raynes | Now I have to get up at like 8:45AM. It's ruthless, this. |
| 19:13 | callenbot | Raynes: I wake up at 6:30 am so I can commute for 1:45 each way. |
| 19:13 | yedi | i'm starting a webapp in clojure, how should I go about getting up to speed w/ clojure on the web? my plan is to checkout the compojure and ring docs/tuts, but if anyone knows of other great resources lemme know |
| 19:14 | callenbot | Raynes: fuck you man :( |
| 19:14 | callenbot | I figured out my request context thingy I wanted. |
| 19:14 | Raynes | callenbot: Yeah, I'll probably have to get up earlier if they move the office. I already have to take a 40 minute or so bus. |
| 19:14 | callenbot | it's a dynamic var of an atom of a map. |
| 19:14 | callenbot | Raynes: that's pretty bad for most people actually. |
| 19:14 | Raynes | callenbot: Any new music for me? I'm sitting in the office jamming in the corner. |
| 19:14 | cbp | or more like a nicely precise sqrt function |
| 19:16 | callenbot | Raynes: http://toogl.es/#/view/VeU5bM_ccXo |
| 19:16 | hyPiRion | cbp: http://stackoverflow.com/questions/1384919/are-there-libraries-for-square-root-over-bigdecimal |
| 19:16 | hyPiRion | So apparently it's uglier than I suspected. |
| 19:16 | Raynes | callenbot: What is this crap? |
| 19:16 | callenbot | Raynes: the closest thing I could find to Firefly-esque music. |
| 19:17 | callenbot | Raynes: want some unicorn rainbows instead? |
| 19:17 | Raynes | No, I meant this website. |
| 19:17 | callenbot | Raynes: angularjs magick. |
| 19:17 | cbp | thank you |
| 19:19 | callenbot | also I need to remember to run the type-hinted laser results and integrate them into the test results. |
| 19:19 | callenbot | Raynes: don't let me forget ^^ |
| 19:20 | callenbot | Raynes: what did you see when you ran them? |
| 19:20 | tmciver | callenbot: what's the video from? |
| 19:20 | Raynes | Uh, I can't remember. It was a little faster, callenbot. |
| 19:30 | callenbot | tmciver: I didn't pay any attention to that bit. I just wanted the music. |
| 19:31 | callenbot | Raynes: cool, I'll post the results tonight. |
| 19:31 | tmciver | Ah, looked kinda cool. |
| 19:31 | tmciver | I was especially interested because you mentioned Firefly. |
| 19:32 | callenbot | tmciver: I think the movie is Final Fantasy or something. |
| 19:32 | Raynes | I guess I should watch that show. |
| 19:32 | callenbot | Raynes: firefly is godly. |
| 19:32 | tmciver | callenbot: yeah, looks like it. |
| 19:32 | Frozenlock | Raynes: yes, do it. |
| 19:32 | callenbot | Raynes: I don't even like TV usually and Firefly was worth every minute. |
| 19:32 | Frozenlock | And then the movie. |
| 19:32 | Raynes | I saw one episode. |
| 19:32 | tmciver | Yes! Best Sci-Fi TV show to be cancelled after one season, ever! |
| 19:32 | ohpauleez | You have to stick with it |
| 19:32 | Raynes | It was kind of meh. |
| 19:32 | ohpauleez | watch them in order |
| 19:33 | ohpauleez | then the movie |
| 19:33 | Raynes | I've never watched a show out of order. Except for Family Guy and such. |
| 19:33 | tmciver | Raynes: you watch your mouth! |
| 19:33 | ohpauleez | then you'll be like, "now I understand" |
| 19:33 | Raynes | But yeah, I'll watch the rest. |
| 19:33 | Raynes | I wasn't turned off by the first episode or anything, I just never got around to watching the rest. |
| 19:33 | ohpauleez | Doctor Who is the same way - you need to stick with it, and watch it in order |
| 19:33 | ohpauleez | but then you totally get it |
| 19:34 | Raynes | Doctor Who <3 |
| 19:34 | Frozenlock | ohpauleez: I was dissapointed but the last seasons... |
| 19:34 | Raynes | Frozenlock: you watch your mouth! |
| 19:34 | ohpauleez | Frozenlock: I haven't seen the MOOOOST recent ones |
| 19:34 | Frozenlock | *by the last seasons |
| 19:34 | Frozenlock | I guess I'm not fond of the new doctor. |
| 19:35 | seangrove | Frozenlock: No one ever is |
| 19:35 | seangrove | I don't even watch Doctor Who and I know that |
| 19:35 | Raynes | I love Matt Smith. |
| 19:36 | Raynes | So your argument is invalid. |
| 19:37 | Frozenlock | At least he has a bow tie. Bow ties are cool. |
| 19:37 | Frozenlock | I also want to critique how they overused the weeping angels. |
| 19:51 | imeredith | Frozenlock: i really liked the new doctor - i thought that it would suck without David Tenant, but Matt Smith is better imo |
| 19:52 | callenbot | Raynes: http://toogl.es/#/view/0Q35mUz2TOY Listen to a song about Elizabeth Bathory now. |
| 19:54 | Frozenlock | imeredith: but what about Christopher Eccleston? :P |
| 19:54 | imeredith | i had the same feelings when he left, but he was the worst :P |
| 19:54 | combataircraft | what is the clojure equivalent of socket.io? |
| 19:55 | technomancy | it wasn't fair to Smith to make him follow Tennant |
| 19:55 | imeredith | Amy and Rory have been the best companions so far too |
| 19:55 | Raynes | technomancy: That's true. |
| 19:56 | imeredith | technomancy: idk, i think it would have been worse for Tennant to follow Smith... |
| 19:59 | combataircraft | any ideas? |
| 19:59 | technomancy | combataircraft: what is it? |
| 19:59 | Raynes | $google socket.io |
| 19:59 | lazybot | [Socket.IO: the cross-browser WebSocket for realtime apps.] http://socket.io/ |
| 20:00 | combataircraft | it's a cool NodeJS library that simplifies real-time communication between server and browser |
| 20:00 | ivan | combataircraft: http://thegeez.net/2012/04/03/why_browserchannel.html |
| 20:01 | ivan | Socket.IO et al will lose/reorder data |
| 20:01 | combataircraft | oh, come on… |
| 20:02 | ivan | feel free to think about its HTTP transport for 5 minutes |
| 20:06 | Frozenlock | ivan: for someone who isn't very literate in these communication stuff, what's the difference between clj-browserchannel and fetch? |
| 20:07 | ivan | Frozenlock: I don't think fetch can push some data from the server to the client |
| 20:08 | Frozenlock | Oh! No I don't think so. Or at least I didn't see anything to do so. |
| 20:08 | hiredman | amalloy: the "140KB of Clojure source!" made me chuckle |
| 20:08 | ivan | (the basic trick to that is keeping an HTTP request open until the server has something to respond with, and the fun part is setting up reliable message queues and ACKs on both sides) |
| 20:09 | ivan | BrowserChannel has already implemented everything |
| 20:09 | amalloy | hiredman: given clojure's density, that's probably enough to rewrite chrome from the ground up |
| 20:09 | hiredman | reason number 64 I refuse to look at midje |
| 20:10 | callenbot | hiredman: sorry? |
| 20:10 | callenbot | hiredman: I'm not familiar with midje, what don't you like about it? |
| 20:10 | amalloy | hiredman: is the 78MB git-clone reason 63 or 65? |
| 20:11 | hiredman | amalloy: it's in there somewhere |
| 20:12 | amalloy | i shouldn't poke fun, though. midje isn't really my style, but i suspect it's pretty cool if you're into that sort of thing |
| 20:12 | hiredman | #1 is the guy who wrote is constantly hitting these kind of issues, can never figure them out, and goes to the clojure mailing list with "what is going on?" |
| 20:12 | technomancy | running the tests on load is =( |
| 20:12 | Raynes | Laser's tests use midje. Just cuz. |
| 20:12 | Raynes | technomancy: Well, you can wrap them in deftests if you want. |
| 20:12 | hiredman | you'd think after the second time he would have stopped and learned some clojure/jvm internals |
| 20:13 | technomancy | also: macros and dynamic binding over simple things like with-redefs |
| 20:14 | hiredman | to steal a turn of phrase from technomancy: it's clown shoes |
| 20:14 | technomancy | callenbot: the biggest reason though is just that you can do so much with only learning 2 forms from clojure.test, and anything that adds additional concepts on top of that should have to pay significant dividends for additional conceptual overhead |
| 20:15 | callenbot | technomancy: it did seem like an awful lot of code. |
| 20:15 | hiredman | running tests are load is horrible, I wasn't aware it did that |
| 20:15 | callenbot | technomancy: I'm not convinced clojure.test isn't fine. OTOH, I'm one of those Python people that like unittest/unittest2 fine. |
| 20:15 | technomancy | relevant: http://technomancy.us/118 |
| 20:16 | amalloy | hiredman: that's just a bad convention, at least, and not an actual requirement. he just has (fact ...) instead of (deftest foo (fact ...)) like any sane person would recommend |
| 20:16 | callenbot | technomancy: this is fucking sweet, thans. |
| 20:16 | callenbot | technomancy: I've made a lot of progress in hacking up web apps in Clojure. I'm beginning to settle on a micro-framework |
| 20:17 | callenbot | technomancy: thanks for posting bludgeon, I like it. |
| 20:17 | callenbot | technomancy: this is actually a good sanity checker for libraries. |
| 20:18 | technomancy | it's really not, but it does make a point |
| 20:18 | Raynes | technomancy: You're getting more cynical than I am, I think. |
| 20:19 | technomancy | Raynes: heh, that post was from 2008 |
| 20:19 | Raynes | technomancy: I was referring to the message right before I said that. |
| 20:19 | Frozenlock | Does one get more, or less cynical with time? |
| 20:19 | technomancy | ...which is right around the time I stopped doing ruby, actually. hm. |
| 20:19 | abp | callenbot: will your micro-framework be released? |
| 20:19 | technomancy | Raynes: well, I mean it's a joke. |
| 20:20 | ivan | would anyone but me have a use for a thing that made it easy to turn Clojure output into org-mode trees? I've often had a need for something as simple as stdout but with collapsible trees. (The annoying part is getting streaming output working) |
| 20:20 | technomancy | you have to think about conceptual overhead vs value provided, and I don't think either can be measured with `wc -l` |
| 20:20 | gfredericks | has somebody mentioned running bludgeon on itself yet? |
| 20:21 | technomancy | gfredericks: probably not since 2008 |
| 20:21 | Frozenlock | ivan: org-mode trees? Like: *title 1 **subtitle1 and such? |
| 20:21 | gfredericks | oh I didn't realize this wasn't new |
| 20:21 | gfredericks | no wonder it's about ruby |
| 20:21 | ivan | Frozenlock: right. the idea is that you could look through a big pile of output with a lot less pain |
| 20:23 | qz | technomancy: you stopped doing ruby completely, or just switched to clojure for some tasks? |
| 20:23 | technomancy | qz: I still use ruby for small things |
| 20:23 | technomancy | things under the bludgeon threshold =) |
| 20:23 | technomancy | but it's only recently that I've needed it again |
| 20:23 | qz | technomancy: but for all web stuff you use clojure now? |
| 20:23 | Frozenlock | I see how this could be usefull for maps. But I'm not sure I would take the time to transfer them into a new buffer. But something like it in the repl would be amazing. (with-fold my-map) ----> {:key1 ... \n :key2 ...} |
| 20:23 | technomancy | I don't really do much web stuff |
| 20:24 | technomancy | just clojars and syme really |
| 20:24 | ivan | Frozenlock: yeah, I'll have to do something horrible with nrepl.el |
| 20:25 | Frozenlock | ivan: If it's worth something, you have my whole moral support to implement something like this :P |
| 20:25 | ivan | cool :) |
| 20:25 | qz | technomancy: nice, now i know how proper web app in clojure looks like |
| 20:25 | hyPiRion | TimMc: All hail the quicksort: https://www.refheap.com/paste/15a076693ba66105e21b44a1c |
| 20:25 | gfredericks | clojars: a proper web app. |
| 20:26 | Frozenlock | ivan: actually I just made code to convert a java object into a map. Only problem is when I print it in the repl it's often too big. Folding it would be perfect. |
| 20:26 | technomancy | qz: it's pretty good considering its age. we're in a bit of an awkward point right now transitioning between data stores, so it's not as clean as it could be |
| 20:27 | yedi | is jdbc pretty much the standard for db manipulation (i'll be using postgresql most likely) |
| 20:27 | hyPiRion | Okay, give me a month and I'll make Dijkstra in Swearjure. Better be good. |
| 20:27 | gfredericks | yedi: meaning clojure.java.jdbc the contrib lib? |
| 20:27 | yedi | yea, it's a contrib lib? |
| 20:28 | qz | gfredericks: what do you think about korma for sql stuff? |
| 20:28 | yedi | so i guess that means it's basically standard or at teh very least a really great api |
| 20:28 | technomancy | it's not really a shining example of a great API |
| 20:28 | technomancy | but it is widely used |
| 20:28 | technomancy | I think there's a rewrite on a branch |
| 20:28 | technomancy | (of the API at least) |
| 20:29 | gfredericks | qz: I think lots of conflicting things |
| 20:29 | craigbro | hehe |
| 20:29 | technomancy | ^ talking about c.j.jdbc |
| 20:30 | yedi | qz: korma is another popular option? have you used it and if so how'd you like it? |
| 20:32 | qz | yedi: it works and i like the api, but again, i'm new to clojure and we should listen to more experienced people here ;) |
| 20:33 | gfredericks | hyPiRion: "Practical Swearjure"? |
| 20:33 | yedi | just found this: https://github.com/korma/Korma/issues/62 |
| 20:34 | hyPiRion | gfredericks: Yeah, you can use Quicksort to sort a vector. |
| 20:34 | hyPiRion | If that isn't practical then I don't know. |
| 20:34 | gfredericks | technomancy: my favorite is #64: "Korma is not simple." |
| 20:34 | gfredericks | yedi: ^ meant that for you |
| 20:34 | gfredericks | technomancy: ^ did not mean that for you. carry on. |
| 20:34 | technomancy | gfredericks: zarro boogs found |
| 20:35 | gfredericks | hyPiRion: I just meant it sounds like a book you're working on |
| 20:35 | hyPiRion | gfredericks: Do you think it will sell well? |
| 20:36 | hyPiRion | I believe a lot of corporations would enjoy using Swearjure as their back-end connecting to their database |
| 20:36 | yedi | oh korma is built on top of jdbc |
| 20:36 | gfredericks | hyPiRion: yes it will sell quite well |
| 20:37 | hyPiRion | It sounds like Korma is built on top of Swearjure by all the bashing of it |
| 20:37 | qz | technomancy: but again, writing raw sql becomes boring very soon. what are alternatives besides jdbc? |
| 20:37 | hyPiRion | gfredericks: Excellent, I'll start writing today. |
| 20:37 | technomancy | qz: if you don't want to write raw SQL you should use Korma or implement something new based on honeysql |
| 20:38 | yedi | honeysql looks tasty |
| 20:38 | qz | technomancy: i just got used to activerecord for simple db stuff :( |
| 20:38 | xeqi | super alpha https://github.com/seancorfield/jsql |
| 20:39 | yedi | it's interesting to see the different API approaches |
| 20:40 | abp | xeqi: that seems to be in there too: https://github.com/clojure/java.jdbc/blob/master/src/main/clojure/clojure/java/jdbc/sql.clj |
| 20:40 | xeqi | abp: ah, hadn't looked at the latest c.j.jdbc |
| 20:41 | xeqi | I saw the ml post where the dynamic vars are no longer required |
| 20:41 | abp | xeqi: for now it looks strange with all the = for everything. |
| 20:44 | qz | technomancy: are you gonna migrate from korma in clojars? |
| 20:45 | technomancy | qz: yeah, our data set is trivial, so it's not a good fit for SQL at all |
| 20:45 | technomancy | we are switching to two in-memory atoms and a lucene index |
| 20:45 | qz | technomancy: migrate to.. ? |
| 20:45 | qz | oh |
| 20:46 | qz | so everything that persists will be stored in lucene? |
| 20:46 | technomancy | users/groups will just be in the atom and event logs |
| 20:47 | technomancy | deployed artifacts will be in lucene |
| 20:47 | technomancy | https://groups.google.com/group/clojars-maintainers/browse_thread/thread/8ea301d80b95a78c |
| 20:48 | yedi | if paredit-mode for emacs is working correct, i shouldn't be able to delete closing parens right? and typing an open paren should automatically close it? |
| 20:48 | xeqi | technomancy: I seem to remember it might need to be three atoms, but I forget why off hand |
| 20:49 | technomancy | xeqi: there are three event logs |
| 20:49 | technomancy | but I don't think deploys need to be queried outside lucene |
| 20:51 | yedi | oh, i guess paredit doesn't automatically turn on when you open a new buffer |
| 20:54 | qz | wish there was paredit for vim that's not horribly broken.. |
| 20:54 | Raynes | qz: I didn't have trouble with it when I used it. What's wrong with it? |
| 20:54 | xeqi_ | technomancy: artifact pages for old version wouldn't be in lucene :/ |
| 20:55 | qz | Raynes: i had problems with <leader>W (it just does W w/out leader) and some other keybindings |
| 20:56 | qz | worst of it is that it doesnt work, then you type it again and it works.. |
| 20:56 | amalloy | https://github.com/clojure/clojure/commit/974a64c06917861b7557fd73154254195b2de548 for anyone who isn't watching the read-eval jira ticket |
| 20:57 | Raynes | omg |
| 20:57 | qz | and last thing was trying to do <leader>W on "blah" with cursor on first quote.. ("blah") as result ? nooo.. (")blah" |
| 21:03 | bttf | anyone had their cljs repl hang on them ? i'm using lein-cljsbuild 0.3.0 |
| 21:04 | Frozenlock | bttf: what do you mean 'hang on them'. Sometimes (not often) the REPL stop responding. If I look in the js console there's an usually an error from a bad command I entered. |
| 21:06 | bttf | well i started a repl server with repl-listen |
| 21:06 | bttf | did a simple (+ 2 2) and it hung |
| 21:06 | bttf | (+ 2 2) on the cli |
| 21:06 | clojurebot | 4 |
| 21:09 | bttf | i see an error with the GET request in the js console on the webpage that im trying to connect to the repl ... maybe its related |
| 21:11 | Frozenlock | bttf: You can try to reload the page. Also make sure the repl/connect function is used only after the page is loaded. |
| 21:12 | tuor | dauterive: Are you Val who used to work at BNR/Nortel? |
| 21:13 | technomancy | xeqi: oh, those can just hit the disk straight |
| 21:13 | technomancy | oh, but not the listing |
| 21:14 | ChongLi | what sort of data structure would be best at representing the current value of the keyboard? |
| 21:14 | ChongLi | I was previously using a set |
| 21:14 | georgek | hi, I'm getting a ConcurrentModificationException because I'm removing an element from a Java Set while iterating over it -- the Java HashSet has a remove method (which I'm using) but perhaps Clojure is putting some other iterable in between that's making it not work, or...? |
| 21:14 | ChongLi | but I think I need something else to take into account weird contradicting keys |
| 21:14 | georgek | I'm doing it in a doseq |
| 21:15 | technomancy | xeqi: I think we might just have to change the index to have a latest? y/n field |
| 21:15 | technomancy | along with a published_at field |
| 21:23 | amalloy | georgek: that's just as illegal in java as what you're doing in clojure. iterators specifically tell you not to do that |
| 21:24 | amalloy | if you really, really want to remove items from a set while you iterate it (hint: you don't), you have to use the iterator's .remove method |
| 21:25 | ChongLi | is there a data structure which acts like a stack and a set? |
| 21:25 | georgek | amalloy: that's the funny thing, I am using the .remove method on HashSet, which says " if the set is modified at any time after the iterator is created, in any way except through the iterator's own remove method, " -- so I need to get an iterator of the hashset first |
| 21:27 | georgek | ah, I see, I just need iterator() -- sorry for the noob question |
| 21:27 | georgek | this is also a good explanation, http://tech.puredanger.com/2009/02/02/java-concurrency-bugs-concurrentmodificationexception/ |
| 21:27 | ChongLi | hmm I guess I should just use a list |
| 21:28 | georgek | chongli: maybe an ordered set? |
| 21:28 | ChongLi | well there's a sorted set |
| 21:28 | ChongLi | but I want it sorted like a stack |
| 21:28 | amalloy | ChongLi: the best stack+set duo that i know of is a stack and a set glued together |
| 21:29 | ChongLi | first in last out |
| 21:29 | ChongLi | it's designed to handle keyboard input in an annoying complex way |
| 21:29 | ChongLi | the question I keep banging my head into a wall over is what happens when you press left and right at the same time? |
| 21:30 | ChongLi | I don't think it should cancel out |
| 21:31 | ChongLi | it should always be moving in some direction, allowing you to switch from left to right without stopping in between |
| 21:31 | ChongLi | except when no keys are down |
| 21:32 | georgek | what are you using to get input? |
| 21:32 | ChongLi | flapjax |
| 21:32 | ChongLi | (F/extractEventE js/window "keydown") |
| 21:32 | ChongLi | eetc. |
| 21:33 | ChongLi | merging it all into one event stream that produces a simple value of the keyboard at that moment |
| 21:35 | ChongLi | perhaps this is the wrong approach altogether |
| 21:35 | ChongLi | hmm |
| 21:40 | georgek | when I ask for an iterator() for the HashSet and then do the modification, I then get " Don't know how to create ISeq from: java.util.HashMap$KeyIterator clojure.lang.RT.seqFrom (RT.java:494)" |
| 21:41 | georgek | so what is a better idea -- iterate over a copy of the HashSet? |
| 21:43 | Frozenlock | ChongLi: I used sets. Not that it should be used as an example. https://github.com/Frozenlock/zyzanie |
| 21:43 | xumingmingv | &(.iterator (hash-set 1 2)) |
| 21:43 | lazybot | ⇒ #<SeqIterator clojure.lang.SeqIterator@127a744> |
| 21:43 | ChongLi | how does this handle left and right at the same time? |
| 21:44 | ChongLi | I guess that doesn't really make sense in emacs |
| 21:44 | amalloy | georgek: same way as anything else in clojure: don't mutate things. compute a new set by applying a pure function to the old set, and then use the new one |
| 21:44 | Frozenlock | ChongLi: Let me try that... |
| 21:47 | tomoj | I think an ordered set makes sense |
| 21:47 | tomoj | why do you say LIFO? doesn't the order in which the keyups arrive determine the order in which elements are removed? |
| 21:48 | ChongLi | tomoj: you're right |
| 21:49 | ChongLi | so what order should the set be in? |
| 21:49 | Frozenlock | ChongLi: Interesting... doesn't work :/ I'll have to correct this bug. |
| 21:50 | ChongLi | for this example sequence of events: keydown "left" -> keydown "right" -> keyup "left" -> keyup "right" |
| 21:50 | tomoj | #{} #{:left} #{:left :right} #{:right} #{} |
| 21:50 | tomoj | ordered set could implement IPersistentStack so peek would be the most recent key |
| 21:50 | ChongLi | yeah I get that part |
| 21:51 | tomoj | (I meant those as ordered sets) |
| 21:51 | ChongLi | what I want to know is what direction will be resolved during each step of that sequence |
| 21:51 | ChongLi | I don't want contradicting keys to cancel out |
| 21:52 | ChongLi | this allows you to chord from left to right without stopping in the middle |
| 21:52 | ChongLi | or having some weird reversal of direction |
| 21:52 | tomoj | doesn't peek give you the direction you want on the events above? |
| 21:53 | ChongLi | let me try |
| 21:53 | tomoj | ..assuming it returns the last element of the ordered set, the most recent key |
| 21:53 | dnolen | core.logic protocols/interface finally moved into their own namespace, hacking on core.logic should now be less tedious |
| 21:59 | ChongLi | I think I'll just use a list and just use contains? to prevent duplicates |
| 21:59 | ChongLi | is that idiomatic? heh |
| 22:00 | tomoj | use contains?, on a list? |
| 22:00 | ChongLi | why not? |
| 22:00 | dnolen | ChongLi: contains? only works on associative data structures |
| 22:01 | tomoj | &(contains? '(1 2 3) 2) |
| 22:01 | lazybot | ⇒ false |
| 22:01 | ChongLi | hmm |
| 22:01 | ChongLi | guess I have to use some |
| 22:03 | ChongLi | yeah this works really well |
| 22:03 | ChongLi | some and remove |
| 22:04 | ChongLi | I'm still using sets though (for the predicate) :) |
| 22:05 | S11001001 | ChongLi: sorted maps pointing to constant values are sorted sets |
| 22:05 | ChongLi | I'm not sure I follow |
| 22:05 | ChongLi | I want a set that preserves insertion order |
| 22:07 | piranha | Frozenlock: speaking about key bindings handling, I recently wrote JS lib for that and instead of binding to elements I choose the way of manually enabled namespaces. I was really determined to do former, but then experience turned out to be that in my case context of key bindings has changed, but focus is somewhere not on the actual nested element (i.e. in menu, where you just switched a tab or something). I'm not sure what I'm trying to te |
| 22:07 | piranha | ll, just sharing experience. :) |
| 22:08 | Frozenlock | piranha: what do you mean manually enabled namespaces? |
| 22:09 | Frozenlock | Oh you just missed what I asked didn't you... |
| 22:09 | Frozenlock | piranha: what do you mean manually enabled namespaces? |
| 22:09 | piranha | Frozenlock: https://github.com/piranha/keymage#scopes |
| 22:09 | piranha | no, I somehow got it :) |
| 22:10 | S11001001 | ChongLi: ah |
| 22:10 | tomoj | ChongLi: right, an ordered set |
| 22:10 | tomoj | https://github.com/flatland/ordered |
| 22:10 | Frozenlock | piranha: What is chat, if not an element? |
| 22:10 | tomoj | no cljs though :( |
| 22:10 | ChongLi | yeah I'm on cljs |
| 22:10 | tomoj | I'll port it someday |
| 22:10 | piranha | Frozenlock: just an arbitrary chosen name for a scope |
| 22:11 | piranha | Frozenlock: so let's imagine I have multiple sections in my application, and I can switch between them (it's a single-page app), then when I go to chat, I call setScope('chat') |
| 22:11 | piranha | and when I go to contact list management, I call setScope('contacts') |
| 22:11 | tomoj | as a stopgap for implementing an ordered set you could just write your own functions that work with a vector and set |
| 22:11 | tomoj | ordered-conj etc |
| 22:12 | Frozenlock | Isn't it the same as a container with "chat"? |
| 22:12 | Frozenlock | Oh I see, it could be divided into two parts in the page... |
| 22:12 | piranha | Frozenlock: and when in chat, if I press some 'search for a contact' button, I do pushScope('quicksearch'), which handles some shortcuts for this search |
| 22:12 | ChongLi | using a list with some, conj and remove seems to work well enough |
| 22:12 | piranha | Frozenlock: exactly! |
| 22:12 | ChongLi | some to guard against duplicate insertion |
| 22:12 | piranha | that was my problem with elements |
| 22:12 | piranha | when you switched with a mouse, your focus is not in the #chat, but in #menu |
| 22:12 | tomoj | yeah.. since the number of keys pressed will always be small |
| 22:13 | ChongLi | yeah it's not like I'm dealing with a long list |
| 22:13 | tomoj | a list could be faster than an ordered set anyway |
| 22:13 | ChongLi | yeah the constant factor with a list is fairly small |
| 22:13 | ChongLi | though I'm not sure how it works in cljs |
| 22:14 | Frozenlock | piranha: I dealt with the focus problem with this: https://github.com/Frozenlock/zyzanie/blob/master/src/zyzanie/core.cljs#L295 |
| 22:15 | Frozenlock | piranha: I'm not really sure I understand your problem with chat VS menu however :P |
| 22:17 | piranha | Frozenlock: <ul id="menu"><li data-tab="chat">chat</li></ul><div id="tabs"><div id="chat"></div></div> - your focus is in #menu, since you just clicked 'chat' li. Your shortcuts, which are bound to #chat, won't work. |
| 22:17 | piranha | that was my main problem |
| 22:19 | Frozenlock | piranha: ah ok. What did you do? Manually changed the focus when pressed a tab? |
| 22:21 | piranha | argh, my connection is abysmal |
| 22:21 | Frozenlock | from 1 min ago: |
| 22:21 | Frozenlock | piranha: ah ok. What did you do? Manually changed the focus when pressed a tab? |
| 22:21 | piranha | Frozenlock: well, I just do keymage.setScope('chat') there :) |
| 22:21 | piranha | I really don't want to play with focus :)) |
| 22:22 | piranha | so all my shortcuts are global, but then application switches scopes when it needs to |
| 22:24 | Frozenlock | I like that. Stealing focus was really a dirty hack on my part. |
| 22:24 | Frozenlock | In fact the whole lot is a dirty hack from when I was learning cljs (without ever touching JS). |
| 22:25 | xeqi | amalloy: the whitelist in the read-eval change allows you to remove namespaces :/ |
| 22:28 | xeqi | hmmm, what inherits from clojure.lang.Fn? |
| 22:30 | dnolen | read eval fix from rhickey - http://github.com/clojure/clojure/commit/974a64c06917861b7557fd73154254195b2de548, http://github.com/clojure/clojure/commit/38a129f2631a75ed999b52d8e0440f730b00da1f |
| 22:31 | ChongLi | yay! |
| 22:32 | dnolen | and fixes to support flexvec in 1.5.0, hells yeah! |
| 22:32 | Frozenlock | \o/ |
| 22:32 | ChongLi | some weird commit message |
| 22:32 | ChongLi | doesn't seem related! |
| 22:33 | ChongLi | I guess github abbreviates it |
| 22:33 | ChongLi | ah yeah |
| 22:34 | ChongLi | this is basically a must if we're going to be able to trust edn right? |
| 22:35 | ChongLi | otherwise users could stick arbitrary clojure code in there and it'd be eval'd? |
| 22:35 | Frozenlock | If you read it. |
| 22:36 | technomancy | you can fix the default yourself without this |
| 22:36 | technomancy | technically this just helps catch cases where you forgot to rebind it when reading user data |
| 22:36 | xeqi | I actually think this commit is bad |
| 22:36 | ChongLi | why? |
| 22:36 | clojurebot | ChongLi: because you can't handle the truth! |
| 22:37 | technomancy | but since the consequences of getting it wrong are so bad and the likelihood of actually realizing it if you did make that mistake, the default matters all the more |
| 22:37 | dnolen | technomancy: the patch actually fixes more - classForName via the read no longer loads classes. |
| 22:37 | dnolen | (I think) |
| 22:37 | xeqi | with that patch (read-string "#=(clojure.lang.Namespace/remove user)") will remove the namespace |
| 22:37 | xeqi | testing it for more holes atm |
| 22:38 | ChongLi | did you look further down? |
| 22:38 | ChongLi | #= has been changed |
| 22:38 | ChongLi | to include a quote |
| 22:38 | xeqi | I typed it into a 1.5.0-RC5 |
| 22:38 | ChongLi | #=" |
| 22:38 | technomancy | oh, I haven't read the patch |
| 22:38 | xeqi | which is on sonatype-oss with this commit |
| 22:39 | ChongLi | 1864 |
| 22:39 | ChongLi | - w.write("#="); 1870 |
| 22:39 | ChongLi | + w.write("#=\""); |
| 22:39 | ChongLi | gah, tabs |
| 22:41 | dnolen | xeqi: it's RC6 that has those commits |
| 22:43 | xeqi | dnolen: RC5 has https://github.com/clojure/clojure/commit/974a64c06917861b7557fd73154254195b2de548 |
| 22:43 | xeqi | but I missed the RC6 release |
| 22:43 | xeqi | pulling that now |
| 22:55 | ivan | nice find re: that hole |
| 22:58 | dnolen | xeqi: oh anything on the *read-whitelist* |
| 22:59 | xeqi | dnolen: yep, just send off to -dev |
| 22:59 | xeqi | *sent |
| 23:01 | dnolen | xeqi: yeah, seems like only find is really needed |
| 23:06 | yedi | this line throws an "Unparsable namespace form:" error -- (ns skateproj.db (:use korma.db)) |
| 23:09 | Frozenlock | ivan: I don't but I'm bound to forget it one day or another. |
| 23:16 | ivan | user> (ns skateproj.db (:use korma.db)) |
| 23:16 | ivan | CompilerException java.lang.ClassFormatError: Truncated class file, compiling:(clojure/java/jdbc.clj:299:3) |
| 23:19 | yedi | i just ran it in the repl (instead of lein ring server) and i got this instead: FileNotFoundException Could not locate korma/db__init.class or korma/db.clj on classpath: clojure.lang.RT.load (RT.java:432) |
| 23:20 | ivan | a repl started by lein repl? |
| 23:21 | amalloy | xeqi: the Collection and Map entries on the whitelist scare me way more than Namespace |
| 23:22 | xeqi | amalloy: why so? |
| 23:22 | amalloy | even using a non-classloading version of Class/forName there's got to be potential for invoking static methods on dangerous subclasses of Map |
| 23:23 | technomancy | a dos via Namespace/remove is a pretty serious improvement over arbitrary execution still =) |
| 23:23 | xeqi | technomancy: theres no workaround in RC6 tho |
| 23:25 | ivan | just have to bind *read-whitelist* too now |
| 23:25 | xeqi | amalloy: true, I was looking for a class with fun static methods earlier |
| 23:25 | ivan | the tribal knowledge expands |
| 23:25 | xeqi | ivan: ... your right |
| 23:25 | xeqi | thanks |
| 23:26 | xeqi | amalloy: the non-classloading version of Class/forname means no static initializer problems right? |
| 23:26 | yedi | ivan: nrepl in emacs |
| 23:26 | amalloy | probably, though i haven't looked at it |
| 23:27 | ivan | yedi: did you use nrepl-jack-in to start it? did it find the right project.clj? does that project.clj mention korma? |
| 23:28 | tomoj | is there a flexmap which supports fast merge? |
| 23:29 | xeqi | #=(var ..) looks dangerous, but would require some application code to help it |
| 23:29 | yedi | my project.clj has korma as a dependency |
| 23:30 | yedi | ivan: i did use nrepl-jack-in |
| 23:30 | yedi | not sure if it found the right project.clj, though i assume so |
| 23:31 | amalloy | xeqi: the application code would have to be explicitly setting *read-eval* to true, right? |
| 23:32 | amalloy | so i don't think there's any need to worry about that |
| 23:35 | ivan | nope, #=(var does things with *read-eval* false |
| 23:35 | xeqi | amalloy: even with false and RC6, using #=(var ..) causes it to return the resolved var; |
| 23:36 | xeqi | imagine someone expecting a map and doing (expected-map :x) |
| 23:43 | yedi | all the dependencies in project.clj get added to your classpath right? |
| 23:48 | mabes | anyone know of a command-line friendly debugger for clojure? |