Clojure/conj 2019: Topics, Tasks, and Tools for Clojure Development
Table of Contents
- Clojure/conj 2019
- Tasks
- Schedule
- Derek Troy-West; Follow the Data: Product Development in Clojure
- Ariel Ortiz; The Hitchhikers Guide to Multiparadigm Programming
- Lucas Cavalcanti; Complex Made Bearable
- Santiago Gepigon III; piggy: Specs for Breaking Changes
- J.D. Hollis; Datomic with Terraform
- Dragan Djuric; Interactive Programming for Artificial Intelligence
- Stuart Halloway; Sherlock Holmes, Consulting Developer
- Gene Kim; Love Letter To Clojure: And A Datomic Experience Report
- Chris Nuernberger; Extending Clojure with Python
- Chris Oakman; Probabilistic Record Linkage of Hospital Patients
- Pier Federico Gherardini & Ben Kamphaus; Clojure Where it Counts: Tidying Data Science Workflows
- Eno Compton & Tyler van Hensbergen; Goodbye YAML: Infrastructure as Code in Clojure
- Philipp Meier; A magic trashcan - microprocessors for full stack developers
- Sara Kimmich; Rapid Prototyping for Software Development
- Ulrich Schaechtle; Inference QL: Al for data engineers in Clojure
- Alex Miller; Composable Tools
- External
Clojure/conj 2019
Durham Convention Center
Tasks
- Create FSM for domain
- Create Topics for each states
- Ensure monitoring available for Kafka, Cassandra,
- Use simulators as part of the system
- Create datify over object entities
- Add Datadog as Clojure middlewear
- State Machine https://docs.aws.amazon.com/step-functions/latest/dg/tutorial-creating-lambda-state-machine.html
Cider
clj-refactor sayid.el cider-hydra clomacs helm-cider squiggly-clojure cider-eval-sexp-fu kaocha-runner emidje
Schedule
Derek Troy-West; Follow the Data: Product Development in Clojure
- Immutable time-series compute
- Kafka as aligned with core Clojure properties
- Use as a data-oriented programming framework
- consume - transform - compute
- Use simulation as core to the system
- Update brokers, groups, topics to simulate load
- Sente for websockets passing data from topic updates to browser
- operator-io/shortchut
Ariel Ortiz; The Hitchhikers Guide to Multiparadigm Programming
- paradigms: functional, logic, imperative, meta, parallel
- languages: Scheme, Python, Clojure, C, Kotlin, C#, Ruby
- book: Programming Clojure https://pragprog.com/book/shcloj3/programming-clojure-third-edition
- book: Seven More Languages https://pragprog.com/book/7lang/seven-more-languages-in-seven-weeks
Functional
- recursive
(defn fib [n] "Fibonocci" )
- loop/recur
(defn fact-v2 [n] (reduce *' (range 1 n))
- range
(defn fact-v2 [n] (reduce *' (range 1 n))
- prefer sequence API over recursion or loop/recur
Imperative
Parallel
Use `pmap` to split into
[[0 (/ n 2)] [(/ n 2] (inc n)]]
Meta
Using macros to debug stacks for the calls for interative approach.
Logic
Mini-kanren for creating fresh n-dec and fact-n-dec.
See the Reasoned Schemer for the example.
(logic/run 1 [q] (fact-v7 q 120))
Lucas Cavalcanti; Complex Made Bearable
- Kafka
- Generative tests
- Clojure spec
Santiago Gepigon III; piggy: Specs for Breaking Changes
- https://github.com/sgepigon/piggy
- Covers some of the core cases for breaking changes
- Producer and consumer contracts
- Spec protocol:
- https://clojure.org/guides/spec
- https://github.com/clojure/spec-alpha2/wiki/Differences-from-spec.alpha
Provides the ability to see if the input args are more restrictive (subset) or the return more expansive (super).
J.D. Hollis; Datomic with Terraform
- https://github.com/jdhollis
- dependency resolution for deployment order
- manage state
- environments/{dev,stage,prod}
- tools (state)
- https://docs.datomic.com/cloud/ions/ions-tutorial.html
- ions/{.bin/{dev-relase, version, codebuild-release}}
- Setup has modules for each of the environment
- datomiccopute and datomicstorage is manual
- arbitrary comans with nullresource
- change detected as md5 hash for code or configuration change
- release region, env, group
Providers
- aws
- inboundbastion
- datomic
- sqs
Output
- security gruop
- code bucket
- deploy state machine
Dragan Djuric; Interactive Programming for Artificial Intelligence
Stuart Halloway; Sherlock Holmes, Consulting Developer
Gene Kim; Love Letter To Clojure: And A Datomic Experience Report
- https://itrevolution.com/the-unicorn-project/
- https://www.amazon.com/Unicorn-Project-Developers-Disruption-Thriving-ebook/dp/B07QT9QR41
- performance
- using Datomic
- migration from SQL
Chris Nuernberger; Extending Clojure with Python
- https://clojars.org/cnuernber/libpython-clj
- Numpy from Clojure vectors
- with semantics
(def np (py/module-import "numpy"))
Chris Oakman; Probabilistic Record Linkage of Hospital Patients
- https://github.com/oakmac/record-linking-talk
- Create a test bed of [User] for name, recordid, ssn, address
- Create (patient-ids-match? [user1 user2])
- Establish a deterministic algorithm
- Create match and unmatch probabilities (Fellegi-Sunter)
- clojure.spec for evaluating data transformations
- Create match probability for
{ :match-prob .8 :unmatch-prob .1 }
(def default-match [e1 e2] "Default check is pure equality" (= e1 e2)) (def name-match [n1 n2] "Split phonetically and match based on phonemes" (double-metaphone n1 n2))
- Create a distribution for the thresholding
- Put questionables into a DLQ
- Use ML for finding the match weights for each of match and unmatch probabilities
Pier Federico Gherardini & Ben Kamphaus; Clojure Where it Counts: Tidying Data Science Workflows
- https://docs.datomic.com/on-prem/best-practices.html
- uses spec for testing entities
Eno Compton & Tyler van Hensbergen; Goodbye YAML: Infrastructure as Code in Clojure
- Clojure and AWS
- Lambdas
- AWS CloudFormation
Example: Event Consumer
- https://github.com/StediInc/cdk-clj
- Lambda watches SQS queue from
- SNS topic to alerting topic
- IAM policies
Alternative: TypeScript AWS CDK
Philipp Meier; A magic trashcan - microprocessors for full stack developers
- Types from the physical world
- Lua for embedded systems
- Various hardware options: Ada, Arduino
- Fennel
Sara Kimmich; Rapid Prototyping for Software Development
- use 20 minutes for the expected prototype
- experiment early
- check for assumptions early
- have a next step forward
- real enough to feel
- favor observable vs. conjecture
- tractable vs. intractable problem statements
Ulrich Schaechtle; Inference QL: Al for data engineers in Clojure
- http://probcomp.csail.mit.edu/news/
- https://www.youtube.com/playlist?list=PL_PW0E_Tf2qvXBEpl10Y39RULTN-ExzZQ
- https://insights.stackoverflow.com/survey/2019
- https://github.com/probcomp/metaprob
The goal here would be to determine the relationships between
Example: MgrIdiot predicts CareerSat
Generate answers for any of the virtual types of developer given KnowsClojure.
- count model (for columns count both then )
- conditional count model
- bayesian
(simulate count-model {} 1)