2014-05-31
| 01:27 | kenrestivo | fifosine: actually the indenting in that if-let makes it a bit confusing. it'd be nice if the link-to was on the line below to make it clearer that it's the else branch of the if. |
| 01:38 | Frozenlock | "If none of those are a good fit you can contact our general mailbox below, and should hear back within a few weeks." Oh Automatic, how awesome of you... |
| 01:38 | Frozenlock | *automattic |
| 01:38 | Frozenlock | I think it's the first time I see a company saying they'll come back to me 'in a few weeks'. |
| 01:39 | Frozenlock | This is the Internet age... Civilizations are born, mature and dies in a few weeks. |
| 01:39 | Frozenlock | *die |
| 02:10 | tolstoy | Finally discovered "box-sizing: border-box". That sure solves a lot of problems. |
| 03:04 | danielcompton | Is company the auto complete the cool kids are using for emacs? |
| 03:06 | asdasdasdnnnn | n1=Random AU serverSERVER:irc.au.dal.net:6665-6668,7000GROUP:DALnet |
| 03:19 | zeroem | ,(merge {:foo "bar"} {:foo "baz") |
| 03:19 | clojurebot | #<RuntimeException java.lang.RuntimeException: Unmatched delimiter: )> |
| 03:19 | zeroem | ,(merge {:foo "bar"} {:foo "baz"}) |
| 03:19 | clojurebot | {:foo "baz"} |
| 03:19 | zeroem | ,(conj {:foo "bar"} {:foo "baz"}) |
| 03:19 | clojurebot | {:foo "baz"} |
| 03:31 | l3dx | hm. what's a good way to generate 2d positions? I want all [x y] within limits of width and height |
| 03:32 | AimHere | Depends what exactly you mean |
| 03:32 | AimHere | If you just want all points on a grid within x- and y- ranges, for would be a good choice |
| 03:33 | l3dx | my goal is to create a map like this {[0 0] "something" [1 0] "something} |
| 03:33 | AimHere | ,(for [x (range 3 6) y (range 3 6)] [x y]) |
| 03:33 | clojurebot | ([3 3] [3 4] [3 5] [4 3] [4 4] ...) |
| 03:34 | l3dx | oh, yes. that looks good |
| 03:34 | l3dx | thanks |
| 03:34 | AimHere | Then you can squirt it into a map with zipmap or reduce or something |
| 04:34 | fifosine | ,(for [x (range 3 6) y (range 3 6)] [x y]) |
| 04:34 | clojurebot | ([3 3] [3 4] [3 5] [4 3] [4 4] ...) |
| 05:49 | ajking | (+ 2 40) |
| 05:49 | clojurebot | *suffusion of yellow* |
| 05:50 | jjl` | has anyone written somewhere about why to use ring-server over ring-jetty-adapter? googling for something and i'm getting the impression people disrecommend the latter |
| 05:56 | muhuk | is autodoc out of question for lein2 users? http://pastebin.com/bSMWJiiG |
| 06:59 | justin_s` | jjl`: "use ring-server over ring-jetty-adaptor" is kind of like "get a vehicle instead of an automobile" |
| 07:00 | justin_s` | the point of ring-server is you can pick the backend, ring-jetty-adaptor is one of them |
| 07:02 | jjl` | ah right, gotcha |
| 07:03 | jjl` | and there's obviously less fiddling with java objects too |
| 07:04 | muhuk | codox's markdown references is awesome. Is there any way to add cross-project references? something like http://en.wikipedia.org/wiki/Special:Search?go=Go&search=clojure.core/delay ? |
| 07:05 | muhuk | (I didn't mean to wikipediaze the link) |
| 07:05 | muhuk | I suppose the only way to do that is to use a custom reader. (Especially since clojure doesn't use codox for documentation. |
| 08:44 | catern | whenever I type something in Java in the CIDER repl, it spams me with minibuffer queries for "Method name: " |
| 08:45 | catern | any ideas what the problem is? |
| 09:32 | muhuk | catern: I'm not an emacs user, but why should repl accept java? |
| 09:44 | catern | muhuk: of course I mean something like (.someMethod something) |
| 09:45 | muhuk | catern: I see. Could it be about aot compilation? |
| 09:46 | muhuk | catern: nah, you're not creating types, it's existing java classes |
| 09:46 | muhuk | catern: since you have an instance, you don't need to import anything as well |
| 09:47 | muhuk | catern: did you check `something` is really an instance of the class you think it is? |
| 09:47 | muhuk | catern: |
| 09:47 | muhuk | catern: (type something) |
| 09:48 | catern | yeah |
| 09:51 | catern | I'm trying to trigger it again, and failing. so maybe it is just a problem with importing or whatever like you said? The first time it happened I was just exploring in the REPL, and maybe I hadn't actually called the relevent things yet |
| 11:18 | Lajjla | felixflores, |
| 11:18 | Lajjla | what is your opinion on the objective-who |
| 11:31 | justin_smith | catern: this is part of the cider auto-doc stuff I think |
| 11:32 | justin_smith | catern: they have been talking about similar issues on the cider repo not long ago (I follow their issues because if it goes a few months without something that breaks the world I may just upgrade from nrepl to cider) |
| 11:35 | catern | well, at least it's a known issue, so i can assume it will be fixed eventually |
| 12:00 | justin_smith | catern: my issue is that there is massive motivation in that project to redesign the infrastructure and add features, and very little motivation to make one given release that is solid and well behaved |
| 12:01 | justin_smith | (but gtrack is getting on their case about that at least) |
| 12:33 | catern | oh, I thought it was the standard software that everyone uses |
| 12:33 | catern | Clojure For The Brave And True led me to believe that, I suppose it has lied to me ;_; |
| 12:40 | technomancy | catern: it's the most common tool, sure, but the maintainer has some very peculiar ideas about stability |
| 12:41 | technomancy | luckily with the name change people who don't want to ride the bleeding edge can stick with nrepl.el |
| 12:42 | shep-home | Has anyone successfully interacted with the Clojure JIRA installation programmatically? |
| 12:45 | rlb | should a :configurator setting in project.clj :ring work? |
| 12:45 | Lajjla | technomancy, do you know where Chousuke is at? |
| 12:56 | l3vel | I'm looking to learn clojure from a Java, Python and JavaScript background. Are there any recommended resources for this? |
| 12:59 | noncom|2 | l3vel: http://www.clojurebook.com/ |
| 13:00 | noncom|2 | considered to be *the* book |
| 13:00 | noncom|2 | and surely find a good ide |
| 13:00 | l3vel | Thank you, looks like exactly what I was looking for. |
| 13:00 | noncom|2 | if you're coming from java, try Eclipse + CounterClockWise |
| 13:01 | noncom|2 | or there are plugins for Idea and Netbeans too afail |
| 13:01 | noncom|2 | *afaik :) |
| 13:01 | noncom|2 | and of course, ask here should any irresolvable questions arise |
| 13:01 | l3vel | Thanks |
| 13:03 | rlb | doesn't looks like the project :ring :configurator is being called -- what I'm trying to do is get hold of the server instance at startup so I can find the ssl port (for redirects). Perhaps there's a better way? |
| 13:04 | rlb | (this is for a toy server, fwiw) |
| 13:08 | catern | what's an idiomatic way to take [1 2 3 4 5 6 7 8] and produce [1 3 5 7] and [2 4 6 8]? |
| 13:08 | noncom|2 | does anyone know, in emacs live, i get real-time commands proposal (at M-x), but prelude does not seem to have that. how can i add that? |
| 13:08 | whaley | i'm just getting started on clojure and I'm noticing that I'm somewhat able to write code well enough (practicing with 4clojure.com) but actually reading it requires tons of mental juggling. Can I assume that goes away with time and is just due to my not being used to prefix notation? |
| 13:09 | noncom|2 | whaley: absolutely, just go on |
| 13:10 | catern | oho |
| 13:10 | catern | take-nth |
| 13:10 | clojurebot | No entiendo |
| 13:11 | catern | silly clojurebot |
| 13:42 | justin_smith | ,(vals (group-by even? (range 1 9))) ; catern |
| 13:42 | clojurebot | ([1 3 5 7] [2 4 6 8]) |
| 13:42 | justin_smith | whaley: yeah, it is a kind of literacy |
| 13:43 | justin_smith | whaley: eventually it is actually easier to read lisp - fewer special cases can mean more quickly figuring things out |
| 13:43 | whaley | justin_smith: it was a rather new sensation... most times when I'm dinking with a new language, I find the opposite is true (reading is easy, writing is hard) |
| 13:43 | justin_smith | yeah, lisps don't try to use the conventions inherited from math history (for better and worse), most other languages do |
| 13:43 | justin_smith | *most of the conventions |
| 13:56 | tolstoy | I was kinda shocked that with Clojure (anyway), hitting the "source" button was often times actually helpful. |
| 13:56 | dbasch | another way is |
| 13:56 | dbasch | ,((juxt filter remove) even? (range 1 9)) |
| 13:56 | clojurebot | [(2 4 6 8) (1 3 5 7)] |
| 13:57 | dbasch | ,((juxt remove filter) even? (range 1 9)) |
| 13:57 | clojurebot | [(1 3 5 7) (2 4 6 8)] |
| 14:06 | bbloom | (inc Raynes) |
| 14:06 | lazybot | ⇒ 46 |
| 14:06 | bbloom | Raynes: for your fs utils lib, thanks |
| 14:06 | Raynes | What did I do? |
| 14:06 | Raynes | Oh |
| 14:06 | Raynes | You're welcome sir |
| 14:30 | bbloom | i am *done* with lein plugins... never again |
| 14:34 | dbasch | bbloom: why? |
| 14:34 | bbloom | b/c i can never debug what they do at all |
| 14:34 | bbloom | it's just a giant mystery to me |
| 14:35 | bbloom | i'd rather 10 lines of clear code than 3 config entries |
| 14:35 | bbloom | getting cljsbuild to do what i want is a nightmare |
| 14:35 | bbloom | calling the build function from the cljs.closure namespace worked on the first try |
| 14:36 | bbloom | and trying to work w/ ring was a pain too b/c it would block a terminal, meaning i'd have to connect to that jvm instance from elsewhere |
| 14:36 | bbloom | i'd rather just call a (start) function |
| 14:36 | bbloom | passing {:join? false} to run-jetty made that problem go away |
| 14:37 | bbloom | i don't want anything that adds tasks to lein either |
| 14:37 | tolstoy | bbloom: the lein ring plugin puts me off. Seems easier to have a main that starts up a jetty or httpkit adapter. |
| 14:37 | bbloom | i pretty much only ever use `lein repl` |
| 14:37 | bbloom | i don't want lein to do anything else but set the classpath & run main |
| 14:38 | bbloom | tolstoy: yeah, that's what i'm saying |
| 14:38 | tolstoy | lein = build project, repl, that's it! :) |
| 14:38 | dbasch | that’s one of the things I like from python’s philosphy |
| 14:38 | dbasch | “There should be one-- and preferably only one --obvious way to do it.” |
| 14:38 | tolstoy | My interaction with cljsbuild is to not want what it can't do. |
| 14:39 | bbloom | i don't even want it for build project, since most of my build tasks don't require starting the jvm |
| 14:39 | bbloom | so if lein gets itself involved in the build project, it jsut slows down every command |
| 14:39 | tolstoy | Maybe we need a new system, lean-again. |
| 14:40 | kenrestivo | dbasch: that was, as i recall, a rebellion against the perl way, where there was deliberately a multitude of ways to do it |
| 14:42 | dbasch | kenrestivo: yes, I remember. perl even had an acronym for that |
| 14:43 | dbasch | cljs on the other hand is not the most welcoming environment at this point |
| 14:43 | kenrestivo | cljs is built on javascript. nuff said. |
| 14:43 | dbasch | you need to be involved with the java world as well as the js world |
| 14:43 | kenrestivo | right, that too |
| 14:43 | bbloom | dbasch: i've made some non-trivial contributions to the cljs compiler |
| 14:43 | bbloom | i have no idea how people manage to use cljs for day to day work |
| 14:43 | bbloom | blows my mind |
| 14:44 | bbloom | maybe it's less terrible from emacs |
| 14:44 | dbasch | bbloom: it’s significantly better than it was when I first encountered |
| 14:44 | bbloom | but the browser repl situtation is unworkable from my perspective |
| 14:44 | kenrestivo | naw, if you're used to javascript, cljs is heaven |
| 14:44 | kenrestivo | i use weasel and love it |
| 14:44 | tolstoy | bbloom: I found a cljsbuild config that works, then just use "auto". Works fine. |
| 14:44 | cbp``` | i've heard good things about weasel |
| 14:44 | bbloom | tolstoy: i don't want auto |
| 14:44 | bbloom | i *hate* auto |
| 14:44 | dbasch | bbloom: I remember a bug that made auto build crash with an exception when your program didn’t compile |
| 14:44 | kenrestivo | i could not get austin or the built in brepl to work without nightmares. weasel just does what i want, along with nrepl.el. |
| 14:44 | bbloom | sometimes, i change stuff.. but i don't want to compile it instantly |
| 14:45 | bbloom | sometimes, i write 3 things down and want to evaluate ONE of them |
| 14:45 | bbloom | sometimes i want to evaluate a particular file |
| 14:45 | bbloom | sometimes i want to rebuild the file |
| 14:45 | bbloom | or the project |
| 14:45 | bbloom | but never always rebuild the project |
| 14:45 | bbloom | unless you're going to also auto-reload the page for me |
| 14:45 | bbloom | ... destroying my repl env |
| 14:45 | kenrestivo | the workflow in javascript is refresh the page, right? |
| 14:45 | bbloom | yeah, and if i wanted that workflow, i'd use coffeescript |
| 14:45 | bbloom | i want a better workflow, i want a lisp workflow |
| 14:46 | kenrestivo | i got pretty close to that with weasel, but when using om i found myself reloading pages |
| 14:46 | bbloom | this may be why i keep shouting "the browser repl situtation is broken" |
| 14:47 | bbloom | and lots of folks are like "works for me" |
| 14:47 | kenrestivo | doesn't lighttable address that? been a while since i looked at it |
| 14:47 | tolstoy | With om, it's difficult to trigger a re-render when your component local state is kinda hidden. |
| 14:47 | dbasch | bbloom: if you do a kickstarter to fix it I’ll pitch in |
| 14:47 | bbloom | if you're using cljsbuild auto, you're doing it wrong, imo |
| 14:48 | dbasch | bbloom: cljsbuild auto works well when you’re trying to fix relatively minor things and retry often |
| 14:48 | technomancy | yeah, I don't get the auto stuff either |
| 14:48 | technomancy | seems like it's just for people who haven't bothered to set up a more fine-grained setup yet |
| 14:49 | tolstoy | auto is just a kind of Control-C, up-arrow, return thing. |
| 14:50 | tolstoy | A cljs repl is fine, but when you refresh the page, all your changes are gone because they've not yet been compiled into JS. |
| 14:50 | bbloom | but the compilation unit is your project, i want the compilation unit to be an expression |
| 14:50 | bbloom | tolstoy: why are you refreshing a page? |
| 14:51 | bbloom | even when i worked on coffee/sass/node stuff, i hated that workflow, but js doesn't give you much choice. at least for css i'd swap out the stylesheet w/o reloading the page |
| 14:51 | tolstoy | When working with OM and, say, forms, and you re-compile a component, it won't change until the "state" is tickled. |
| 14:51 | bbloom | it's a beautiful thing when you have a bunch of dialogs open and can tweak the styles without losing your scroll position or UI state |
| 14:51 | tolstoy | But the state is enclosed. |
| 14:52 | bbloom | tolstoy: i intend to solve that problem if i ever get a working environment |
| 14:53 | dbasch | tolstoy: you could have a “debug” component just to change state at will from the browser |
| 14:53 | tolstoy | Heh. I tried adding a channel somewhere so that I could just put something in it to trigger changes, but it seemed needlessly complicated compared to refresh, click, click. |
| 14:54 | tolstoy | dbasch: Yep. There are solutions. One of which is "refresh the page". That hasn't been painful enough yet. |
| 14:57 | bbloom | ok w/ the fully manual approach + weasel, i'm getting something that's not-terrible-enough for a while |
| 14:57 | bbloom | argh. |
| 14:58 | amalloy | not terrible enough, huh? i bet we can make it more terrible for you |
| 14:58 | amalloy | actually it sound like you may have beaten us to it |
| 14:59 | bbloom | i know you know what i meant, but for the sake of clarity: |
| 14:59 | bbloom | i have something that will cause my hair to fall out on its own, albeit at an accelerated pace, rather than me pulling it out forcibly later today |
| 15:01 | cbp | crystal clear |
| 15:01 | dbasch | I’m not happy when I find myself reverting to js when the cljs workflow gets in the way of what I want to do |
| 15:02 | dbasch | I hate js with the fire of ten thousand suns |
| 15:02 | dbasch | although that’s less than I used to |
| 15:23 | tolstoy | Oy. Tinyproxy. |
| 15:24 | duck1123 | Hey guys, I tried updating lein-cljsbuild and now I’m getting an error where cljs.core.PersistentArrayMap is undefined at one point so the rest of my code isn’t loading right. I found some threads about this, but it looks like that issue was fixed. anyone know what could be up? |
| 16:20 | mi6x3m | hey clojure, are :.test :#test special keywords in some way? |
| 16:32 | cshell | mi6x3m: i dont thnk so |
| 17:01 | cbp | no |
| 18:47 | PinkPrincess | How would I go about typing (using core.typed) the use of .readLine on a java.net.Socket? |
| 18:47 | PinkPrincess | It seems I can't just (ann .readLine [...]). |
| 18:48 | hiredman | PinkPrincess: if you type hint the call site it will figure it out |
| 18:48 | PinkPrincess | Ah. :) |
| 18:48 | PinkPrincess | I'll try that. |
| 18:48 | hiredman | there is no readline method on Socket, fyi |
| 18:48 | PinkPrincess | Well, that might be the first of my issues, then. |
| 18:48 | hiredman | so if you try and type hint it, it will just error out |
| 18:49 | PinkPrincess | Yeah, it's called on (clojure.java.io/reader ...) |
| 18:49 | PinkPrincess | So that's, what, a BufferedReader? |
| 18:49 | hiredman | most likely |
| 18:53 | PinkPrincess | So is ann-form inside my function the way to go for annotating the use of .readLine? |
| 18:55 | hiredman | no, if everything is type hinted correctly so no reflection is being used, core.typed will figure it out |
| 18:56 | hiredman | PinkPrincess: what makes you think it isn't working? |
| 18:56 | PinkPrincess | "Type Error (clojirc/core.clj:37:3) Unresolved host interop: readLine |
| 18:56 | PinkPrincess | Add type hints to resolve the host call." |
| 18:56 | PinkPrincess | I suppose that's exactly what you're also telling me to do. |
| 18:56 | hiredman | the return type core.typed uses for .readLine is likely (U nil String) so you'll need to assert that it is a string for core.typed to accept it as a String |
| 18:57 | hiredman | PinkPrincess: ah yes, exactly |
| 18:58 | hiredman | https://github.com/clojure/clojure/blob/master/src/clj/clojure/java/io.clj#L86 reader is type hinted just for Reader not BufferedReader |
| 18:58 | PinkPrincess | Ah. |
| 19:01 | PinkPrincess | If I don't explicitly annotate it, I seem to get "Type Error Unannotated var clojure.java.io/reader". |
| 19:28 | PinkPrincess | hiredman, what's the easiest way to add, say, (HMap :mandatory {:a SomeType}) as the type of the argument to a function? |
| 19:29 | PinkPrincess | I have a lot of cases where I'd like to add such argument typing to my defn's. |
| 19:30 | PinkPrincess | My question is specifically about how I can accomplish it, being completely new to core.typed. |
| 19:32 | rhg135 | PinkPrincess, i've been using schema for this as c.t is compile time checking and is useless for inputs from runtime |
| 19:33 | rhg135 | but for non-user input it's very useful |
| 19:36 | PinkPrincess | I bet my issue is really simple. I just don't know how to add the type info I want to add: https://www.refheap.com/86149 |
| 19:36 | rhg135 | i assume this is user input because maps usually are |
| 19:37 | PinkPrincess | I have enough knowledge about the "network" map to really narrow down the type of (:listeners network). |
| 19:37 | PinkPrincess | But I have no idea how to tell core.typed this. |
| 19:37 | rhg135 | ah ic |
| 19:37 | rhg135 | sorry but i don't know exactly |
| 19:38 | PinkPrincess | Basically I picked up core.typed minutes ago because it sounded cool, and now I'm trying to type an existing project. |
| 19:39 | PinkPrincess | The 'Arguments' part is looking rather daunting. |
| 19:39 | rhg135 | it's a goal of mine to use c.t and schema on a project to eliminate typish bugs |
| 19:40 | PinkPrincess | It seems like it'll be excellent at just that. |
| 19:40 | PinkPrincess | Have you found some good literature on the matter? |
| 19:40 | rhg135 | c.t for xompile-time and schema for runtime |
| 19:41 | rhg135 | now about dem logic bugs... |
| 19:41 | rhg135 | about which matter PinkPrincess |
| 19:41 | PinkPrincess | I find the c.t wiki fine for looking up specific types, etc., but not really as a general introduction, guiding me through a specific, toy-size project. |
| 19:41 | PinkPrincess | Which is really what I want. |
| 19:42 | rhg135 | hmm |
| 19:43 | rhg135 | i doubt i'll write it lol |
| 19:43 | rhg135 | i haven't used c.t |
| 19:46 | seancorfield | PinkPrincess: there's a #typed-clojure channel that might be more helpful... |
| 19:49 | PinkPrincess | That would probably be really helpful, yeah. |
| 19:51 | seancorfield | It's quieter than this channel and it's where most active core.typed users hang out |
| 19:56 | PinkPrincess | I'll give it a try. |
| 20:10 | tolstoy | Wow. Dealing with a compojure app under "context" and "non-context" scenarios: not so easy. |
| 20:21 | pdk | you just gotta... |
| 20:21 | pdk | keep your compojure |
| 20:25 | rhg135 | pdk, so much pun |
| 20:54 | Frozenlo` | Ugh.. so before getting violently disconnected, I was asking this: |
| 20:54 | Frozenlo` | How can I capture the ns where a function was defined? Say (defn foo [] ...) ----> (foo) --> "Foo was defined in namespace my-lib.core" |
| 20:54 | Frozenlo` | I naively used *ns*, but of course it only tells you the current namespace :-/ |
| 20:56 | akhudek | Frozenlo`: what about the namespace function? |
| 20:57 | Frozenlo` | How would you get the namespace? By using a local keyword? |
| 20:57 | Frozenlo` | ,(namespace ::a) |
| 20:57 | clojurebot | "sandbox" |
| 20:58 | dbasch | ,#’namespace |
| 20:58 | clojurebot | #<ArrayIndexOutOfBoundsException java.lang.ArrayIndexOutOfBoundsException: 8217> |
| 20:58 | dbasch | &#’namespace |
| 20:58 | lazybot | java.lang.ArrayIndexOutOfBoundsException: 8217 |
| 20:58 | dbasch | ,#'reduce |
| 20:58 | clojurebot | #'clojure.core/reduce |
| 20:59 | dbasch | Frozenlo`: just look at the fully qualified variable name |
| 21:00 | AWizzArd | just resolve it |
| 21:01 | AWizzArd | ,(resolve '+) |
| 21:01 | clojurebot | #'clojure.core/+ |
| 21:02 | Frozenlo` | But how would you translate that into a function? (defn foo [] (str "was defined in: "(resolve ?))) |
| 21:03 | AWizzArd | ,(ns-name (:ns (meta (resolve '+)))) |
| 21:03 | clojurebot | clojure.core |
| 21:03 | AWizzArd | ,(meta (resolve '+)) |
| 21:03 | clojurebot | {:added "1.2", :ns #<Namespace clojure.core>, :name +, :file "clojure/core.clj", :inline-arities #<core$_GT_1_QMARK_ clojure.core$_GT_1_QMARK_@45a62e>, ...} |
| 21:03 | AWizzArd | ,(:ns (meta (resolve '+))) |
| 21:03 | clojurebot | #<Namespace clojure.core> |
| 21:03 | Frozenlo` | (:ns (meta #())) |
| 21:03 | Frozenlo` | ,(:ns (meta #())) |
| 21:03 | clojurebot | nil |
| 21:04 | dbasch | ,(defn foo [] (resolve foo)) |
| 21:04 | clojurebot | #'sandbox/foo |
| 21:05 | AWizzArd | Frozenlo`: you want to find the namespace of an anonymous FN? |
| 21:06 | AWizzArd | You can resolve functions that were defn’ed somewhere. |
| 21:06 | AWizzArd | There it actually makes sense. |
| 21:10 | Frozenlock | There, I think this represents well want I'm trying to do: https://www.refheap.com/86153 |
| 21:10 | AWizzArd | Probably `add-ns` was supposed to have a parameter vector. |
| 21:11 | Frozenlock | pfff, no..... :-p |
| 21:11 | AWizzArd | hmmmmmmm ^^ |
| 21:12 | Frozenlock | https://www.refheap.com/86154 |
| 21:12 | AWizzArd | Frozenlock: so, wherever you call (add-this-ns) you want its current NS to be stored? |
| 21:12 | AWizzArd | Frozenlock: well, in that case you will need a macro. |
| 21:13 | AWizzArd | Or you do it with a function which would be a leaky abstraction, cause you will manually have to pass the *ns* |
| 21:13 | AWizzArd | ,(ns-name *ns*) |
| 21:13 | clojurebot | sandbox |
| 21:14 | Frozenlock | *ns* doesn't work, because if I call `foo` from say 'yet-another-namespace', it's 'y-a-n' that will be added, not 'my-other-namespace' |
| 21:15 | dbasch | Frozenlock: but you are defining add-ns in my-ns, so you might as well just create a function that prints my-ns |
| 21:15 | dbasch | I don’t understand |
| 21:16 | dbasch | and you’re importing my-ns so you can call add-ns which will tell you that it comes from my-ns |
| 21:16 | Frozenlock | dbasch: https://github.com/Frozenlock/doevery#pool-notes |
| 21:16 | Frozenlock | I thought everything was working, until *ns* blew in my face. |
| 21:17 | AWizzArd | Frozenlock: so you want to have several namespaces in which you define functions. Some of those functions will include a (add-ns) expression. Right so far? |
| 21:17 | AWizzArd | Whenever one of those functions gets called you want to record/track the namespace it was defined in? |
| 21:17 | dbasch | why are you using namespaces as your storage of running things? |
| 21:19 | AWizzArd | Frozenlock: just expand the ns during macroexpansion time then. |
| 21:19 | Frozenlock | dbasch: Why wouldn't I? |
| 21:19 | AWizzArd | So (defmacro add-current-ns [] `(add-ns ~(ns-name *ns*))) |
| 21:19 | dbasch | Frozenlock: because you’re creating unnecessary complication for yourself |
| 21:20 | AWizzArd | with the tilde, so it will record not yet-another-namespace but instead the one `foo` was defined in. |
| 21:20 | Frozenlock | dbasch: How you would store the pools, if not by namespace? |
| 21:20 | Frozenlock | AWizzArd: I'll give it a try |
| 21:20 | dbasch | Frozenlock: any data structure |
| 21:20 | Frozenlock | The data structure I'm using is a map |
| 21:20 | Frozenlock | The namespace is the key |
| 21:21 | dbasch | why does the namespace need to be the key? |
| 21:21 | AWizzArd | Btw, you may decide to just do ~*ns* without the ns-name, or you can wrap that into a (name …) call to have it as string. |
| 21:21 | Frozenlock | Because I need a key. If I don't use the namespace, I'll have to provide a key manually. |
| 21:22 | rhg135 | vectors are associative |
| 21:22 | dbasch | Frozenlock: no, you can generate one automatically |
| 21:22 | rhg135 | or use gensyms as keys |
| 21:22 | Frozenlock | dbasch: how? |
| 21:22 | dbasch | what rhg135 said |
| 21:22 | AWizzArd | ,(gensym) |
| 21:22 | clojurebot | G__51 |
| 21:23 | dbasch | that’s what gensym is for |
| 21:23 | Frozenlock | No, yes, I know |
| 21:23 | Frozenlock | :-p |
| 21:23 | rhg135 | ,(keyword (gensym)) |
| 21:23 | clojurebot | :G__76 |
| 21:23 | rhg135 | if you like kws |
| 21:23 | Frozenlock | I know what's gensym. If I use gensym, I won't be able to group multiple things in the same pool |
| 21:23 | dbasch | ,(gensym “pool”) |
| 21:23 | AWizzArd | rhg135: why should anyone *not* like them? ;) |
| 21:23 | clojurebot | #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: “pool” in this context, compiling:(NO_SOURCE_PATH:0:0)> |
| 21:23 | AWizzArd | dbasch: Neo keyboard layout? |
| 21:24 | rhg135 | AWizzArd, idk masochism? |
| 21:24 | Frozenlock | The -whole point- was to have an easy way to store together things that are most probably related, thus the namespace. |
| 21:24 | AWizzArd | Frozenlock: then use the macro from above or a similar one and add a `ns` parameter to your `add-ns` function. |
| 21:25 | Frozenlock | AWizzArd: yes, I'm trying it |
| 21:25 | rhg135 | ,(get [1] 0) |
| 21:25 | rhg135 | dat lag |
| 21:25 | clojurebot | 1 |
| 21:25 | AWizzArd | rhg135: that’s actually much slower than using „nth” (: |
| 21:26 | rhg135 | AWizzArd, ik just showing it |
| 21:26 | AWizzArd | ,([1] 0) |
| 21:26 | clojurebot | 1 |
| 21:26 | rhg135 | nicer |
| 21:26 | rhg135 | but NPE prone if not literal |
| 21:26 | AWizzArd | Actually I find the version with get or nth nicer. |
| 21:27 | AWizzArd | Also, if it is not a critical section in code I would always use (contains? my-set element) instead of (my-set element). |
| 21:27 | rhg135 | yes! |
| 21:27 | rhg135 | down with NPEs |
| 21:28 | AWizzArd | I find it also is a nice documentation of the code. |
| 21:28 | rhg135 | unless the set is named xxx? |
| 21:29 | rhg135 | it's bad on external input though |
| 21:30 | AWizzArd | rhg135: what did Morpheus say? “Welcome to the real world.” |
| 21:31 | rhg135 | mhm |
| 21:31 | rhg135 | the abundance of NPEs frighten me |
| 21:31 | AWizzArd | rhg135: core.typed is your friend. |
| 21:32 | rhg135 | c.t and core.async aren't very nice together |
| 21:32 | rhg135 | and i like async more |
| 21:32 | AWizzArd | Btw, is that in principle, or is this just the current situation and will likely change over the next monthyears? |
| 21:33 | rhg135 | prob just temporary |
| 21:33 | Frozenlock | AWizzArd: Macro worked, thanks |
| 21:33 | AWizzArd | rhg135: and what do you use async for? |
| 21:33 | rhg135 | AWizzArd, asynchronous http requests |
| 21:34 | rhg135 | and async io |
| 21:34 | AWizzArd | rhg135: can’t clj-http do async requests? |
| 21:35 | rhg135 | i use http-kit AWizzArd and the problem is managing them without 'callback hell' |
| 21:36 | duck1123 | So, today I tried my hand at getting webjars to serve again. I'm using compojure's resource handler. I'm seeing all the data being sent in like 77ms, but then the connection hangs for a minute. Anyone know what might be going on here? |
| 21:40 | tolstoy | duck1123: A total guess on my part (hobbiest): add an explicit "Connection: close" header to the response? |
| 21:41 | tolstoy | duck1123: Or the request (with curl). |
| 21:41 | duck1123 | when I curl the url, it responds quickly and exits, but says that the connection is left open |
| 21:42 | duck1123 | any idea how I can add a header to the resource handler? |
| 21:42 | tolstoy | A middleware of some sort. |
| 21:43 | tolstoy | Is it just the jars themselves? |
| 21:44 | tolstoy | (wrap-test-close [handler] (fn [request] (if (.endsWith (:uri "request") ".jar") ..... ) |
| 21:44 | tolstoy | (assoc (handler request) update-in [:headers] "Connection" "close") |
| 21:44 | duck1123 | it serves static resources out of META-INF/resources/webjars/ not the jars themselves |
| 21:44 | tolstoy | something like that? |
| 21:45 | duck1123 | I have this as a route: (route/resources "/webjars/" {:root "META-INF/resources/webjars/"}) |
| 21:45 | tolstoy | If using curl doesn't cause the problem, it doesn't seem like it's a compojure issue. |
| 21:46 | tolstoy | Could you pprint the request and see what's different between the fast curl version and the other version? |
| 21:47 | tolstoy | I just remember having odd issues depending on whether or not the app was proxied, etc, but that's about all I remember. |
| 21:47 | duck1123 | sure, let me try that |
| 21:47 | duck1123 | well, I'm also running this via aleph behind nginx |
| 21:49 | tolstoy | I remember something like having to add an extra header to my curl command (when using the proxy) to get it to drop the connection sooner. |
| 21:49 | tolstoy | -H "Connection: close" was probably it. ;) |
| 21:55 | tolstoy | I have a name "notes.local" in /etc/hosts (osx), and curl takes a LONG time to connect to nginx. Strange! |
| 22:07 | duck1123 | The only real difference I see is that chrome is sending a bunch of cache headers, but I wouldn't think that would affect the END of the request |
| 22:08 | duck1123 | I can check in the network tab, all the data gets sent, but the request doesn't end until after 1.1 minutes |
| 22:09 | tolstoy | Same with other browsers? Hm. |
| 22:09 | duck1123 | even after adding in middleware to add a connection close header to those requests. |
| 22:09 | duck1123 | http://renfer.name/webjars/jquery/2.1.1/jquery.min.js |
| 22:09 | tolstoy | Yeah, that was just a wild guess. |
| 22:13 | tolstoy | If hitting the java process itself with Chrome is fine, then it's nginx, no? |
| 22:14 | duck1123 | no, if i hit java directly, same issue. (just tried) |
| 22:15 | tolstoy | Swap out to jetty adapter? (Scraping the bottom now. ;)) |
| 22:16 | duck1123 | yeah, I might try that when I try to produce a minimal test case. There's no way I'd be able to swap out adapters right now. |
| 22:17 | duck1123 | I think this whole webjars thing might get put back on the backburner for a couple months again. |
| 22:20 | tolstoy | You might try back here when more knowledgeable people show up. |
| 22:29 | duck1123 | ok, including the resource call into the example compojure app works like a charm. Time to continue hunting |
| 22:35 | dbasch | duck1123: what does your response look like? |
| 22:36 | duck1123 | https://gist.github.com/duck1123/bcaa6bb15d88275c1ca1 |
| 22:37 | dbasch | duck1123: and does it look the same on the browser side? |
| 22:40 | duck1123 | it looks like after I log that response (which is in the middleware I just added around this resource call) it gets changed back to keep-alive and gets gzipped |
| 22:42 | dbasch | duck1123: are you using nginx? you can disable keep-alive |
| 22:42 | dbasch | what are you using for proxying? |
| 22:42 | duck1123 | I am. I can give that a try |
| 22:43 | duck1123 | nginx, but it happens even without |
| 22:44 | dbasch | so you may have a wrapper that’s altering your response |
| 22:44 | dbasch | what do your routes look like? |
| 22:45 | duck1123 | https://github.com/duck1123/jiksnu/blob/master/src/jiksnu/modules/web/routes.clj |
| 22:46 | duck1123 | currently, very minimal |
| 22:49 | dbasch | duck1123: I suspect it’s aleph |
| 22:50 | duck1123 | yeah, that's currently my suspicion as well. my compojure test worked fine |
| 22:55 | dbasch | btw, what’s the timeout on keep-alive? |
| 22:56 | duck1123 | How would I check that? I can already telly you that it's probably 1 min. (something is set to 1 min) |
| 22:57 | dbasch | doesn’t the header in the browser say? |
| 22:59 | duck1123 | not that I'm seeing |
| 22:59 | duck1123 | I see a 65 in nginx |
| 23:06 | dbasch | keepalive_timeout? |
| 23:07 | dbasch | so if aleph is removing your close, the connection should remain open for that many seconds |
| 23:22 | catern | is there a way not to have symbols go to their fully-qualified versions when using `? |
| 23:23 | catern | i just want to be able to replace some vars with their values.. |
| 23:23 | akhudek | `’blah |
| 23:23 | akhudek | or rather ~’blah |
| 23:24 | catern | what quote is that? |
| 23:24 | catern | doesn't look like '.. |
| 23:25 | duck1123 | back tick. (shares with ~) |
| 23:25 | amalloy | catern: i mean, you can unquote to leave the backquote context, then use a regular quote. but your followup is confusing: if you're actually replacing a local with its value, it doesn't get qualified |
| 23:26 | catern | duck1123: no, the second one |
| 23:26 | duck1123 | oh wow. i didn't see that. odd |
| 23:26 | catern | amalloy: yeah. I want some unqualified symbols alongside my replaced symbols |
| 23:27 | catern | and, the unquote then regular quote doesn't work. I have something like '(foo bar), and I want to replace bar but not foo |
| 23:28 | catern | if I do `~'(foo bar) I don't know a way to replace bar |
| 23:28 | akhudek | ‘test |
| 23:28 | akhudek | wat |
| 23:28 | akhudek | guess my irc client is playing with quotes |
| 23:29 | duck1123 | using Microsoft Word for irc? |
| 23:29 | akhudek | colloquy |
| 23:30 | catern | how "helpful" of it to use smart quotes... |
| 23:30 | catern | :) |
| 23:31 | duck1123 | aww, you missed the chance for the ironic smart quotes |
| 23:31 | akhudek | ‘I’ can do it |