Clojure/West 2016: Innovative Tasks, Sessions, and Discussions

Table of Contents

1. Clojure/west 2016

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

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:

1.2.9. Unsessions

1.2.10. Datalog all the way down, Christopher Small

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