====== Clojure Programming ====== ===== Clojure / FP Advocacy ===== * [[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://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 ===== * [[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://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]] * [[http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey]] ===== Resources ===== ==== 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]] ==== 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]] * [[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://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 ==== * [[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.clojureatlas.com/|Beautiful Clojure concepts visualisation]] * [[https://github.com/clojure-cookbook/clojure-cookbook|Clojure Cookbook]] * [[https://tbaldridge.pivotshare.com/?m_sort=view&m_order=desc|Video tutorials]] * [[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://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://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 ==== * [[http://clojurewebdev.com/workshop/slides/?goback=.gde_1058217_member_263530163|Ultimate overview]] * [[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]] * [[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://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 === * {{: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]] * [[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 ===== 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... * [[http://code.google.com/p/counterclockwise/|Counterclockwise plugin for Eclipse]] * [[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 * [[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]] * 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 ===== * [[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. 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 ===== * [[https://github.com/cgrand/spreadmap/blob/master/README.md?goback=%2Egde_1058217_member_250014020|spreadmap: Library for reading Excel files]] * [[https://github.com/ptaoussanis/timbre|Timbre: logging and profiling library]] * [[https://github.com/marick/Midje|Midje: gracious testing library]] * [[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 ===== * [[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://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}}