Clojure/West 2016: Innovative Tasks, Sessions, and Discussions
Table of Contents
- 1. Clojure/west 2016
- 1.1. Tasks
- 1.2. Sessions
- 1.2.1. Specter: Powerful and Simple Data Structure Manipulation, Nathan Marz
- 1.2.2. Managing One of the World's Largest Clojure Code Bases, Donevan Dolby
- 1.2.3. Creating DSLs - A tale of spec-tacular success and failure, Claire Alvis
- 1.2.4. defrecord/deftype in Clojure and ClojureScript, Michał Marczyk
- 1.2.5. Building a Legal Data Service with Clojure, Jonathan Boston, Caleb Phillips
- 1.2.6. Model based programming in PAMELA, Tom Marble, Paul Robertson
- 1.2.7. Fast full stack testing in om.next, Jack Dubie
- 1.2.8. The Joys and Perils of Interactive Development, Stuart Sierra
- 1.2.9. Unsessions
- 1.2.10. Datalog all the way down, Christopher Small
- 1.2.11. Caching half a billion user transactions, Priyatam Mudivarti
- 1.2.12. Hash Maps: more room at the bottom, Peter Schuck
- 1.2.13. CIDER: Inside the Brewery, Bozhidar Batsov
- 1.2.14. One Million Clicks per Minute with Kafka and Clojure, Devon Peticolas
- 1.2.15. Types are like the Weather, Type Systems are like Weathermen, Matthias Felleisen
1. Clojure/west 2016
1.1. Tasks
1.1.1. Open Allergies
- Pedestal
- Hiccup
- Hyperion
- core.async
- Mustache
1.2. Sessions
1.2.1. Specter: Powerful and Simple Data Structure Manipulation, Nathan Marz
https://github.com/nathanmarz/specter
- simple data structures allow for threaded macro passes through map
- complex graphs will be much more difficult
- map of vectors of maps
- vector in vector out
- define MAP-VALS
- signature become a set of transformation based on the data structures
- navigation through a datascructure is it's own structure
- navigate then transformation as a general approach
- adding to set is navigating to an empty subset
- navigation to a subsequence
- filterer srange
- precompilation of the selction path before the transformation can improve performation
Reasonable approach for a general solution of graph navigation.
1.2.2. Managing One of the World's Largest Clojure Code Bases, Donevan Dolby
- Boeing: fuel effeciency and gate turns (short-haul)
- New sensors in the 737
- Architecture
- Data managment: functional reactive programming
- DSL parsing; instaparse
- JVM already installed
Issues:
- Circular dependencies between Trapperkeeper serivces between message
- Messaging: publisher phase publisher logic go through a notification channel via pub/sub then to several taps with filters
Validation:
- identifying memory leaks is critical since minimum uptime is 7 days on a small footprint
- YourKit https://www.yourkit.com/
Consulting:
- Transducers
- in 1.7 there were a number of threading macros passe through (map #())
- in 1.8 this now becomes (into [])
- move from clojure.lang.PersistentQueue
- volitility in the ecosystem (e.g., Lamina, hug)
- mustache templates couldn't keep up with large files
- wrap library use in case the library needs to be swapped
- new developer onboarding difficult for OO programmers
- immmutable state difficult initially for new developers
Process:
- consiseness helped with code reviews
- no need to have Clojure developers on the simulator component for the REST end-point
- deftest and assertion checks
- only mandated requirement was 70% code coverage
- pairing was the key way to get new engineers onboarded
- schema or type checking
1.2.3. Creating DSLs - A tale of spec-tacular success and failure, Claire Alvis
- Financial data
- Datomic
- Schemas and queries are data
- Prismatic https://github.com/plumatic/schema
- type-clojure
- entities
1.2.4. defrecord/deftype in Clojure and ClojureScript, Michał Marczyk
- defrecord
- records behave like maps
- get, assoc, dissoc all provide access
- don't use protocols
- defrecord can be used to contrain the code
- reify and specify
- everything in ojureScript is a deftype
1.2.5. Building a Legal Data Service with Clojure, Jonathan Boston, Caleb Phillips
- eDiscovery
- Lawyers filer (redaction of private information, company secrets, client)
- Produce documents
Requires that one import then search documents.
Constraint checks:
- retries in queue
- disk space
- monitoring
- cleanup on tasks
- monitoring
Core features:
- ClojureScript
- React/OM
- DataScript
- core/async
Issues:
- expensive remote calls
- multiple remote calls
- overfetching
- synchronizing loads
Tests:
- How much of this is required http://brewhouse.io/blog/2015/05/13/emberjs-an-antidote-to-your-hype-fatigue.html
- Look at the http://netflix.github.io/falcor/ for overfetching
- Look at http://redux.js.org/
1.2.6. Model based programming in PAMELA, Tom Marble, Paul Robertson
- modeling language
- backends
- visualization
- Physical Systems
- Learning: HMM, MDP, POMDP
- https://en.wikipedia.org/wiki/Planning_Domain_Definition_Language
Visualization
1.2.7. Fast full stack testing in om.next, Jack Dubie
1.2.8. The Joys and Perils of Interactive Development, Stuart Sierra
1.2.9. Unsessions
1.2.10. Datalog all the way down, Christopher Small
- https://github.com/Day8/re-frame
- reactions from re-frame / posh that are an updated computation
- http://tonsky.me
- DataScript: (defrecord Datom [e a v tx added])
- https://writings.quilt.org/2014/05/12/distributed-systems-and-the-end-of-the-api/
1.2.11. Caching half a billion user transactions, Priyatam Mudivarti
1.2.12. Hash Maps: more room at the bottom, Peter Schuck
http://michael.steindorfer.name/publications/oopsla15.pdf
- 32 nodes
- Node has a 32 elements
- Take the hash of "foo" then partition
- (partition 2 (str ( hash "foo")))
- Issue: complexity of key value pair or sub node reference