LispCast http://www.lispcast.com/ A blog about the simple joys of functional programming. en 3 Things Java Programmers Can Steal from Clojure http://www.lispcast.com/3-things-java-can-steal-from-clojure http://www.lispcast.com/3-things-java-can-steal-from-clojure Sat 09 Mar 2013 03:38:24 PM CST Many of the cool parts of Clojure are written in Java. That means you can access those parts from any Java code. Just include the Clojure JAR, import the classes, and you've got better tools. <p><center><a href="http://www.lispcast.com/3-things-java-can-steal-from-clojure">Read full post</a></center></p> Atom code explanation http://www.lispcast.com/atom-problem http://www.lispcast.com/atom-problem Thu 28 Aug 2014 05:43:39 PM CDT I go over a real-world example of how atoms and immutable values allow you to compose constructs in ways that are easy to reason about and less prone to error. <p><center><a href="http://www.lispcast.com/atom-problem">Read full post</a></center></p> Clojure Gazette Looking Forward http://www.lispcast.com/clojure-gazette-looking-forward-2015 http://www.lispcast.com/clojure-gazette-looking-forward-2015 Mon 19 Jan 2015 02:18:48 PM CST I am looking for more sponsors for the Clojure Gazette and I need your help. <p><center><a href="http://www.lispcast.com/clojure-gazette-looking-forward-2015">Read full post</a></center></p> Clojure is Imperative http://www.lispcast.com/clojure-is-imperative http://www.lispcast.com/clojure-is-imperative Fri 22 Aug 2014 11:51:19 PM CDT Clojure is an imperative language. Its operations are defined in terms of concrete actions. But those actions are often the same actions available to the programmer at runtime. This makes it easy to bootstrap. <p><center><a href="http://www.lispcast.com/clojure-is-imperative">Read full post</a></center></p> Regexes in Clojure http://www.lispcast.com/clojure-regex http://www.lispcast.com/clojure-regex Thu 03 Jun 2014 08:45:37 PM CDT With a few functions from the standard library, Clojure lets you do most of what you want with regular expressions with no muss. <p><center><a href="http://www.lispcast.com/clojure-regex">Read full post</a></center></p> Clojure Test Directory http://www.lispcast.com/clojure-test-directory http://www.lispcast.com/clojure-test-directory Mon 30 Mar 2015 10:55:57 PM EDT Where to put your tests is a common question. You could put them anywhere, but you want to pick a place that makes it easy to find, easy to exclude from production, and work well with your tools. My recommendation is to follow what most projects do, which takes care of all of these requirements. <p><center><a href="http://www.lispcast.com/clojure-test-directory">Read full post</a></center></p> Clojure Web Security http://www.lispcast.com/clojure-web-security http://www.lispcast.com/clojure-web-security Sat 05 Apr 2014 04:35:56 PM CDT Use the OWASP Top Ten Project to minimize security vulnerabilities in your Clojure web application. <p><center><a href="http://www.lispcast.com/clojure-web-security">Read full post</a></center></p> Complex Syntax http://www.lispcast.com/complex-syntax http://www.lispcast.com/complex-syntax Tue 19 Aug 2014 09:48:13 AM CDT Lisps are revered for their simple syntax, but parens are complex. They complect function calls and macro calls, which have drastically different semantics. <p><center><a href="http://www.lispcast.com/complex-syntax">Read full post</a></center></p> The conj Mental Bump http://www.lispcast.com/conj-mental-bump http://www.lispcast.com/conj-mental-bump Mon 23 Mar 2015 11:18:42 PM CDT conj can be confusing if you're used to other languages. It is not a commonly defined operation. Most languages define common positional adding operations. conj, however, has more useful semantics. How do you use conj usefully if you can't guarantee the position? <p><center><a href="http://www.lispcast.com/conj-mental-bump">Read full post</a></center></p> Convince your boss to use Clojure http://www.lispcast.com/convince-your-boss-to-use-clojure http://www.lispcast.com/convince-your-boss-to-use-clojure Tue 16 Sep 2014 04:29:06 PM CDT Clojure has been successfully adopted by many companies. There are many resources available by people who did the hard work of introducing Clojure to their team. <p><center><a href="http://www.lispcast.com/convince-your-boss-to-use-clojure">Read full post</a></center></p> core.async Code Style http://www.lispcast.com/core-async-code-style http://www.lispcast.com/core-async-code-style Tue 10 Jun 2014 11:03:57 PM CDT If your functions return `core.async` channels instead of taking callbacks, you encourage them to be used within `go` blocks. Unchecked, this encouragement could proliferate your use of `go` blocks unnecessarily. There are some coding conventions that can minimize this problem. <p><center><a href="http://www.lispcast.com/core-async-code-style">Read full post</a></center></p> Conveyor Belts: Nature's core.async Channels http://www.lispcast.com/core-async-conveyor-belts-true-history http://www.lispcast.com/core-async-conveyor-belts-true-history Thu 13 Nov 2014 01:25:18 PM CST Conveyor belts are strikingly similar to Clojure core.async channels. While it could be a coincidence, there is speculation that conveyor belts were influenced by a deep understanding of core.async. <p><center><a href="http://www.lispcast.com/core-async-conveyor-belts-true-history">Read full post</a></center></p> Data-First Programming http://www.lispcast.com/data-first-programming http://www.lispcast.com/data-first-programming Fri 27 Feb 2015 05:08:54 PM CST If something is important, you should deal with it sooner and more often. That's the approach Clojure takes to data representations. It means serialization of internal data is a non-issue. <p><center><a href="http://www.lispcast.com/data-first-programming">Read full post</a></center></p> Data > Functions > Macros. But why? http://www.lispcast.com/data-functions-macros-why http://www.lispcast.com/data-functions-macros-why Tue 23 Dec 2014 11:29:44 PM CST "Prefer data over functions" is a common adage in Clojure circles. It is poorly debated because it is a terse statement in generalities. A valuable perspective is that data is transparent at runtime, while functions are not. This perspective gives a firm ground for discussion and design. <p><center><a href="http://www.lispcast.com/data-functions-macros-why">Read full post</a></center></p> 4 Features Javascript can steal from Clojure(Script) http://www.lispcast.com/four-features-javascript-can-steal-from-clojure http://www.lispcast.com/four-features-javascript-can-steal-from-clojure Wed 17 Sep 2014 11:52:22 AM CDT ClojureScript adds a lot of value on top of the Javascript platform. But some of that value can be had directly in Javascript without using a new language. <p><center><a href="http://www.lispcast.com/four-features-javascript-can-steal-from-clojure">Read full post</a></center></p> Hindley-Milner in Clojure http://www.lispcast.com/Hindley-Milner-in-Clojure http://www.lispcast.com/Hindley-Milner-in-Clojure Mon 13 Jan 2014 08:48:37 AM CST I wrote a lambda-calculus interpreter and an implementation of Hindley-Milner to type check it. <p><center><a href="http://www.lispcast.com/Hindley-Milner-in-Clojure">Read full post</a></center></p> How to Use New Relic with Clojure on Heroku http://www.lispcast.com/how-to-use-new-relic-with-clojure-on-heroku http://www.lispcast.com/how-to-use-new-relic-with-clojure-on-heroku Tue 03 Dec 2013 10:02:23 AM CST New Relic lets you get more out of Heroku. Install it in 7 steps. <p><center><a href="http://www.lispcast.com/how-to-use-new-relic-with-clojure-on-heroku">Read full post</a></center></p> Is core.async Against the Clojure Philosophy? http://www.lispcast.com/is-core-async-against-clojure-philosophy http://www.lispcast.com/is-core-async-against-clojure-philosophy Wed 06 Aug 2014 07:32:36 AM CDT Clojure core.async is a way to manage mutable state. Isn't that against functional programming? <p><center><a href="http://www.lispcast.com/is-core-async-against-clojure-philosophy">Read full post</a></center></p> JSON Serialization for APIs in Clojure http://www.lispcast.com/json-serialization-api-clojure http://www.lispcast.com/json-serialization-api-clojure Thu 10 Jul 2014 10:42:08 PM CDT Clojure is well-suited for processing JSON, but there are some decisions you have to make to suit your application. The major decisions are actually easy, though they took me a while to figure out. <p><center><a href="http://www.lispcast.com/json-serialization-api-clojure">Read full post</a></center></p> Warty Lists in Clojure http://www.lispcast.com/lists-in-clojure http://www.lispcast.com/lists-in-clojure Tue 27 May 2014 08:31:51 PM CDT Lists are kind of warty in Clojure. Care should be taken, especially by those coming from other Lisps. <p><center><a href="http://www.lispcast.com/lists-in-clojure">Read full post</a></center></p> Nil Punning (Or Null Pointers Considered Not So Bad) http://www.lispcast.com/nil-punning http://www.lispcast.com/nil-punning Thu 12 Sep 2013 04:44:34 PM CDT Null pointers are still a problem in Clojure, but several design decisions have made them less problematic than other languages. <p><center><a href="http://www.lispcast.com/nil-punning">Read full post</a></center></p> The Parts of Ring http://www.lispcast.com/parts-of-ring http://www.lispcast.com/parts-of-ring Wed 18 Feb 2015 11:12:29 PM CST Ring, the Clojure Web library, defines three main concepts that you use to construct web applications. <p><center><a href="http://www.lispcast.com/parts-of-ring">Read full post</a></center></p> Pre-conj Prep 2014 http://www.lispcast.com/pre-conj-2014 http://www.lispcast.com/pre-conj-2014 Sat 20 Sep 2014 11:12:51 PM CDT Prepare for the Clojure/conj with media from around the web. <p><center><a href="http://www.lispcast.com/pre-conj-2014">Read full post</a></center></p> Pre-West Prep 2015 http://www.lispcast.com/pre-west-2015 http://www.lispcast.com/pre-west-2015 Tue 17 Mar 2015 05:03:06 PM CDT Prepare for Clojure/West with media from around the web and interviews. <p><center><a href="http://www.lispcast.com/pre-west-2015">Read full post</a></center></p> Pre-West Interview: Anthony Marcar http://www.lispcast.com/pre-west-interview-anthony-marcar http://www.lispcast.com/pre-west-interview-anthony-marcar Fri 10 Apr 2015 09:32:03 PM CDT Anthony Marcar will talk about large-scale production Clojure applications. <p><center><a href="http://www.lispcast.com/pre-west-interview-anthony-marcar">Read full post</a></center></p> Pre-West Prep: John Hume http://www.lispcast.com/pre-west-john-hume http://www.lispcast.com/pre-west-john-hume Sun 29 Mar 2015 07:18:19 PM CDT Life of a clojure expression: a quick tour of clojure internals <p><center><a href="http://www.lispcast.com/pre-west-john-hume">Read full post</a></center></p> Pre-West Prep: Nathaniel Smith and Ruth Linehan http://www.lispcast.com/pre-west-nathaniel-smith-ruth-linehan http://www.lispcast.com/pre-west-nathaniel-smith-ruth-linehan Sat 04 Apr 2015 10:40:47 PM CDT Nathaniel Smith and Ruth Linehan will talk about Trapperkeeper. <p><center><a href="http://www.lispcast.com/pre-west-nathaniel-smith-ruth-linehan">Read full post</a></center></p> Pre-West Prep: Sean Johnson http://www.lispcast.com/pre-west-sean-johnson http://www.lispcast.com/pre-west-sean-johnson Mon 06 Apr 2015 11:29:45 PM CDT Sean Johnson will talk about pattern matching. <p><center><a href="http://www.lispcast.com/pre-west-sean-johnson">Read full post</a></center></p> Pre-West Prep: Soren Macbeth http://www.lispcast.com/pre-west-soren-macbeth http://www.lispcast.com/pre-west-soren-macbeth Mon 06 Apr 2015 11:30:52 PM CDT Soren Macbeth will talk about data crunching in Clojure. <p><center><a href="http://www.lispcast.com/pre-west-soren-macbeth">Read full post</a></center></p> Pre-West Prep: Tom Faulhaber http://www.lispcast.com/pre-west-tom-faulhaber http://www.lispcast.com/pre-west-tom-faulhaber Mon 06 Apr 2015 11:29:45 PM CDT Tom Faulhaber will talk about generating Excel sheets. <p><center><a href="http://www.lispcast.com/pre-west-tom-faulhaber">Read full post</a></center></p> Pre-West Prep: Tyler Tallman http://www.lispcast.com/pre-west-tyler-tallman http://www.lispcast.com/pre-west-tyler-tallman Wed 08 Apr 2015 06:12:04 PM CDT Tyler Tallman will talk about modeling complex problems in Clojure. <p><center><a href="http://www.lispcast.com/pre-west-tyler-tallman">Read full post</a></center></p> Ring 1.3 http://www.lispcast.com/ring-1-3 http://www.lispcast.com/ring-1-3 Tue 22 Jul 2014 11:53:00 PM CDT Ring is great because it closely models the HTTP message format using native Clojure data structures. It strictly defines a message format that any software can use and rely on. With Ring 1.3, the specification has gotten even closer to the HTTP spec. <p><center><a href="http://www.lispcast.com/ring-1-3">Read full post</a></center></p> A Ring Spec to Hang on the Wall http://www.lispcast.com/ring-spec-hang-on-wall http://www.lispcast.com/ring-spec-hang-on-wall Fri 28 Mar 2014 09:16:16 PM CDT The Ring SPEC is the core of the Clojure web ecosystem. The standard is small and a reference is handy. <p><center><a href="http://www.lispcast.com/ring-spec-hang-on-wall">Read full post</a></center></p> Token Buckets with core.async http://www.lispcast.com/token-buckets-in-core-async http://www.lispcast.com/token-buckets-in-core-async Mon 10 Nov 2014 08:58:57 PM CST Token Bucket is a simple algorithm for rate limiting a resource. It's easy to understand because you can reason about it in terms of real-world objects. core.async makes this algorithm very clear and easy. <p><center><a href="http://www.lispcast.com/token-buckets-in-core-async">Read full post</a></center></p> The Ultimate Guide to Learning Clojure for Free http://www.lispcast.com/ultimate-guide-to-learning-clojure-for-free http://www.lispcast.com/ultimate-guide-to-learning-clojure-for-free Thu 11 Dec 2014 09:34:58 AM CST There are many great resources out there for learning Clojure. Some of the resources are paid, but fortunately many of the best resources are absolutely free. <p><center><a href="http://www.lispcast.com/ultimate-guide-to-learning-clojure-for-free">Read full post</a></center></p> Example-based Unit Testing in Clojure http://www.lispcast.com/unit-testing-in-functional-languages http://www.lispcast.com/unit-testing-in-functional-languages Thu 26 Mar 2015 11:36:28 AM CDT Unit testing in Clojure is straightforward. Here are a few testing ideas as they apply to Clojure. <p><center><a href="http://www.lispcast.com/unit-testing-in-functional-languages">Read full post</a></center></p> What Web Framework Should I Use in Clojure? http://www.lispcast.com/what-web-framework-should-i-use http://www.lispcast.com/what-web-framework-should-i-use Sun 23 Mar 2014 05:03:04 PM PDT There are a number of web frameworks in Clojure, but beginners should roll their own server stack themselves to tap into the Ring ecosystem. <p><center><a href="http://www.lispcast.com/what-web-framework-should-i-use">Read full post</a></center></p> When To Use a Macro in Clojure http://www.lispcast.com/when-to-use-a-macro http://www.lispcast.com/when-to-use-a-macro Fri 07 Mar 2014 03:45:07 PM CST Macros should be avoided to the extent possible. There are three circumstances where they are required. <p><center><a href="http://www.lispcast.com/when-to-use-a-macro">Read full post</a></center></p> Ambrose Bonnaire-Sergeant interviewed about Typed Clojure http://www.lispcast.com/ambrose-interview-typed-clojure http://us4.campaign-archive2.com/?u=a33b5228d1b5bf2e0c68a83f4&id=c43c157edd Tue 08 Oct 2013 03:34:23 PM CDT <p>Way back in May 2012, Ambrose was beginning work on Typed Clojure for Google Summer of Code. I interviewed him to get an idea of what kind of type system we could expect. Since he's now running a very successful <a href="http://www.indiegogo.com/projects/typed-clojure">crowd funding campaign</a>, I thought I'd bring up this blast from the past.</p> <h3 id="you-might-also-like">You might also like</h3> <ul> <li><a href="http://www.lispcast.com/3-things-java-can-steal-from-clojure">3 Things Java Programmers Can Steal from Clojure</a></li> <li><a href="http://www.lispcast.com/atom-problem">Atom code explanation</a></li> <li><a href="http://www.lispcast.com/clojure-gazette-looking-forward-2015">Clojure Gazette Looking Forward</a></li> <li><a href="http://www.lispcast.com/clojure-is-imperative">Clojure is Imperative</a></li> </ul> <p><center><a href="http://www.lispcast.com/ambrose-interview-typed-clojure">Read full post</a></center></p> Clojure for the Brave and True http://www.lispcast.com/brave-clojure http://www.braveclojure.com/ Wed 11 Sep 2013 12:43:47 PM CDT <p>I am pretty excited about this project. Please check it out.</p> <h3 id="you-might-also-like">You might also like</h3> <ul> <li><a href="http://www.lispcast.com/3-things-java-can-steal-from-clojure">3 Things Java Programmers Can Steal from Clojure</a></li> <li><a href="http://www.lispcast.com/atom-problem">Atom code explanation</a></li> <li><a href="http://www.lispcast.com/clojure-gazette-looking-forward-2015">Clojure Gazette Looking Forward</a></li> <li><a href="http://www.lispcast.com/clojure-is-imperative">Clojure is Imperative</a></li> </ul> <p><center><a href="http://www.lispcast.com/brave-clojure">Read full post</a></center></p> What to look for in validations http://www.lispcast.com/what-to-look-for-in-validations http://logaan.github.io/clojure/validations/vlad/2013/11/25/what-to-look-for-in-validations.html Mon 25 Nov 2013 10:29:19 AM CST <p>Nice validation library plus very good motivational blog post.</p> <h3 id="you-might-also-like">You might also like</h3> <ul> <li><a href="http://www.lispcast.com/3-things-java-can-steal-from-clojure">3 Things Java Programmers Can Steal from Clojure</a></li> <li><a href="http://www.lispcast.com/atom-problem">Atom code explanation</a></li> <li><a href="http://www.lispcast.com/clojure-gazette-looking-forward-2015">Clojure Gazette Looking Forward</a></li> <li><a href="http://www.lispcast.com/clojure-is-imperative">Clojure is Imperative</a></li> </ul> <p><center><a href="http://www.lispcast.com/what-to-look-for-in-validations">Read full post</a></center></p>