Clojure/West 2016: Innovative Tasks, Sessions, and Discussions
Table of Contents
- Clojure/west 2016
- Tasks
- Sessions
- Specter: Powerful and Simple Data Structure Manipulation, Nathan Marz
- Managing One of the World's Largest Clojure Code Bases, Donevan Dolby
- Creating DSLs - A tale of spec-tacular success and failure, Claire Alvis
- defrecord/deftype in Clojure and ClojureScript, Michał Marczyk
- Building a Legal Data Service with Clojure, Jonathan Boston, Caleb Phillips
- Model based programming in PAMELA, Tom Marble, Paul Robertson
- Fast full stack testing in om.next, Jack Dubie
- The Joys and Perils of Interactive Development, Stuart Sierra
- Unsessions
- Datalog all the way down, Christopher Small
- Caching half a billion user transactions, Priyatam Mudivarti
- Hash Maps: more room at the bottom, Peter Schuck
- CIDER: Inside the Brewery, Bozhidar Batsov
- One Million Clicks per Minute with Kafka and Clojure, Devon Peticolas
- Types are like the Weather, Type Systems are like Weathermen, Matthias Felleisen
Clojure/west 2016
Tasks
Open Allergies
- Pedestal
- Hiccup
- Hyperion
- core.async
- Mustache
Sessions
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.
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
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
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
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/
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
Fast full stack testing in om.next, Jack Dubie
The Joys and Perils of Interactive Development, Stuart Sierra
Unsessions
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/
Caching half a billion user transactions, Priyatam Mudivarti
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