2015-12-23
| 02:19 | qsys | :gen-class and subclassing a class with overloaded methods on arity: if I want to override only 1 method of the (arity-)overloaded methods, is it supposed to work, or not? |
| 02:21 | qsys | The case is this: an abstract class has an arity-overloaded method (arity 0 and arity 1). When I do :gen-class :extends some.Class and override only the zero-arity method and the 1-arity method is called, I get an arityexception |
| 02:38 | owlbird | ,(let [args ["alice" "bob"] func (fn [args] (map (fn [x] (prn "func1" x)) args) (map (fn [x] (prn "func2" x)) args))] (func args)) |
| 02:38 | clojurebot | ("func2" "alice"\n"func2" "bob"\nnil nil) |
| 02:39 | owlbird | the first (map xxx) won't execute ? |
| 03:16 | Kneiva | ,(let [args ["alice" "bob"] func (fn [args] (doall (map (fn [x] (prn "func1" x)) args)) (doall (map (fn [x] (prn "func2" x)) args)))] (func args)) |
| 03:16 | clojurebot | "func1" "alice"\n"func1" "bob"\n"func2" "alice"\n"func2" "bob"\n(nil nil) |
| 03:55 | keep_learning | Hello everyone |
| 03:56 | keep_learning | I am currently working on trip advisor scrapper |
| 03:56 | keep_learning | and written a simple code |
| 03:56 | keep_learning | https://www.refheap.com/113021 |
| 03:56 | keep_learning | So far I have learned that scrapping ajax pages are hard |
| 03:57 | keep_learning | Currently I am using firefox to execute the javascript calls (ajax) |
| 03:57 | keep_learning | and it's working fine. |
| 03:58 | keep_learning | Now I wanted to switch headless browser and using Phantomjs |
| 03:58 | keep_learning | but it's throwing NoSuchElementException |
| 03:59 | keep_learning | and after some modification |
| 03:59 | keep_learning | TimeoutException |
| 04:00 | keep_learning | After digging some web I got to know that |
| 04:00 | keep_learning | http://docs.behat.org/en/v2.5/cookbook/behat_and_mink.html |
| 04:00 | keep_learning | Also, you can’t do AJAX with a headless browser. |
| 04:01 | keep_learning | So in nutshell |
| 04:01 | keep_learning | Ajax is making the life bit hard. |
| 04:02 | keep_learning | I am trying to find a way to solve this and came with one solution |
| 04:02 | keep_learning | Simulating browser communication via some library |
| 04:03 | keep_learning | but I don't have clear idea |
| 04:03 | keep_learning | I am looking for some feedback on scrapping trip advisor |
| 04:04 | AeroNotix | keep_learning: ajax is just another kind of http call. |
| 04:04 | AeroNotix | keep_learning: why "can't" you do ajax with a "headless browser" |
| 04:04 | aurelian | afaik -- phantomjs and ajax: basically you'll have to wait some seconds after making the call |
| 04:05 | aurelian | as in "I make ajax call to /news.php and I wait for 5 seconds" |
| 04:05 | aurelian | "then I should see rainbows" |
| 04:05 | keep_learning | AeroNotix, http://docs.behat.org/en/v2.5/cookbook/behat_and_mink.html |
| 04:05 | keep_learning | AeroNotix, It's written there |
| 04:06 | keep_learning | aurelian, I waiting there till the time |
| 04:06 | AeroNotix | keep_learning: bollocks. |
| 04:06 | keep_learning | page is loaded |
| 04:06 | keep_learning | (t/get-url "https://www.tripadvisor.in") |
| 04:06 | keep_learning | (t/wait-until #(= (t/title) "TripAdvisor: Read Reviews, Compare Prices & Book")) |
| 04:06 | aurelian | I see |
| 04:07 | keep_learning | aurelian, My code is not working with Phantomjs |
| 04:07 | AeroNotix | keep_learning: I think it means "this implementation of a headless browser can't do ajax" |
| 04:07 | aurelian | oh, ok, have fun! |
| 04:08 | keep_learning | AeroNotix, Ok, |
| 04:08 | AeroNotix | keep_learning: doesn't TripAdvisor have an API you can use? |
| 04:08 | keep_learning | Any idea on how to solve my problem |
| 04:08 | AeroNotix | keep_learning: yes it does https://developer-tripadvisor.com/content-api/ |
| 04:09 | AeroNotix | use the API, scraping is for noobs |
| 04:09 | AeroNotix | or should be used as an extreme last resort |
| 04:11 | keep_learning | AeroNotix, In my case it's kind of last resort |
| 04:11 | AeroNotix | keep_learning: why can't you use this API? |
| 04:11 | AeroNotix | what data do you need from tripadvisor? |
| 04:11 | keep_learning | AeroNotix, Right now we are small startup |
| 04:12 | keep_learning | and trying to build some analytics over trip advisor data |
| 04:12 | keep_learning | so it's kind of commercial use. |
| 04:12 | keep_learning | and our funding is also very small |
| 04:12 | AeroNotix | and you don't want to pay |
| 04:12 | AeroNotix | yeah I'm not helping scrubs |
| 04:12 | keep_learning | for the moment |
| 04:12 | AeroNotix | good luck |
| 04:12 | keep_learning | AeroNotix, Thank you |
| 04:13 | AeroNotix | disrupt the market by implementing crappy scrapers |
| 04:13 | AeroNotix | lol |
| 04:13 | keep_learning | AeroNotix, Thank you for you suggestion but at one point every startup goes like this |
| 04:13 | keep_learning | by writing crappy software |
| 04:13 | keep_learning | and keep improving |
| 04:13 | AeroNotix | whatever. Enjoy! |
| 04:14 | keep_learning | AeroNotix, I am really enjoying this problem :) |
| 06:42 | reizuki | how do I refer to MAX_INT in clojurescript? |
| 06:43 | reizuki | The way I'm doing it in .clj, Integer/MAX_VALUE, gets highlighted as cannot be resolved by IDE |
| 06:44 | reizuki | while working perfectly well in .clj files and not being highlighted by IDE |
| 06:51 | ridcully_ | Number/MAX_VALUE then? |
| 06:52 | ridcully_ | JS only has Number for everything (or at least that is my impression) |
| 07:05 | reizuki | yeah, I found 3 actually |
| 07:06 | reizuki | Number.MAX_VALUE Number.POSITIVE_INFINITY and in a new ECMA standard Number.MAX_SAFE_INTEGER |
| 07:06 | reizuki | I just wonder how I could nicely render an infinity sign to the user when displaying Number.POSITIVE_INFINITY, which matches my use case |
| 07:08 | shanks_ | hello can somebody help me with something |
| 07:10 | shanks_ | hello |
| 07:13 | shanks_ | ? |
| 07:15 | qsys_ | :) |
| 07:15 | qsys_ | something is a little vague :p |
| 07:15 | bhajana | ^^ |
| 07:16 | qsys_ | I'm pretty sure someone can help with something |
| 07:23 | reizuki | how do I skip the string sanitation in cljs? |
| 07:24 | reizuki | when I try to print infinity sign via "∞" it gets translated to "∞" |
| 07:25 | shanks_ | oh this is my doubt: |
| 07:26 | shanks_ | does a function like (<= (*big list*)) evaluate all elements to return a result |
| 07:27 | shanks_ | or does it return false as soon as it sees one element > the next |
| 07:28 | qsys_ | shanks_ : https://clojuredocs.org/clojure.core/%3C= |
| 07:28 | qsys_ | ,(<= 2 3 4 5 6) |
| 07:28 | clojurebot | true |
| 07:28 | qsys_ | ,(<= 2 3 4 6 5 7) |
| 07:28 | clojurebot | false |
| 07:29 | qsys_ | there you have it :) |
| 07:29 | shanks_ | yes, but it does not say hw the function is evaluated |
| 07:29 | shanks_ | does it keep computing after it encounters one element > next |
| 07:30 | shanks_ | or does it return with flase right away |
| 07:30 | qsys_ | first of all, does it matter 'how'? But yeah, I suppose it is implemented smart enough to stop when the result is known... maybe checking the source might help? :p |
| 07:31 | shanks_ | (defn isSorted? |
| 07:31 | qsys_ | it stops whenever false is found: https://github.com/clojure/clojure/blob/clojure-1.7.0/src/clj/clojure/core.clj#L1020 |
| 07:32 | shanks_ | wow. this was exactly what i was looking for. thanks qsys |
| 07:34 | qsys_ | seizuki : not sure, but if I try that, it prints the string as expected (http://clojurescript.net/ web repl)... |
| 07:35 | noncom | shanks_: i'd just mention that the idiomatic code style would be (defn sorted? ...) |
| 07:35 | noncom | without "is" since there's the ?, and no camelcaes |
| 07:37 | qsys_ | seizuki : so maybe, well, some code might help (maybe, dunno)? |
| 07:38 | shanks_ | :) will keep that in mind. im a total clojure noob coming from java. so, mixed both styles :D |
| 07:40 | noncom | qsys_: reizuki: it is actually a google closure thing: http://stackoverflow.com/questions/14408377/clojurescript-and-html-entities |
| 07:40 | noncom | shanks_: yeah, instead of camelCase you'd use hyphen-case |
| 07:41 | noncom | just a note :) so you don't waste time on the wrong styling |
| 07:44 | ridcully_ | shanks_: you can also do (source <) in your repl |
| 07:50 | noncom | i have that idea of creating some nodey thing of clojure, like i want to have clojure daemon running on some computers, like on my home and a few work computers, so i could instantaneously control some node with clojure and have a seamless integration, kinda like erlang or something, is there any downside to this apart from security and jvm hunger? |
| 07:56 | xemdetia | noncom, I don't think there should be. I mean that is the principle of most distributed systems |
| 07:58 | xemdetia | I mean with that problem description you may as well just describe an ssh session to any random unix box. |
| 07:58 | noncom | yeah |
| 07:58 | noncom | looks like so |
| 07:59 | noncom | the idea is to have a clojure OS shell instead of bash though |
| 07:59 | noncom | or even instead of windows cmd |
| 08:00 | xemdetia | well that's fine too, but the principle is sound. How you do it is up to you |
| 08:41 | shanks_ | hey guys, |
| 08:41 | shanks_ | can somebody check this code http://pastebin.com/u7apZ4Su |
| 08:42 | shanks_ | why is function much slower than the original '<= ' function? |
| 08:44 | ghost_ | Idiomatic way of creating a deck of cards? |
| 09:08 | noncom | how do i kill a cider repl buffer with the repl in it properly? just like a regular buffer? |
| 09:10 | vijaykiran | M-x cider-quit |
| 09:26 | keep_learning | ,(get {:a 1, :b 2, :c 3} :a) |
| 09:26 | clojurebot | 1 |
| 09:27 | keep_learning | ,(:a {:a 1, :b 2, :c 3}) |
| 09:27 | clojurebot | 1 |
| 09:27 | keep_learning | (:content {:tag :a, :attrs {:href "/Hotels-g304554-oa390-Mumbai_Bombay_Maharashtra-Hotels.html#ACCOM_OVERVIEW", :data-page-number "14", :data-offset "390", :class "pageNum last taLnk", :onclick "ta.hac.filters.paging(this, event); ta.trackEventOnPage('STANDARD_PAGINATION', 'last', '14', 0);"}, :content ("14")}) |
| 09:28 | keep_learning | ,(:content {:tag :a, :attrs {:href "/Hotels-g304554-oa390-Mumbai_Bombay_Maharashtra-Hotels.html#ACCOM_OVERVIEW", :data-page-number "14", :data-offset "390", :class "pageNum last taLnk", :onclick "ta.hac.filters.paging(this, event); ta.trackEventOnPage('STANDARD_PAGINATION', 'last', '14', 0);"}, :content ("14")}) |
| 09:28 | clojurebot | #error {\n :cause "java.lang.String cannot be cast to clojure.lang.IFn"\n :via\n [{:type java.lang.ClassCastException\n :message "java.lang.String cannot be cast to clojure.lang.IFn"\n :at [sandbox$eval73 invokeStatic "NO_SOURCE_FILE" 0]}]\n :trace\n [[sandbox$eval73 invokeStatic "NO_SOURCE_FILE" 0]\n [sandbox$eval73 invoke "NO_SOURCE_FILE" -1]\n [clojure.lang.Compiler eval "Compiler.java" 6... |
| 09:29 | keep_learning | Could some one please tell what is wrong with this code |
| 09:29 | keep_learning | I am trying to extract the :content |
| 09:31 | ridcully_ | keep_learning: ("14") |
| 09:32 | ridcully_ | ,("14") |
| 09:32 | clojurebot | #error {\n :cause "java.lang.String cannot be cast to clojure.lang.IFn"\n :via\n [{:type java.lang.ClassCastException\n :message "java.lang.String cannot be cast to clojure.lang.IFn"\n :at [sandbox$eval97 invokeStatic "NO_SOURCE_FILE" 0]}]\n :trace\n [[sandbox$eval97 invokeStatic "NO_SOURCE_FILE" 0]\n [sandbox$eval97 invoke "NO_SOURCE_FILE" -1]\n [clojure.lang.Compiler eval "Compiler.java" 6... |
| 09:32 | ridcully_ | ,'("42") |
| 09:32 | clojurebot | ("42") |
| 09:34 | keep_learning | ridcully_, Thank you |
| 09:55 | lokien_ | How to manage state here? I'm doing a card game and I need some kind of state |
| 09:57 | ridcully_ | isn't some "game" value enough? |
| 09:58 | ridcully_ | e.g. a game has players with cards in hands, the pile, ... |
| 09:59 | lokien_ | Isn't that.. Too many values? |
| 10:00 | ridcully_ | its a map |
| 10:00 | lokien_ | Isn't that too many maps? |
| 10:01 | lokien_ | And maps of maps |
| 10:02 | ridcully_ | well i don't know, what card game you are dealing with. but i'd start out with a map that represents the whole game. and then use functions to describe the legal actions to transform the game into it's next step |
| 10:03 | geirby | that's the way. An atom pointing to a map of maps (tree). Think of it as a single database |
| 10:03 | lokien_ | Mau Mau. I think it isn't very popular in US/UK |
| 10:04 | lokien_ | I need to represent state of a "stack" where card's "superpowers" are waiting to evaluate |
| 10:04 | ridcully_ | ah that's neunerln here |
| 10:04 | lokien_ | Hard to describe to someone who hasn't play the game |
| 10:05 | lokien_ | ridcully_: yeah, that's exactly it |
| 10:06 | lokien_ | Wouldn't having state simplify things a lot? |
| 10:08 | ridcully_ | wouldnt it just separate things? |
| 10:08 | ridcully_ | each step in that game has some clear outcome |
| 10:09 | lokien_ | So, just game and functions to transform it? |
| 10:11 | ridcully_ | if you need an example get going, on this years conj(?) one presentation was about modelling a card game |
| 10:12 | lokien_ | Oh, thanks, I'll watch it |
| 10:13 | lokien_ | (do you remember the title? ridcully_ ) |
| 10:13 | ridcully_ | https://www.youtube.com/watch?v=Tb823aqgX_0 |
| 10:14 | lokien_ | You're wonderful |
| 11:04 | somnasper_ | What's the state of Clojure with respect to WebGL, right now? I've seen GitHub experiments, but nothing much substantial |
| 11:05 | somnasper_ | Is that because Clojure + Threejs is such a nonissue, or because the mutable state causes issues? |
| 11:05 | justin_smith | somnasper_: in our project we used js code to do webgl, then left some externs to start it up. We don't use cljs with webgl directly. |
| 11:05 | justin_smith | somnasper_: that stuff's just clumsy from cljs imho |
| 11:05 | somnasper_ | Thanks, justin. I figured that was probably the usual course of action |
| 11:09 | dnolen | somnasper_: justin_smith: hrm? |
| 11:09 | dnolen | Clojure + Three.js isn't a thing |
| 11:09 | dnolen | ClojureScript + Three.js is a thing |
| 11:09 | justin_smith | dnolen: yes, I did clarify cljs |
| 11:10 | dnolen | toxi has a zillion libs around this stuff so clearly it can be done quite well |
| 11:11 | dnolen | http://thi.ng |
| 11:17 | troydm | I seem to have a very strange issue with core.logic and really very nested vector data structure (like 12 vectors down the tree structure) |
| 11:18 | troydm | it seems like even when I do (run* [q] (== q data)) it stucks executing some function which I'm not familiar with |
| 11:18 | troydm | the data itself is already computed |
| 11:18 | troydm | now my guess is that it stucks when trying to printout the actual structure |
| 11:19 | dnolen | troydm: doubtful, if you have enough recursion you'll likely get stuck |
| 11:19 | dnolen | in that the search space has become too large |
| 11:19 | troydm | dnolen: (run* [q] (== q data)) this is the actual code that get's stuck |
| 11:20 | troydm | data is already computed nested vector |
| 11:20 | troydm | I'm only trying to bind it to q variable |
| 11:20 | dnolen | @troydm need a minimal case, otherwise sounds unlikely |
| 11:20 | troydm | dnolen: yeah I'll try to reproduce that issue on a minimal case |
| 11:23 | luxbock | bb |
| 11:23 | luxbock | ops |
| 12:04 | noncom | in emacs prelude clojure more how do i disable the "over 80 chars in the line" special illumination? |
| 12:37 | nys- | hello |
| 12:46 | justin_smith | noncom: that's going to be part of whitespace-mode |
| 12:46 | justin_smith | noncom: check out M-x customize-group whitespace-mode<return> |
| 12:46 | justin_smith | err, no, customize-group whitespace |
| 12:46 | justin_smith | not whitespace-mode |
| 12:48 | noncom | justin_smith: found that: http://joxi.ru/GrqM17YFNkXW8r is this correct or should i set something else there? |
| 12:48 | justin_smith | noncom: you can customize the face used for going over 80 chars, or change that number 80 to a different one |
| 12:48 | noncom | if i set nil it says it will use fill-column.. :/. |
| 12:49 | noncom | looks like the 99999 have no effect |
| 12:49 | justin_smith | yeah, a large number works if you never want that warning (as would default-face for the long line face) |
| 12:49 | justin_smith | noncom: you probably have to turn global-whitespace-minor-mode off and then on again |
| 12:50 | justin_smith | noncom: ah! M-x global-whitespace-toggle-options |
| 12:50 | justin_smith | that's your ticket |
| 12:50 | noncom | yeah, just killed-reopened the buffer it worked. so i switch it off-on globally |
| 12:51 | justin_smith | OK, - but global-whitespace-toggle-options is still worth checking out |
| 12:52 | noncom | i did - thre're some options that could be toggled for me globally, i toggled the face option |
| 14:04 | devth | defonce, y u no accept a docstring? |
| 14:06 | nys- | let requires an even number of forms in binding vector <-- can somebody explain this? |
| 14:07 | devth | (let [x 1]) |
| 14:07 | ridcully_ | (let [a 1 b 2]) |
| 14:07 | nys- | (let [[first-name last-name & aliases] (list "Rich" "Hickey" "The Clojurer" "Go Time" "Lambda Guru")] (str first-name last-name (clojure.string/join " aka " aliases))) |
| 14:07 | justin_smith | nys-: you can't have a binding without a value or value without a binding in let's binding vector |
| 14:07 | devth | 2, 4, etc |
| 14:08 | ridcully_ | nys-: this is an even number. the first one is a vector the second one a list. what you see there is destructuring |
| 14:08 | nys- | yup. this is from the clojure koans |
| 14:09 | nys- | I dont really get why this isn't working then? wouldn't this be an even number? |
| 14:09 | devth | it does work |
| 14:09 | ridcully_ | what is "does not work"? |
| 14:10 | ridcully_ | if the test there fails, its most likely due to missing " " in your str |
| 14:10 | nys- | I added that " " |
| 14:10 | nys- | but my repl is complaining of the non-even binding vectors |
| 14:10 | justin_smith | after last-name too |
| 14:10 | devth | ,(let [[first-name last-name & aliases] (list "Rich" "Hickey" "The Clojurer" "Go Time" "Lambda Guru")] (str first-name last-name (clojure.string/join " aka " aliases))) |
| 14:10 | nys- | thats it ^ i think |
| 14:11 | clojurebot | "RichHickeyThe Clojurer aka Go Time aka Lambda Guru" |
| 14:11 | justin_smith | two missing spaces |
| 14:17 | nys- | good stuff |
| 14:17 | nys- | my problem was that i was breaking the let function into multiple lines in repl |
| 14:17 | nys- | which is why i got that error |
| 14:18 | justin_smith | why would line breaks change anything about let? |
| 14:19 | nys- | i dont know, I put the expression in one line and i actually got a string returned and not that error :x |
| 14:20 | nys- | i'm very new to this, so sorry if this is very newbie |
| 14:21 | justin_smith | nys-: it's just that I can't think of a valid let block where a line break would change it from a correct one to incorrect, unless the line break was in the middle of a symbol |
| 14:24 | kopasetik | Question: How do I turn a number into a vector of its digits? |
| 14:25 | BRODUS | ,(into [] ((comp seq str) 123)) |
| 14:26 | clojurebot | [\1 \2 \3] |
| 14:26 | ridcully_ | ,(map #(- (int %) (int \0)) (str "42666")) |
| 14:26 | clojurebot | (4 2 6 6 6) |
| 14:27 | justin_smith | BRODUS: that seq call is redundant |
| 14:27 | justin_smith | ,(into [] (str 123)) |
| 14:27 | clojurebot | [\1 \2 \3] |
| 14:29 | BRODUS | didn't realize that, since I thought strings weren't sequences |
| 14:29 | BRODUS | i mean, i didn't realize that into did the conversion |
| 14:30 | kopasetik | BRODUS: Thanks! |
| 14:33 | justin_smith | ,(reverse (ffirst (drop-while (comp not zero? second) (iterate (fn [[i r]] [(conj i (rem r 10)) (quot r 10)]) [[] 420])))) |
| 14:33 | clojurebot | (4 2 0) |
| 14:33 | justin_smith | in case you want to do it without strings / chars :) |
| 14:34 | justin_smith | ,(ffirst (drop-while (comp not zero? second) (iterate (fn [[i r]] [(conj i (rem r 10)) (quot r 10)]) [() 420]))) ; simplified |
| 14:34 | clojurebot | (4 2 0) |
| 15:10 | Trioxin | okay so.. I can do some basic things in clojure. still learning best practices but now I'm interested in what to do should I want to use some java lib that nobody has wrapped or whatever for clojure. is there a tutorial for this? |
| 15:10 | justin_smith | Trioxin: have you looked at the clojure.org page on interop? I'd play with some basic classes in the repl (things like Date or UUID). |
| 15:11 | Trioxin | k |
| 15:11 | justin_smith | Trioxin: http://clojure.org/java_interop in case you have not seen it |
| 15:11 | justin_smith | ,(.getTime (java.util.Date.)) ; simple interop |
| 15:11 | clojurebot | 1450901505490 |
| 15:13 | Trioxin | that's built into java though right? from this page it looks like using other classes is a bit of a task. I was hoping for some code generating or conversion tool |
| 15:13 | justin_smith | Trioxin: what? |
| 15:13 | justin_smith | Trioxin: if you have a dep that pulls it in, it can be used as above |
| 15:14 | Trioxin | ooooh |
| 15:14 | favetelinguis | is there a way to check the status of a core async channel, im trying to use close! but not sure if the channel is closed |
| 15:14 | justin_smith | so you use lein or boot or whatever to specify you want that artifact, the interop syntax will work with objects in that class |
| 15:15 | justin_smith | favetelinguis: if reading from a channel returns nil it is closed |
| 15:15 | Trioxin | duh "Member Access" doesn't imply having to do anything crazy |
| 15:15 | justin_smith | Trioxin: right, if you know the field name its simple |
| 15:15 | justin_smith | Trioxin: interop is a lot easier than most people who don't use it think it would be |
| 15:16 | Trioxin | so I'll be using the class but it's not the same exactly like I'm dealing with instantiation and inheritance and all that? |
| 15:19 | justin_smith | Trioxin: I don't think I understand that question |
| 15:19 | justin_smith | Trioxin: instantiating a class is straightforward (java.util.Date.) make a new date object using the no-arg constructor |
| 15:20 | justin_smith | ,(java.util.Date. 0) ; epoch |
| 15:20 | clojurebot | #inst "1970-01-01T00:00:00.000-00:00" |
| 15:21 | justin_smith | ,(java.net.URL. "http://example.com") |
| 15:21 | clojurebot | #error {\n :cause "denied"\n :via\n [{:type java.net.MalformedURLException\n :message "denied"\n :at [java.net.URL <init> "URL.java" 619]}\n {:type java.lang.SecurityException\n :message "denied"\n :at [clojurebot.sandbox$enable_security_manager$fn__835 invoke "sandbox.clj" 69]}]\n :trace\n [[clojurebot.sandbox$enable_security_manager$fn__835 invoke "sandbox.clj" 69]\n [clojurebot.sandbo... |
| 15:21 | justin_smith | :P |
| 15:21 | justin_smith | bots |
| 15:21 | dnolen | http://swannodette.github.io/2015/12/23/year-in-review/ |
| 15:42 | jonathanj | is there a convenient way to turn a prismatic schema validation error into something more user-friendly? |
| 16:38 | TimMc | jonathanj: If you find out, let me know! |
| 16:38 | TimMc | I haven't tried super hard to find out, and certainly not recently, but it was a mildly annoying thing a while back. |
| 17:15 | Trioxin | omg i ate too much shrooms what do I do |
| 17:15 | Trioxin | code? |
| 17:15 | Trioxin | yes |
| 17:15 | devth | ,(doc shrooms) |
| 17:15 | clojurebot | excusez-moi |
| 17:16 | Trioxin | lol |
| 17:17 | sdegutis | ToxicFrog: ugh not the shrooms again |
| 17:17 | justin_smith | Trioxin: the best thing to do on shrooms is learn vi |
| 17:17 | justin_smith | or ed, if you already know vi |
| 17:17 | sdegutis | cant even spell ur own name rite lol |
| 17:18 | Trioxin | sed? |
| 17:18 | Trioxin | vi is just a text editor right? |
| 17:18 | Trioxin | i always use pico/nano |
| 17:18 | justin_smith | Trioxin: it's a text editor which will be maximally enjoyable while tripping |
| 17:21 | Trioxin | haven't actually done that in a few years but when I do I'm typically out doing some craziness though the possible meditation value is not lost on me. Coding though? doubt much good would come of it |
| 17:22 | Trioxin | or maybe some breakthrough. The double helix was imagined on lsd |
| 17:22 | justin_smith | Trioxin: I figured if you were managing IRC you couldn't actually be very far gone |
| 17:23 | sdegutis | What about that regex based one that Go Man uses? |
| 17:23 | sdegutis | Oh yeah. Sam and Acme. |
| 17:23 | sdegutis | Do you use those? |
| 17:23 | justin_smith | sdegutis: same is awesome |
| 17:23 | justin_smith | *sam |
| 17:23 | sdegutis | I have a hard time believing that. |
| 17:23 | sdegutis | If it was, you would be using it. |
| 17:23 | justin_smith | acme is pretty cool if you have a real 3 button mouse |
| 17:24 | justin_smith | sdegutis: it's not extensible like emacs is, and three isn't a good distro of it anymore |
| 17:24 | Trioxin | never heard of those |
| 17:24 | sdegutis | justin_smith: my mouse is 3 button afaik, third is scroll wheel |
| 17:24 | sdegutis | justin_smith: but I'm not a fan of using it |
| 17:24 | sdegutis | not in my text editor |
| 17:25 | justin_smith | sdegutis: yeah, that sucks for acme, because acme does chords - like "click buttons 2 and 3 together for this action" which sucks on that kind of mouse |
| 17:25 | sdegutis | ah |
| 17:25 | sdegutis | emacs tho is a solid 5/7 |
| 17:25 | sdegutis | super customizeable |
| 17:25 | justin_smith | you want like a proper 3-real-buttons mouse, which you basically can't get any more |
| 17:25 | sdegutis | i used to have that one once |
| 17:25 | Trioxin | jetbrains ftw |
| 17:25 | justin_smith | yeah, that's why I'm using it - also inertia of course |
| 17:26 | sdegutis | naturally |
| 17:27 | Trioxin | jetbrains should make an ide that combines all their products since all their IDEs are the same with different tools |
| 17:27 | Trioxin | the VS of jetbrains so to speak |
| 17:27 | ridcully_ | ultimate is basically this |
| 17:27 | Trioxin | oh |
| 17:27 | ridcully_ | might lack c++ and c# |
| 17:28 | BRODUS | what makes jetbrains so good? |
| 17:28 | sdegutis | Got a good Forth tutorial please? |
| 17:29 | sdegutis | All ones I find are either too verbose with unnecessary irrelevant details, or too primitive. |
| 17:33 | Trioxin | BRODUS, it just is. i've never had any complaints. that's not to say others aren't good too but I started using it a long time ago and am used to it. |
| 17:35 | taf | BRODUS, I'm a big fan of how they handle "shortcuts" with search boxes for commands, means you don't have to memorise loads of key combinations |
| 18:28 | btcNeverSleeps | Long story short: working at the REPL, not realizing project ain't compiling, made several commits. Try to run lein test, failure. Try to cider-jack-in: fail. |
| 18:28 | btcNeverSleeps | Error is now very cryptic and hard to track. |
| 18:29 | btcNeverSleeps | Is this common? |
| 18:30 | btcNeverSleeps | All I've got is a super long stack trace and the only sense I can make out of it is: "something fails to compile", but I don't understand what. |
| 18:34 | jessicaj | hi |
| 18:35 | skdjfhaskjdfhdas | hi |
| 18:35 | skdjfhaskjdfhdas | i'm looking for a way of converting an empty list to the string "()" |
| 18:35 | skdjfhaskjdfhdas | when i call str on [], i get "[]" |
| 18:35 | skdjfhaskjdfhdas | likewise, str on #{} gives me "#{}" and str on {} gives me "{}" |
| 18:36 | skdjfhaskjdfhdas | but calling str on '() gives me "clojure.lang.PersistentList$EmptyList@1" |
| 18:36 | rhg135 | ,((comp str seq) []) |
| 18:36 | clojurebot | "" |
| 18:36 | rhg135 | ,((comp pr-str seq) []) |
| 18:36 | clojurebot | "nil" |
| 18:37 | rhg135 | ,((comp pr-str empty) []) |
| 18:37 | clojurebot | "[]" |
| 18:37 | sfz- | ,(pr-str '()) |
| 18:37 | clojurebot | "()" |
| 18:37 | rhg135 | ,((comp pr-str list seq) []) |
| 18:37 | clojurebot | "(nil)" |
| 18:37 | rhg135 | ,((comp pr-str list* seq) []) |
| 18:37 | clojurebot | "nil" |
| 18:37 | sfz- | skdjfhaskjdfhdas: (pr-str '()) |
| 18:38 | skdjfhaskjdfhdas | sfz-: thanks! |
| 20:50 | felixn | https://gist.github.com/munro/36f82883eb89d38c4452 <-- anyone have some tips to clean this function definition up? core.logic function to solve concat vars |
| 20:51 | justin_smith | felixn: I don't know if line 1 was just a side effect of simplifying your real code, but it's a no-op |
| 20:51 | felixn | just put it there to show what m/ was |
| 20:51 | justin_smith | OK, makes sense |
| 20:52 | justin_smith | ,(:use '[this does nothing]) |
| 20:52 | clojurebot | nil |
| 21:40 | sdegutis | Hi. |
| 21:40 | sdegutis | justin_smith: you awake? |
| 21:40 | justin_smith | sup |
| 21:40 | sdegutis | justin_smith: you ever wrote you a prog lang? |
| 21:41 | justin_smith | I kind of tried once it wasn't good |
| 21:41 | sdegutis | :D |
| 21:41 | sdegutis | man its just a dream i just cant shake |
| 21:57 | justin_smith | sdegutis: my town has a bird named owl capone and it is known for unprovoked attacks on on cyclists and pedestrians |
| 21:58 | TEttinger | justin_smith, haha |
| 21:58 | TEttinger | same bird? |
| 21:58 | sdegutis | justin_smith: well then! |
| 21:58 | justin_smith | TEttinger: yes, it's a single owl who likes to attack and harass humans |
| 21:59 | TEttinger | we have a cute lil' babby owl that makes freaky noises at night but is durn cute |
| 21:59 | TEttinger | (in our neighborhood here) |
| 21:59 | sdegutis | justin_smith: while my wife and i surely did enjoy that antidote, I can't quite figure out the relevance |
| 21:59 | TEttinger | also red-whiskered bulbuls |
| 21:59 | TEttinger | (which aren't even native to this hemisphere) |
| 21:59 | justin_smith | sdegutis: not really relevant at all |
| 21:59 | sdegutis | justin_smith: well i enjoyed it! |
| 22:01 | justin_smith | TEttinger: https://twitter.com/despair/status/679136039303278593 |
| 22:01 | TEttinger | not sure if I should open chrome now; copying several million files (again) (different larger files) |
| 22:01 | sdegutis | justin_smith: merry christmas! |
| 22:01 | justin_smith | and to you as well |
| 22:02 | sdegutis | aww you're so nice |
| 22:03 | TEttinger | I got a christmas present. I found out about windows robocopy utility |
| 22:03 | sdegutis | ok i really need to buckle down and figure out what to do with my time instead of wasting all of it |
| 22:03 | sdegutis | TEttinger: is it great? |
| 22:03 | TEttinger | it seems quite a bit faster that copy or gnuwin32 cp |
| 22:04 | sdegutis | oooh, my only experience with using copy on windows is that i installed cygwin for my son to experient with C and Lua and it has 'cp' |
| 22:04 | sdegutis | so that's convenient. |
| 22:04 | TEttinger | this is a step it's doing now that previously either listed every file as it copied it (using copy, but slightly faster it seems) or has to list a wildcard's contents before copying and that's slow |
| 22:05 | justin_smith | TEttinger: I am sure robocopy is an improvement over the previous version "remove that file from the recycling bin, you have 15 seconds to comply" |
| 22:05 | TEttinger | cp was slowest by a good amount on this windows 7 machine, then copy was faster, then robocop is a pretty incredibad movie, then robocopy is pretty good |
| 22:06 | TEttinger | it appears to have copied about 20K not-tiny files in the span of this conversation |
| 22:07 | sdegutis | TEttinger:LOL |
| 22:07 | sdegutis | good pun bro i like that pun |
| 22:07 | TEttinger | might be a lot more |
| 22:07 | sdegutis | more puns coming up you mean? |
| 22:07 | TEttinger | I think justin_smith made the reference first! |
| 22:07 | sdegutis | i could be okay with that |
| 22:07 | sdegutis | oh man! |
| 22:07 | sdegutis | i totally didnt even understand his reference! |
| 22:08 | TEttinger | also searching for robocopy gets you lots of results for robocop |
| 22:08 | sdegutis | i tought it was just some pushy dialog that windows users know about |
| 22:08 | TEttinger | does gnu cp have a multi-threaded option on linux? |
| 22:10 | justin_smith | TEttinger: not that I can see, and it wouldn't make much sense to cp on more than one thread - all the CPU work needed should be doable in much less time than you have to wait for hardware anyway. |
| 22:10 | justin_smith | TEttinger: maybe with an encrypted system multi-threading cp would help? |
| 22:10 | TEttinger | no idea |
| 22:10 | TEttinger | I know there is a CPU-based step |
| 22:11 | TEttinger | (figuring out what to copy) |
| 22:11 | justin_smith | TEttinger: reductio ad absurdum version - you need your files printed faster, so you start a new thread for each print job |
| 22:11 | justin_smith | TEttinger: sure, but I assure you waiting for the hardware is the bottle neck |
| 22:11 | TEttinger | for cp it actually isn't at first |
| 22:11 | TEttinger | cp takes two steps, one it writes no files |
| 22:12 | TEttinger | (at least here) |
| 22:12 | justin_smith | TEttinger: right, but the read is also bound by the physical medium, not computation speed |
| 22:12 | TEttinger | it is probably reading like mad though |
| 22:25 | sdegutis | TEttinger: what are you copying that takes so long? |
| 22:25 | sdegutis | personally my advice is to delete it |
| 22:25 | sdegutis | not worth the time, man. |
| 22:25 | justin_smith | sdegutis: star wars episode IVII |
| 22:25 | justin_smith | err, wait |
| 22:25 | justin_smith | I mean ILII |
| 22:25 | justin_smith | ,(require 'clojure.pprint) |
| 22:26 | clojurebot | nil |
| 22:26 | TEttinger | sdegutis: it's uh a lot of rendered images |
| 22:26 | justin_smith | ,(clojure.pprint/cl-format nil "~@r" 42) |
| 22:26 | clojurebot | "XLII" |
| 22:26 | justin_smith | ahh, that's the one |
| 22:26 | TEttinger | ,(Math/pow 2 20) |
| 22:26 | clojurebot | 1048576.0 |
| 22:26 | TEttinger | ,(Math/pow 2 21) |
| 22:26 | clojurebot | 2097152.0 |
| 22:26 | sdegutis | ,(clojure.pprint/print-table [:a :b] [{:a 1 :b 2} {:a 3 :b 4}]) |
| 22:26 | clojurebot | \n| :a | :b |\n|----+----|\n| 1 | 2 |\n| 3 | 4 |\n |
| 22:26 | TEttinger | that's on par |
| 22:26 | sdegutis | I use that. It's nice. |
| 22:27 | TEttinger | oh crap! |
| 22:27 | TEttinger | I'm copying way more than needed |
| 22:28 | sdegutis | 4% battery |
| 22:28 | sdegutis | guys |
| 22:29 | sdegutis | im prolly gonna exit |
| 22:29 | sdegutis | by circumtance |
| 22:29 | sdegutis | sorry im not good at goodbyes |
| 22:30 | sdegutis | justin_smith: thanks for always being so helpful |
| 22:30 | sdegutis | oh man 3% til the laptop dies |
| 22:30 | justin_smith | sdegutis: you know if you have one of those new-fangled computers that can charge via usb-c you can get a battery pack that will fill your laptop twice for less than $50 and if you get on amazon real quick it might come in the mail before your batteries run out |
| 22:30 | sdegutis | justin_smith: you can have my stereo |
| 22:30 | justin_smith | sdegutis: np |
| 22:31 | sdegutis | oh wait 4% still woooo |
| 22:33 | sdegutis | justin_smith: you cant have my stereo until im gone |
| 22:33 | justin_smith | k |
| 22:33 | sdegutis | ok this joke is too dark now |
| 22:33 | sdegutis | gonna stop it w/ the dark joke |
| 22:34 | justin_smith | sdegutis: don't go softly into the dark night, rage rage at the falling of the light! |
| 22:34 | justin_smith | or however that goes |
| 22:35 | sdegutis | sorry i dont listen to 80s songs |
| 22:35 | sdegutis | so i dunno how it gos |
| 22:36 | justin_smith | TIL Dylan Thomas was an 80's song |
| 22:36 | sdegutis | im not into pokemon so i dunno who thomas dylan is sorry |
| 22:48 | TEttinger | justin_smith: isn't that a famous poem or something? |
| 22:48 | justin_smith | TEttinger: yes, quoted badly from memory, and an apt riff on his talking about "going dark" when he ran out of laptop battery, I thought |
| 22:48 | TEttinger | mm |
| 22:49 | TEttinger | I prefer "I WARNED YOU DOG! I TOLD YOU ABOUT STAIRS!" as my anecdote for when someone drops offline |
| 22:50 | TEttinger | sweet, even with filtering out files I'm not using (an extra step), it seems faster |
| 22:51 | sdegutis | i like the raven one better |
| 22:52 | sdegutis | it rhymes and has good timing |
| 22:52 | sdegutis | quoth the raven, "nopin on outta here" |
| 22:52 | sdegutis | or smth |
| 22:56 | TimMc | OK, I want to rename my URL library. Is "earl" a terrible name? |
| 22:56 | TimMc | get it get it |
| 22:56 | justin_smith | duke |
| 22:56 | TEttinger | the java mascot? |
| 22:56 | TimMc | Why duke? |
| 22:56 | TEttinger | duke of earl |
| 22:56 | sdegutis | TimMc: i like it |
| 22:56 | TEttinger | duke of url |
| 22:56 | sdegutis | TimMc: you have my vote |
| 22:57 | TEttinger | urletha franklin |
| 22:57 | TimMc | TEttinger: I... see. |
| 22:57 | TimMc | ha |
| 22:57 | TimMc | Also, how do I tell if someone is already using the name I want? |
| 22:57 | TEttinger | Burle |
| 22:58 | TimMc | Maybe "earnest". |
| 22:58 | TEttinger | Furl |
| 22:58 | justin_smith | TimMc: did you know the English used the title Earl instead of Count because of a common mishearing of the latter? True story. |
| 22:58 | sdegutis | TimMc: https://github.com/search?utf8=%E2%9C%93&q=earl |
| 22:58 | TEttinger | Sorrel |
| 22:58 | sdegutis | TimMc: thats the canonical repository of taken project names |
| 22:58 | BRODUS | whURLwind |
| 22:58 | TEttinger | Purl (not to be confused with prl) |
| 22:58 | TEttinger | perl |
| 22:58 | sdegutis | TimMc: AND MY AXE! |
| 22:58 | TEttinger | Squrl |
| 22:59 | TimMc | Hmm, that github search turns up too many URL-related libs. |
| 22:59 | BRODUS | TURLTLE |
| 22:59 | TEttinger | Gurl, followed quickly by new releases Gurrl, Gurrrl, and Gurrrrrrrrrrl |
| 22:59 | justin_smith | TimMc: I am going to make a twitter specific URL api, urly-bird |
| 22:59 | TimMc | TEttinger: winner |
| 22:59 | sdegutis | hmm i think i waited too long to make that reference |
| 22:59 | justin_smith | (throw "oh no you dint") |
| 22:59 | TEttinger | ha |
| 23:00 | TimMc | It's currently called johnny and I was thinking of versioning it as johnny2, johnny3, etc. |
| 23:00 | TEttinger | mm-hm. |
| 23:00 | justin_smith | TimMc: but then you'll end up hittin johnny5 |
| 23:00 | TimMc | yep! |
| 23:00 | sdegutis | oh man |
| 23:00 | rhg135 | Johnny43 |
| 23:01 | sdegutis | that brings back memories |
| 23:01 | sdegutis | i suddenly feel so sad for a robot |
| 23:01 | justin_smith | TimMc: regarding the etymology of Earl, it wasn't an issue for female royalty, and they are still called Countess, there is no female equivalent to the title Earl |
| 23:01 | sdegutis | WAIT A SECOND |
| 23:02 | sdegutis | THIS GUY LOOKS LIKE STEVE JOBS https://en.wikipedia.org/wiki/Short_Circuit_2 |
| 23:03 | justin_smith | the fact that there is a thing called an Earldom seems prime for an awesome ajax/react flavored pun |
| 23:04 | TimMc | I was originally calling it "johnny" because I wrote it in anger; the complaint was "why can't johnny read URLs". |
| 23:04 | justin_smith | historically, earldoms were replaced by shires |
| 23:04 | justin_smith | TMYK |
| 23:04 | TEttinger | there's also the really agonizng wikipedia page on "pearling", which I suggest never looking up ever especially at work |
| 23:05 | sdegutis | plot twist: it's about the really tedious job of farming oysters for their pearls |
| 23:05 | TEttinger | parts of me hurt thinking about it |
| 23:05 | justin_smith | TEttinger: perling is one of the two essential parts of knitting, the other being called knitting, funny enough |
| 23:05 | TEttinger | this is with an a |
| 23:05 | justin_smith | I know |
| 23:05 | TEttinger | and it's purl I thought |
| 23:05 | TimMc | But now it's almost ready for beta, and johnny the library *can* read URLs, so the clever title is now really stupid. |
| 23:06 | justin_smith | TEttinger: oh you are correct |
| 23:06 | justin_smith | earldoms were replaced by shires, so I say shire |
| 23:06 | justin_smith | dunno |
| 23:06 | TimMc | Maybe "earnest" would be a good name. |
| 23:07 | TEttinger | I think any wikipedia page that is in the category of body modification and includes something like "in russian prisons" is gonna be a pretty painful read |
| 23:07 | justin_smith | TEttinger: challenge: find a wikipedia page for a body modification that causes no physical pain |
| 23:07 | TEttinger | oddly enough, "in swedish prisons" wouldn't be bad at all |
| 23:07 | TEttinger | stick on tattoos |
| 23:08 | TEttinger | dentures |
| 23:08 | justin_smith | TEttinger: the page must mention "body modification" |
| 23:08 | TEttinger | not doin' it |
| 23:08 | TEttinger | IIRC the pearling page has uh pictures. but I think I've blocked them from memory |
| 23:10 | TimMc | good ol' wikipedia |
| 23:10 | TEttinger | I had a nice book about animals that right near the end had a two-full-page closeup of a solifugid's "face" I think it was. |
| 23:11 | TEttinger | I think that book went flying shut at that point |
| 23:13 | TEttinger | I mean, if you're making a horror game, you don't really need to start making up horrible creatures. wikipedia has rather involved details on things like bedbugs and the way they reproduce, which involves stabbing internal organs hoping to hit something connected to the bloodstream so they can transfer genetic material. |
| 23:13 | TimMc | TEttinger: I have an amazing video for you: https://www.youtube.com/watch?v=5uzuYRY2faQ |
| 23:14 | TEttinger | pretty sure I'm not clicking that for a few reasons |
| 23:14 | justin_smith | TimMc: oh man, those things |
| 23:14 | TEttinger | oh yeah, nope |
| 23:14 | TEttinger | tailless whipspider agh |
| 23:14 | TEttinger | thanks my lazybot on another server |
| 23:14 | TimMc | It's a totally gorgeous but also utterly alien sight. |
| 23:14 | TEttinger | mantis shrimp are totally gorgeous/alien |
| 23:14 | TEttinger | "thumbsplitters" |
| 23:15 | TEttinger | "terrors of aquariums" |
| 23:15 | justin_smith | TimMc: the sound track is a nice touch |
| 23:15 | justin_smith | TEttinger: have you heard of bobbit worms? guess how they got the name |
| 23:15 | TimMc | justin_smith: Apparently it was used in an art piece to accompany the music. |
| 23:15 | TEttinger | oh yeah, they're pretty cool looking |
| 23:15 | TimMc | Oh yeah, I was gonna say... bobbit worms are the real terror of the aquarium. |
| 23:15 | TEttinger | what, 6 foot long underwater worm with razorjaws? |
| 23:15 | TEttinger | TimMc: uh |
| 23:16 | TEttinger | bobbit worms don't shatter the glass for fun |
| 23:16 | justin_smith | TEttinger: and they cut things in half, and cause permanent paralysis of nerves |
| 23:16 | TimMc | couldn't think of the name though |
| 23:16 | TimMc | There is that. But pistol shrimp are stronger, right? |
| 23:16 | TEttinger | no |
| 23:16 | justin_smith | I think I'd rather a smashed aquarium rather than losing a finger and never having feeling in my hand again |
| 23:17 | justin_smith | TimMc: this video is really great |
| 23:17 | TEttinger | mantis shrimp hit twice. once is a puny shrimp hit. the other is caused by recoiling so fast it creates a bubble of vacuum, that collapses at incredible speed, heating the target to temperatures around that of the surface of the sun |
| 23:18 | TEttinger | if a mantis shrimp strikes too many times, they eventually start lose the exoskeleton on their strikers |
| 23:18 | TEttinger | constantly growing, constantly trying to eat |
| 23:18 | justin_smith | like a car wearing down its brake pads |
| 23:18 | TEttinger | yep |
| 23:18 | TEttinger | if the car was creating miniature explosions to stop |
| 23:19 | justin_smith | yeah, analogy falls well short |
| 23:19 | TimMc | Cars create miniature explosions to go. :-P |
| 23:19 | TEttinger | the pistol shrimp is similar |
| 23:19 | TEttinger | but can't direct its hit in any one direction |
| 23:19 | TimMc | "miniature explosions to go", there's a startup for you |
| 23:19 | TEttinger | ha |
| 23:19 | TEttinger | underwater creatures are crazy |
| 23:19 | justin_smith | "uber, for flatulence" |
| 23:21 | TEttinger | symbion pandora for instance. location: on the "lips, or whatever those things are" of norway lobsters. Sex: M/F/Declined to State <-- male and female are circled and they took the liberty to fill in another category |
| 23:21 | justin_smith | TEttinger: oh yeah, their breeding cycle is insane |
| 23:22 | TEttinger | its lifecycle is in the territory of "wait are we talking a non-fictional animal?" |
| 23:24 | TEttinger | lobsters even. good ol ordinary lobsters. their brain is so underpowered that to flip the visual image generated by rods and cones in an eye with a lens, it would be too much work. so they make each segment of their compount eye very long and thin, with a shallow angle that forces the light to hit a mirrored surface on the sides -- flipping it with hardware |
| 23:25 | TEttinger | meanwhile, you have cuttlefish carrying out visual-language-like communication with two other cuttlefish simultaneously -- one side of the body is showing off for a female, the other is in full threat display for a male |
| 23:26 | TEttinger | every part of their skin has multiple dilate/contract muscles for the pigment spots it uses |
| 23:26 | TEttinger | (well, one muscle per spot) |
| 23:27 | TEttinger | (layers of spots though) |
| 23:27 | justin_smith | and I can't even wink properly without looking like a dumbass |
| 23:27 | TEttinger | ha |
| 23:27 | TEttinger | I can raise my left eyebrow but not my right |
| 23:29 | TEttinger | can't move my ears. can move everything else in uh unusual ways. this may hurt you to look at, but it doesn't hurt me at all really http://i.imgur.com/47RoA.jpg |
| 23:34 | TimMc | TEttinger: Both pages on Symbion pandora that I've looked at so far lack a lifecycle diagram for no particular reason I can discern. |
| 23:34 | TEttinger | awww |
| 23:34 | TEttinger | it involves asexual budding, the female destroying her digestive system to form her reproductive system to generate a ton of baby males, ete. |
| 23:35 | TEttinger | I'm sure I'm getting something wrong |
| 23:35 | TEttinger | it's very complex |
| 23:35 | TimMc | I think this one page said the female generates just one egg and then dies. |
| 23:35 | TimMc | which seems entirely wrong |
| 23:35 | TEttinger | no it's mostly right I think |
| 23:36 | TEttinger | she turns her digestive system, needed to live, into a baby |
| 23:36 | justin_smith | TimMc: http://icb.oxfordjournals.org/content/42/3/641/F2.large.jpg |
| 23:36 | TimMc | Sounds like they've decomplected gene exchange from multiplication. |
| 23:36 | TEttinger | the asexual stage I think makes more asexuals with identical DNA |
| 23:36 | TEttinger | yep |
| 23:36 | TEttinger | alien. |
| 23:37 | justin_smith | TEttinger: but stage 14 is "MALE SETTLES" - so on a deep level, I can relate |
| 23:38 | justin_smith | (followed shortly by "FEMALE ESCAPES" - story of my life) |
| 23:43 | sohail | Hey, I got the cljs repl working in Emacs, but it requires me to execute special setup code every time. Is there any way to set up project.clj to automagically execute the required setup code? |
| 23:43 | TEttinger | replacement of buccal funnel, boy if I had a nickel |
| 23:43 | justin_smith | sohail: you could define a profile with the right injection |
| 23:43 | justin_smith | TEttinger: lol |
| 23:43 | sohail | justin_smith: that sounds like what I need to do, but what is the mechanism for said injection? |
| 23:44 | sohail | ah, I think I understand. The :main function |
| 23:45 | justin_smith | sohail: https://github.com/technomancy/leiningen/blob/master/sample.project.clj#L156 - this code gets run on startup |
| 23:45 | sohail | oh that's even nicer |
| 23:45 | sohail | thanks justin_smith |
| 23:45 | justin_smith | np, good luck |
| 23:46 | devth | so i was hoping if I created an instance of a record inside a binding, that binding would stick. apparently it doesn't https://gist.github.com/devth/24c930ed95b8f7100664 |
| 23:47 | justin_smith | devth: yeah, you could manually capture the binding while inside the form, but that code actually accesses the var that leaves bound scope |
| 23:47 | devth | trying to think of any clever tricks i could use to forcibly leak the scope into the instance and make it stick. |
| 23:48 | justin_smith | the capturing version would be (let [v *foo*] v) |
| 23:48 | devth | oh. hm |
| 23:48 | justin_smith | but that would need to happen when you create the record, not inside one of its methods |
| 23:49 | justin_smith | devth: (fn [] (->AA *foo*)) would work, if you changed foo to have a field |
| 23:50 | justin_smith | err, changed AA to have a field, that is |
| 23:50 | devth | yeah |
| 23:50 | devth | the important part is that the outer dynamic var. a bunch of other fns depend on it. |
| 23:51 | devth | ok i think i need to rethink this |
| 23:52 | devth | i could do like you said and make AA take a field, then i'd have to pass that field around all over the place when using other outside fns that "AA" depends on |
| 23:53 | devth | or rebind *foo* in every one of A's function (in reality there are 10). pretty gross |
| 23:54 | justin_smith | devth: one thing to remember is if you make code that can use explicitly passed in args, that's the most flexible thing you can have. It can easily be wrapped in macros or convenience functions that use dynamic scope, or a global atom, or partial application, or whatever. |
| 23:54 | justin_smith | devth: but none of those other options are as flexible - passing the arg explicitly is the powerful and explicit form from which all of them can be derived. |
| 23:54 | devth | right |
| 23:55 | devth | this is an awkward side-effect of going from supporting a single slack configuration to multiple. i used to have a (def config (get-slack-config)) |
| 23:55 | devth | then it became (def ^:dynamic *config*) |
| 23:56 | devth | then i moved to using protocols for the first time on top of that |
| 23:56 | devth | almost like i want OOP |
| 23:56 | justin_smith | yeah - so I (and many others here) learned the hard way, each of those will code you into a corner eventually. But explicit arg passing, though tedious feeling at times, always leaves you a way out. |
| 23:56 | devth | yeah. it's starting to sound better all the time |
| 23:56 | devth | hmm |
| 23:57 | justin_smith | devth: one way to do it is with an opts map, taken as the first arg |
| 23:57 | justin_smith | or as last |
| 23:57 | justin_smith | that way in can hold as many random-ass things as you want to propagate, each can used namespaced keywords |
| 23:57 | justin_smith | and you have explicit control of the bindings in that map |
| 23:58 | devth | yep. i am quite sick of binding madness :) |
| 23:58 | devth | what do you mean by namespaced kws? |
| 23:58 | devth | :foo/bar? |
| 23:58 | devth | i usually don't have to resort to namespacing them.. |
| 23:59 | justin_smith | devth: namespacing is good because it clarifies who cares about that key |