         (do
             (. tick-timer (start))
             (. render-timer (start))
-            (goog.events/listen button goog.events.EventType/CLICK (partial input-event input-state-ref))
-            (goog.events/listen document.body goog.events.EventType/KEYDOWN (partial input-event input-state-ref) true)
-            (goog.events/listen document.body goog.events.EventType/KEYUP (partial input-event input-state-ref) true)
-            (goog.events/listen tick-timer goog.Timer/TICK #(tick game-state-ref (deref input-state-ref)))
-            (goog.events/listen render-timer goog.Timer/TICK #(rerender canvas (deref game-state-ref)))
+            (dorun (map (partial apply goog.events/listen) [
+                [button goog.events.EventType/CLICK (partial input-event input-state-ref)]
+                [document.body goog.events.EventType/KEYDOWN (partial input-event input-state-ref) true]
+                [document.body goog.events.EventType/KEYUP (partial input-event input-state-ref) true]
+                [tick-timer goog.Timer/TICK #(tick game-state-ref (deref input-state-ref))]
+                [render-timer goog.Timer/TICK #(rerender canvas (deref game-state-ref))]]))
             (goog.dom/appendChild document.body (goog.dom/createDom "div" {}
                 (goog.dom/createDom "h1" {} "Work in progress..")
                 (goog.dom/createDom "div" {} "Try clicking the button, or pressing keys.")

        ))

(def my-code-url "https://github.com/pauldoo/scratch/blob/master/ClojureScript/hello.cljs")
(def tick-step (/ 1 100))
(def render-step (/ 1 30))
(def gravity-strength 15)
(def ground-strength 10)
(def initial-game-state {
    :nodes {
        :t {
            :pos [150 100]
            :vel [(- 10) 0]
        }
        :u {
            :pos [350 200]
            :vel [(- 10) 0]
        }
        :v {
            :pos [250 100]
            :vel [(- 10) 0]
        }
    }
    :springs [

    (zipmap (keys nodes)
        (map (fn [{[ x y ] :pos [ xv yv ] :vel }]
            (if (< y 0)
                (vec* [(- xv) (+ (Math/max 0 (- yv)) (- y))] ground-strength)
                [0 0])) (vals nodes))))

(defn calculate-all-node-forces [nodes springs]
