|
@@ -10,6 +10,7 @@ A baseline Clojure stack that runs on any and all platforms, that is nice to dev
|
|
|
|
|
|
## What's here?
|
|
|
|
|
|
+* Consistent, extensible, component-based, event-driven design pattern via Clojure
|
|
|
* Leiningen based multi-module project setup with modules for each platform
|
|
|
* API via bidi with REPL control
|
|
|
* Web via clojurescript / re-frame
|
|
@@ -169,6 +170,19 @@ They can then be placed in pipelines as xforms on core.async channels.
|
|
|
|
|
|
## Choices
|
|
|
|
|
|
+
|
|
|
+### Distributed Authorization
|
|
|
+
|
|
|
+- Each entity has an identity.
|
|
|
+- Unauthenticated entities have auto-generated identities until they authenticate.
|
|
|
+
|
|
|
+Mutator component
|
|
|
+
|
|
|
+- Drop into debug mode for live sessions.
|
|
|
+- Push app updates.
|
|
|
+- Access controlled... grant entities access.
|
|
|
+-
|
|
|
+
|
|
|
### Clojure
|
|
|
|
|
|
The fundamental data structures representing code and data; nothing more, nothing less.
|
|
@@ -245,6 +259,16 @@ Based on reagent, which using a special atom as the client side sate. Stacks a n
|
|
|
processing of UI actions. Plays well with CQRS and Doman Driven Design.
|
|
|
|
|
|
|
|
|
+#### Sente
|
|
|
+
|
|
|
+
|
|
|
+https://github.com/ptaoussanis/sente
|
|
|
+
|
|
|
+https://github.com/ebellani/carpet - example shared source web + mobile project.
|
|
|
+
|
|
|
+http://docs.confluent.io/2.0.0/kafka-rest/docs/intro.html#quickstart
|
|
|
+
|
|
|
+
|
|
|
#### component
|
|
|
|
|
|
A separation of concerns model for use on all platforms.
|
|
@@ -402,15 +426,57 @@ primary data store from which our aggregate state is built.
|
|
|
|
|
|
It serves as a persistent store and buffer against back-pressure and cascading failures.
|
|
|
|
|
|
+### ZooKeeper
|
|
|
+
|
|
|
+ZooKeeper is a quorum based distributed coordinator with strong consistency. Beyond that, it can be coded against as a
|
|
|
+hierarchical k/v store with watches. In reality, if there is a failure event on a client ZK will get a new master elected
|
|
|
+or establish a new quorum automatically (not necessarily quickly, sadly).
|
|
|
+
|
|
|
+
|
|
|
+https://github.com/liebke/avout
|
|
|
+
|
|
|
+
|
|
|
+```
|
|
|
+(defprotocol VersionedStateContainer
|
|
|
+ (initVersionedStateContainer [this])
|
|
|
+ (destroyVersionedStateContainer [this])
|
|
|
+ (getStateAt [this version])
|
|
|
+ (setStateAt [this value version])
|
|
|
+ (deleteStateAt [this version]))
|
|
|
+
|
|
|
+(defrecord FluxAtomMaster [in out]
|
|
|
+ VersionedStateContainer
|
|
|
+ (initVersionedStateContainer [this])
|
|
|
+ (destroyVersionedStateContainer [this])
|
|
|
+ (getStateAt [this version]
|
|
|
+ )
|
|
|
+ (setStateAt [this value version])
|
|
|
+ (deleteStateAt [this version]))
|
|
|
+
|
|
|
+(defrecord FluxAtomSlave []
|
|
|
+ VersionedStateContainer
|
|
|
+ (initVersionedStateContainer [this])
|
|
|
+ (destroyVersionedStateContainer [this])
|
|
|
+ (getStateAt [this version])
|
|
|
+ (setStateAt [this value version])
|
|
|
+ (deleteStateAt [this version]))
|
|
|
+```
|
|
|
|
|
|
|
|
|
## Tool suggestions
|
|
|
|
|
|
-IntelliJ Idea with Cursive (free licenses for OSS!)
|
|
|
+* IntelliJ Idea with Cursive (free licenses for OSS!)
|
|
|
+
|
|
|
+* emacs with clojure-mode and org-mode
|
|
|
+
|
|
|
+* homebrew + cask
|
|
|
+
|
|
|
+* zsh + iTerm2
|
|
|
+
|
|
|
+* White on black Hack font
|
|
|
|
|
|
-emacs with clojure-mode and org-mode
|
|
|
+* F.lux
|
|
|
|
|
|
-homebrew + cask
|
|
|
|
|
|
|
|
|
|