Functional Design in Clojure

Functional Design in Clojure

By Christoph Neumann and Nate JonesTechnology
Download on the App Store

Functional Design in Clojure episodes

  • Ep 069: Stuck in the Web

    Each week, we discuss a different topic about Clojure and functional programming.

    If you have a question or topic you'd like us to discuss, tweet @clojuredesign, send an email to [email protected], or join the #clojuredesign-podcast channel on the Clojurians Slack.

    This week, the topic is: "Request handler pitfalls." We examine our history writing web handlers and talk about all the ways we've broken them.

    Selected quotes:

    • "Doing a pitfalls episode is easy, because you just need to look at your scars."
    • "Letting exceptions escape is TMI for the web."
    • "Multiple error handling middleware is ok. They're in place, just in case."
    • "Smaller doesn't necessarily mean simpler."
    • "A little bit of repetition can lead to a lot of clarity."
    • "Java can turn just about anything into a string."
    • 29 min
    • Ep 068: Static on the Line

      Each week, we discuss a different topic about Clojure and functional programming.

      If you have a question or topic you'd like us to discuss, tweet @clojuredesign, send an email to [email protected], or join the #clojuredesign-podcast channel on the Clojurians Slack.

      This week, the topic is: "Serving static assets." We tease apart the layers involved in serving static assets and are surprised by how many we find.

      Selected quotes:

      • "You'd think that serving up plain old files would be nice and simple."
      • "MIME types are an explosion of complexity."
      • "Simplicity is the only remedy for complexity. Abstraction is not a remedy for complexity."
      • 25 min
      • Ep 067: Handling Handler's Handles

        Each week, we discuss a different topic about Clojure and functional programming.

        If you have a question or topic you'd like us to discuss, tweet @clojuredesign, send an email to [email protected], or join the #clojuredesign-podcast channel on the Clojurians Slack.

        This week, the topic is: "Resource management for web handlers." We manage to find a way to get our handlers the resources they need to get real work done.

        Selected quotes:

        • "Let's get some work done in these web handlers!"
        • "The handler needs a handle."
        • "Handlers do not live on a desert island, alone."
        • Links:

          • Component
          • Integrant
          • Mount
          • Related episodes:

            • 012: Embrace the REPL
            • 013: Connect the REPL
            • 014: Fiddle with the REPL
            • 24 min
            • Ep 066: Compose the Codec

              Each week, we discuss a different topic about Clojure and functional programming.

              If you have a question or topic you'd like us to discuss, tweet @clojuredesign, send an email to [email protected], or join the #clojuredesign-podcast channel on the Clojurians Slack.

              This week, the topic is: "Making middleware to handle JSON." We reinvent the wheel, and along the way discover a few reasons why you might want to do so as well.

              Selected quotes:

              • "Ring's choice: all of HTTP is a function."
              • "Every concern is a function you compose in."
              • "It's like a bucket brigade with the request."
              • "Solving JSON encoding and decoding is a cross-cutting concern."
              • Links:

                • ring-json - Ring middleware for handling JSON
                • 29 min
                • Ep 065: Stuck in the Middle

                  Each week, we discuss a different topic about Clojure and functional programming.

                  If you have a question or topic you'd like us to discuss, tweet @clojuredesign, send an email to [email protected], or join the #clojuredesign-podcast channel on the Clojurians Slack.

                  This week, the topic is: "Ring middleware." We find that the middle is a very good place to start when almost everything is composed functions.

                  Selected quotes:

                  • "It's all fun from Ring on up!"
                  • "I want to have more than one handler."
                  • "We want to build up different scenarios declaratively."
                  • "The way you compose functions together is by building a function that takes functions and returns functions."
                  • Links:

                    • Ring Wiki
                      • Ring concepts
                      • Ring examples
                      • Third party libraries
                      • Parameters middleware
                      • Routing middleware examples
                        • compojure
                        • reitit
                        • 31 min
                        • Ep 064: Put Ring on It

                          Each week, we discuss a different topic about Clojure and functional programming.

                          If you have a question or topic you'd like us to discuss, tweet @clojuredesign, send an email to [email protected], or join the #clojuredesign-podcast channel on the Clojurians Slack.

                          This week, the topic is: "Ring, the foundation of Clojure HTTP" We focus on the bedrock abstraction for all Clojure web applications and marvel at its simplicity.

                          Selected quotes:

                          • "Somebody wants to make a web app, and suddenly they're up against all these layers."
                          • "The law of leaky abstractions is good to remember."
                          • "HTTP is just a function call over the Internet."
                          • "Your function gets a map, and it returns a map."
                          • 20 min
                          • Ep 063: Web of Complexity

                            Each week, we discuss a different topic about Clojure and functional programming.

                            If you have a question or topic you'd like us to discuss, tweet @clojuredesign, send an email to [email protected], or join the #clojuredesign-podcast channel on the Clojurians Slack.

                            This week, the topic is: "HTTP and the Web of Complexity." We launch a new series and immediately get tangled in the many layers that make up the web.

                            Selected quotes:

                            • "Clojure has several ways of getting to the web."
                            • "There really are a lot of layers."
                            • "There are a lot of bad requests out there."
                            • "For all the decodings, there is an encoding."
                            • 23 min
                            • Ep 062: 2019 in Review

                              Each week, we discuss a different topic about Clojure and functional programming.

                              If you have a question or topic you'd like us to discuss, tweet @clojuredesign, send an email to [email protected], or join the #clojuredesign-podcast channel on the Clojurians Slack.

                              This week, the topic is: "2019." We look back at the past year and highlight our favorite episodes.

                              Selected quotes:

                              • "2020 is the year of perfect hindsight."
                              • "Even we are surprised at what we recorded."
                              • "Mutation is like weak bricks in your solution tower, they could fail you at any time."
                              • "The Twitter API is just a whole bag of side effects."
                              • "Programming without I/O is just warming your room."
                              • "Not everything does all the things perfectly in all the ways."
                              • "Complexity really is the killer in long term projects."
                              • Related episodes:

                                • The REPL Series (12-14)
                                  • 012: Embrace the REPL
                                  • 014: Fiddle with the REPL
                                  • The Time Tracking Series (15-20)
                                    • 016: When 8 - 1 = 6
                                    • 018: Did I Work Late on Tuesday?
                                    • The Twitter Poster Series (21-27)
                                      • 022: Evidence of Attempted Posting
                                      • 024: You Are Here, But Why?
                                      • The Donut Logs Series (28-35)
                                        • 032: Call Me Lazy
                                        • 034: Break the Mold
                                        • Advocacy Episodes (36-39)
                                          • 036: Why Do You Recommend Clojure?
                                          • 037: What Advice Would You Give to Someone Getting Started With Clojure?
                                          • 038: How do I convince my coworkers to use Clojure?
                                          • 039: Why use Clojure over another functional language?
                                          • 040: Should I use lein, boot, or tools.deps?
                                          • Data Episodes (41-42)
                                            • 041: Why do Clojurians make such a big deal about immutability?
                                            • 042: What does it mean to be 'data-oriented'?
                                            • Questions from our listeners (43-48)
                                              • 046: When is Clojure not the right tool for the job?
                                              • 047: What is "nil punning"?
                                              • 048: Help! How do I fix my REPL?
                                              • Word! Word! Word! Series (aka Nountober) (49-52)
                                                • 049: Keywords! Keywords! Keywords!
                                                • 052: Functions! Functions! Functions!
                                                • 053: How can I save my data from serialization?
                                                • 054: The Forest in the Trees
                                                • 055: Sets! What are they good for?
                                                • 056: Opt-In Complexity
                                                • 057: Clojure/Conj 2019 Recap
                                                • Reduce, Reducers, and Transducers (58-61)
                                                  • 061: Transcendental Transformations
                                                  • 37 min
                                                  • Ep 061: Transcendental Transformations

                                                    Each week, we discuss a different topic about Clojure and functional programming.

                                                    If you have a question or topic you'd like us to discuss, tweet @clojuredesign, send an email to [email protected], or join the #clojuredesign-podcast channel on the Clojurians Slack.

                                                    This week, the topic is: "Transducers." We unpack transducers and find a familiar pattern that enables freedom from collections.

                                                    Selected quotes:

                                                    • "The humble sequence. It is a mighty abstraction."
                                                    • "Your reducing function can get more abstract by passing in the reducing function that handles producing the result."
                                                    • "This is mind-bending enough, it's worth saying again in a different way."
                                                    • "We have a function that returns a function that returns a function!"
                                                    • "The cool thing about reducing functions is that they're not about collections. They are about reduction."
                                                    • Links:

                                                      • Transducers - Reference
                                                      • Transducers are Coming - Rich's introductory blog post
                                                      • What are good use cases for transducers? - From the Clojure FAQ
                                                      • Reducers, transducers and core.async in Clojure
                                                      • 29 min
                                                      • Ep 060: Reduce Done Quick

                                                        Each week, we discuss a different topic about Clojure and functional programming.

                                                        If you have a question or topic you'd like us to discuss, tweet @clojuredesign, send an email to [email protected], or join the #clojuredesign-podcast channel on the Clojurians Slack.

                                                        This week, the topic is: "Reducers." We look at clojure.core.reducers and how it extracts performance by composing reducing functions.

                                                        Selected quotes:

                                                        • "The seq abstraction, it's rather lazy."
                                                        • "It's amazing how much work laziness requires."
                                                        • "It doesn't work out as well. That's a wonderful way of saying 'wrong'."
                                                        • "Because ease of use was a design goal, they're pretty easy to use."
                                                        • Links:

                                                          • Reducers - Reference
                                                          • Reducers - A Library and Model for Collection Processing - Rich's introductory blog post
                                                          • Know Your Reducers
                                                          • Reducers, transducers and core.async in Clojure
                                                          • 27 min

                                                          About Functional Design in Clojure

                                                          From the publisher's feed

                                                          Each week, we discuss a software design problem and how we might solve it using functional principles and the Clojure programming language.