ClojureWest 2013: Day Three Notes

Editing Clojure with Emacs: Ryan Neufeld

  • emacs live, emacs prelude, emacs-starting-kit: for getting up and running
  • - post about going back to basic editors
  • ryan's version of emacs starter kit
  • nREPL & nREPL.el instead of inferior-lisp
  • melpa for your package manager
  • have a look at the projectile minor mode for project management
  • use paredit to build up clojure code trees, not just characters
  • slurp and slice to add new structure: () then slurp to wrap

Ritz: Missing Clojure Tooling: Hugo Duncan

  • clojure debugging tool
  • nREPL: lets you connect to remote clojure VM (transport + socket + protocol + REPL)
  • sits in-between your local nrepl and the remote nrepl process
  • available as marmalade package
  • also lein plugin: lein-ritz
  • turn on break on exceptions: gives you common-lisp like stacktrace + restart options (continue, ignore, etc)
  • can open up stacktrace to see local variables within the frame
  • can even evaluate expressions within the frame (!)
  • also pull up the source code for a frame (clojure or java)
  • can set breakpoints on lines of code in emacs; view list of all current breakpoints in a separate buffer
  • warning: lists appear in stacktrace frame fully-realized (will be fixed)

Macros vs Monads: Chris Houser and Jonathan Claggett

  • synthread: library of macros that use Clojure's -> (threading macro) as the do
  • usually pulled in with -> as its alias
  • defines macros for most of clojure's control-flow code
  • also has updater macros
  • use for cases where pure functional code is too verbose and/or hard to read
  • replaces use of state monad
  • monads are infectious (end up passing them around everywhere)
  • clojure 1.5 has cond-> macro
  • rover example project up on github: lonocloud/synthread

How to Sneak Clojure into Your Rails Shop: Joshua Bellanco

  • and improve your rails hosting along the way
  • chief scientist at burnside digital (based in portland)
  • if this was 2006, we'd be talking about sneaking rails into your java shop
  • learn from rails: better to ask forgiveness than permission, use clojure whenever it's the right tool for the job, don't be afraid to show off your successes
  • step 1: convince them to use jruby (better tooling, better performance, java ecosystem, plenty of hosting options)
  • step 2: torquebox for deployment (benefits of jboss)
  • step 3: go in with clojure and start using immutant overlay (gives jboss, torquebox, jruby); lein immutant run runs both ruby and clojure apps
  • step 4: openshift (open source heroku from redhat)
  • step 5: make clojure and ruby talk to each other (hornetq + torquebox/immutant messaging libraries)
  • step 6: show off!
  • example project: memolisa: sends alerts and confirmation when alert is read; rails for users + groups, clojure for the messaging

clj-mook: Craig Brozefsky

  • library for testing web apps
  • persistent session, default request params, html parsing
  • motivated by shift from ring to immutant

RxJava: Dave Ray

  • open-source implementation of M$ Reactive Extensions
  • operators for creating, composing, and manipulating Observable streams
  • sketch up at daveray/rx-clj
  • also: netflix/rxjava

VMFest: Toni Batchelli

  • goal: make virtualbox behave like lightweight cloud provider
  • instantiate multiple vms from the same image
  • wrap the OOP api of virtualbox with a sane clojure one
  • has hardware dsl
  • one step further: little-fluffy-cloud -> RESTful interface for vmfest
  • visaje: build VMs from data

shafty: Chris Meiklejohn

  • basho technologies: erlang and js, with some clojure
  • functional reactive programming library
  • based on flapjax, implemented in clojurescript
  • implementation of core API from flapjax
  • FRP: authoring reactive programs without callbacks
  • FRP: event streams and behaviors

swearjure: gary fredericks

  • subset of clojure with no alphanumeric characters
  • exercise in extreme constraints
  • integers but no floats
  • true and false available

Evolutionary Art with Clojure: Alan Shaw

  • clevolution: partial implementation of paper on genetic programming
  • converting s-expressions to images
  • using self as filtering function: delete the images he doesn't like
  • want to move to true evolutionary: use function to weed through the images, allow cross-breeding between s-expressions
  • clisk, clojinc, clevolution

Simulation Testing with Simulant: Stuart Halloway

  • example-based tests: setup, inputs, outputs, validation
  • originally built as tool for testing datomic
  • no language indirection: it's about using clojure and datomic
  • write model for what will happen to the application, then writeup actions to take against the system
  • can speed up time in simulation, so don't have to wait for 6 mo for 6 months of results to go through
  • stores db with test results *and* the db tests ran against
  • can find and diagnose bugs by querying db after tests run
  • use to generate random test data (ints, vectors, maps)
  • contact at @stuarthalloway to have come out to speak at company or group
  • even working through the model of users and use is a good exercise; good way to validate the assumptions you're making about the system
Ron Toland @mindbat