The new Clojure spec library provides support for data and function specification. In this first in a series of screencasts, Stuart Halloway discusses how spec provides leverage to achieve many returns for a small investment in describing your functions with spec.
Clojure spec defines specifications for both data and functions. In addition to validity checking, specs can generate random samples of the data they specify. This capability enables an alternative to unit testing known as generative, or property-based, testing.
One benefit of Clojure specs is that they automatically provide data generators that produce
values conforming to the spec which can be used for testing. In addition, you can compose your
own generator to more precisely match your data model.
In this screencast, Stuart
Halloway demonstrates techniques for creating and combining models of your input using the
`bind` and `fmap` functions to produce custom generators.
Rich Hickey gives an introduction to Datomic, including the basics of the architecture and data model.
The first of 2 videos of the core.async training, recorded at Clojure/West in Portland Oregon in
April of 2015.
The course will cover core.async, a library for doing concurrent
programming with immutable values available in both Clojure and ClojureScript.
In this
first video, Luke VanderHart will introduce core.async and cover the basics of channels and go
blocks.
In this video, Luke VanderHart moves beyond the basics of channels and go blocks, demonstrating
some of the advantages of using these constructs in realistic examples.
Luke additionally
discusses higher level features of core.async including alternates and transducers, followed by
a discussion of helpful patterns and practices for building systems with core async, including
exception handling and a discussion of use cases.
Simulation Testing predicts how your system will behave under varying degrees of load and realistic use patterns, without risking revenue or sacrificing customer trust. In this webinar recording, Michael Nygard will introduce the structure of simulation testing using the open-source framework Simulant. We will walk through a complete simulation lifecycle with source code.
If you need to move data between applications, JSON is your friend.
No matter where your
program is running, no matter which programming language you are using, chances are there is a
high quality β and high performance β JSON implementation available. But JSON has some
shortcomings: It only supports a very limited set of types. Itβs not extensible. And it is
verbose.
In this webinar, Russ Olsen introduces Transit, a format that is built atop
JSON, and the closely related MessagePack. Transit takes up where JSON leaves off: Transit comes
with a much richer set of types including full 64 bit integers, UUIDs, and timestamps. Transit
also includes a straight forward mechanism for defining new types as well as a simple but
effective caching mechanism. Cross language as well as cross platform β Transit implementations
are available for JavaScript, Java, Clojure, ClojureScript Ruby and Python.
Arguably the two largest sources of complexity in front end client applications are application
state and application events. Programming with immutable values gives us better tools for
managing application state, but what about events?Callbacks are a weak abstraction for complex
event flows. Promises eliminate some incidental complexity but are ill-suited for representing
streams or queues. Can we do better?
As usual, everything old is new again. In this
webinar, we'll explore how Clojure's core.async brings the power of Tony Hoare's
Communicating Sequential Processes to client browsers. We'll start with the basic building
blocks and work our way up to a simple but complete interactive application.