├── LICENSE └── README.md /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Clojure-Resources 2 | ================= 3 | 4 | This is a compilation of links and resources for learning about **Clojure**, **ClojureScript**, **Om** and more broadly, **LISP**. It is still in very early stages. Please feel free to add resources by issuing a pull request (preferred) or by getting in touch. Please also don't hesitate to suggest a better sort order. 5 | 6 | ## Clojure 7 | * **[Clojure Homepage](http://clojure.org)** 8 | * **[Clojure Google Group](https://groups.google.com/forum/#!forum/clojure)** 9 | * **[Clojure Cheat Sheet](http://grimoire.arrdem.com/)** 10 | * **[Inspecting the content of channels in core.async](http://tgk.github.io/2013/10/inspect-core-async-channels.html)** 11 | * **[Clojure Copter - Control for the AR Parrot Drone](https://github.com/gigasquid/clj-drone)** 12 | * **[Clojure Users - Linkedin Group](https://www.linkedin.com/groups?home=&gid=1058217)** 13 | * **[Clojure compilation](http://clojure.org/compilation)**: helped me learn more about ahead-of-time compilation (AOT). 14 | * **[xsc/pandect on GitHub](https://github.com/xsc/pandect)**: Fast and easy-to-use Message Digest, Checksum and HMAC library. I use it in the Clojure version of my **[BirdWatch](https://github.com/matthiasn/BirdWatch)** project & it works like a charm. 15 | * **[Clojure Documentation](http://clojure-doc.org)**: community-driven documentation project 16 | * **[Clojure for the Brave and True - Writing Macros](http://www.braveclojure.com/writing-macros/)**: before this article, I did not know that there was a connection between hair growth potion and macros. Well, I still don't know that. But entertaining nonetheless. And I now understand macros. 17 | * **[Clojure Distilled](http://yogthos.github.io/ClojureDistilled.html)**: an introduction to core Clojure concepts 18 | * [**Clojure Gazette**](http://www.clojuregazette.com): Weekly Newsletter to inspire Clojure programmers. 19 | * **[SICP distilled](https://www.kickstarter.com/projects/1751759988/sicp-distilled)**: Kickstarter project aimed at translating **SICP** (see in the last section) into Clojure. This looks really cool, you should go fund it while you still can. I have done the same. 20 | * **[Clojurecademy](https://clojurecademy.com)**: Learning Clojure Interactively(Hands-On). 21 | 22 | ## Clojure libraries 23 | * **[clj-time/clj-time on GitHub](https://github.com/clj-time/clj-time)**: wrapper for Joda Time 24 | * **[clojure/data.priority-map on GitHub](https://github.com/clojure/data.priority-map)**: implementation of a priority map in Clojure. Useful when you want a sorted map that is sorted based on the values, not the keys. 25 | * **[damballa/parkour on GitHub](https://github.com/damballa/parkour)**: Hadoop MapReduce in idiomatic Clojure. 26 | * **[Monger, a Clojure client for MongoDB](http://clojuremongodb.info/articles/getting_started.html)** 27 | * **[Overtone](https://github.com/overtone/overtone)**: make music from your REPL 28 | * **[Live Coding. Live Synths. Live Music.](http://meta-ex.com)**: music made with Clojure and Overtone 29 | * **[The Clojure Toolbox](http://www.clojure-toolbox.com)**: a categorised directory of libraries and tools for Clojure 30 | * **[aengelberg/loco on GitHub](https://github.com/aengelberg/loco)**: A Constraint Programming library for Clojure. I can see how this can be useful in an application. 31 | * **[clojure/core.typed](https://github.com/clojure/core.typed)**: An optional type system for Clojure 32 | * **[ckirkendall/fresnel](https://github.com/ckirkendall/fresnel)**: A library for composing lenses and working with complex state objects 33 | * **[MichaelDrogalis/dire on GitHub](https://github.com/MichaelDrogalis/dire)**: Erlang-style supervisor error handling for Clojure. I have not tried it yet, but it does look like an interesting concept, particularly after having worked with supervisors within the actor model for a while. Has anyone used this in a real application? 34 | * **[prismatic/schema on GitHub](https://github.com/Prismatic/schema)**: Clojure(Script) library for declarative data description and validation 35 | * **[22rbrush/clara-rules on GitHub](https://github.com/rbrush/clara-rules)**: Forward-chaining rules in Clojure 36 | * **[ptaoussanis/carmine on GitHub](https://github.com/ptaoussanis/carmine)**: Clojure Redis client & message queue 37 | * **[killme2008/defun on GitHub](https://github.com/killme2008/defun)**: A macro to define clojure functions with parameter pattern matching just like erlang or elixir. Looks useful. 38 | * **[AvisoNovate/rook on GitHub](https://github.com/AvisoNovate/rook)**: Sane, smart, fast, Clojure web services 39 | * **[sjl/metrics-clojure on GitHub](https://github.com/sjl/metrics-clojure)**: A thin façade around Coda Hale's metrics library. 40 | * **[dakrone/clj-http on GitHub](https://github.com/dakrone/clj-http)**: An idiomatic clojure http client wrapping the apache client. 41 | * **[http-kit/http-kit on GitHub](https://github.com/http-kit/http-kit)**: http-kit is a minimalist, event-driven, high-performance Clojure HTTP server/client library with WebSocket and asynchronous support 42 | * **[greglook/puget on GitHub](https://github.com/greglook/puget)**: Canonical Colorizing Clojure Printer 43 | * **[funcool/buddy on GitHub](https://github.com/funcool/buddy)**: Security library for Clojure 44 | * **[mpenet/jet on GitHub](https://github.com/mpenet/jet)**: Jetty9 ring server adapter with WebSocket support via core.async and Jetty9 based HTTP & WebSocket clients (jvm based, no cljs) 45 | * **[raines/fs on GitHub](https://github.com/Raynes/fs)**: useful library for manipulating files and working with the filesystem 46 | * **[clj.qrgen on GitHub](https://github.com/killme2008/clj.qrgen)**: generate QR code, for example for serving code as PNG file in ring handler 47 | 48 | ## Learn the language 49 | * **[Clojure from the ground up](http://aphyr.com/tags/Clojure-from-the-ground-up)**: very encouraging series of articles for beginners. I also really appreciate the introduction. 50 | * **[Clojure for the Brave and True (a Book for Beginners)](http://www.braveclojure.com)**: great intro, I particularly enjoyed the introduction to Emacs in conjunction with Clojure 51 | * **[Introduction to Clojure](http://clojure-doc.org/articles/tutorials/introduction.html)**: short introduction to the Clojure basics. With this, it should be possible to learn the language itself on a rainy afternoon. 52 | * **[Clojure.core: Batteries (almost) included - Adam Bard (06/2013)](http://adambard.com/blog/clojure-batteries-included/)**: a guided tour through some of the many libraries available from the Clojure team that don't come distributed with Clojure. 53 | * **[bbatsov/clojure-style-guide on GitHub](https://github.com/bbatsov/clojure-style-guide)**: A community coding style guide for the Clojure programming language 54 | * **[Library Coding Standards (last edit 04/2014)](http://dev.clojure.org/display/community/Library+Coding+Standards)**: coding standards on http://dev.clojure.org 55 | * **[clojure-cookbook/clojure-cookbook on GitHub](https://github.com/clojure-cookbook/clojure-cookbook)**: This is the home of O'Reilly's Clojure Cookbook 56 | 57 | ## ClojureScript 58 | * **[clojure/clojurescript - GitHub](https://github.com/clojure/clojurescript)** 59 | * **[shadow-cljs](https://github.com/thheller/shadow-cljs)**: the only sane way to build ClojureScript 60 | * **[ClojureScript Google Group](https://groups.google.com/forum/#!forum/clojurescript)** 61 | * **[ClojureScript-in-ClojureScript REPL](http://clojurescript.net)** 62 | * **[ClojureScript One](http://clojurescriptone.com)** 63 | * **[Translations from JavaScript](http://www.polymer-project.org)**: plenty of JavaScript code snippets and their translation to ClojureScript 64 | * **[Calling javascript functions from clojurescript](http://odyssomay.github.io/2011/10/10/calling-javascript-functions-from-clojurescript.html)** 65 | * **[Specljs and ClojureScript](http://speclj.com/specljs)** 66 | * **[tailrecursion/cljs-priority-map on GitHub](https://github.com/tailrecursion/cljs-priority-map)**: ClojureScript port of clojure/data.priority-map 67 | * **[mfikes/goby - GitHub](https://github.com/mfikes/goby)**: Develop iOS apps with ClojureScript 68 | * **[swannodette/mies - GitHub](https://github.com/swannodette/mies)**: Minimal ClojureScript project template 69 | * **[ClojureScript: JavaScript Interop - 09/2014](http://www.spacjer.com/blog/2014/09/12/clojurescript-javascript-interop/)**: Blog post about interacting with JavaScript 70 | * **[andrewmcveigh/cljs-time - GitHub](https://github.com/andrewmcveigh/cljs-time)**: A clj-time inspired date library for clojurescript 71 | * **[shaunlebron/ClojureScript-Syntax-in-15-minutes on GitHub](https://github.com/shaunlebron/ClojureScript-Syntax-in-15-minutes)**: cljs syntax is simple 72 | * **[bensu/doo on GitHub](https://github.com/bensu/doo)**: finally a pleasant experience for running tests on the JavaScript side 73 | 74 | ## ClojureScript libraries 75 | * **[lbradstreet/cljs-uuid-utils - GitHub](https://github.com/lbradstreet/cljs-uuid-utils)**: Micro lib with ClojureScript implementation of a random, type 4 UUID generator compatible with cljs.core/UUID 76 | * **[yogthos/markdown-clj on GitHub](https://github.com/yogthos/markdown-clj)**: library for rendering markdown into HTML 77 | 78 | ## Structuring an application 79 | * **[Organizing Your Project: a Librarian's Tale](http://www.braveclojure.com/organization/)**: useful chapter from the **[Clojure for the Brave and True](http://www.braveclojure.com/)** book about code organization and namespaces. It's a little long but it still covers the topic well enough. 80 | * **[stuartsierra/component on GitHub](https://github.com/stuartsierra/component)**: okay, so this one had been on my list for a while. Started watching Stuart's video a few times. Now I finally got around to using it. And all I can say is you really have to take a closer look at this. It makes structuring a larger application so much more straightforward. And the earlier you do, the more pain you save later. Rewriting an existing application is doable, but somewhat painful. 81 | * **[danielsz/system on GitHub](https://github.com/danielsz/system)**: set of readymade components on top of the component library above. 82 | * **[palletops/leaven on GitHub](https://github.com/palletops/leaven)**: lightweight component model for both Clojure and ClojureScript. 83 | * **[palletops/bakery on GitHub](https://github.com/palletops/bakery)**: A library of components for leaven, the component library above. 84 | * **[MichaelDrogalis/onyx on GitHub](https://github.com/MichaelDrogalis/onyx)**: Distributed, fault tolerant data processing for Clojure. It does sound like an interesting and very ambitious concept for building distributed applications. On my list of things to maybe try at some point. 85 | * **[Building a System in Clojure](https://leanpub.com/building-a-system-in-clojure)**: book by the maintainer of this repository about structuring complex applications. 86 | 87 | ## Web development / Om 88 | * **[Keechma](https://keechma.com/)**: a pluggable micro framework for Reagent 89 | * **[weavejester/compojure on GitHub](https://github.com/weavejester/compojure)**: a truly concise routing library for Clojure web applications. 90 | * **[Luminus](http://www.luminusweb.net/)**: a Clojure micro-framework in style of Flask/Sinatra 91 | * **[swannodette/om - GitHub](https://github.com/swannodette/om)**: a **ClojureScript** library on top of Facebook's **[React library](http://facebook.github.io/react/)**. React and ClojureScript are a great match as React is particularly well suited for rendering **immutable** data structures. 92 | * **[A slice of React, Clojurescript and Om](http://www.lexicallyscoped.com/2013/12/25/slice-of-reactjs-and-cljs.html)**: article rewriting some React samples using **Om** 93 | * **[Om: Enhancing Facebook's React with Immutability](http://www.infoq.com/news/2014/01/om-react)** 94 | * **[Reagent](https://github.com/reagent-project/reagent-core)**: alternative ClojureSCript React wrapper 95 | * **[ptaoussanis/sente on GitHub](https://github.com/ptaoussanis/sente)**: powerful library for connecting a Clojure server application and a ClojureScript client side application via the WebSockets protocol. I'm using this successfully in my **[BirdWatch](https://github.com/matthiasn/birdwatch/)** project. 96 | * **[Compojure apps, in the style of Sinatra - Adam Bard, 09/2014](http://adambard.com/blog/sinatra-docs-in-clojure/)**: excellent introduction to Compojure, inspired by Sinatra's getting started guide. 97 | * **[noprompt/garden on GitHub](https://github.com/noprompt/garden)**: Generate CSS with Clojure 98 | 99 | ## core.async 100 | * **[clojure/core.async on GitHub](https://github.com/clojure/core.async/)** 101 | * **[Implementation details of core.async Channels - Rich Hickey (07/2014)](https://vimeo.com/100518968)** 102 | * **[Slides for the talk above](http://cdn.cognitect.com/presentations/2014/insidechannels.pdf)** 103 | * **[Clojure core.async API Reference](https://clojure.github.io/core.async/)**: descriptions oftentimes too short to fully understand how to use the constructs in my opinion, but at least a starting point 104 | * **[Combining & Controlling Channels with core.async's merge and mix](http://yobriefca.se/blog/2014/06/01/combining-and-controlling-channels-with-core-dot-asyncs-merge-and-mix/)** 105 | * **[Mastering Time with Clojure core.async](http://sssslide.com/speakerdeck.com/hlship/mastering-time-with-clojure-core-dot-async)** 106 | * **[core.async and Blocking IO](http://martintrojer.github.io/clojure/2013/07/07/coreasync-and-blocking-io/)**: article discussing blocking IO and how to deal with it and why non-blocking is preferable. Great, concise read. 107 | * **[Code Read of core.async Timeouts](http://hueypetersen.com/posts/2013/07/10/code-read-of-core-async-timeouts/)** 108 | * **[Publish and Subscribe with core.async's pub and sub](http://yobriefca.se/blog/2014/06/04/publish-and-subscribe-with-core-dot-asyncs-pub-and-sub/)**: useful and well-written introduction to the topic of Publish-Subscribe. I like the idea of a channel-driven **[Rube Goldberg machine](https://en.wikipedia.org/wiki/Rube_Goldberg_machine)**. Can we have crazy animations with that as well? 109 | 110 | ## Transducers 111 | * **[Inside Transducers - Rich Hickey (11/2014)](https://www.youtube.com/watch?v=4KqUvG8HPYo)**: A talk about transducers and core.async. 112 | * **[Transducers - Rich Hickey (09/2014)](https://www.youtube.com/watch?v=6mTbuzafcII)**: Rich Hickey talks about **Transducers**. Excellent talk as usual, must see. 113 | * **[TRANSDUCERS ARE COMING - Rich Hickey (08/2014)](http://blog.cognitect.com/blog/2014/8/6/transducers-are-coming)**: Introduction of the concept by Rich Hickey himself 114 | * **[Green Eggs and Transducers - Carin Meier (09/2014)](http://gigasquidsoftware.com/blog/2014/09/06/green-eggs-and-transducers/)**: A quick tour of Clojure Transducers with core.async with Dr. Seuss as a guide. 115 | * **[Understanding Transducers - Elben Shira (09/2014)](http://elbenshira.com/blog/understanding-transducers/)**: "This article explores transducers by ignoring transducers. Instead we will examine two ordinary functions, map and filter. We'll play with them and scrutinize them." 116 | * **[richhickey/transducerfun.clj on GitHub](https://gist.github.com/richhickey/b5aefa622180681e1c81)**: Gist with some code 117 | * **[ptaoussanis / transducers.clj - GitHub Gist](https://gist.github.com/ptaoussanis/e537bd8ffdc943bbbce7)**: well-documented code snippet 118 | 119 | ## Tools 120 | * **[Leiningen](http://leiningen.org)**: for automating Clojure projects without setting your hair on fire (from the project website). Hard to imagine using Clojure without it. 121 | * **[Signing and Promoting your Clojure libraries on Clojars (03/2013)](http://thornydev.blogspot.de/2013/03/signing-and-promoting-your-clojure.html)**: helpful guide for signing Clojars artifacts 122 | * **[How Clojure Babies are Made: What Leiningen Is](http://www.flyingmachinestudios.com/programming/how-clojure-babies-are-made-what-leiningen-is/)**: fun read, helps understand what Leiningen really is 123 | * **[How Clojure Babies Are Made: Understanding lein run](http://www.flyingmachinestudios.com/programming/how-clojure-babies-are-made-lein-run/)**: this article helps you understand how gruesome a place the world would be without Leiningen 124 | * **[overtone/emacs-live - GitHub](https://github.com/overtone/emacs-live)** 125 | * **[clojure-emacs/cider - GitHub](https://github.com/clojure-emacs/cider)** 126 | * **[Clojure with Emacs](http://clojure-doc.org/articles/tutorials/emacs.html)** 127 | * **[LightTable](http://www.lighttable.com)**: IDE for Clojure and ClojureScript. Great for people who (still) struggle with Emacs. 128 | * **[Riemann](http://riemann.io)**: Riemann monitors distributed systems. Looks really useful for understanding systems under load. 129 | * **[lein-difftest on GitHub](https://github.com/brentonashworth/lein-difftest)**: plugin for pretty test output (like green for success). Hasn't been worked on since 2012, but still working. 130 | * **[lein-quickie on GitHub](https://github.com/jakepearson/quickie)**: plugin for leiningen that automatically re-runs your tests when it detects file system changes. Works as expected. 131 | * **[dsabanin/clj-pid on GitHub](https://github.com/dsabanin/clj-pid)**: Tiny Clojure library to get current process ID and save/read PID files. Useful when deploying an uberjar. 132 | * **[A Pretty Printer for Clojure](https://clojure.github.io/clojure/doc/clojure/pprint/PrettyPrinting.html)**: always useful when trying to read Clojure's datastructures as a human being. 133 | * **[Dockerizing a Clojure Application - Ryan Neufeld (09/2014)](http://www.rkn.io/2014/09/13/clojure-docker/)**: something I've been wanting to do for a while. 134 | * **[jonase/kibit on GitHub](https://github.com/jonase/kibit)**: There's a function for that! Static code analyzer for Clojure. 135 | * **[kovasb/session on GitHub](https://github.com/kovasb/session)**: clojure-based live-coding environment 136 | * **[jonase/eastwood on GitHub](https://github.com/jonase/eastwood)**: a Clojure lint tool 137 | * **[AvisoNovate/pretty on GitHub](https://github.com/AvisoNovate/pretty/)**: Library for helping print things prettily, in Clojure - ANSI fonts, formatted exceptions 138 | * **[JonyEpsilon/gorilla-repl on GitHub](https://github.com/JonyEpsilon/gorilla-repl)**: A rich REPL for Clojure in the notebook style. 139 | * **[dakrone/lein-bikeshed on GitHub](https://github.com/dakrone/lein-bikeshed): A Leiningen plugin designed to tell you your code is bad, and that you should feel bad 140 | * **[borkdude/clj-kondo](https://github.com/borkdude/clj-kondo): A linter for Clojure code that sparks joy. 141 | 142 | ## Distributed computing 143 | * **[Avout](https://github.com/liebke/avout)**: Distributed State in Clojure, provides a distributed implementation of **[Clojure's Software Transactional Memory (STM)](http://clojure.org/refs)** 144 | * **[eggsyntax/datawalk on GitHub](https://github.com/eggsyntax/datawalk)**: Interactively explore complex data structures at the REPL with minimum keystrokes 145 | 146 | ## Data analysis 147 | * **[Incanter](https://github.com/incanter/incanter)**: Clojure-based, **R-like statistical computing and graphics environment** for the JVM 148 | 149 | ## Blog posts 150 | * **[Planet Clojure](http://planet.clojure.in)**: Planet Clojure is a meta blog that collects posts from the blogs of various Clojure hackers and contributors. 151 | * **[Do Things: a Clojure Language Crash Course](http://www.braveclojure.com/do-things/)** 152 | * **[Relevance Blog](http://thinkrelevance.com/blog)** 153 | * **[My Clojure Workflow, Reloaded - Stuart Sierra](http://thinkrelevance.com/blog/2013/06/04/clojure-workflow-reloaded)** 154 | * **[A Closer Look at Transit](http://swannodette.github.io/2014/07/23/a-closer-look-at-transit/)** 155 | * **[WHY I'M PRODUCTIVE IN CLOJURE](http://yogthos.net/#/blog/49-Why+I'm+Productive+in+Clojure)** 156 | * **[Ten reasons to use Clojure/ClojureScript on your next web dev project - Adam Bard](http://adambard.com/blog/ten-reasons-to-use-clojure/)** 157 | * **[Learn X in Y minutes Where X=clojure](http://learnxinyminutes.com/docs/clojure/)** 158 | * **[A simple Clojurescript app - Adam Bard](http://adambard.com/blog/a-simple-clojurescript-app/)** 159 | * **[Distributed Communicating Sequential Processes (CSP) - David Pollak](http://blog.goodstuff.im/intro_dragonmark)** 160 | * **[Inspecting the content of channels in core.async](http://tgk.github.io/2013/10/inspect-core-async-channels.html)** 161 | * **[Why Clojure will win](http://michaelochurch.wordpress.com/2013/08/07/why-clojure-will-win/)** 162 | * **[Building Clojure Services at Scale](http://blog.josephwilk.net/clojure/building-clojure-services-at-scale.html)** 163 | * **[Appointment scheduling in Clojure with Loco](http://programming-puzzler.blogspot.de/2014/03/appointment-scheduling-in-clojure-with.html)**: introduction to contraints programming with Loco (above in the libraries section) using scheduling as an example. 164 | * **[My Top Clojure Articles - Adam Bard (07/2014)](http://adambard.com/blog/greatest-clojure-hits/)**: haven't read them yet, but I like his other articles, so these are on my reading list. Looks like interesting stuff. 165 | * **[Building a System in Clojure - Part 1 (09/2014)](http://matthiasnehlsen.com/blog/2014/09/24/Building-Systems-in-Clojure-1/)**: first of my series of articles about building a system in Clojure. 166 | * **["Good Enough" error handling in Clojure - Adam Bard (05/2013)](http://adambard.com/blog/acceptable-error-handling-in-clojure/)**: I enjoyed this article about error handling. 167 | * **[Clojure Tutorials on Semaphore Community](https://semaphoreci.com/community/tags/clojure)** - a collection of Clojure related tutorials covering testing, deployment, continuous integration and other topics. 168 | * **[API Authentication with Liberator and Friend](http://sritchie.github.io/2014/01/17/api-authentication-with-liberator-and-friend/)**: useful blog post when you have API authentication needs 169 | 170 | ## Videos 171 | * **[Talk Transcripts](https://github.com/matthiasn/talk-transcripts)**: transcripts of interesting talks 172 | * **[The Functional Final Frontier - David Nolen (10/2014)](http://www.infoq.com/presentations/om-clojurescript-facebook-react)**: David Nolen talks about Om and functional UI programming **[transcript](https://github.com/matthiasn/talk-transcripts/blob/master/Nolen_David/FunctionalFinalFrontier.md)** 173 | * **[Transducers - Rich Hickey (09/2014)](https://www.youtube.com/watch?v=6mTbuzafcII)**: Rich Hickey talks about **Transducers**. Excellent talk as usual, must see. **[transcript](https://github.com/matthiasn/talk-transcripts/blob/master/Hickey_Rich/Transducers.md)** 174 | * **[Simple Made Easy - Rich Hickey](http://www.infoq.com/presentations/Simple-Made-Easy)**: one of my favorite presentations. Like overall. Highly recommended. **[transcript](https://github.com/matthiasn/talk-transcripts/blob/master/Hickey_Rich/SimpleMadeEasy.md)** 175 | * **[Hammock Driven Development - Rich Hickey](https://www.youtube.com/watch?v=f84n5oFoZBc)** **[transcript](https://github.com/matthiasn/talk-transcripts/blob/master/Hickey_Rich/HammockDrivenDev.md)** 176 | * **[Clojure - Rich Hickey](http://www.infoq.com/presentations/hickey-clojure)** 177 | * **[Are we there yet? - Rich Hickey](http://www.infoq.com/presentations/Are-We-There-Yet-Rich-Hickey)** 178 | * **[Reducers - A Library and Model for Collection Processing - Rich Hickey ](http://www.infoq.com/presentations/Clojure-Reducers)** **[transcript](https://github.com/matthiasn/talk-transcripts/blob/master/Hickey_Rich/Reducers.md)** 179 | * **[The Language of the System - Rich Hickey, Conj 2012](https://www.youtube.com/watch?v=ROor6_NGIWU)**: less about Clojure and more about the design of systems in general. Well worth watching (like all of Rich Hickey's talks, really). **[transcript](https://github.com/matthiasn/talk-transcripts/blob/master/Hickey_Rich/LanguageSystem.md)** 180 | * **[Design, Composition and Performance - Rich Hickey](http://www.infoq.com/presentations/Design-Composition-Performance)** 181 | * **[Clojure core.async - Rich Hickey](http://www.infoq.com/presentations/clojure-core-async)** **[transcript](http://www.infoq.com/presentations/clojure-core-async)** 182 | * **[ClojureScript: Lisp's Revenge - David Nolen](https://www.youtube.com/watch?v=MTawgp3SKy8)** 183 | * **[Activity Stream Processing in Clojure - Travis Vachon](https://www.youtube.com/watch?v=0l7Va3-wXeI)** 184 | * **[Expert to Expert: Rich Hickey and Brian Beckman - Inside Clojure](https://www.youtube.com/watch?v=wASCH_gPnDw)** 185 | * **[ClojureScript - Better Semantics at Low Low Prices! - David Nolen](http://www.infoq.com/presentations/ClojureScript-Optimizations)** 186 | * **[Pete Hunt - The Secrets of React's Virtual DOM (FutureJS 2014)](https://www.youtube.com/watch?v=-DX3vJiqxm4)** 187 | * **[Clojure in the Large - Stuart Sierra](http://www.infoq.com/presentations/Clojure-Large-scale-patterns-techniques)** 188 | * **[Quick Intro to Live Programming with Overtone](https://vimeo.com/22798433)** 189 | * **[EuroClojure 2014 videos](https://vimeo.com/channels/781458)**: 18 recorded presentations, plenty of interesting stuff 190 | * **[Mobile App Development with ClojureScript and Cordova](http://www.hakkalabs.co/articles/mobile-app-development-clojurescript-cordova#!)**: talk given at the NYC Clojure Users Group in July 2014 about building a hybrid app with **[Apache Cordova](http://cordova.apache.org)**, **ClojureScript**, **cor.async** and **Om**. Looks promising. 191 | * **[Components Just Enough Structure - Stuart Sierra, Clojure/West 2014](https://www.youtube.com/watch?v=13cmHf_kt-Q)**: presentation on the Components library. 192 | * [**LispCast Videos**](http://www.purelyfunctional.tv/): For-pay video courses teaching Clojure. 193 | 194 | ## Slides 195 | * **[Mastering time with Clojure core.async](http://sssslide.com/speakerdeck.com/hlship/mastering-time-with-clojure-core-dot-async)** 196 | 197 | ## Podcasts 198 | * **[The Cognicast](http://blog.cognitect.com/cognicast/)**: podcast by **[Cognitect](http://cognitect.com)**, the guys behind Clojure. 199 | * **[defn](https://defn.audio)**: the number one vegetarian Clojure podcast by Vijay Kiran and Ray McDermott. Casual, fun and NSFW interviews with Clojure luminaries. 200 | * **[Functional Geekery](http://www.functionalgeekery.com)**: podcast on all things functional programming, sometimes featuring Clojure as well. 201 | 202 | ## Comparisons with other languages 203 | * **[Clojure vs Scala (12/2013)](http://programming-puzzler.blogspot.de/2013/12/clojure-vs-scala.html)**: comparing Clojure and Scala. I agree that Clojure guides you towards simpler solutions. 204 | * **[Clojure's core.typed vs Haskell - A Project Euler showdown (09/2013)](http://adambard.com/blog/core-typed-vs-haskell/)**: comparing the approaches to two mathematical problems in Haskell and Clojure / core.typed. 205 | * **[MODERN CONCURRENCY: ERLANG, SCALA, GO, CLOJURE (2013)](http://kachayev.github.io/talks/kharkivpy%230/#/)**: slideshow comparing approaches to concurrency in different languages. NOTE: this appears to **predate core.async**. But **CSP-style channels** are mentioned for **golang**, so the same applies to Clojure with core.async in addition to STM and **agents**. 206 | 207 | ## LISP 208 | * **[Structure and Interpretation of Computer Programs](http://mitpress.mit.edu/sicp/)** 209 | * **[The Nature of Lisp](http://www.defmacro.org/ramblings/lisp.html)** 210 | * **[Structure and Interpretation of Computer Programs - Lecture Videos](http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/video-lectures/)**: recorded in 1986 211 | * **[Lispcast.com](http://www.lispcast.com)**: Eric Normand's blog 212 | 213 | --------------------------------------------------------------------------------