            :custom (PutAndTakeSlide. {:buffer-size 7 :font-size "72pt" :radius 50})}
 
           {:subtitle "timeouts"
-           :custom (TimeoutSlide. {:buffer-size 5 :font-size "72pt" :radius 70})}
-
-          {:title "Buffers"
+           :custom (TimeoutSlide. {:font-size "72pt"})}
+
+          {:subtitle "buffers (TODO)"
            :code "(<! (chan))"}
+
+          {:subtitle "alts!"
+           :custom (AltsSlide. {:font-size "30pt"})}
+
+          {:subtitle "go blocks"
+           :custom (GoBlockSlide. {:font-size "30pt"})}
+          ;; Show result of race in alts! between a channel and a timeout
+
+          ;; Go blocks
 
           {:title "When?"}]}))
 

         [:rect {:x 0 :y 0 :width 280 :height 100 :fill "red"}]
         [:text {:x 30 :y 80 :style {:font-size default-font :stroke "white" :fill "white"}} "(timeout 2000)"]]]])))

(def app-model
  (atom {:current-slide 4
         :slides
         [{:title "core.async"
           :event "QCon 2014"

(defrecord TimeoutSlide [opts]
  Slide
  (init-slide-state [_]
    {:default-font (:font-size opts)
     :status "READY"})

  (render-slide [_ data owner]
    (let [default-font (om/get-state owner :default-font)]
      [:div
       [:svg {:version "1.1" :width 800 :height 600}
        [:text {:x 30 :y 120 :style {:font-size default-font :stroke "white" :fill "white"}} (om/get-state owner :status)]
