Skip to content
Matt Burns edited this page Aug 2, 2014 · 1 revision
        <h1 id="title-text" class="with-breadcrumbs">Clojure Lunch and Learn</a>
                        </h1>
    </div>
</div>


    <div class="wiki-content">
                       
    <p><img class="confluence-embedded-image image-right" src="/wiki/download/attachments/87655298/john_mccarthy_successories_poster.jpg?version=1&amp;modificationDate=1401312961272&amp;api=v2" data-image-src="/wiki/download/attachments/87655298/john_mccarthy_successories_poster.jpg?version=1&amp;modificationDate=1401312961272&amp;api=v2"></p><div style="text-align: center;"><strong><a href="http://www.infoq.com/presentations/Are-We-There-Yet-Rich-Hickey" class="external-link" rel="nofollow">Are we there yet?</a><br></strong></div><div style="text-align: center;"><strong><br></strong></div><div style="text-align: center;"><strong><br></strong></div><div style="text-align: center;"><strong>All Are Welcome</strong></div><p><img class="confluence-embedded-image image-center" src="/wiki/download/attachments/87655298/imgres.jpg?version=2&amp;modificationDate=1401312882591&amp;api=v2" data-image-src="/wiki/download/attachments/87655298/imgres.jpg?version=2&amp;modificationDate=1401312882591&amp;api=v2"></p><p>&nbsp;</p><p style="text-align: center;"><strong>Clojure demands that you raise your game and pays you back for doing. </strong></p><p style="text-align: center;"><strong>My goal with this course is to reduce the steep learning curve and get users creating non trivial programs quickly.<br></strong></p><p><span style="color: rgb(0,0,0);">This six week seminar we’ll be learning in Clojure, which is a modern dialect of a very old family of computer languages, called Lisp.&nbsp;</span><span style="color: rgb(0,0,0);line-height: 1.4285715;">We’re going to explore the nature of syntax, metalanguages, values, references, mutation, control flow, and concurrency.&nbsp;</span><span style="color: rgb(0,0,0);line-height: 1.4285715;">Many languages leave these ideas implicit in the language construction, or don’t have a concept of metalanguages or concurrency at all.&nbsp;</span><span style="color: rgb(0,0,0);line-height: 1.4285715;">Clojure makes these ideas explicit, first-class language constructs. &nbsp;</span><span style="color: rgb(0,0,0);line-height: 1.4285715;">In more general terms, Clojure is a well-rounded language. It offers broad library support and runs on multiple operating systems.</span></p><ul><li><span style="color: rgb(255,0,0);"><strong>Session One - Getting Started</strong></span><ul><li><strong>Why should I care or learn this?</strong><br><strong><img class="confluence-embedded-image" src="/wiki/download/attachments/87655298/images.jpg?version=2&amp;modificationDate=1401312927952&amp;api=v2" data-image-src="/wiki/download/attachments/87655298/images.jpg?version=2&amp;modificationDate=1401312927952&amp;api=v2"></strong></li></ul></li></ul><p><span style="color: rgb(0,0,0);">I have discovered what I like the most about Clojure is that it brings together the best of what many languages have to offer while not forcing it all upon me and, in doing so, has provided a good balance between power and flexibility. &nbsp;</span></p><p><span style="color: rgb(0,0,0);">&nbsp;</span><strong><strong>Motivation For Learning Lisp/Clojure: &nbsp;<a href="http://www.paulgraham.com/avg.html" class="external-link" rel="nofollow">Beating The Averages by Paul Graham</a><a href="http://www.paulgraham.com/avg.html" class="external-link" rel="nofollow"> &nbsp;</a></strong></strong></p><ul><li style="list-style-type: none;background-image: none;"><ul><li><strong>Featured Project &nbsp;- Overtone&nbsp;&nbsp;<a href="http://overtone.github.io/" class="external-link" rel="nofollow">http://overtone.github.io/</a> &nbsp;&nbsp;<a href="http://vimeo.com/22798433" class="external-link" rel="nofollow">Super awesome video of overtone WATCH THIS!</a></strong></li><li><strong>Setup</strong><ul><li><strong>Leiningen -&nbsp;</strong><ul><li><strong>plugins</strong></li><li><strong>profiles</strong></li><li><strong>dependencies</strong></li><li><strong>repositories</strong></li><li><strong>main</strong></li><li><strong>AOT</strong></li></ul></li><li><strong>REPL</strong><ul><li><strong>Online&nbsp;<a href="http://tryclj.com/" class="external-link" rel="nofollow">http://tryclj.com/</a></strong></li></ul></li><li><strong>Interactive Development</strong><ul><li><strong>Vim</strong><ul><li><a href="http://www.zeespencer.com/articles/the-vim-lovers-guide-to-editing-clojure/" class="external-link" rel="nofollow">http://www.zeespencer.com/articles/the-vim-lovers-guide-to-editing-clojure/</a><strong><br></strong></li><li><a href="https://github.com/tpope/vim-fireplace" class="external-link" rel="nofollow">https://github.com/tpope/vim-fireplace</a></li></ul></li><li><strong>Eclipse</strong><ul><li><strong><a href="http://doc.ccw-ide.org/" class="external-link" rel="nofollow">Counterclockwise</a><br></strong></li></ul></li><li><strong>Emacs</strong><ul><li><a href="https://github.com/clojure-emacs/cider" class="external-link" rel="nofollow">https://github.com/clojure-emacs/cider</a><strong><br></strong></li></ul></li></ul></li><li><strong>Deploying lets get your software running and available to use</strong><ul><li><strong>Begin With End in Mind - Deploying a running application securely on the cheap</strong><ul><li><strong>Aspects of this solution</strong><ul><li><strong>Heroku</strong></li><li><strong>Github</strong></li><li><strong>AWS S3 setup</strong></li><li><strong>Project Template</strong></li><li><strong>lein profile develop up baby yeah!</strong></li></ul></li></ul></li></ul></li></ul></li><li><strong>Using Java &nbsp;- Assemblies and Interop</strong></li><li><strong>Exercise: Hello World&nbsp;</strong></li></ul></li><li><span style="color: rgb(255,0,0);"><strong>Session Two - Bits and pieces</strong></span><ul><li><strong><img class="confluence-embedded-image image-right" src="/wiki/download/attachments/87655298/clojure_three_circles.jpg?version=1&amp;modificationDate=1401313033093&amp;api=v2" data-image-src="/wiki/download/attachments/87655298/clojure_three_circles.jpg?version=1&amp;modificationDate=1401313033093&amp;api=v2"></strong><strong>Forms</strong></li><li><strong>Conditionals</strong></li><li><strong>Functions</strong></li><li><strong>Nil</strong></li><li><strong>Numbers</strong></li><li><strong>Strings</strong></li><li><strong>Data Structures&nbsp;</strong><ul><li><strong>Maps</strong></li><li><strong>Keywords</strong></li><li><strong>Lists</strong></li><li><strong>Vectors</strong></li><li><strong>Sets</strong></li></ul></li><li><strong>Symbols</strong><ul><li><strong>Names</strong></li><li><strong>Quoting</strong></li><li><strong>Unquoting</strong></li></ul></li><li><strong>Threading macro1 -&gt;</strong></li><li><strong>Common data manipulation functions</strong><ul><li><strong>map</strong></li><li><strong>filter</strong></li><li><strong>reduce</strong></li></ul></li><li><strong>loop and recur</strong></li></ul></li><li><span style="color: rgb(255,0,0);"><strong>Session Three - Organizing &nbsp;Constructs</strong></span><ul><li><span style="color: rgb(255,0,0);"><strong><span style="color: rgb(0,0,0);">Review with my-reduce last class</span></strong></span></li><li><strong>Featured Projects -&nbsp;</strong><ul><li><strong><a href="https://github.com/weavejester/compojure" class="external-link" rel="nofollow">Compojure</a>&nbsp;</strong></li><li><strong style="line-height: 1.4285715;"><a href="https://github.com/ring-clojure/ring" class="external-link" rel="nofollow">RING</a>&nbsp;</strong></li><li><strong style="line-height: 1.4285715;"><a href="https://github.com/cgrand/enlive" class="external-link" rel="nofollow">DOM manipulation</a></strong></li></ul></li><li><strong>Namespaces</strong><ul><li><strong>require</strong></li><li><strong>import</strong></li></ul></li></ul></li><li><span style="color: rgb(255,0,0);"><strong>Session Four -&nbsp;Concurrency and Parallelism</strong></span><ul><li><strong>Website Application Enhancements - making the project developer/testing/devops/automation friendly</strong><br><ul><li><a href="https://github.com/lynaghk/cljx" class="external-link" rel="nofollow">cljx</a> - &nbsp;<span style="color: rgb(102,102,102);">Write a portable codebase targeting Clojure/ClojureScript</span></li><li><span style="color: rgb(102,102,102);">lein plugins</span><ul><li>s3-wagon&nbsp;<a href="https://github.com/technomancy/s3-wagon-private" class="external-link" rel="nofollow">Deploy and consume artifacts in private S3 repositories.</a></li><li>&nbsp;<a href="https://github.com/gdeer81/marginalia" class="external-link" rel="nofollow">maginalia Ultra-lightweight literate programming</a></li></ul><ul><li>lein autoexpect&nbsp;<a href="https://github.com/jakemcc/lein-autoexpect" class="external-link" rel="nofollow">Run expecations when source or test files change</a></li></ul></li><li><a href="http://jayfields.com/expectations/" class="external-link" rel="nofollow">expectations&nbsp;</a></li><li>test fixtures</li><li>broken out into directories and files</li><li><a href="https://github.com/shoreleave/shoreleave-remote-ring" class="external-link" rel="nofollow">Ring- (&amp; Compojure-) friendly remote functions for use w/ shoreleave + ClojureScript</a></li><li><a href="https://github.com/swannodette/enlive-tutorial" class="external-link" rel="nofollow">enlive based screen scraper</a></li><li><a href="https://github.com/semperos/clj-webdriver" class="external-link" rel="nofollow">Clojure library for driving a web browser</a></li></ul></li><li><strong>Featured Projects</strong><ul><li><strong><a href="https://github.com/clojure/core.async" class="external-link" rel="nofollow">Threads on the Web Browsers! kinda no really its super cool!</a> &nbsp;</strong></li><li><strong><a href="http://swannodette.github.io/2013/08/02/100000-processes/" class="external-link" rel="nofollow">10,000 Processes</a></strong></li></ul></li><li><strong><span style="color: rgb(0,0,0);">S-expressions</span></strong></li><li><span style="color: rgb(0,0,0);"><strong>map foo - update-in, assoc, disassoc</strong></span><strong><br></strong></li><li><span style="color: rgb(0,0,0);"><strong>doseq - dorun&nbsp;</strong></span></li><li><span style="color: rgb(0,0,0);"><strong>Be lazy</strong></span></li><li><strong>Threads</strong></li><li><strong>Delays</strong></li><li><strong>Futures</strong></li><li><strong>Promises</strong></li><li><strong>State and Identity</strong></li><li><strong>Immutability&nbsp;</strong></li><li><strong>STM</strong></li><li><strong>Clojure reference Types</strong><ul><li><strong>Atoms</strong></li><li><strong>Refs</strong></li><li><strong>Vars</strong></li><li><strong>Agents</strong></li></ul></li><li><strong>Core Async</strong><strong><br></strong></li></ul></li><li><strong><span style="color: rgb(255,0,0);">Session Five - Building Abstractions</span></strong><ul><li><span style="color: rgb(0,0,0);font-size: 24.0px;line-height: 1.25;">Expression problem</span></li><li><strong>Protocols and&nbsp;DataTypes</strong></li><li><strong>Featured Project &nbsp;<a href="https://github.com/juxt/juxt-accounting" class="external-link" rel="nofollow">&nbsp;Tech nerds reach out to finance nerds</a>&nbsp;&nbsp;oh and checkout&nbsp;<a href="http://www.datomic.com/" class="external-link" rel="nofollow">Datomic the fully transactional, cloud-ready, immutable database.</a></strong><strong>&nbsp;</strong><strong><br></strong></li><li><strong>Multimethods</strong></li><li><strong>Hierarchies&nbsp;</strong></li><li><strong><strong>&nbsp;Macros</strong>&nbsp;</strong><br><ul><li><strong>Homoiconicity &nbsp;</strong></li><li><strong>Types of Macros</strong></li></ul></li><li><strong>DataTypes and Protocols</strong></li></ul></li><li><span style="color: rgb(255,0,0);"><strong>Session Six - Whitelabel Web Application Using Ring</strong></span><ul><li><strong>Featured Project -&nbsp;</strong><ul><li><strong><a href="http://palletops.com/" class="external-link" rel="nofollow">Dev Ops</a> with pallet</strong></li></ul></li><li><strong>Ring</strong></li><li><strong>Compojure</strong></li><li><strong>Deployment</strong></li></ul></li><li><strong>Bonus Session - Clojurescript &nbsp;clojure on the browsers</strong><ul><li><strong>Google</strong>&nbsp;"Closure" <strong>Integration</strong><ul><li><strong>Dead code elimination</strong></li><li><strong>obfuscation</strong></li></ul></li><li><strong>Core.async</strong></li><li><strong>enfocus/hiccup</strong></li><li><strong>cljx</strong></li></ul></li></ul><p><strong>Conceptual Breakdown:</strong></p><ul><li>Overview</li><li>Fundamentals Bits and Pieces</li><li>Organizing Programs</li><li>Clojure as Technology</li><li>Clojure Culture</li></ul><ul><li><strong>Resources</strong><ul><li><strong><a href="http://tryclj.com/" class="external-link" rel="nofollow">http://tryclj.com/</a><br></strong></li><li><a href="http://himera.herokuapp.com/index.html" class="external-link" rel="nofollow">http://himera.herokuapp.com/index.html</a></li><li><a href="http://blackstag.com/blog.posting?id=5" class="external-link" rel="nofollow">http://blackstag.com/blog.posting?id=5</a></li><li><a href="http://java.ociweb.com/mark/clojure/article.html" class="external-link" rel="nofollow">http://java.ociweb.com/mark/clojure/article.html</a></li></ul></li></ul>

Clone this wiki locally