klipse 2016-10-28

nice, thanks!

i was thinking a timeout like figwheel’s repl’s might be a good solution

with a shorter timeout, like 2 seconds max instead of figwheel’s 8

haven’t looked into feasibility

will read cljs-soup in the morning, looks like it also does timeouts

expect the post early next week 😄

it’s not very complicated but i need to finish setting up my blog / etc

ok sleeptime

dang, i guess it just plain isn’t possible to kill a running function in js

http://stackoverflow.com/questions/17007482/how-can-i-interrupt-and-stop-a-running-function-in-javascript suggests webworkers, but you can’t touch the DOM from those, and i like being able to touch the DOM in klipse

so, i’m out of ideas 🙂

i came up with a hacky idea

i’m not sure if i like it

but if it’s possible to run cljs code in the context of web workers - and i haven’t checked to see if it is - you could use them as a sort of canary

so at snippet evaluation time, each klipse snippet could spin up a web worker, let it execute for up to two seconds, and if it hasn’t executed by then you know the snippet’s code will time out, so you can kill the web worker and not execute the snippet’s code in the main js thread, and show an error message in the output codemirror window

and if the web worker executes successfully within two seconds (i don’t know anything about web workers but i’m guessing that there’s a way to be notified if the worker completes much earlier, eg after only 5ms or something), you can be relatively sure that the code is safe to run, and so then the snippet goes ahead and runs its cljs code in the context of the main js thread

the main obvious badness of this “solution” is that every snippet ends up being run twice per evaluation

and so if it has side effects, that’s bad; and if the code it contains is very slow, then it will be twice as slow as it would have been otherwise

on the other hand, again i don’t know anything about web workers but i’ve heard that they can’t manipulate the DOM, so that’s a whole category of side effect that we don’t have to worry about duplicating

anyway this idea is probably bad, but i figured i’d mention it in case it can serve as a jumping-off point for better solutions

does klipse_plugin.min.js not work for clojure? i notice that it’s not listed in the clojure example of https://github.com/viebel/klipse , and i’ve had some trouble getting it to work for me

gonna try again

i get this error:

DOMException: Failed to execute 'querySelectorAll' on 'Document': The provided selector is empty.
    at Ay ()
    at By ()
    at 
    at 

hm, right - is this because bootstrapped cljs isn’t compatible with advanced compilation?

the regular plugin build compiles fine if i switch it from :whitespace to :simple - would that be a good change to make?

i see 8.1MB with the :whitespace build and 6.6MB with the :simple build

(i know you’re in a different timezone and it’s the weekend, don’t worry, i’m not expecting immediate responses to any of these messages - just writing them down so i don’t forget these things 🙂 )

it looks like the gzipped sizes are 1MB with :whitespace, 0.775MB with :simple

so maybe it’s not a huge deal, that’s not an extremely drastic difference, just figured i’d check to see if there’s a good reason not to use :simple for the plugin build

also, FYI, the twitter links at the bottom of http://blog.klipse.tech/clojure/2016/03/17/klipse.html seem to point to the wrong place

ok, here’s the post (in my blog staging area, please don’t share this via social media / etc yet, it won’t be living here long-term): http://jrheard.com/blog-staging/procedural-dungeon-generation-drunkards-walk-in-clojurescript/ . will prob publish it on monday morning

@viebel - one thing i’ve run into while messing around with klipse snippets is that it’s easy to completely murder a browser tab if, while editing a snippet’s code, you accidentally make it infinite loop

have you run into this before / do you think it’s possible to fix?

signing off for the night (utc-7 🙂 ), later!

@jrheard your code looks great

will test it later

I’m aware of the infinite loop issue

1. I was expecting the browser to detect it and stop the script

2. I mitigated it by limiting the print-length of the ouptut to 1000 (configurable) so that (range) is not crashing

3. Someone tried to solve it by wrapping all the recur statements after macro expansion. It looks interesting. It’s here: https://github.com/oakes/eval-soup/blob/master/src/eval_soup/core.cljs#L86-L92. But it has some limitation: https://github.com/oakes/eval-soup/issues/1

4. Do you have any ideas of your own?

@jrheard I’ve merged your code and deployed it - KLIPSE version 4.4.0

😄 1

Thanks a lot

Now, I’m waiting for your blog past with the canvas stuff