This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
programming:clojure [2013/08/16 15:25] robert.pergl [Tools and IDEs] |
programming:clojure [2015/09/20 12:17] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Clojure Programming ====== | ====== Clojure Programming ====== | ||
- | ===== Clojure Advocacy ===== | + | ===== Clojure / FP Advocacy ===== |
- | * [[http://adambard.com/blog/you-write-php-because-you-dont-know-better/?goback=%2Egde_1058217_member_251460226|YOU USE PHP BECAUSE YOU DON'T KNOW BETTER]] | + | * [[http://www.youtube.com/watch?v=7aYS9PcAITQ|Functional Thinking (video)]] |
+ | * [[http://www.braveclojure.com/]] | ||
* [[http://www.infoq.com/presentations/Simple-Made-Easy|Rich Hickey: Simple Made Easy]] | * [[http://www.infoq.com/presentations/Simple-Made-Easy|Rich Hickey: Simple Made Easy]] | ||
+ | * [[http://yogthos.net/blog/49|Why I'm Productive in Clojure]] | ||
+ | * [[http://adambard.com/blog/you-write-php-because-you-dont-know-better?goback=%2Egde_1058217_member_251460226|YOU USE PHP BECAUSE YOU DON'T KNOW BETTER]] | ||
+ | * [[http://blog.safaribooksonline.com/2013/08/05/clojure-data-uniformity/|Clojure data uniformity]] -- an explanation of benefits of direct data access compared to object-oriented approach. This is also mentioned in [[http://www.youtube.com/watch?v=7aYS9PcAITQ|Functional Thinking (video)]] | ||
===== Functional Programming ===== | ===== Functional Programming ===== | ||
+ | * [[http://www.youtube.com/watch?v=7aYS9PcAITQ&feature=youtu.be|Functional Thinking (video)]] | ||
* [[http://skillsmatter.com/podcast/home/functional-programming-in-the-enterprise-4235/mh-7546?goback=%2Egde_1058217_member_246498414|John Pither: Functional Programming for the Enterprise]] | * [[http://skillsmatter.com/podcast/home/functional-programming-in-the-enterprise-4235/mh-7546?goback=%2Egde_1058217_member_246498414|John Pither: Functional Programming for the Enterprise]] | ||
* [[http://stackoverflow.com/questions/5074781/editing-programs-while-they-are-running-why?goback=%2Egde_1058217_member_246984118|Why to edit programs while they are running]] | * [[http://stackoverflow.com/questions/5074781/editing-programs-while-they-are-running-why?goback=%2Egde_1058217_member_246984118|Why to edit programs while they are running]] | ||
* [[clojure:Main FP Principles]] | * [[clojure:Main FP Principles]] | ||
+ | * [[http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey]] | ||
===== Resources ===== | ===== Resources ===== | ||
==== Books ==== | ==== Books ==== | ||
+ | * \cite{bib:fogus-joy-of-clojure}, \cite{bib:halloway-programming-clojure}, \cite{bib:vanderhart-practical-clojure} | ||
* [[http://juliangamble.com/blog/2012/07/13/amazing-lisp-books-living-again-in-clojure/|Lisp Books made into Clojure]] | * [[http://juliangamble.com/blog/2012/07/13/amazing-lisp-books-living-again-in-clojure/|Lisp Books made into Clojure]] | ||
==== Quick Guides ==== | ==== Quick Guides ==== | ||
+ | * Tutorial for "children": Comics [[http://www.lisperati.com/clojure-spels/casting.html|Casting spells with Lisp]] | ||
* [[https://github.com/bbatsov/clojure-style-guide?goback=%2Egde_1058217_member_245907598#readme|Clojure Style Guide]] | * [[https://github.com/bbatsov/clojure-style-guide?goback=%2Egde_1058217_member_245907598#readme|Clojure Style Guide]] | ||
* [[http://hyperpolyglot.org/lisp?goback=%2Egde_1058217_member_246210504|A side-by-side reference sheet (Lisp: Common Lisp, Scheme, Clojure, Emacs Lisp)]] | * [[http://hyperpolyglot.org/lisp?goback=%2Egde_1058217_member_246210504|A side-by-side reference sheet (Lisp: Common Lisp, Scheme, Clojure, Emacs Lisp)]] | ||
* [[http://cemerick.com/2011/07/05/flowchart-for-choosing-the-right-clojure-type-definition-form/?goback=%2Egde_1058217_member_246437578|Flowchart for choosing the right Clojure type definition form]] | * [[http://cemerick.com/2011/07/05/flowchart-for-choosing-the-right-clojure-type-definition-form/?goback=%2Egde_1058217_member_246437578|Flowchart for choosing the right Clojure type definition form]] | ||
* [[http://java.dzone.com/articles/clojure-macros-beginners?utm_source=dlvr.it&utm_medium=twitter&utm_campaign=Feed%3A+javalobby%2Ffrontpage+%28Javalobby+%2F+Java+Zone%29&goback=%2Egde_1058217_member_248790889|Clojure macros for beginners]] | * [[http://java.dzone.com/articles/clojure-macros-beginners?utm_source=dlvr.it&utm_medium=twitter&utm_campaign=Feed%3A+javalobby%2Ffrontpage+%28Javalobby+%2F+Java+Zone%29&goback=%2Egde_1058217_member_248790889|Clojure macros for beginners]] | ||
+ | * [[http://www.infoq.com/presentations/DDD-Clojure|Domain-Driven Design with Clojure]] -- video about Clojure programmes design | ||
==== Learning ==== | ==== Learning ==== | ||
+ | |||
+ | * [[http://www.unexpected-vortices.com/clojure/brief-beginners-guide/index.html|Brief Beginner's Guide to Clojure]] | ||
+ | * [[http://www.codeschool.com/code_tv/getting-started-with-clojure-part-1|Getting Started with Clojure - Part 1]] | ||
* [[http://www.4clojure.com]] | * [[http://www.4clojure.com]] | ||
* [[http://www.clojureatlas.com/|Beautiful Clojure concepts visualisation]] | * [[http://www.clojureatlas.com/|Beautiful Clojure concepts visualisation]] | ||
* [[https://github.com/clojure-cookbook/clojure-cookbook|Clojure Cookbook]] | * [[https://github.com/clojure-cookbook/clojure-cookbook|Clojure Cookbook]] | ||
- | + | * [[https://tbaldridge.pivotshare.com/?m_sort=view&m_order=desc|Video tutorials]] | |
- | ==== Specific Topics ==== | + | * [[http://aphyr.com/tags/Clojure-from-the-ground-up|Clojure from the ground up]] |
+ | ==== Specific / Advanced Topics ==== | ||
* [[http://www.infoq.com/articles/in-depth-look-clojure-collections?goback=%2Egde_1058217_member_248368199|On sequences and immutability]] | * [[http://www.infoq.com/articles/in-depth-look-clojure-collections?goback=%2Egde_1058217_member_248368199|On sequences and immutability]] | ||
* [[http://blog.8thlight.com/colin-jones/2010/12/05/clojure-libs-and-namespaces-require-use-import-and-ns.html|Libs and namespaces]] | * [[http://blog.8thlight.com/colin-jones/2010/12/05/clojure-libs-and-namespaces-require-use-import-and-ns.html|Libs and namespaces]] | ||
+ | * [[http://blog.jayfields.com/2010/07/clojure-destructuring.html|Destructuring]] | ||
* [[http://www.lispplusplus.com/2013/08/io-as-data.html?utm_source=dlvr.it&utm_medium=twitter&goback=.gde_1058217_member_264763964|IO as Data]] | * [[http://www.lispplusplus.com/2013/08/io-as-data.html?utm_source=dlvr.it&utm_medium=twitter&goback=.gde_1058217_member_264763964|IO as Data]] | ||
+ | * [[http://clojure-doc.org/articles/tutorials/growing_a_dsl_with_clojure.html|Growing a DSL]] | ||
+ | * [[http://www.infoq.com/presentations/data-visibility-abstraction|Data, Visibility, Abstraction]] | ||
+ | * [[http://blog.golang.org/concurrency-is-not-parallelism|Concurrency is not parallelism (Go)]]; Clojure's take: [[http://clojure.com/blog/2013/06/28/clojure-core-async-channels.html|core.async]] | ||
+ | * [[http://pluralsight.com/training/Courses/TableOfContents/clojure-concurrency-tutorial|Clojure concurrency tutorial]] | ||
+ | * [[https://github.com/MichaelDrogalis/dire|Dire: decomplecting error behaviour]] | ||
+ | * [[http://pluralsight.com/training/Courses/TableOfContents/clojure-concurrency-tutorial|Clojure concurency tutorial]] | ||
+ | === desktop GUI === | ||
+ | * [[https://github.com/daveray/seesaw|Seesaw]] | ||
==== Web Development ==== | ==== Web Development ==== | ||
* [[http://clojurewebdev.com/workshop/slides/?goback=.gde_1058217_member_263530163|Ultimate overview]] | * [[http://clojurewebdev.com/workshop/slides/?goback=.gde_1058217_member_263530163|Ultimate overview]] | ||
- | * [[http://pedestal.io/|Pedestal Framework]], [[https://github.com/taylorSando/pedestal-todo/blob/master/beginners.md?goback=.gde_1058217_member_264211873|Pedestal Beginner's Guide]] | + | * [[https://github.com/magomimmo/modern-cljs|ClojureScript tutorials]] |
+ | * [[http://pedestal.io/|Pedestal Framework]], [[https://github.com/taylorSando/pedestal-todo/blob/master/beginners.md?goback=.gde_1058217_member_264211873|Pedestal Beginner's Guide]], [[http://e-string.com/articles/the-simplest-possible-clojure-pedestal-app|Small example]] | ||
+ | * [[http://hoplon.io|Hoplon: A Simpler way to program the web]] | ||
+ | * [[http://htmltohiccup.herokuapp.com/|Online HTML->Hiccup converter]] | ||
* [[https://github.com/macourtney/Conjure|Conjure: web framework a-la Django or Rails]] | * [[https://github.com/macourtney/Conjure|Conjure: web framework a-la Django or Rails]] | ||
* [[http://www.luminusweb.net/|Luminus]] - a curated set of libraries | * [[http://www.luminusweb.net/|Luminus]] - a curated set of libraries | ||
* [[http://www.webnoir.org|Noir Framework]] - deprecated, see [[http://blog.raynes.me/blog/2012/12/13/moving-away-from-noir/|Moving away from Noir]] | * [[http://www.webnoir.org|Noir Framework]] - deprecated, see [[http://blog.raynes.me/blog/2012/12/13/moving-away-from-noir/|Moving away from Noir]] | ||
+ | * [[http://hugoduncan.org/post/webapp_with_core.async/|todo webapp with core.async]] | ||
+ | * [[http://ganelon.tomeklipski.com/|Ganelon]] -- microframework for instant Ajax development | ||
+ | * [[https://github.com/jduey/appraiser|DSL for Web applications]] -- a very promising idea!!! --- //[[robert.pergl@fit.cvut.cz|Robert Pergl]] 2013/09/10 21:43// | ||
=== ClojureScript === | === ClojureScript === | ||
* {{:programming:clojurescript_up_and_running.pdf|Book ClojureScript Up and Running}} | * {{:programming:clojurescript_up_and_running.pdf|Book ClojureScript Up and Running}} | ||
+ | * [[https://github.com/shaunlebron/How-To-Debug-CLJS|How to debug CLJS]] | ||
+ | * [[https://github.com/magomimmo/modern-cljs|ClojureScript tutorials]] | ||
* [[http://himera.herokuapp.com/index.html|ClojureScript compiler as a web service]] | * [[http://himera.herokuapp.com/index.html|ClojureScript compiler as a web service]] | ||
* [[https://github.com/cemerick/austin|The ClojureScript browser-REPL]] | * [[https://github.com/cemerick/austin|The ClojureScript browser-REPL]] | ||
+ | * [[http://keminglabs.com/blog/cljs-app-designs/|A sampler of ClojureScript application designs]] | ||
+ | * [[https://github.com/Flamefork/node-webkit-cljs|ClojureScript wrapper for Node Webkit]] | ||
+ | * [[http://zaiste.net/2014/02/web_applications_in_clojure_all_the_way_with_compojure_and_om/?goback=%2Egde_1058217_member_5839217728912658435|Web with Om (Facebook's React)]] | ||
+ | === Mixed resources === | ||
+ | * [[http://alexott.net/en/clojure/video.html|Various videos]] | ||
===== Tools and IDEs ===== | ===== Tools and IDEs ===== | ||
You definitely need [[http://leiningen.org|Leiningen]] for easy project management. There is a multitude of IDE's available, however none is absolutely perfect, yet... | You definitely need [[http://leiningen.org|Leiningen]] for easy project management. There is a multitude of IDE's available, however none is absolutely perfect, yet... | ||
Line 54: | Line 88: | ||
* [[http://www.jetbrains.com/idea/|IntelliJ Idea]] has a plugin La Clojure directly in its repository. | * [[http://www.jetbrains.com/idea/|IntelliJ Idea]] has a plugin La Clojure directly in its repository. | ||
* [[https://github.com/arthuredelstein/clooj|Clooj]] is elegant and very lightweight with limited capabilities | * [[https://github.com/arthuredelstein/clooj|Clooj]] is elegant and very lightweight with limited capabilities | ||
- | * [[http://www.lighttable.com|LightTable]]'s Instarepl is just awesome for playing around! | + | * [[http://www.lighttable.com|LightTable]]'s Instarepl is just awesome for playing around! See [[http://blog.maio.cz/2013/08/getting-feel-for-light-tables-instarepl.html?goback=.gde_1058217_member_269420119#!|here]] for an inspiration |
* [[http://www.boxuk.com/blog/unboxing-vim-fireplace/?goback=%2Egde_1058217_member_245237788|vim-fireplace here]] and [[http://clojure-doc.org/articles/tutorials/vim_fireplace.html|here]] recommended together with [[https://github.com/dgrnbrg/vim-redl|Redl plugin]] and [[https://github.com/guns/vim-sexp|vim-sexp]] | * [[http://www.boxuk.com/blog/unboxing-vim-fireplace/?goback=%2Egde_1058217_member_245237788|vim-fireplace here]] and [[http://clojure-doc.org/articles/tutorials/vim_fireplace.html|here]] recommended together with [[https://github.com/dgrnbrg/vim-redl|Redl plugin]] and [[https://github.com/guns/vim-sexp|vim-sexp]] | ||
- | * Other tools at [[http://dev.clojure.org/display/doc/Clojure+Tools]]. Very recommended is Eclipse+Counterclockwise | + | * Other tools at [[http://dev.clojure.org/display/doc/Clojure+Tools]]. |
+ | |||
+ | ==== Leiningen plugins ==== | ||
+ | * [[https://github.com/xsc/lein-ancient|lein-ancient]] -- to check availability of newer versions of used libraries | ||
+ | * [[https://github.com/jonase/kibit|lein-kibit]] -- Clojure style checker | ||
+ | * [[http://hugoduncan.org/post/alembic_reloads_your_project_clj_dependencies]] | ||
===== Tips and Tricks ===== | ===== Tips and Tricks ===== | ||
* [[http://thinkrelevance.com/blog/2013/06/04/clojure-workflow-reloaded?goback=%2Egde_1058217_member_246727680|Clojure workflow]] | * [[http://thinkrelevance.com/blog/2013/06/04/clojure-workflow-reloaded?goback=%2Egde_1058217_member_246727680|Clojure workflow]] | ||
- | * For Clojure DEBUGGING use [[https://github.com/ptaoussanis/timbre|Timbre]] for logging and [[https://github.com/dgrnbrg/spyscope|Spyscope]] for forms spying. | + | * For Clojure DEBUGGING use [[https://github.com/ptaoussanis/timbre|Timbre]] for logging and [[https://github.com/dgrnbrg/spyscope|Spyscope]] for forms spying. An alternative is also [[https://github.com/timvisher/what-does-tools-trace-do|clojure.trace]] |
+ | * [[http://tech.puredanger.com/2013/08/31/clojure-and-testing/|Survey of Clojure testing]] | ||
===== Useful Libraries ===== | ===== Useful Libraries ===== | ||
Line 67: | Line 107: | ||
* [[https://github.com/marick/Midje|Midje: gracious testing library]] | * [[https://github.com/marick/Midje|Midje: gracious testing library]] | ||
* [[https://github.com/Engelberg/instaparse|Instaparse: library for parsing]] | * [[https://github.com/Engelberg/instaparse|Instaparse: library for parsing]] | ||
+ | * [[http://www.clojure-toolbox.com/|A categorised directory of libraries and tools for Clojure]] | ||
+ | * [[https://github.com/rbrush/clara-rules|Clara Rules: forward chaining rules in clojure]] | ||
===== Interesting Solutions ===== | ===== Interesting Solutions ===== | ||
* [[http://www.flyingmachinestudios.com/programming/building-a-forum-with-clojure-datomic-angular/?goback=.gde_1058217_member_263505831|Forum]] | * [[http://www.flyingmachinestudios.com/programming/building-a-forum-with-clojure-datomic-angular/?goback=.gde_1058217_member_263505831|Forum]] | ||
* [[http://rigsomelight.com/2013/08/12/clojurescript-core-async-dots-game.html|Dots game]] | * [[http://rigsomelight.com/2013/08/12/clojurescript-core-async-dots-game.html|Dots game]] | ||
+ | * [[http://swannodette.github.io/2013/08/17/comparative/|Autocompleter in ClojureScript]] | ||
+ | * [[http://www.markhneedham.com/blog/2013/08/26/clojureenlive-screen-scraping-a-html-file-from-disk/|Screen scraping]] | ||
+ | * [[http://keminglabs.com/c2/|C2: Clojure(Script) data visualization]] | ||
+ | ===== Technical Topics ===== | ||
+ | * {{:programming:pppj13.pdf|Performance analysis of JVM-Hosted Languages}} |