2014-03-21
| 00:09 | blake | Hey all: I want to generate a sequence from one of a series of functions for guessing numbers. The functions are of the form "fn[lo hi]" and return a number between lo and hi. I want to create a sequence of the numbers returned, where the sequence ends when the value returned matches the number to be guessed. |
| 00:10 | blake | I know this is a noob question but...I'm a noob =P |
| 00:10 | blake | Should I just use loop? |
| 00:11 | beamso | http://clojuredocs.org/clojure_core/clojure.core/take-while ? |
| 00:11 | blake | Ahhh...thanks beamso. |
| 00:13 | beamso | not a problem |
| 00:16 | amalloy | blake: see also ##(doc iterate) |
| 00:16 | lazybot | ⇒ "([f x]); Returns a lazy sequence of x, (f x), (f (f x)) etc. f must be free of side-effects" |
| 00:17 | amalloy | you probably want to iterate over a pair of [hi lo], with a function that narrows it according to a guess |
| 00:19 | blake | amalloy: Yeah, it's putting all the pieces together that's getting me. |
| 00:20 | blake | take-while I get. But the examples don't have changing parameters to the function calls. |
| 00:22 | amalloy | blake: well, you can't with take-while. that's what iterate is for. the general structure is going to look like (take-while (complement successful-guess?) (iterate improve-guess [0 100])) |
| 00:23 | amalloy | where improve-guess takes a [hi lo] pair and returns a new [hi lo] pair by guessing something according to the strategy and seeing whether it was higher or lower |
| 00:23 | beamso | i didn't realise that the guessed values were being passed back into the function |
| 00:24 | blake | Right. That's how it knows to narrow it's guessing range. Also, one of the functions has a random element, so I have to make sure I'm not--getting into trouble there. |
| 00:25 | amalloy | heh. well, purity is nice, but a function that's impure because of randomness is going to be a lot easier than anything else here |
| 00:25 | amalloy | it's good to feel a little uncomfortable about it, though |
| 00:25 | blake | But how do I get the return from improve-guess to test for a successful guess? |
| 00:26 | amalloy | blake: you include that as part of improve-guess |
| 00:26 | blake | Yeah, I'm trying to get used to the whole super-high-level/super-low-level thing. |
| 00:28 | seangrove | I think I'm confused about core.async tap |
| 00:28 | technomancy | turing vertigo? |
| 00:28 | blake | Heh. Maybe. |
| 00:29 | seangrove | I have a channel, I pass it to (mult ...) (not sure what this does), then I can take the result of that and the channel and pass it as (tap (mult ...) my-ch) and I get back ... hrm, I'm not sure |
| 00:30 | seangrove | Ok, I think I need to create a local channel and then tap the mult result onto that |
| 00:31 | seangrove | Yup, that did it |
| 00:34 | sm0ke | how do i create a java class which behaves like a record in clojure? |
| 00:34 | amalloy | blake: if you want an example solution to look at, there's https://www.refheap.com/62676 |
| 00:35 | sm0ke | so class MyClass { private a; } , should behave like (:a (MyClass. 1)) => 1 |
| 00:35 | sm0ke | what class i need to extend/implement? |
| 00:36 | amalloy | to behave like a record? you have to do a lot of work. why don't you just do it in clojure, sm0ke? |
| 00:37 | sm0ke | amalloy: yea clojure record have some porblem with serialization |
| 00:37 | sm0ke | amalloy: is it really that hard? |
| 00:38 | ivan | I am going to email hotspot-compiler-dev@ about https://github.com/technomancy/leiningen/issues/1025 - does anyone want to be cc:'ed (especially people who know how the Clojure compiler works?) |
| 00:38 | amalloy | &(require 'clojure.reflect) |
| 00:38 | lazybot | ⇒ nil |
| 00:38 | amalloy | &(require 'clojure.reflect.java) |
| 00:38 | lazybot | ⇒ nil |
| 00:38 | amalloy | &(ancestors clojure.reflect.java.Constructor) |
| 00:38 | lazybot | java.lang.ClassNotFoundException: clojure.reflect.java.Constructor |
| 00:38 | amalloy | &(ancestors clojure.reflect.Constructor) |
| 00:38 | lazybot | ⇒ #{clojure.lang.IMeta clojure.lang.Seqable clojure.lang.Associative clojure.lang.IKeywordLookup clojure.lang.ILookup clojure.lang.IRecord clojure.lang.Counted java.lang.Object clojure.lang.IPersistentMap java.io.Serializable java.util.Map clojure.lang.IObj clojure.lan... https://www.refheap.com/62678 |
| 00:39 | amalloy | sm0ke: that's the list of interfaces you have to implement to really act like a record |
| 00:39 | sm0ke | :/ |
| 00:39 | sm0ke | hmmm IKeywordlookup is interesting |
| 00:39 | amalloy | but records are serializable, so i think that whatever problem you've found with actual records is imaginary |
| 00:40 | sm0ke | amalloy: https://github.com/nathanmarz/cascalog/issues/239 |
| 00:41 | blake | amallow: Thanks. I'm heartened that it looks a lot like the code I've written, the parts that I got working, anywya. |
| 00:41 | amalloy | blake: most IRC clients let you tab-complete other users' names. i can tell you don't know this because you spelled my nick wrong :) |
| 00:42 | amalloy | sm0ke: oh man. trying to do it in java makes that problem much much worse, not better |
| 00:42 | blake | amalloy: Aha. Another good tip! |
| 00:43 | amalloy | just do what the ticket suggests, and define your own serializers, or use a map instead of a record (good advice in general anyway) |
| 00:49 | sm0ke | Registering my own serializer implies writing another class in java |
| 00:49 | sm0ke | or using a gen class |
| 00:49 | sm0ke | which is equally gros |
| 00:51 | amalloy | well, it's gross that kryo makes you extend a class instead of implementing an interface, but you can use proxy instaed of gen-class |
| 00:52 | amalloy | just like https://github.com/revelytix/carbonite/blob/master/src/carbonite/serializer.clj#L28 does |
| 00:52 | sm0ke | amalloy: i dont know how ancient is that library you showed me, but i guess 100 years old? |
| 00:53 | amalloy | bro, you're the one trying to use it |
| 00:53 | amalloy | because cascalog uses it |
| 00:53 | sm0ke | amalloy: :) kryo has moved to esoteric also now there are just write and read methods |
| 00:54 | sm0ke | amalloy: also for registering you dont need to send instance just the serializing class |
| 00:55 | sm0ke | cascalog uses com.twitter/carbonite i guess |
| 00:56 | sm0ke | oh thats the confusion, when i search for carbnite i get this only which you send me |
| 01:01 | JavaIsAwful | 'night all |
| 01:02 | sm0ke | the dawn of Java |
| 01:02 | sm0ke | dusk? |
| 01:08 | TheMoonMaster | I've run into a bit of a snag, I have a socket connection that I'd like to be available everywhere since that's probably a lot cleaner than passing it around everywhere. How can I do that without getting "Unable to resolve symbol" when requiring other files? |
| 01:11 | sm0ke | TheMoonMaster: Why is passing around not cleaner? |
| 01:11 | TheMoonMaster | sm0ke: Because it's an isolated app and it just ends up being A LOT of calls of things like, (write out "message") |
| 01:12 | TheMoonMaster | Where passing out seems extremely redundant because it will never ever change. |
| 01:12 | TheMoonMaster | It's always going to be that single socket connection. |
| 01:12 | TheMoonMaster | Well, {in: reader, :out writer} |
| 01:13 | sm0ke | TheMoonMaster: and you cant `use` the namespace containing it where you require it? |
| 01:14 | TheMoonMaster | It's defined in app.core so it might make a circular dependency. |
| 01:14 | sm0ke | then define it in a namesapce which everyone else will `use` |
| 01:15 | sm0ke | a namespace dedicated for socket operation maybe |
| 01:16 | sm0ke | where you can define (write..) (read..) and you dont need to work with that socket instance anywhere else |
| 01:18 | blake | amalloy: Having some trouble making that code work. It seems to always replace the high value, never the low... |
| 01:18 | TheMoonMaster | Gotcha, I think I just need to rethink the architecture a bit more. Thanks |
| 01:20 | amalloy | blake: when i paste that into my repl, i get stuff like: (guess-stream 50 bad-guesser 1 100) ;=> ([1 100] [37 100] [37 87] [37 77] [37 71] [50 71] [50 59] [50 58] [50 51] [50 50]) |
| 01:21 | blake | malloy: Huh. I get things like [1 100] [1 49] [1 24] [1 11]... Lemme try a clean namespace. |
| 01:21 | amalloy | did you pick 1 as your number? :P |
| 01:22 | blake | Heheh.Wait...Lord, I hope not. |
| 01:24 | blake | amalloy: OK, it's obviously getting late. I was passing in 1. Duh. |
| 01:27 | sm0ke | hurm wtf is print-dup? i defined a literal tag which creates a Java instance but when i do something like {:key #my/tag[1]} |
| 01:28 | sm0ke | I get CompilerException java.lang.RuntimeException: Can't embed object in code, maybe print-dup not defined |
| 01:28 | sm0ke | ,(doc print-dup) |
| 01:28 | clojurebot | "; " |
| 01:50 | vimuser2 | hmm |
| 01:51 | vimuser2 | (:test ni) is nil, is this supposed to be true? |
| 01:51 | vimuser2 | erm , is this the way it's supposed to be? |
| 01:52 | vimuser2 | (nil :test) fails to copmile... |
| 02:06 | Frozenlock | Is there some kind of timestamp function in cljs, or is it just js/Date? |
| 02:07 | ivan | Frozenlock: (goog.now) if you prefer that |
| 02:09 | Frozenlock | ivan: isn't it the same thing? |
| 02:10 | ivan | yep |
| 02:10 | Frozenlock | ah ok :-p |
| 03:52 | john2x | vimuser2: yes, that's intentional |
| 03:55 | arrdem | ,(println "http://i.imgur.com/ATY0kCE.jpg") ;; testing erc images |
| 03:55 | clojurebot | http://i.imgur.com/ATY0kCE.jpg\n |
| 03:55 | arrdem | test passed... this is either going to be awesome or terrible |
| 05:33 | danielszmulewicz | I just encountered this in a leiningen project.clj: ":repositories {"snapshots" {:url "s3p://lein-snapshots/snapshots"}}" Has anybody seen that before? And what is s3p? |
| 05:35 | mpenet | s3 wagon private url scheme |
| 05:35 | mpenet | see: https://github.com/technomancy/s3-wagon-private |
| 06:14 | danielszmulewicz | mpenet: Oh, thanks! |
| 06:14 | danielszmulewicz | (inc mpenet) |
| 06:14 | lazybot | ⇒ 2 |
| 06:55 | wagjo | good morning (ugt) |
| 07:12 | clgv | good lunch (GMT+1) :P |
| 07:20 | neilm | Hi, I'm starting with midje autotest (doing the clojure mooc). When I save it says no facts checked. What am I doing wrong? |
| 07:21 | clgv | neilm: oh hmm, that stupid crystal ball is defect, so no idea. ;) |
| 07:22 | clgv | neilm: you need to provide more information about your project setup so that someone might be able to help you |
| 07:22 | neilm | better on email perhaps |
| 07:23 | clgv | neilm: huh? why? |
| 07:25 | neilm | clgv: because not sure about pasting into irc anyway just cloned the trainingday repo |
| 07:25 | neilm | clgv: project reads (defproject training-day "1.0.0-SNAPSHOT" |
| 07:25 | neilm | :dependencies [[org.clojure/clojure "1.5.1"] |
| 07:25 | neilm | [iloveponies.tests/training-day "0.1.0-SNAPSHOT"]] |
| 07:25 | neilm | :profiles {:dev {:plugins [[lein-midje "3.1.1"]]}}) |
| 07:25 | neilm | clgv: tests run once only |
| 07:26 | clgv | neilm: there are sites for posting gists refheap.com or gist.github.com |
| 07:26 | clgv | neilm: did you run "lein midje :autotest" in you project folder? |
| 07:26 | Kneiva | neilm: that autotest is broken in those excercises |
| 07:26 | neilm | clgv: I did |
| 07:27 | neilm | Kneiva: thanks |
| 07:27 | Kneiva | neilm: or it doesn't work because the tests are in separate projects |
| 07:27 | neilm | Kneiva: It gets better later? |
| 07:28 | Kneiva | neilm: I don't think it has been fixed yet |
| 07:28 | clgv | neilm: I have [midje "1.6.2"] in my project's dev dependencies and [lein-midje "3.1.3"] in my ~/.lein/profiles.clj in the :user profile dependencies |
| 07:29 | clgv | neilm: and the tests are in the same project as the code |
| 07:29 | neilm | clgv: yep |
| 08:03 | mikerod | Is there a significant perf overhead to setting up dynamically bound vars in a fn via `binding`? Example; I have a fn that is called 500K-1mil times (from different locations) and it rebinds a dynamic var each time when the fn body is entered. |
| 08:09 | Pate_ | Hey peeps. I'm doing an Introduction to Clojure talk in my local dev community, and I'm looking for good resources on the best way to introduce developers to Lisp/Clojure. I particularly like Rich's approach of starting with data structures and working from there. Do you know of any good resources I can borrow from, or have advice for approaching a large group, e.g. using whiteboard vs powerpoint vs Light Table? |
| 08:15 | wagjo | Pate_: For slides, I would recommend Stu's at https://github.com/stuarthalloway/clojure-presentations , they are CC licensed |
| 08:15 | Pate_ | thanks, wagjo |
| 08:18 | wagjo | mikerod: Yes |
| 08:18 | mikerod | wagjo: any particular reason for that? |
| 08:18 | mikerod | I've tried to experiment some with a profiler |
| 08:18 | wagjo | mikerod: I've tested var-get/var-set and it is very slow, compared to the atom or hand-crafted mutable reference |
| 08:19 | mikerod | hmm interesting |
| 08:20 | mikerod | I did a really basic example like : `(time (dorun (repeat 100000000 (binding [*ns* (the-ns 'my.tester)] (resolve 'a)))))` |
| 08:20 | mikerod | to attach a profiler and just see what sort of hot-spot I hit |
| 08:20 | wagjo | well just reading a dyunamic var checks if it is a root binding or a thread local one, if it is the latter, it gets a frame for given thread and from this frame it gets the thread local value |
| 08:21 | mikerod | I got about "Elapsed time: 22953.87 msecs", not so bad. The example is pretty trivial though. |
| 08:21 | mikerod | wagjo: so you are saying commenting on the overhead of reading a dynamic var in general? |
| 08:21 | mikerod | so you are commenting* |
| 08:22 | wagjo | set has to go through same checks too |
| 08:24 | mikerod | interesting |
| 08:25 | mikerod | I suppose this should be avoiding in a heavily hit fn then... |
| 08:26 | wagjo | but it may be OK for you, depends on the situation |
| 08:27 | wagjo | Atom is faster so if you do not need the additional features of Var, I would go with atom |
| 08:27 | mikerod | wagjo: in my usage specifically, I needed to change the *ns*. |
| 08:28 | mikerod | which is a strange use-case probably |
| 08:29 | mikerod | I appreciate the feedback on it. |
| 08:29 | wagjo | mikerod: well that is a strange case indeed :) |
| 08:30 | wagjo | hacking the compiler? |
| 08:32 | wagjo | mikerod: OK I've dug up my benchmarks, swap! is 2-3 times faster than var-set using with-local-vars |
| 08:33 | mikerod | wagjo: interesting, I guess that makes sense though |
| 08:33 | mikerod | wagjo: um, hacking the compiler; I suppose |
| 08:33 | mikerod | I'm in a DSL scenario. I have to create fn's but they are coming from different *ns* environments |
| 08:33 | mikerod | So I want to let the fn body be eval'ed against the *ns* it was defined in. |
| 08:36 | mikerod | I think there are smarter ways to accomplish what I'm going for. So exploring those. I was generally interested the perf of using `binding` though. |
| 10:09 | clgv | mikerod: yeah binding kinda slows down compared to just passing functions as parameters |
| 10:09 | clgv | or values |
| 10:09 | clgv | mikerod: do you have a lot if these bindings? |
| 10:59 | uzo | c/ear |
| 12:17 | seangrove | Generated art with Om/clojurescript http://dl.dropbox.com/u/412963/Screenshots/dj.png |
| 12:17 | locks | seangrove: looks almost like Piet |
| 12:18 | seangrove | Heh, just kidding - getting a dragging with snap-to-grid / snap-to-arbitrary-guidelines components going |
| 12:18 | seangrove | locks: Oh, interesting, you're right, heh |
| 12:18 | malyn | seangrove: Boo! I was excited about the generated art angle. :) |
| 12:19 | seangrove | malyn: Maybe we'll get there :) |
| 12:20 | dnolen_ | seangrove: nice |
| 12:22 | ddellacosta | dnolen_: this caused me a lot of pain: http://dev.clojure.org/jira/browse/CLJS-523 |
| 12:22 | ddellacosta | dnolen_: seems like there should be some way for dates to return a hash value so that it doesn't break, for example, sets |
| 12:23 | seangrove | Ah, the understated elegance of real-world Javascript "toString.call(aDate) == '[object Date]'" |
| 12:27 | dnolen_ | ddellacosta: sure patch welcome |
| 12:28 | ddellacosta | dnolen_: is it reasonable to add something further to extend js/Date though? Seems like that jira thread suggests that would not be the direction folks want to move in. The fix is simple--using the string representation of Dates to generate a hash works. |
| 12:28 | dnolen_ | ddellacosta: CLJS-525 is the only thing I'm interested in |
| 12:30 | ddellacosta | dnolen_: okay, understood |
| 12:32 | dnolen_ | ddellacosta: a separate ticket for proper hashing of dates not based on strings would be considered, Joda Time looks like it some good ideas |
| 12:33 | cemerick | contrary to the docs, e.g. >! and co. never return anything but nil. I presume this is a bug? |
| 12:33 | ddellacosta | dnolen_: okay, thanks. I'll go head down that rabbit hole now... |
| 12:34 | JavaIsAwful | I'm doing some command line parsing, and I want `server` or `client <url>` to be valid arguments. What's the convention to use for the usage string? |
| 12:35 | dnolen_ | there are lots of useful ClojureScript libraries now, feel free to extend this list http://github.com/clojure/clojurescript/wiki#useful-libraries |
| 12:35 | JavaIsAwful | the best I could think of was "[server/client url]", but that's obviously not proper |
| 12:38 | JavaIsAwful | ohh, I think the convention is [server|client url] |
| 12:39 | JavaIsAwful | except server and client are literal strings, while url is a variable name |
| 12:39 | JavaIsAwful | I suppose I should instead use [--server|--client url] |
| 12:40 | jjttjj | maybe a dumb question but is importing 20 million small entities going to be feasible/easy on a normal pc |
| 12:40 | jjttjj | in datomic |
| 12:41 | dnolen_ | jjttjj: more likely to get a good answer in the #datomic channel |
| 12:42 | jjttjj | dnolen_: k thanks |
| 12:42 | swks | exit |
| 12:55 | mr-foobar | dnolen_: In om can I print a component to string ? |
| 12:55 | dnolen_ | mr-foobar: dom/render-to-str |
| 13:00 | dnolen_ | mr-foobar: https://github.com/swannodette/om/wiki/Documentation#omdom |
| 13:01 | mr-foobar | dnolen_: thx ! |
| 13:10 | JavaIsAwful | in tools.cli, is there a way to have a command line option change the :parse-fn for another option? |
| 13:12 | JavaIsAwful | specifically, I have a --IPv6 flag, and if it's on, I want the --hostname=HOST option to be parsed by Inet6Address instead of Inet4Address |
| 13:35 | arrdem | JavaIsAwful: I don't think there is. For something like that you'll proabably have to implement it yourself as a tack-on transform over the options map. |
| 13:36 | JavaIsAwful | arrdem: I've decided to just leave the host un-parsed, and let the client function handle it |
| 13:36 | JavaIsAwful | it's simple enough that way |
| 13:36 | arrdem | or that I guess... |
| 13:37 | arrdem | I'd argue that if you have some standard IR for an address that's more detailed than a string you should convert to it early rather than late but that's just me. |
| 13:38 | JavaIsAwful | well, it's not like this is production code |
| 13:38 | JavaIsAwful | so I'm not too worried about it |
| 13:46 | arrdem | totally quoting you on that... |
| 13:49 | amalloy | JavaIsAwful: that shouldn't be possible in tools.cli, because it processes the args one at a time and there's no guarantee of what order the user passes them |
| 13:53 | JavaIsAwful | amalloy: that makes sense |
| 14:01 | JavaIsAwful | so, say I have two functions, f and g, a boolean b, and some argument |
| 14:01 | JavaIsAwful | based on b, I want to either do (f argument) or (g argument) |
| 14:02 | JavaIsAwful | is there a better way to do it than this: ((if b f g) argument) ? |
| 14:02 | JavaIsAwful | it's kind of hard to read |
| 14:02 | JavaIsAwful | imo |
| 14:03 | pyrtsa | If you really find the above hard to read, of course you can write (if b (f argument) (g argument)). |
| 14:03 | Averell | or maybe a multimethod? |
| 14:03 | dacc | (cond a (f arg) b (g arg)) ? |
| 14:04 | JavaIsAwful | I don't really want to call (f arg) and (g arg) separately though |
| 14:04 | JavaIsAwful | I guess this really is the simplest way |
| 14:04 | pyrtsa | JavaIsAwful: Just get used to thinking (if b f g) can return a function. |
| 14:04 | dacc | yeah, reads fine to me |
| 14:05 | JavaIsAwful | pyrtsa: I'm used to things returning functions, just something seems bad about it to me |
| 14:05 | JavaIsAwful | but I guess it beats the alternatives |
| 14:05 | dacc | higher order functions are your friend =) |
| 14:05 | pyrtsa | JavaIsAwful: You can of course use a let expression to highlight the fact that the function gets called either way. (let [h (if b f g)] (h arg)) |
| 14:05 | JavaIsAwful | pyrtsa: that's a good point, I think I'll do that |
| 14:06 | JavaIsAwful | didn't think of that |
| 14:06 | pyrtsa | :) |
| 14:12 | JavaIsAwful | I think I should start using my github username, so people actually remember me |
| 14:12 | Rosnec | I've probably used about 5 different nicks in here before :P |
| 14:21 | amalloy | Rosnec: back when i had trouble reading ((if b f g) arg), i decided to use it whenever reasonable, so that i would get used to it and improve my command of the language |
| 14:22 | Rosnec | amalloy: I don't really have trouble reading it, just something about it seems wrong to me |
| 14:22 | Rosnec | not a big deal |
| 14:23 | Rosnec | I use it whenever I can, though |
| 14:23 | Rosnec | or better yet, do the thing with let that pyrtsa suggested |
| 14:27 | justin_smith | before I go and implement this myself - is there a clojure or java package that would let me check if a string is an SQL reserved word? |
| 14:27 | justin_smith | seems like a simple set of strings would suffice, but no need to store the information twice if it is out there somewhere |
| 14:30 | hiredman | justin_smith: that is highly implementation dependent |
| 14:31 | hiredman | for example, fun fact, ssl is a reservered word in some versions of mysql |
| 14:31 | justin_smith | weird |
| 14:31 | justin_smith | OK, I'll just put a bunch of strings in a set for the db backends I care about |
| 14:31 | justin_smith | thanks |
| 14:41 | puredanger | if you're using JDBC, there is a call in DatabaseMetaData that can give you the set of reserved words for your database |
| 14:42 | justin_smith | now THAT would be nice |
| 14:42 | puredanger | http://docs.oracle.com/javase/7/docs/api/java/sql/DatabaseMetaData.html#getSQLKeywords() |
| 14:42 | justin_smith | sweet, exactly what I was looking for actually |
| 14:42 | puredanger | although it looks like that is a list in addition to SQL:2003 keywords |
| 14:43 | justin_smith | well I can compromise and hardcode those |
| 14:44 | justin_smith | but better that than have to hand collate (and keep updated) the reserved words of all the backends we support |
| 14:44 | justin_smith | (inc puredanger) |
| 14:44 | lazybot | ⇒ 1 |
| 14:45 | puredanger | hazards of having written a JDBC driver :) |
| 14:54 | seangrove | dnolen_: What's the use-case for :shared? If I have some data modifyable elsewhere that all of my subcomponents need to be able to access the latest version of, is that an appropriate place to put it vs app state? |
| 14:54 | seangrove | dnolen_: In fact, feel free to disregard the second question, and just share your answer to the first |
| 14:54 | Rosnec | ah crap |
| 14:55 | Rosnec | a catch clause can't be in the tail position, right? |
| 14:55 | Rosnec | I'm trying to make a loop which retries a few times on a socket timeout |
| 14:58 | amalloy | Rosnec: http://stackoverflow.com/questions/1879885/clojure-how-to-to-recur-upon-exception |
| 14:58 | dnolen_ | seangrove: :shared + :tx-listen is pretty useful |
| 14:59 | dnolen_ | seangrove: anyone can subscribe to transacts! as they occur |
| 14:59 | seangrove | dnolen_: So for tapping state/events, or for inter-component/intra-app communication? |
| 14:59 | dnolen_ | seangrove: yep |
| 14:59 | seangrove | Ok, thanks, will chew that over |
| 15:00 | Rosnec | ooh |
| 15:01 | Rosnec | thanks amalloy |
| 15:01 | Rosnec | heh, the code in the question is almost identical to mine |
| 15:19 | AmnesiousFunes | bbloom: Can I pester you about the cljs port of fipp? Any news? |
| 15:19 | bbloom | AmnesiousFunes: nothing new besides what is in those github tickets |
| 15:20 | bbloom | AmnesiousFunes: however, i simply dislike cljx and don't feel like maintaining a copy/paste directory of code |
| 15:21 | bbloom | it's unlikely that I'll maintain a simultaneous clj/cljs version of anything until the cross platform code story gets better |
| 15:22 | AmnesiousFunes | bbloom: Does that mean that jonase's cljs fork would be the "official" port, if it reaches working status? |
| 15:22 | bbloom | AmnesiousFunes: i haven't run it, but my udnerstanding is that it worked from the first try |
| 15:22 | bbloom | AmnesiousFunes: it's like a 3 line change to swap finger trees out for rrb vectors |
| 15:22 | AmnesiousFunes | Nice to know. Thanks. |
| 15:23 | bbloom | AmnesiousFunes: and then after that there's a macro that you don't need and can simply delete |
| 15:23 | bbloom | actually, that macro is gone in the latest version |
| 15:24 | bbloom | AmnesiousFunes: if you want to make your life easier for tracking changes, you'll need to either prove that the clj version is faster/the-same with rrb vectors, or you need to port finger trees to cljs :-) |
| 15:24 | AmnesiousFunes | Wasn't there a finger tree cljs impl hovering around? |
| 15:24 | bbloom | *shrug* |
| 15:28 | wagjo | AmnesiousFunes: https://github.com/wagjo/data-cljs |
| 15:29 | wagjo | but ftrees are very slow compare to rrbt vectors |
| 15:29 | AmnesiousFunes | wagjo: Thanks, I had just found the link to your lib in the fipp issue tracker. |
| 15:29 | AmnesiousFunes | I see |
| 15:29 | bbloom | wagjo: that was my understanding as well, but some benchmarking in fipp was wildly inconclusive |
| 15:31 | wagjo | the 32 chunk array is more appropriate in most situations than digits and node objects, for both nth and conj |
| 15:31 | Rosnec | I don't understand why gloss frames always get placed in a sequence |
| 15:31 | Rosnec | why doesn't it just return a single ByteBuffer? |
| 15:33 | bbloom | wagjo: rust heavily leans on left and right consing, concatenation, and left popping, which are all the heuristic operations of rrb vectors |
| 15:33 | wagjo | bbloom: IIRC ftrees produce a lot garbage objects and while v8 handles it well, it was not perfect. Haven't compared it in CLJ though |
| 15:33 | bbloom | https://github.com/brandonbloom/fipp/issues/6 |
| 15:34 | wagjo | I've tried to limit garbage in ftrees and provide special fns for e.g. reduce and nth, but still |
| 15:35 | bbloom | wagjo: by rust, i meant fipp |
| 15:35 | Rosnec | ohh, I think I get why it returns a seq. It splits byte buffers at any delimiters you give |
| 15:35 | bbloom | wagjo: i happened to be reading a thing about rust at this moment and brain slipped :-P |
| 15:39 | tbaldridge | AKA, he'd rather be programming Rust than Clojure :-P |
| 15:39 | bbloom | tbaldridge: more like i rather NOT be writing C++ :-P |
| 15:39 | arrdem | ++rust |
| 15:40 | wagjo | heh |
| 15:43 | borkdude | could it be that the ordering of map entries (on which I should not depend, I know) differ per JVM version? |
| 15:43 | borkdude | or Java version |
| 15:43 | wagjo | borkdude: or per Clojure version ;) |
| 15:46 | wagjo | borkdude: if you use hashmap, than the order depends on the hash, and the algorithm for hash changes between Oracle JVM versions |
| 15:46 | wagjo | borkdude: see http://vaskoz.wordpress.com/2013/04/06/java-7-hashing-drastically-better-than-java-6/ |
| 15:46 | borkdude | wagjo, I see ok! |
| 15:47 | wagjo | borkdude: and Clojure changes hashing algo for 1.6 drastically too, so there |
| 15:48 | borkdude | wagjo yeah, I saw that |
| 15:57 | dnolen_ | bbloom: the Clojure RRBTrees still need quite a bit of optimization work last I looked. |
| 15:58 | bbloom | dnolen_: that was my understanding as well |
| 16:06 | Frozenlock | When I try to `lein jar' a cljx project, it warns me that there's some duplicate files. (namely, core.clj and core.cljs) |
| 16:07 | Frozenlock | Wasn't lein skipping cljs files? |
| 16:08 | Frozenlock | If not, does it mean that I can remove lein-cljsbuild entirely from my project? |
| 16:14 | gtrak | you don't need cljsbuild to distribute cljs in jars |
| 16:15 | gtrak | I guess you might need it to run tests and such |
| 16:22 | Frozenlock | gtrak: Ah! Perfect then. |
| 16:23 | Frozenlock | (I alreadly run the tests on the clj part) |
| 16:24 | cYmen | The reasonable IDE choices are Vim, Emacs, Lighttable and Eclipse, correct? |
| 16:25 | gtrak | Cursive? |
| 16:26 | gtrak | nightcode? |
| 16:26 | cYmen | That's intellij, right? |
| 16:26 | gtrak | cursive is, yea |
| 16:26 | cYmen | Nightcode looks interesting, too. |
| 16:26 | cYmen | Are there any comparisons available? |
| 16:27 | cYmen | ooohh nightcode comes with presets for doing android dev in clojure |
| 16:28 | gtrak | do you already know emacs? if not, probably worth it to use something else :-) |
| 16:28 | cYmen | That could be fun. |
| 16:28 | cYmen | I'm currently using emacs. :p |
| 16:28 | Rosnec | okay, I have a bit of an issue |
| 16:28 | cYmen | I wouldn't go as far as saying that I "know" emacs. ;) |
| 16:28 | Rosnec | I'm trying to send some DatagramPackets |
| 16:28 | gtrak | it's hard for me to use light table b/c I'm used to emacs, but I know a vim guy that likes it. |
| 16:29 | Rosnec | and I'm getting the bytes from gloss frames |
| 16:29 | Rosnec | but gloss sometimes splits the frame into multiple ByteBuffers |
| 16:29 | Rosnec | is there a way to force it to put everything in a single buffer? |
| 16:30 | Rosnec | or if not, a way to make DatagramPacket see the seq of ByteBuffers as a single ByteBuffer? |
| 16:30 | gtrak | i think it has to know sizes ahead of time, yea? |
| 16:30 | malyn | Rosnec: I think that you want to call (contiguous ...) on the seq of buffers that you are getting back -- https://github.com/ztellman/gloss/wiki/Introduction |
| 16:31 | Rosnec | malyn: ooh |
| 16:31 | Rosnec | now I feel dumb for not noticing that |
| 16:33 | malyn | There is a lot of content there, it's easy to miss single lines like that. |
| 16:33 | Rosnec | I'm pretty sure I read that paragraph a few times already |
| 16:33 | Rosnec | but that was before I realized I actually needed it |
| 16:34 | malyn | Yeah, that's frequently me and all of Clojure. Oooh, that looks neat. I hope I remember that someday when I actually understand what it means. :) |
| 16:36 | cYmen | gtrak: How hard/annoying/tedious is it to edit files on a machine to which I have ssh access with emacs? |
| 16:36 | cYmen | If you happen to know how to do that. :) |
| 16:36 | gtrak | emacs is good at that, that's tramp mode, or I prefer sshfs. |
| 16:36 | gtrak | which is not emacs-specific. |
| 16:36 | cYmen | yeah, I know sshfs |
| 16:36 | hlship | What is the expected behavior in core.async when code inside a go block throws an exception? |
| 16:37 | gtrak | there was a recent commit to enable cider-jack-in on tramp mode buffers. |
| 16:37 | hlship | It looks like the channel that receives the body result is closed |
| 16:37 | DomKM | noprompt: I'd like to use Bourbon and Neat in a project I'm working on. Thorn looks cool, how's it coming along? |
| 16:37 | gtrak | cYmen: https://github.com/clojure-emacs/cider/pull/489 |
| 16:37 | cYmen | gtrak: Genera question, what's the meaning of the current buffer when I start an nrepl? |
| 16:38 | gtrak | so, if you have a single buffer open, and it's on a clj source file, cider-jack-in will start a repl for that current project. |
| 16:38 | hlship | I'm curious if there's anyway I could get go blocks into a "zombie" state? |
| 16:38 | noprompt | DomKM: i've been a tad on the busy side so i haven't had time to work on it this week. it'll mostly convert css->clj but full scss support isn't ready yet. |
| 16:38 | gtrak | 'current buffer' just means the selected or active one. |
| 16:38 | noprompt | i could always use help on it though. |
| 16:38 | amalloy | cYmen: i use tramp to edit files over ssh. it's pretty convenient: C-x C-f /ssh:me@host:/home/me/whatever.txt |
| 16:39 | hlship | It feels like any go blocks parked waiting for the failed go block will see the nil and, at worst, NPE |
| 16:39 | noprompt | DomKM: basically it's a matter of implementing remaining the remaining methods. |
| 16:39 | amalloy | the only thing i have trouble with is editing remote root-only files using sudo. i can't figure out how to get that to work |
| 16:40 | DomKM | noprompt: Ah, okay cool. Looking forward to using it. :) |
| 16:40 | noprompt | DomKM: if you'd like to help and have time i could give you the quick 'n dirty on it. |
| 16:42 | noprompt | DomKM: essentially the remaining methods would need to handle SCSS vars, mixins, etc. it's just a PITA. |
| 16:43 | cYmen | gtrak: So, repls are somehow project specific and information from the project definition is being used for something? |
| 16:43 | noprompt | one thing that would be awesome would be to figure out how to keep track of where top-level vars are defined and how to properly expand them when emitting code. |
| 16:45 | cYmen | amalloy: I think I don't have that installed because I think I just created a weird folder and now emacs is trying to start aspell :p |
| 16:50 | gtrak | cYmen: yes, that's the case, the project.clj tells leiningen how to set up the java classpath correctly, among other things. |
| 16:51 | joelt | where to find Clojure job? |
| 16:51 | SegFaultAX | joelt: Where are you based? |
| 16:51 | joelt | Austin |
| 16:51 | joelt | nothing i see in Indeed. |
| 16:52 | arohner | joelt: do you have any remote experience? CircleCI is always hiring |
| 16:52 | joelt | planning on going to local Clojure group. |
| 16:52 | arohner | (remote, out of SF) |
| 16:53 | joelt | oddly not a big fan of working remote, but possible i guess. |
| 16:53 | arohner | no problem. just throwing it out there |
| 16:54 | SegFaultAX | arohner: Where is your office? SOMA? |
| 16:54 | joelt | thx though. didn't know if there was a clojure specific jobboard. |
| 16:54 | SegFaultAX | You told me once before but I forgot. |
| 16:54 | arohner | SegFaultAX: we were at Heavybit at the time |
| 16:54 | SegFaultAX | Did you guys move into your own office? |
| 16:54 | arohner | now we're in a temporary loft while looking for 'real' offices |
| 16:54 | arohner | some genius built a 6000 sq ft, 3 story, one bedroom apt |
| 16:54 | SegFaultAX | Well that's a step in the right direction! Congrats! |
| 16:55 | arohner | so we're there for a few months. The ground floor is offices, the second floor is a 'normal' apt living room & kitchen, and we turned the bedroom into a conference room |
| 16:55 | arohner | SegFaultAX: Thanks! |
| 16:56 | SegFaultAX | arohner: We're also in a loft for the moment (near 4th & King). But we're moving in a couple weeks. |
| 16:56 | tmciver | joelt: functionaljobs.com |
| 16:57 | joelt | tmciver: nice. |
| 16:57 | arohner | SegFaultAX: congrats! do you know where yet? |
| 16:57 | SegFaultAX | arohner: Yup. 5th and... mission I think? Maybe folsom. |
| 16:57 | arohner | cool. We're looking at a place on 2nd or 3rd & market |
| 16:58 | SegFaultAX | arohner: Oh man i really love that area. Rally was at 2nd & Mission. Such a sweet spot. |
| 16:58 | SegFaultAX | They're still there (for the moment), but I left Rally at the start of this year. |
| 16:58 | arohner | SegFaultAX: cool. where are you now? |
| 16:59 | SegFaultAX | arohner: StyleSeat. |
| 17:02 | arohner | SegFaultAX: cool. Another clojure startup! |
| 17:03 | SegFaultAX | We loved Circle at Rally. The only thing was our tests were really shitty so the builds took fricken forever. |
| 17:03 | SegFaultAX | The most cost effective solution for us at the time was to setup jenkins+2 slaves on beefy hand built boxes. |
| 17:06 | dacc | SegFaultAX: Rally as in rallydev.com? |
| 17:07 | SegFaultAX | dacc: rally.org |
| 17:07 | SegFaultAX | dacc: Crowdfunding for causes and non-profits. |
| 17:08 | dacc | SegFaultAX: ah cool |
| 17:08 | SegFaultAX | arohner: StyleSeat is mostly Python for the moment (3+ year old Django codebase), but Clojure is starting to infect. |
| 17:08 | SegFaultAX | Soon it will consume everything in its path. :D |
| 17:08 | SegFaultAX | At least that's my plan. |
| 17:08 | arohner | :-) |
| 17:09 | dacc | most of the infection has been ideas here so far =) |
| 17:09 | SegFaultAX | dacc: Yea but you're probably on good Django. We |
| 17:09 | SegFaultAX | *we're on 1.4.2 :O |
| 17:09 | dacc | we just clawed our way into 1.6 i believe |
| 17:09 | DomKM | noprompt: I'm a CSS newb but I'd be happy to help if I can. I'm busy at the moment but maybe we can go over it later. |
| 17:10 | dacc | SegFaultAX: i actually find the ORM pretty nice. QuerySets have some decent composition properties |
| 17:10 | SegFaultAX | dacc: And 1.7 is about to go final. |
| 17:10 | dacc | SegFaultAX: the forms and templates can be horrid, though =\ |
| 17:10 | SegFaultAX | dacc: I prefer it to ActiveRecord, but in general I despise ORM. |
| 17:11 | dacc | yeah |
| 17:11 | SegFaultAX | "ORMs make easy things easy and hard things impossible" - Abraham Lincoln |
| 17:11 | dacc | hah, exactly |
| 17:13 | dacc | i recently convinced everyone we should look at switching to SERIALIZABLE transaction isolation. manual locking + greedy orm touching everything in sight is a recipe for deadlock. |
| 17:13 | SegFaultAX | dacc: Manual commit like a boss. |
| 17:14 | pmonks | "transaction per table" pattern ftw |
| 17:15 | SegFaultAX | pmonks: How does that even work? |
| 17:15 | pmonks | Exactly! ;-) |
| 17:15 | pmonks | It took me a week to even believe what I was seeing. |
| 17:15 | SegFaultAX | Seriously though, how do you even write to the database for anything even slightly non-trivial? |
| 17:15 | pmonks | I thought I was seeing something super-advanced and not understanding it. |
| 17:16 | dacc | that'll solve your contention, and your, uh, atomicity =) |
| 17:16 | SegFaultAX | And your consistency, too! |
| 17:16 | SegFaultAX | pmonks: Actually wait, I know how they did it. |
| 17:17 | SegFaultAX | The entire site was a single thousand column table. |
| 17:17 | pmonks | :-D |
| 17:17 | SegFaultAX | #webscale |
| 17:17 | pmonks | Simpler than that: they'd (accidentally) made the system no-concurrency (only one request at a time). |
| 17:18 | pmonks | I inherited it with a "fix performance" mandate. |
| 17:18 | dacc | SegFaultAX: how are you phasing in clojure at your shop? |
| 17:18 | SegFaultAX | dacc: Brute force and fear tactics. |
| 17:18 | SegFaultAX | Also, water-boarding. |
| 17:18 | dacc | haha |
| 17:19 | turbofail | "Power is in tearing human minds to pieces and putting them together again in new shapes of your own choosing." |
| 17:20 | turbofail | paren-shaped pieces |
| 17:20 | dacc | i'm fighting the idea war as i mentioned. largely writing clojure in python, which is actually pretty idiomatic as python is a little schizo. |
| 17:21 | SegFaultAX | turbofail: Factually correct. |
| 17:22 | llasram | dacc: It seems pretty sane. A bunch of functions directly defined in a module, with the occasional deftype, er, class when you need to do something OOy |
| 17:26 | technomancy | llasram: got my forth working last night, kinda excited |
| 17:26 | technomancy | "working" |
| 17:26 | noprompt | DomKM: just ping me if you have questions. i'm no stranger to google hangouts, etc. if you wanna chat that way too. |
| 17:27 | technomancy | you can't define your own words, but it executes primitives and stuff |
| 17:27 | noprompt | i think it might be cool to see if we could pull together a group of interested people each month to talk about garden, thorn, and how to make it better. |
| 17:28 | llasram | technomancy: Awesome! |
| 17:28 | noprompt | is it possible to transform comment nodes w/ enlive? |
| 17:28 | noprompt | i'm not sure how to target them |
| 17:29 | malyn | technomancy: Which platform/environment are you targeting? |
| 17:29 | technomancy | malyn: AVR on a Teensy ucontroller |
| 17:30 | technomancy | llasram: I ended up going with C just because the docs for doing avr asm are beyond horrible |
| 17:31 | malyn | Neat! I looked at building one of those once and then got discouraged on something. Maybe the fact that it would be a pain to constantly have to flash newly-defined words due to the limited RAM and Harvard architecture? I can't remember now. |
| 17:32 | technomancy | malyn: haven't gotten it running quite yet on the board. it's got 2.5k of ram; we'll see. |
| 17:33 | technomancy | the split memory is unfortunate for sure |
| 17:33 | malyn | Yeah, it made me sad. :( I went back to ARM after that brief foray into AVR. |
| 17:37 | muhoo | ~orm makes easy things easy and hard things impossible |
| 17:37 | clojurebot | Excuse me? |
| 17:38 | muhoo | ~orm is orms make easy things easy and hard things impossible |
| 17:38 | clojurebot | Ik begrijp |
| 17:38 | justin_smith | ~omg |
| 17:38 | clojurebot | Huh? |
| 17:38 | justin_smith | ~orm |
| 17:38 | clojurebot | orm is orms make easy things easy and hard things impossible |
| 17:38 | justin_smith | ~erm |
| 17:38 | clojurebot | Huh? |
| 17:38 | tmciver | technomancy: what's this? You're trying to get a forth interpreter running on an AVR? |
| 17:39 | technomancy | tmciver: yeah, that's the plan |
| 17:40 | technomancy | https://github.com//technomancy/orestes |
| 17:40 | pmonks | ~pmonks is mullet aficionado |
| 17:40 | clojurebot | Roger. |
| 17:40 | pmonks | ~pmonks |
| 17:40 | clojurebot | pmonks is mullet aficionado |
| 17:40 | seangrove | dnolen_: You might like https://github.com/sgrove/om-draggable |
| 17:40 | technomancy | malyn: I came really close to using an arm in this project, but the pins on the board I had were to big to let it fit in the enclosure |
| 17:41 | seangrove | Generic draggable component behavior with free-drag, grid-snap-drag, and guideline-snap-drag |
| 17:41 | dnolen_ | seangrove: nice!, in the example there's a typo I think, `app` is not an argument |
| 17:42 | tmciver | technomancy: cool. I've had an idea to write a clojure compiler for a PIC or AVR or something. We'll see if I ever get to it. |
| 17:42 | technomancy | tmciver: I was pretty surprised to find there was only one forth for avr I could find, and it takes over the bootloader |
| 17:42 | seangrove | dnolen_: fixed, thanks |
| 17:43 | malyn | technomancy: Yeah, one nice thing about AVRs is the variety of sizes that you can get. I understand that half the fun of using Forth is writing your own, but in case you want to just quickly build your app then you might check out SwiftX. Works great on the AVR micros (and ARM). |
| 17:43 | seangrove | dnolen_: It'll need a bit of work, but overall pretty happy with it for an early-morning piece |
| 17:43 | dnolen_ | seangrove: looks cool will take a closer look later |
| 17:44 | technomancy | malyn: too late! I've got mine working. =) |
| 17:44 | technomancy | "working" |
| 17:45 | tmciver | technomancy: why forth? I've heard of it but don't think I've ever seen any code. Is it functional? |
| 17:45 | malyn | technomancy: So close! Almost prevented http://xkcd.com/927/ yet again. ;) |
| 17:47 | justin_smith | tmciver: it is stack based / concatenative |
| 17:47 | tmciver | justin_smith: Ah yes, that sounds familiar. |
| 17:49 | justin_smith | actually no, forth is not strictly concatenative, but concatenative languages are often related to forth |
| 17:50 | paulswilliamsesq | Hi, can anyone advise how I use (seq x) when x is a clojure.lang.LazySeq ? |
| 17:50 | justin_smith | http://en.wikipedia.org/wiki/Stack-oriented_programming_language |
| 17:50 | justin_smith | what are you trying to do with it? |
| 17:53 | justin_smith | I don't think there is anything you can do to a seq that you cannot do to a clojure.lang.LazySeq, but seq is useful if you get an arg that may be a vector, lazyseq, array, string, hash-map, whatever, and you want to be able to treat it as a generic sequence |
| 17:54 | paulswilliamsesq | my code is.. |
| 17:54 | paulswilliamsesq | ([ids-to-process metrics] |
| 17:54 | paulswilliamsesq | (if (seq ids-to-process) |
| 17:54 | paulswilliamsesq | (let [current-activity (activity-details (first ids-to-process))] |
| 17:54 | paulswilliamsesq | (recur (rest ids-to-process) metrics))))) |
| 17:55 | technomancy | justin_smith: is it parsing words that make it not strictly concatenative? |
| 17:55 | paulswilliamsesq | Oh, that didn't work well ;) |
| 17:55 | arrdem | paulswilliamsesq: https://refheap.com |
| 17:55 | justin_smith | technomancy: not sure... forth also has heap manipulation words |
| 17:55 | justin_smith | ,(map seq [(range 3) [:a :b :c] "hello" {:a 0 :b 1 :c 2 :d 3}]) |
| 17:55 | clojurebot | ((0 1 2) (:a :b :c) (\h \e \l \l \o) ([:a 0] [:c 2] [:b 1] [:d 3])) |
| 17:56 | technomancy | justin_smith: ah, of course |
| 17:56 | arrdem | hey technomancy, what chip are you using on that board? |
| 17:56 | paulswilliamsesq | @arrdem can you see this page? |
| 17:56 | justin_smith | http://concatenative.org/wiki/view/Forth technomancy looks like we were both right |
| 17:56 | technomancy | arrdem: it's an atmega32u4 inside a teensy 2 |
| 17:58 | arrdem | paulswilliamsesq: you need to paste the link |
| 17:58 | technomancy | almost ended up using a teensy 3, which uses an arm cortex m4 and a boatload more ram |
| 17:58 | paulswilliamsesq | https://www.refheap.com/62990 |
| 17:58 | arrdem | technomancy: want a Clojure assembler? I found a bytecode spec :D |
| 17:58 | paulswilliamsesq | ids-to-process is a lazy-seq |
| 17:58 | technomancy | arrdem: this board is way too small for scheme |
| 17:58 | justin_smith | paulswilliamsesq: ahh, in that example seq forces empty inputs to be treated as false |
| 17:59 | arrdem | technomancy: you say that... |
| 17:59 | paulswilliamsesq | justin_smith: yes, nil punning? |
| 17:59 | justin_smith | paulswilliamsesq: it turns empty things into nils which are false |
| 17:59 | arrdem | technomancy: really what I mean is extending http://github.com/arrdem/toothpick |
| 17:59 | arrdem | technomancy: not a full port of some runtime |
| 18:00 | paulswilliamsesq | justin_smith: yep, which I believed was idiomatic? |
| 18:00 | justin_smith | ,(if "" true false) ; paulswilliamsesq |
| 18:00 | clojurebot | true |
| 18:00 | justin_smith | ,(if (seq "") true false) ; paulswilliamsesq |
| 18:00 | clojurebot | false |
| 18:00 | justin_smith | yes, it is |
| 18:01 | justin_smith | ,(if (lazy-seq) true false) ; more apropos |
| 18:01 | clojurebot | true |
| 18:02 | paulswilliamsesq | justin_smith: given ids-to-process is lazy, do I need to 'doall'? |
| 18:02 | justin_smith | not at all |
| 18:02 | paulswilliamsesq | justin_smith: don't like the idea of that, just struggling to understand why I can't iterate over the lazy seq |
| 18:03 | justin_smith | ,(if (seq (range)) true false) |
| 18:03 | clojurebot | true |
| 18:03 | justin_smith | wait, why can't you? |
| 18:03 | justin_smith | and why would you want to doall? |
| 18:03 | paulswilliamsesq | the pasted code blows up with a ...IllegalArgumentException Don't know how to create ISeq |
| 18:04 | justin_smith | then ids-to-process is not a lazyseq |
| 18:04 | justin_smith | it is some other kind of thing |
| 18:05 | justin_smith | something that cannot be made a seq, it should be saying "Don't know how to create ISeq from..." and that will tell you the type coming in |
| 18:05 | justin_smith | ,(seq 0) |
| 18:05 | clojurebot | #<ExceptionInfo clojure.lang.ExceptionInfo: Don't know how to create ISeq from: java.lang.Long {:instance 0}> |
| 18:05 | paulswilliamsesq | justin_smith: the full code listing is https://www.refheap.com/62994 |
| 18:06 | justin_smith | paulswilliamsesq: activity-ids is not a lazy seq |
| 18:06 | paulswilliamsesq | justin_smith: as you can see, ids-to-process comes from activity-ids a function which when seperately returns a LazySeq |
| 18:06 | justin_smith | it is a functino which if called would return one |
| 18:06 | justin_smith | so you need to call it |
| 18:06 | paulswilliamsesq | justin_smith: ridetothesun2014-strava-facade.ws=> (type (activity-ids)) |
| 18:06 | paulswilliamsesq | clojure.lang.LazySeq |
| 18:07 | justin_smith | right |
| 18:07 | justin_smith | but then you use it in strava-metrics |
| 18:07 | edbond | how to make lein repl use clojure 1.6? |
| 18:07 | justin_smith | in strava-metrics you provide activity-ids as the first default arg if unprovided |
| 18:07 | justin_smith | it's not a lazy seq, it's a function that returns one, thus your error |
| 18:08 | justin_smith | change line 33 to (strava-metrics (activity-ids) |
| 18:08 | paulswilliamsesq | justin_smith: oh yeah, think I'm following that.. I just changed it and it's taking a while... hopefuly going to work - thank you :-) |
| 18:17 | technomancy | edbond: outside a project `lein repl` uses the version of clojure that ships with leiningen |
| 18:17 | technomancy | (inside a project it's too dark to see) |
| 18:18 | amalloy | *groan* |
| 18:18 | technomancy | admit it, you loled |
| 18:19 | hyPiRion | And then you got eaten by a grue :( |
| 18:19 | arrdem | grues: 2, hackers: 0 |
| 18:20 | zspencer | sounds like a gruesome fate |
| 18:21 | arrdem | https://www.youtube.com/watch?v=4nigRT2KmCE |
| 18:25 | paulswilliamsesq | justin_smith: cheers - that worked a treat. |
| 18:31 | michaniskin1 | hahaha, blowing on the 5.25" floppy |
| 18:31 | michaniskin1 | classic |
| 18:31 | arrdem | so sad that I didn't manage to see front at sxsw this year :c |
| 18:32 | michaniskin1 | 5.25" floppy: it likes to be clean |
| 18:34 | technomancy | are those two Lisas in the background? |
| 18:39 | arrdem | maybe, I have no idea what all front got his hands on for that |
| 18:39 | arrdem | I wouldn't be too surprised given the character of his fanbase :P |
| 19:11 | brehaut | hi joshnz |
| 19:16 | joshnz | howdy brehaut |
| 19:16 | brehaut | hows saturday? |
| 19:16 | joshnz | dunno, just waking up :) |
| 19:17 | brehaut | hah nice :) |
| 19:18 | joshnz | Otherwise need to clean up the grounds from that cyclone last week. Hundreds of cabbage tree leaves everywhere. Then I'll probably play some more of The Swapper. Quite an interesting game I started last night. |
| 19:18 | brehaut | i have not heard of this game |
| 19:19 | joshnz | Neither. I got it as part of one of the recent Humblebundle deals. Essentially a puzzle game at heart. |
| 19:19 | brehaut | oh huh |
| 19:19 | brehaut | how recent is this bundle? |
| 19:20 | joshnz | I think it was in the last 'original' one. Bundle 11 perhaps? They've had android and book bundles since then. |
| 19:21 | joshnz | yup, it was 11. What does Saturday bring for you? |
| 19:22 | brehaut | hmm is this the same bundle as has fez? |
| 19:22 | brehaut | bbiab; lunch |
| 19:23 | joshnz | it did have fez yes. Giana sisters, guacamelee and dust, along with others. Lunch for me too. |
| 19:24 | perplexa | hmpf |
| 19:25 | perplexa | i want fez so badly ;x |
| 19:26 | brehaut | fez is available for all three major computer platforms? (although the linux version might be tricky?) |
| 19:26 | seangrove | bbloom: Not sure if you've noticed yet, but the browser's layout system is completely bonkers |
| 19:26 | technomancy | brehaut: the linux compatibility consists of "here's a branch of the engine on github that's supposed to work, good luck" |
| 19:26 | technomancy | pretty annoyed about that |
| 19:27 | bbloom | seangrove: haha, no, never noticed. i love CSS and believe it is THE WAY GOD INTENDED APPLICATIONS TO BE BUILT |
| 19:27 | brehaut | technomancy: pants |
| 19:27 | technomancy | wait pants is bad? |
| 19:27 | brehaut | yes |
| 19:29 | hiredman | ye old compendium of idioms from common wealth nations |
| 19:30 | seangrove | Nattering on like a registered nonce |
| 19:30 | brehaut | hiredman: olde |
| 19:31 | hiredman | þou art correct |
| 19:32 | divyy | perplexa: fez is really nice. One of the best games in recent times i'd say |
| 19:32 | divyy | Although I've only tried it on windows |
| 19:34 | brehaut | logic programming: you get to see all your errors at once |
| 20:46 | arohner | in lein, what is the default dir for :resources? |
| 20:47 | arohner | and more generally, is there a way to find the default, w/o reading source? |
| 20:51 | hiredman | arohner: the sample project.clj is the best place to look for stuff |
| 20:51 | arohner | hiredman: AFAICT, that doesn't tell you what the default value is though |
| 20:51 | clojurebot | Ik begrijp |
| 20:51 | hiredman | Oh, huh |
| 20:52 | hiredman | arohner: the default is resources |
| 20:52 | arohner | thanks |
| 20:54 | technomancy | `lein pprint` will show you the values |
| 20:55 | arohner | technomancy: cool! |
| 20:55 | technomancy | (it's a plugin, not built in) |
| 20:56 | arohner | yeah, found it |
| 20:57 | arohner | another stupid resources question. Is there a way to get a resource before you've built a jar? |
| 20:57 | arohner | hrm, nvm, that's working now |
| 20:57 | amalloy | arohner: anything on the classpath is available as a resource |
| 21:00 | arohner | I'm confused then, what's the point of the resources directory? is that to guarantee that dir ends up in the jar? |
| 21:05 | amalloy | yes |
| 21:06 | amalloy | it also lets you put things onto your classpath which otherwise wouldn't be, eg an html/ top-level dir |
| 21:07 | amalloy | (or, indeed, resources/, which is only there because it's lein's default) |
| 21:07 | arohner | aha |
| 21:07 | arohner | thanks |
| 22:03 | seangrove | bbloom: Should borders be considered styling or layout? They certainly affect layout in the browser, so I'm leaning towards that right now |
| 22:04 | bbloom | seangrove: layout, but layout needs to (eventually) be controllable from styling |
| 22:05 | bbloom | seangrove: interestingly... a border can be a ... component! |
| 22:05 | bbloom | http://msdn.microsoft.com/en-us/library/system.windows.controls.border(v=vs.110).aspx |
| 22:05 | seangrove | bbloom: How so? Seems like they're orthogonal? |
| 22:05 | seangrove | Hrm, checking it now |
| 22:05 | bbloom | seangrove: they are orthogonal, except when they aren't |
| 22:06 | bbloom | haha sorry |
| 22:06 | bbloom | this is probably a better thing to read: http://msdn.microsoft.com/en-us/library/ms751709(v=vs.110).aspx |
| 22:06 | bbloom | there are several example images that help there |
| 22:07 | bbloom | i'll bb in a bit |
| 22:07 | seangrove | The point about borders being components in their own right makes sense though. I've been enjoying teasing out components (like dragging, resizing, etc.) |
| 22:09 | m00nlight | Hi all, in the let bindings how can I force it to evaluate the LazySeq ? I use (let [a (doall exp)]), but it seems that a is still a LazySeq |
| 22:12 | seangrove | bbloom: Just to help me wrap my head around all of this, the second link is suggestions a very different layout system (alignment, padding, margin) compared to the auto-layout/constrain system in osx/ios (leading space, size, trailing space re: siblings or parent) |
| 22:18 | arrdem | m00nlight: doall is the tool of choice and you are using it... |
| 22:19 | m00nlight | arrdem: Yes, I use do all, but in the body I print the type of the binding, it is still clojure.lang.LazySeq |
| 22:24 | amalloy | forcing it doesn't change its type |
| 22:24 | seangrove | Surprising how many things from the game world seem relevant in the browser when trying to get layout right. Thinking about having to translating local<->world space for elements and sub-elements |
| 22:45 | xeqi | cemerick: do you know if the tab completion for cljs-repls is working for latest cider/austin? |
| 22:45 | cemerick | xeqi: works for me, at least for the rev of cider I'm using? |
| 22:45 | xeqi | hurray!, I haven't updated in a bit |
| 22:46 | xeqi | will do so then |
| 22:49 | cemerick | xeqi: well, keep in mind, I got on head to produce a patch some months ago, and haven't moved |
| 22:50 | cemerick | ironically, a tool luddite to the end, per usual |
| 22:50 | xeqi | yet you maintain so many of the pieces |
| 22:53 | bbloom | seangrove: coordinate systems aren't unique to games by any means ;-) |
| 22:54 | bbloom | seangrove: so the padding/margin/alignment stuff can work with either a content negotiation or constraints based model equally fine |
| 22:54 | ddellacosta | seangrove: https://github.com/sgrove/om-draggable it's like you know what I need and you are making it for me |
| 22:55 | bbloom | seangrove: 1) padding is a derived concept, it's simply margin on an extra wrapper |
| 22:55 | bbloom | seangrove: 2) margin and alignment are applied within a "layout slot" |
| 22:56 | bbloom | seangrove: so even if you use constraints, you don't need to render things exactly where the constraints tell you, you can simply use that as the coordinate system for a subcomponent |
| 22:57 | bbloom | seangrove: the idea of margin is that it simply contracts the coordinate space on all 4 sides and the idea of alignment is what to do if some sub component is smaller than the slot it has been allotted |
| 22:58 | bbloom | wpf offers left/right/center/stretch and top/center/bottom/stretch, with horz/vert=stretch/stretch being the default |
| 23:00 | bbloom | there's probably a more general way to think about it than an enum though: probably a pair of scalars where like left to right is 0 to 1 or -1 to 1, and then some scalar where like 0 is expected size and 1.0 == stretch |
| 23:00 | bbloom | seangrove: does that make sense? |
| 23:09 | akhudek | Regarding this: https://www.refheap.com/63120 |
| 23:10 | akhudek | is this because the 300 positions is considered too small for fold to use multiple threads? |
| 23:12 | bbloom | (doc clojure.core.reducers/fold) |
| 23:12 | clojurebot | I don't understand. |
| 23:12 | bbloom | (require 'clojure.core.reducers) |
| 23:12 | bbloom | (doc clojure.core.reducers/fold) |
| 23:12 | clojurebot | Cool story bro. |
| 23:12 | bbloom | ,(require 'clojure.core.reducers) |
| 23:12 | clojurebot | #<FileNotFoundException java.io.FileNotFoundException: Could not locate clojure/core/reducers__init.class or clojure/core/reducers.clj on classpath: > |
| 23:12 | seangrove | bbloom: Juuuuust barely |
| 23:12 | bbloom | (doc clojure.core.reducers/fold) |
| 23:12 | clojurebot | excusez-moi |
| 23:12 | bbloom | ,(doc clojure.core.reducers/fold) |
| 23:12 | clojurebot | Gabh mo leithscéal? |
| 23:12 | akhudek | haha, yes, I just went and checked |
| 23:12 | bbloom | akhudek: blah, screw clojurebot, but yeah default is 5122 |
| 23:12 | bbloom | 512* |
| 23:12 | bbloom | you can override |
| 23:13 | akhudek | yep, found it :-) |
| 23:13 | seangrove | ddellacosta: Let me know if it works for you, it's been pretty nice here. There's still more work to be done on it though |
| 23:13 | bbloom | seangrove: what needs clarification? |
| 23:14 | ddellacosta | seangrove: definitely. I was going to just wrap google closure's drag and drop but now I'm going to try this. Good thing I took care of other stuff first... |
| 23:15 | ddellacosta | seangrove: and yeah, I may be able to help with shoring it up as need be |
| 23:16 | seangrove | bbloom: Trying to visualize contracting spaces, which I think I just about got, but the scalar stuff doesn't quite make sense. Is expected size the intrinsic size? |
| 23:17 | seangrove | ddellacosta: I changed the free-drag locally to be constrained inside of its parent element already, haven't generalized it yet though |
| 23:18 | bbloom | seangrove: so again, in the "content negotation" model, the idea is that components ask for space, potentially infinite in either or both direction. then the parent grants space and the component makes due with what it was given |
| 23:18 | bbloom | seangrove: the space given to the component is the "layout slot" |
| 23:18 | bbloom | it's a rect |
| 23:19 | bbloom | so let's say you need 50px width, but you're given 100px for whatever reason |
| 23:19 | bbloom | where do you render? |
| 23:19 | bbloom | do you render the left 50px? the right 50px? 25px in? or do you stretch your content to 100px wide and offer extra space to your children? |
| 23:20 | bbloom | that's what alignment is about |
| 23:20 | vimuser2 | mmm is there no built in function to append a vector and return a vector? |
| 23:20 | seangrove | ,(conj [123] 456) |
| 23:20 | clojurebot | [123 456] |
| 23:21 | vimuser2 | ah, i meant something like concat |
| 23:21 | seangrove | ,(apply conj [123] [456]) |
| 23:21 | clojurebot | [123 456] |
| 23:21 | vimuser2 | ... |
| 23:21 | vimuser2 | oh apply, yeah |
| 23:21 | amalloy | into |
| 23:22 | metellus | ,(into [123] 456) |
| 23:22 | clojurebot | #<ExceptionInfo clojure.lang.ExceptionInfo: Don't know how to create ISeq from: java.lang.Long {:instance 456}> |
| 23:22 | seangrove | bbloom: I think that's probably good for today, I'm not going to be able to absorb much more about all of that. Going to work on some simpler stuff for now |
| 23:22 | seangrove | bbloom: Thanks for your patience and explanation, as always |
| 23:22 | ddellacosta | ,(into [123] [456]) |
| 23:23 | clojurebot | [123 456] |
| 23:23 | vimuser2 | meh perfect, thanks into is exactly what i want |
| 23:23 | vimuser2 | *yeah, perfect |
| 23:23 | clojurebot | Gabh mo leithscéal? |
| 23:23 | vimuser2 | thanks for the help =) |
| 23:27 | vimuser2 | o, interesting, |
| 23:27 | vimuser2 | .(into nil [1]) |
| 23:27 | vimuser2 | ,(into nil [1]) |
| 23:27 | clojurebot | (1) |
| 23:30 | vimuser2 | i could do something like (into (or var []) [1 2 3]) , just interesting it returns a list, or mabey it's a lazy seq |
| 23:31 | vimuser2 | ,(type (into nil [1])) |
| 23:31 | clojurebot | clojure.lang.PersistentList |
| 23:58 | chare | ok suppose I want to make a news aggregator website with clojure, first off how do you get a list of the news sites? |
| 23:59 | michaniskin | m00nlight_: (let [a (into [] exp)] …) |
| 23:59 | michaniskin | m00nlight_: or reduce over it |
| 23:59 | michaniskin | things like that |