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.
Cheers, Matthias
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 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...
Earn $8 on a $10 Purchase, and $16 on a $20 Purchase
We pay 80% royalties on purchases of $7.99 or more, and 80% royalties minus a 50 cent flat fee on purchases between $0.99 and $7.98. You earn $8 on a $10 sale, and $16 on a $20 sale. So, if we sell 5000 non-refunded copies of your book 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