class: center, middle, inverse # Clojure and it's Ecosystem Yen-Chin, Lee [coldnew.tw@gmail.com] --- # About Me
- 李彥瑾 (Yen-Chin, Lee) - Embedded Linux Developer - Clojure/ClojureScript developer on leisure time - GitHub: [coldnew](https://http://github.com/coldnew/) - Linkedin: [coldnew](https://www.linkedin.com/in/coldnew) --- class: center, middle, inverse
# Clojure --- class: center, middle
# It is a .red[LISP] dialect --- class: center, middle
--- class: center, middle
--- class: center, middle
--- class: center, middle
--- class: center, middle ## Lisp is easy
--- .left-column[ # Author ] .right-column[
Rich Hickey (Author of Clojure) ] --- .left-column[ ## Company ] .right-column[
![cognitect](picts/cognitect.png)
Cognitect (Company behind Clojure)
] --- ## Clojure, ClojureScript, ClojureCLR
![cljall](picts/cljall.png)
--- ## Try Clojure ([website](http://www.tryclj.com/))
--- ## Try ClojureScript ([website](http://clojurescript.net/))
--- ## ClojureScript on-the-fly ([website](http://app.klipse.tech/))
--- class: center, middle, inverse # Editors / IDEs --- name: editors .left-column[ # Editors ## emacs ] .right-column[
![Default-aligned image](picts/emacs.png)
Go to Wbsite
] --- .left-column[ # Editors ## emacs ## spacemacs ] .right-column[
![Default-aligned image](picts/spacemacs.png)
Go to Wbsite
] --- .left-column[ # Editors ## emacs ## spacemacs ## vim ] .right-column[
![Default-aligned image](picts/vim.png)
Go to Wbsite
] --- .left-column[ # Editors ## emacs ## spacemacs ## vim ## atom ] .right-column[
![Default-aligned image](picts/atom.gif)
Go to Wbsite
] --- name: ide .left-column[ # IDEs ## LightTable ] .right-column[
![Default-aligned image](picts/lighttable.png)
Go to Wbsite
] --- .left-column[ # IDEs ## LightTable ## NightCode ] .right-column[
![Default-aligned image](picts/nightcode.png)
Go to Wbsite
] --- .left-column[ # IDEs ## LightTable ## NightCode ## Cursive ] .right-column[
![Default-aligned image](picts/cursive.png)
Go to Wbsite
] --- class: center, middle, inverse # Building System --- name: build .left-column[ ## Leinigen ] .right-column[
![lein](picts/lein.png)
Go to Website
] --- .left-column[ ## Leinigen ## Boot ] .right-column[
![boot](picts/boot.png)
Go to Website
] --- .left-column[ ## Leinigen ## Boot ## Inlein ] .right-column[ ```clojure #!/usr/bin/env inlein '{:dependencies [[org.clojure/clojure "1.8.0"] [com.hypirion/primes "0.2.1"]]} (require '[com.hypirion.primes :as p]) (when-not (first *command-line-args*) (println "Usage:" (System/getProperty "$0") "prime-number") (System/exit 1)) (-> (first *command-line-args*) (Long/parseLong) (p/get) println) ```
Go to Website
] --- class: center, middle, inverse # Unit Testing --- name: unittest .left-column[ # Unit Testing ## Midje ] .right-column[
![midje](picts/midje.png)
Go to Website
] --- .left-column[ # Unit Testing ## Midje ## Speclj ] .right-column[
![speclj](picts/speclj.png)
Go to Website
] --- .left-column[ # Unit Testing ## Midje ## Speclj ## Expectations ] .right-column[
![expectations](picts/expectations.png)
Go to Website
] --- .left-column[ # Unit Testing ## Midje ## Speclj ## Expectations ## Cloverage ] .right-column[
![cloverage](picts/cloverage.png)
Go to Website
] --- .left-column[ # Unit Testing ## Midje ## Speclj ## Expectations ## Cloverage ## Criterium ] .right-column[
![criterium](picts/criterium.png)
Go to Website
] --- .left-column[ # Unit Testing ## Midje ## Speclj ## Expectations ## Cloverage ## Criterium ## doo ] .right-column[
![doo](picts/doo.png)
Go to Website
] --- class: center, middle, inverse # Documentation --- name: doc .left-column[ # Documentation ## Marginalia ] .right-column[
![marginalia](picts/marginalia.png)
Go to Website
] --- .left-column[ # Documentation ## Marginalia ## Codox ] .right-column[
![codox](picts/codox.png)
Go to Website
] --- .left-column[ # Documentation ## Marginalia ## Codox ## AutoDoc ] .right-column[
![autodoc](picts/autodoc.png)
Go to Website
] --- class: center, middle, inverse # Web Frameworks or libraries --- name: web .left-column[ # Web Frameworks ## luminus ] .right-column[
![Default-aligned image](picts/luminus.png)
Go to Website
] --- .left-column[ # Web Frameworks ## luminus ## sente ] .right-column[
![Default-aligned image](picts/sente.png)
Go to Website
] --- .left-column[ # Web Frameworks ## luminus ## sente ## hoplon ] .right-column[
Go to Website
] --- .left-column[ # Web Frameworks ## luminus ## sente ## hoplon ## pedestal ] .right-column[
Go to Website
] --- .left-column[ # Web Frameworks ## luminus ## sente ## hoplon ## pedestal ## untangle ] .right-column[
Go to Website
] --- .left-column[ # Web Frameworks ## luminus ## sente ## hoplon ## pedestal ## untangle ## yada ] .right-column[
Go to Website
] --- .left-column[ # Web Frameworks ## luminus ## sente ## hoplon ## pedestal ## untangle ## yada ## compojure, ring ] .right-column[
Go to Website
] --- class: center, middle, inverse # ClojureScript on react.js --- .left-column[ # Reactjs ] .right-column[ ## Om-Next
Go to Website
] --- .left-column[ # Reactjs ] .right-column[ ## Reagent
Go to Website
] --- .left-column[ # Reactjs ] .right-column[ ## Quiescent
Go to Website
] --- .left-column[ # Reactjs ] .right-column[ ## RUM
Go to Website
] --- .left-column[ # Reactjs Tool for handling ClojureScript + React-Native on iOS ] .right-column[ ## Ambly
Go to Website
] --- .left-column[ # Reactjs Tool for handle ClojureScript + React-Native Environment ] .right-column[ ## re-natal
![re-natal](picts/re-natal.png)
Go to Website
] --- .left-column[ # Reactjs Example on Clojurescript + React-Native ] .right-column[ ## luno-react-native
![luno](picts/luno.png)
Go to Website
] --- class: center, middle, inverse # Database --- name: db .left-column[ # Database ## datomic ] .right-column[
Go to Website
] --- .left-column[ # Database ## datomic ## Korma ] .right-column[
![korma](picts/korma.png)
Go to Website
] --- .left-column[ # Database ## datomic ## Korma ## HugSQL ] .right-column[
![hugsql](picts/hugsql.png)
Go to Website
] --- .left-column[ # Database ## datomic ## Korma ## HugSQL ## YeSQL ] .right-column[
![yesql](picts/yesql.png)
Go to Website
] --- .left-column[ # Database ## datomic ## Korma ## HugSQL ## YeSQL ## Honey SQL ] .right-column[
Go to Website
] --- .left-column[ # Database ## datomic ## Korma ## HugSQL ## YeSQL ## Honey SQL ## clojure.java.jdbc ] .right-column[
![jdbc](picts/jdbc.png)
Go to Website
] --- class: center, middle, inverse # Distributed System --- name: distribute .left-column[ # Distributed System ## Storm ] .right-column[
![storm](picts/storm.png)
Go to Website
] --- .left-column[ # Distributed System ## Storm ## Onyx ] .right-column[
Go to Website
] --- .left-column[ # Distributed System ## Storm ## Onyx ## Cascalog ] .right-column[
Go to Website
] --- .left-column[ # Distributed System ## Storm ## Onyx ## Cascalog ## Jepsen ] .right-column[
Go to Website
] --- .left-column[ # Distributed System ## Storm ## Onyx ## Cascalog ## Jepsen ## Riemann ] .right-column[
Go to Website
] --- class: center, middle, inverse # Interesting Projects or Libraries --- .left-column[ ## core.async ### Code ] .right-column[ ```clojure (ns cljslide.example.core-async (:require-macros [cljs.core.async.macros :refer [go go-loop]]) (:require [cljs.core.async :refer [ js/document (.getElementById canvas) (.getContext "2d"))] (go (while true (set! (.-fillStyle ctx) (rand-nth colors)) (.fillRect ctx x y 10 10) (
] --- .left-column[ ## core.async ### Code ### Demo ### Video ] .right-column[
Go to Website
] --- .left-column[ ## core.logic ] .right-column[
Go to Website
] --- .left-column[ ## core.matrix ] .right-column[
Go to Website
] --- .left-column[ ## incanter ] .right-column[
![incanter](picts/incanter.png)
Go to Website
] --- .left-column[ ## quil ### - code ] .right-column[
```clojure (ns cljslide.example.quil (:require [quil.core :as q :include-macros true] [quil.middleware :as m])) (defn draw-carousel [] (q/background 255) (q/no-stroke) (q/fill 252 90 44) (let [radians (/ (q/frame-count) 20) x (+ 150 (* 100 (q/cos radians))) y (+ 150 (* 100 (q/sin radians))) width 30 height 30] (q/ellipse x y, width height))) (q/defsketch hello-quil :host "quil-example" :size [300 300] :draw #'draw-carousel) ``` ] --- .left-column[ ## quil ### - code ### - demo ] .right-column[
] --- .left-column[ ## quil ### - code ### - demo ### - video ] .right-column[
Go to Website
] --- .left-column[ ## figwheel ] .right-column[
Go to Website
] --- .left-column[ ## LAMBDACD ] .right-column[
Go to Website
] --- .left-column[ ## Instaparse ] .right-column[
Go to Website
] --- .left-column[ ## core.typed ] .right-column[
Go to Website
] --- .left-column[ ## Schema ] .right-column[
Go to Website
] --- class: center, middle, inverse # Resources for learning Clojure --- name: resource .left-column[ ## Resources ### Clojure Website ] .right-column[
![clojurew](picts/clojurew.png)
Go to Website
] --- .left-column[ ## Resources ### Clojure Website ### Books ] .right-column[
![clojureb](picts/clojureb.png)
Go to Website
] --- .left-column[ ## Resources ### Clojure Website ### Books ### Workshops ] .right-column[
![bridge.png](picts/bridge.png)
Go to Website
] --- .left-column[ ## Resources ### Clojure Website ### Books ### Workshops ### ClojureDocs ] .right-column[
![clojured](picts/clojured.png)
Go to Website
] --- .left-column[ ## Resources ### Clojure Website ### Books ### Workshops ### ClojureDocs ### Grimoire ] .right-column[
![grimoire](picts/grimoire.png)
Go to Website
] --- .left-column[ ## Resources ### Clojure Website ### Books ### Workshops ### ClojureDocs ### Grimoire ### Clojure Toolbox ] .right-column[
![toolbox](picts/toolbox.png)
Go to Website
] --- .left-column[ ## Resources ### Clojure Website ### Books ### Workshops ### ClojureDocs ### Grimoire ### Clojure Toolbox ### Clojure Style Guide ] .right-column[
![styleguide](picts/styleguide.png)
Go to Website
] --- .left-column[ ## Resources ### Videos ] .right-column[
- [ClojureTV](https://www.youtube.com/user/ClojureTV) Contains plenty of talks of Clojure conferences. - [Brian Will's Series](https://www.youtube.com/playlist?list=PLAC43CFB134E85266) Is a series of videos that teaches you Clojure. - [InfoQ](http://www.infoq.com/clojure/) Clojure content on InfoQ. - [Vimo](https://vimeo.com/search?q=clojure) Clojure content on Vimo. - [Skills Master](https://skillsmatter.com/explore?content=skillscasts&location=&q=clojure) Clojure content on Skills Master. .footnote[.red[*] [Rodrigo Flores's Corner - Clojure Ecosystem](http://blog.rlmflores.me/clojure/2015/12/31/clojure-ecosystem/)] ] --- class: center, middle, inverse # Exercise --- name: exercise .left-column[ ## Exercise ### 4Clojure ] .right-column[
![4clojure](picts/4clojure.png)
Go to Website
] --- .left-column[ ## Exercise ### 4Clojure ### Clojure Koans ] .right-column[
![koans](picts/koans.png)
Go to Website
] --- .left-column[ ## Exercise ### 4Clojure ### Clojure Koans ### Wonderland katas ] .right-column[
![katas](picts/katas.png)
Go to Website
] --- .left-column[ ## Exercise ### 4Clojure ### Clojure Koans ### Wonderland katas ### exercism.io ] .right-column[
![exercism](picts/exercism.png)
Go to Website
] --- class: center, middle, inverse # Clojure Communities --- name: community .left-column[ ## Clojure Communities ### Slack ] .right-column[
![Default-aligned image](picts/slack.png)
Join to Slack
] --- .left-column[ ## Clojure Communities ### Slack ### IRC (#clojure at freenode.net) ] .right-column[
![Default-aligned image](picts/irc.png)
Join to IRC
] --- .left-column[ ## Clojure Communities ### Slack ### IRC (#clojure at freenode.net) ### Mailing-List ] .right-column[
![Default-aligned image](picts/mailing-list.png)
Go to Clojure Mailing-List
] --- class: center, middle, inverse # Clojure Community in Taiwan --- name: communitytw .left-column[ ## [clojure.tw](http://clojure-tw.github.io) ### Slack (#clojure-taiwan) ] .right-column[
![Default-aligned image](picts/slack_clojuretw.png)
Join to Slack
] --- .left-column[ ## [clojure.tw](http://clojure-tw.github.io) ### Slack ### Telegram ] .right-column[
![Default-aligned image](picts/telegram_clojuretw.png)
Join to Telegram
] --- .left-column[ ## [clojure.tw](http://clojure-tw.github.io) ### Slack ### Telegram ### Facebook ] .right-column[
![Default-aligned image](picts/fb_clojuretw.png)
Join to Facebook
] --- .left-column[ ## [clojure.tw](http://clojure-tw.github.io) ### Slack ### Telegram ### Facebook ### Twitter ] .right-column[
![Default-aligned image](picts/twitter_clojuretw.png)
Join to Twitter
] --- .left-column[ ## [clojure.tw](http://clojure-tw.github.io) ### Slack ### Telegram ### Facebook ### Twitter ### Meetup ] .right-column[
![Default-aligned image](picts/meetup_clojuretw.png)
Join to Meetup
] --- .left-column[ ## [clojure.tw](http://clojure-tw.github.io) ### Slack ### Telegram ### Facebook ### Twitter ### Meetup ### GitHub ] .right-column[
![Default-aligned image](picts/github_clojuretw.png)
Go to GitHub
] --- class: center, middle, inverse # Conferences --- .left-column[ # Conference ## Clojure/West ] .right-column[
![west](picts/west.png)
See Videos
Go to Website
] --- .left-column[ # Conference ## Clojure/West ## Clojure/conj ] .right-column[
![conj](picts/conj.png)
See Videos
Go to Website
] --- .left-column[ # Conference ## Clojure/West ## Clojure/conj ## EuroClojure ] .right-column[
![euroclojure](picts/euroclojure.png)
See Videos
Go to Website
] --- .left-column[ # Conference ## Clojure/West ## Clojure/conj ## EuroClojure ## ClojuTRE ] .right-column[
![clojutre](picts/clojutre.png)
See Videos
Go to Website
] --- class: center, middle, inverse # Find Clojure Jobs --- .left-column[ ## Find Jobs ] .right-column[ ### BRAVE CLOJURE JOBS
![Default-aligned image](picts/job_ba.png)
Go to Website
] --- .left-column[ ## Find Jobs ] .right-column[ ### indeed
![Default-aligned image](picts/job_id.png)
Go to Website
] --- .left-column[ ## Find Jobs ] .right-column[ ### remoteok.io
![Default-aligned image](picts/job_ri.png)
Go to Website
] --- .left-column[ ## Find Jobs ] .right-column[ ### Functional Jobs
![Default-aligned image](picts/job_fj.png)
Go to Website
] --- .left-column[ ## Find Jobs ] .right-column[ ### Functional Works
![Default-aligned image](picts/job_fw.png)
Go to Website
] --- .left-column[ ## Find Jobs ] .right-column[ ### Lisp Jobs
![Default-aligned image](picts/job_lj.png)
Go to Website
] --- .left-column[ ## Find Jobs ] .right-column[ ### Linkedin
![Default-aligned image](picts/job_lk.png)
Go to Website
] --- class: center, middle # Thank you