Building a System in Clojure (and ClojureScript)
Building a System in Clojure (and ClojureScript)
Minimum price
Suggested price
Building a System in Clojure (and ClojureScript)

This book is 47% complete

Last updated on 2016-07-25

About the Book

This book is about building a complex system in Clojure and ClojureScript. It started out as a blog series about my BirdWatch application, a side project for reasoning about a live stream of tweets coming in from the Twitter Streaming API and visualized in a web application that is written in ClojureScript. 

In the book, we will follow the data and watch how it is transformed in different parts of the application until it finally triggers the user interface to change within a few hundred milliseconds after a tweet has been tweeted.

The price for this book will increase as the writing progresses.

Feedback during the writing process is much appreciated. There's a Google Group for this purpose.

Only major new releases will be announced by email. Please follow me on Twitter to be informed about more frequent updates: @matthiasnehlsen. Or, if you want to know what I'm working on at any moment in time, follow me on GitHub. The book is on there as well, just like the project that I am writing the book about.

Cheers, Matthias

  • Share this book

About the Author

Matthias Nehlsen
Matthias Nehlsen

Hello, my name is Matthias and I'm a software engineer from Hamburg, Germany. After spending too many years in IT operations and project management, I decided that it would be more fun to write software fulltime. I started out with C#, did some Java with Spring and ended up writing Scala for the last two years or so. But none of these choices turned out to be as much fun as I was initially hoping for. Luckily I met Clojure, which finally provided the fun I have been looking for all the time. That was enough for me to write a Farewell Note to Scala and decide that I want to focus on Clojure fulltime.

I really started writing Clojure code in July 2014 after reading a few books about it, and I rewrote my BirdWatch application in Clojure and ClojureScript within a couple of weeks. During that process I noticed that there aren't many resources about composing complex systems in Clojure. I started a blog series about the topic, but I believe a book is a better format for this content than a series of separate articles, which is why I started the authoring process here on

Table of Contents

    • 1. Introduction
    • 2. Example application: Counter
    • 3. WebSocket Latency Visualization Example
      • 3.1 :client/mouse-cmp
      • 3.2 :server/ptr-cmp
      • 3.3 example.core on client side
      • 3.4 example.core on server side
      • 3.5 Application Reload from the REPL
      • 3.6 :client/store-cmp
      • 3.7 :client/histogram-cmp
      • 3.8
      • 3.9
    • 4. Appendix
    • 5. Introduction
    • 6. What’s in this book?
    • 7. Why am I writing this book?
    • 8. How to use this Book – Update February 2016
    • 9. Systems Thinking
      • 9.1 Intervention points
    • 10. Old Server-side Architecture
      • 10.1 Architectural Overview
      • 10.2 Scaling out
      • 10.3 Application Initialization
    • 11. Server-side: TwitterClient
      • 11.1 Architectural Overview
        • 11.1.1 Transducers
      • 11.2 TwitterClient Component
      • 11.3 TwitterClient - SwitchBoard Component
      • 11.4 TwitterClient - Percolation Component
      • 11.5 TwitterClient - Persistence Component
      • 11.6 TwitterClient - InterOp Component
        • 11.6.1 Redis Pub/Sub with Carmine
        • 11.6.2 Performance of Redis
    • 12. Server-side: MainApp
      • 12.1 Architectural Overview
      • 12.2 MainApp - InterOp Component
      • 12.3 MainApp - SwitchBoard Component
      • 12.4 MainApp - Persistence Component
      • 12.5 MainApp - Percolation Component
      • 12.6 WebSocket Communication Component
      • 12.7 Http Component
    • 13. Server-side Conclusion
    • 14. Old Client-side Architecture
      • 14.1 React.js
      • 14.2 Reagent
      • 14.3 Ownership of Application State
      • 14.4 Constraints
      • 14.5 Core Namespace
      • 14.6 WebSocket Communication
      • 14.7 Application State
        • 14.7.1 The namespace
        • 14.7.2 The birdwatch.state.initial namespace
        • 14.7.3 The birdwatch.state.comm namespace
        • 14.7.4 The namespace
        • 14.7.5 The birdwatch.state.proc namespace
        • 14.7.6 State summary
      • 14.8 User Interface
        • 14.8.1 React.js, Immutable Data and Reagent
        • 14.8.2 Interacting with Application State from the UI
        • 14.8.3 Simple Reagent Components
        • 14.8.4 Reagent Components for Tweets
        • 14.8.5 The birdwatch.ui.util namespace
        • 14.8.6 Pure.css
      • 14.9 Charts
        • 14.9.1 Timeseries Data
        • 14.9.2 Timeseries Chart
        • 14.9.3 Word Cloud Chart
        • 14.9.4 Word Count Statistics
        • 14.9.5 Wordcount Trends Chart (with Linear Regression)
      • 14.10 Summary
    • 15. The systems-toolbox library
      • 15.1 Introduction
    • 16. The systems-toolbox-ui library
      • 16.1 Introduction
      • 16.2 React
      • 16.3 Redux
      • 16.4 Counter example
        • 16.4.1 Better UI development with Figwheel
    • 17. Monitoring
      • 17.1 Inspect
    • 18. Testing
      • 18.1 Unit Tests
      • 18.2 Integration Tests
      • 18.3 Continuous Integration
      • 18.4 Hosted CI
        • 18.4.1 TravisCI
        • 18.4.2 CircleCI
        • 18.4.3 Conclusion
      • 18.5 Testing the systems-toolbox library
        • 18.5.1 Porting existing tests to cljc, running tests with doo
        • 18.5.2 Promises for testing in ClojureScript?
        • 18.5.3 Running tests in the browser / PhantomJS
        • 18.5.4 Performance considerations
    • 19. Operational Insight
    • 20. Load Testing and Optimization
      • 20.1 Performance and Load Characteristics
      • 20.2 Optimization and Environment
    • 21. Deployment
      • 21.1 Docker Containers
      • 21.2 Wildfly / Deploying a WAR file
    • 22. Appendix
  • Notes

The Leanpub 45-day 100% Happiness Guarantee

Within 45 days of purchase you can get a 100% refund on any Leanpub purchase, in two clicks.

See full terms

Free Updates. Free App. DRM Free.

If you buy a Leanpub book, you get free updates for as long as the author updates the book! Many authors use Leanpub to publish their books in-progress, while they are writing them. All readers get free updates, regardless of when they bought the book or how much they paid (including free).

Most Leanpub books are available in PDF (for computers), EPUB (for phones and tablets), MOBI (for Kindle) and in the free Leanpub App (for Mac, Windows, iOS and Android). The formats that a book includes are shown at the top right corner of this page.

Finally, Leanpub books don't have any DRM copy-protection nonsense, so you can easily read them on any supported device.

Learn more about Leanpub's ebook formats and where to read them

Write and Publish on Leanpub

Authors, publishers and universities use Leanpub to publish amazing in-progress and completed books and courses, just like this one. You can use Leanpub to write, publish and sell your book or course as well! Leanpub is a powerful platform for serious authors, combining a simple, elegant writing and publishing workflow with a store focused on selling in-progress ebooks. Leanpub is a magical typewriter for authors: just write in plain text, and to publish your ebook, just click a button. It really is that easy.

Learn more about writing on Leanpub