Building a System in Clojure (and ClojureScript)
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.
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 matthiasn.systems-toolbox-ui.charts.histogram
- 3.9 matthiasn.systems-toolbox-ui.charts.math
- 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
- 11.1 Architectural Overview
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 birdwatch.state.data namespace
- 14.7.2 The birdwatch.state.initial namespace
- 14.7.3 The birdwatch.state.comm namespace
- 14.7.4 The birdwatch.state.search 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.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.1 Inspect
- 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.1 Docker Containers
- 21.2 Wildfly / Deploying a WAR file
- 22. Appendix
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.
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 $12 million USDwriting, 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