$30 off During Our Annual Pro Sale. View Details »

CIDER: Inside the Brewery (f(by) 2016)

CIDER: Inside the Brewery (f(by) 2016)

Slide-deck from talk at the f(by) conference in Minsk.

Bozhidar Batsov

December 14, 2016
Tweet

More Decks by Bozhidar Batsov

Other Decks in Programming

Transcript

  1. M-x

    View Slide

  2. View Slide

  3. slide intentionally
    left blank

    View Slide

  4. Вітаю!

    View Slide

  5. Bozhidar

    View Slide

  6. Божидар

    View Slide

  7. Божо
    cool

    View Slide

  8. Bug
    cool

    View Slide

  9. Sofia, Bulgaria

    View Slide

  10. View Slide

  11. View Slide

  12. View Slide

  13. View Slide

  14. View Slide

  15. View Slide

  16. View Slide

  17. View Slide

  18. View Slide

  19. View Slide

  20. A (Dark) Knight of
    the
    Order of Emacs

    View Slide

  21. @bbatsov

    View Slide

  22. View Slide

  23. View Slide

  24. View Slide

  25. View Slide

  26. View Slide

  27. View Slide

  28. View Slide

  29. Why I am here?

    View Slide

  30. I am a storyteller!

    View Slide

  31. CIDER:
    Inside The Brewery

    View Slide

  32. View Slide

  33. A story about a different kind
    of cider…

    View Slide

  34. Clojure
    Interactive
    Development
    Environment that
    Rocks

    View Slide

  35. … for Emacs

    View Slide

  36. Is Emacs the One True Editor
    that will bring balance to the
    Source?

    View Slide

  37. Absolutely!

    View Slide

  38. Primary Clojure dev
    environment (2015)
    Other
    10%
    LT
    5%
    fireplace
    12%
    Cursive
    27%
    CIDER
    46%

    View Slide

  39. –Nancy Pearcey
    “Competition is always a good thing. It
    forces us to do our best. A monopoly
    renders people complacent and satisfied
    with mediocrity.”

    View Slide

  40. Near future (optimistic)
    Other
    10%
    CIDER
    90%

    View Slide

  41. Near future (worst case)
    Cursive
    34%
    Other
    15%
    CIDER
    51%

    View Slide

  42. Customer Testimonials

    View Slide

  43. “Using CIDER is exciting. You
    never know if cider-jack-in will
    work or not!”
    — Mich Hickey

    View Slide

  44. I used to wonder a lot how to get
    an adrenaline rush - now I
    simply upgrade CIDER!
    — Alex Killer

    View Slide

  45. CIDER’s learning curve is
    amazing! I’m still amazed it
    never ends!
    — Zach Hellman

    View Slide

  46. Half the things in Emacs and
    CIDER seem magic to me. Every
    time I use them I feel like a wizard!
    — Anna Parenlicka

    View Slide

  47. A not so long time ago in a
    galaxy not far away…

    View Slide

  48. Java, C# and PHP ruled the
    dev world

    View Slide

  49. The Lisp Masters from the
    Republic of Great Programmers
    were on the run

    View Slide

  50. Lisps were out of
    fashion

    View Slide

  51. View Slide

  52. 2007

    View Slide

  53. A gentleman
    &
    a scholar

    View Slide

  54. Clojure

    View Slide

  55. Biggest Clojure problem at
    launch?

    View Slide

  56. ((((((((((()))))))))))

    View Slide

  57. 0
    Clojure
    development
    environments

    View Slide

  58. Emacs was the last Lisp
    stronghold

    View Slide

  59. Emacs is the greatest
    Emacs Lisp
    dev environment

    View Slide

  60. SLIME

    View Slide

  61. Superior
    Lisp
    Interaction
    Mode for
    Emacs

    View Slide

  62. SLIME Features
    • REPL
    • Interactive evaluation
    • Compilation notes
    • Code completion
    • Definition lookup
    • Documentation lookup
    • Apropos

    View Slide

  63. SLIME Features
    • Debugger
    • Value inspector
    • Tracing
    • Find usages
    • Macroexpansion
    • Scratchpad
    • Minibuffer code evaluation

    View Slide

  64. SLIME is an IDE

    View Slide

  65. Interactive Development
    Environment

    View Slide

  66. Programs are built in a very
    incremental manner

    View Slide

  67. SLIME
    (Emacs Lisp)
    SWANK
    (Common Lisp)
    Clozure
    RPC
    LispWorks
    CMUCL
    ABCL
    SBCL
    Client Server Backends

    View Slide

  68. 2008

    View Slide

  69. clojure-mode
    &
    swank-clojure

    View Slide

  70. SLIME
    (Emacs Lisp)
    SWANK
    (Common Lisp)
    swank-clojure

    View Slide

  71. A star was born

    View Slide

  72. In 2010 around 70% of the
    Clojurians were developing in
    Emacs!!!

    View Slide

  73. swank-clojure
    • Requires knowledge of swank (Common Lisp)
    • Bundles a frozen SLIME version
    • Subpar features (e.g. debugger, inspector, find usages)
    • Monolithic (no swank plugins)

    View Slide

  74. SLIME is a
    Common Lisp
    tool

    View Slide

  75. 2010

    View Slide

  76. Another esteemed
    gentleman
    &
    scholar

    View Slide

  77. nREPL

    View Slide

  78. A common foundation
    for Clojure development tools

    View Slide

  79. •Load (compile) a Clojure source file
    •Evaluate a Clojure form
    •Interrupt evaluation
    •Read from the standard input

    View Slide

  80. Extensible via middleware

    View Slide

  81. 2012

    View Slide

  82. nrepl.el

    View Slide

  83. nrepl.el
    (Emacs Lisp)
    nREPL
    (Clojure)

    View Slide

  84. A workhorse is retired

    View Slide

  85. nrepl.el
    • lacked many SLIME features
    • relied heavily on evaluation of inlined code
    • made assumptions about the environment
    • flawed bencode parser

    View Slide

  86. 2013

    View Slide

  87. Don’t settle for good.
    Demand great!

    View Slide

  88. –Phil Karlton
    “There are only two hard things in
    Computer Science: cache invalidation
    and naming things.”

    View Slide

  89. View Slide

  90. Clojure
    Integrated
    Development
    Environment &
    REPL

    View Slide

  91. Clojure
    Interactive
    Development
    Environment
    Reimagined

    View Slide

  92. Clojure
    Interactive
    Development
    Environment that
    Rocks

    View Slide

  93. View Slide

  94. CIDER Features
    • Interactive evaluation
    • Compilation notes
    • Code completion
    • Definition lookup
    • Documentation lookup
    • Apropos

    View Slide

  95. CIDER Features
    • Value inspector
    • Command selector
    • Tracing
    • Macroexpansion
    • Debugger
    • Scratchpad
    • Minibuffer code evalution

    View Slide

  96. CIDER Features
    • Javadoc support
    • Jump to Java definition
    • Jump to resource
    • Sanity-preserving stacktraces
    • clojure.test integration
    • namespace browser

    View Slide

  97. CIDER Features
    • classpath browser
    • grimoire integration
    • dynamic indentation
    • dynamic font-locking
    • nREPL session manager
    • Smart namespace reloading
    • ClojureScript support

    View Slide

  98. Extensions
    (are easy)

    View Slide

  99. Refactoring support
    (clj-refactor + refactor-nrepl)

    View Slide

  100. Demo Time

    View Slide

  101. CIDER
    tastes better than
    SLIME

    View Slide

  102. CIDER
    tastes better than
    some IDES

    View Slide

  103. View Slide

  104. Bulgarian Liberation Day
    2016

    View Slide

  105. CIDER 0.11 (Bulgaria)

    View Slide

  106. Require Clojure 1.7+

    View Slide

  107. Require Java 7+

    View Slide

  108. Run all loaded/project tests

    View Slide

  109. Enlighten

    View Slide

  110. View Slide

  111. View Slide

  112. Auto-injection of CIDER’s
    dependencies

    View Slide

  113. View Slide

  114. Clojure/west 2016

    View Slide

  115. CIDER 0.12 (Seattle)

    View Slide

  116. Conditional breakpoints

    View Slide

  117. Step-in while debugging

    View Slide

  118. Test result improvements

    View Slide

  119. Zenburn & Solarized
    support

    View Slide

  120. cider-auto-test-mode

    View Slide

  121. Eldoc improvements

    View Slide

  122. Display docstring on mouse
    hover

    View Slide

  123. View Slide

  124. Totally reorganized menus

    View Slide

  125. View Slide

  126. View Slide

  127. View Slide

  128. One more thing…

    View Slide

  129. A Real Manual

    View Slide

  130. A Real Manual

    View Slide

  131. View Slide

  132. http://cider.readthedocs.org/

    View Slide

  133. CIDER 0.13 (California)

    View Slide

  134. Eldoc improvements

    View Slide

  135. View Slide

  136. View Slide

  137. Unified evaluation commands
    keymap

    View Slide

  138. C-c C-v something

    View Slide

  139. cider-eval-sexp-at-point

    View Slide

  140. C-c C-v (C-)v

    View Slide

  141. Tracking of evaluated
    expressions

    View Slide

  142. View Slide

  143. View Slide

  144. “See also” section in doc
    buffers

    View Slide

  145. View Slide

  146. A cornucopia of small
    additions and improvements

    View Slide

  147. CIDER 0.14 (Berlin)

    View Slide

  148. Display spec in doc buffers

    View Slide

  149. View Slide

  150. Re-run last test

    View Slide

  151. C-c C-t (C-)g

    View Slide

  152. The usual mix of bug fixes, small
    additions and improvements

    View Slide

  153. What’s still missing?

    View Slide

  154. •Find usages
    •Built-in refactoring tooling
    •Better ClojureScript support
    •Support for the new Clojure socket
    REPL
    CIDER 1.0

    View Slide

  155. Why CIDER?

    View Slide

  156. Integrated Development
    Environment (a.k.a. IDE)

    View Slide

  157. View Slide

  158. Emacs

    View Slide

  159. View Slide

  160. View Slide

  161. View Slide

  162. View Slide

  163. View Slide

  164. Spacemacs

    View Slide

  165. Emacs users
    know how to build productive
    Lisp workflows

    View Slide

  166. •Emacs (ultimate Elisp dev env)
    •SLIME (and SLY)
    •Geiser
    •racket-mode
    •CIDER (obviously)

    View Slide

  167. • paredit
    • smartparens
    • rainbow-delimiters
    • rainbow-identifiers
    • sexp-fu
    • paxedit
    • lispy

    View Slide

  168. Community impact

    View Slide

  169. cider-nrepl
    https://github.com/clojure-emacs/cider-nrepl

    View Slide

  170. refactor-nrepl
    https://github.com/clojure-emacs/refactor-nrepl

    View Slide

  171. compliment
    https://github.com/alexander-yakushev/compliment

    View Slide

  172. cljs-tooling
    https://github.com/gtrak/cljs-tooling

    View Slide

  173. nREPL improvements

    View Slide

  174. Open development

    View Slide

  175. View Slide

  176. View Slide

  177. 158 contributors!

    View Slide

  178. Please, send more help!

    View Slide

  179. Дзякуй!

    View Slide

  180. Felina

    View Slide