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

Building a System in Clojure (and ClojureScript)

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

  • Categories

    • Software

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 60 Day 100% Happiness Guarantee

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

Now, this is technically risky for us, since you'll have the book or course files either way. But we're so confident in our products and services, and in our authors and readers, that we're happy to offer a full money back guarantee for everything we sell.

You can only find out how good something is by trying it, and because of our 100% money back guarantee there's literally no risk to do so!

So, there's no reason not to click the Add to Cart button, is there?

See full terms...

80% Royalties. Earn $16 on a $20 book.

We pay 80% royalties. That's not a typo: you earn $16 on a $20 sale. If we sell 5000 non-refunded copies of your book or course for $20, you'll earn $80,000.

(Yes, some authors have already earned much more than that on Leanpub.)

In fact, authors have earnedover $13 millionwriting, publishing and selling on Leanpub.

Learn more about writing on Leanpub

Free Updates. 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) and EPUB (for phones, tablets and Kindle). 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

You can use Leanpub to easily write, publish and sell in-progress and completed ebooks and online courses!

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. (Or, if you are producing your ebook your own way, you can even upload your own PDF and/or EPUB files and then publish with one click!) It really is that easy.

Learn more about writing on Leanpub