PurelyFunctional.tv Newsletter 312: Maybe, Arcadia, Improvements

Issue 312 - February 04, 2019 · Archives · Subscribe

Hi Clojurists,

Please enjoy the issue.

Rock on!

PS Want to get this in your email? Subscribe!

Tims Gardner by defn Podcast

An excellent interview with Tims Gardner, co-creator of Arcardia, the Clojure game programming system built on Unity. Clojure proves itself again as a great hosted language, or as David Nolen likes to put it, a parasitic language. This made me want to play with Arcadia and rekindle my desire to make games.

ClojureScript - 1.10.516 Release

There's a new big release from ClojureScript. My favorite things are the improvements to the type inferencer. Type inferencing is used by the compiler to emit faster code, and there are some nice performance enhancements in this one.

If you haven't heard, the development process of ClojureScript is much easier to work within than that of Clojure itself. The release cycle is faster and there's plenty of room for improvement.

How can pure functions represent state change? Podcast

In this episode, I explore how we represent time, and changing state over time, using just functions and data.

CIDER's Orchard: The Future

This post by CIDER maintainer Bozhidar Batsov is a frank look at what CIDER needs right now. He laments the state of the Clojure open source community. We don't participate enough!

The post has made me think about my contributions to CIDER. I use it almost every day, and the software ha s only gotten better since I started using it years ago. I'm going to start contributing money to this project. It's the least I can do for such awesome software. You should encourage your company to pay a small amount to the project. Imagine if you had to pay for commercial licenses for IDEs. Those things are expensive!

Clojure Jobs Resources

I've had several people ask me where to find Clojure jobs recently. I have a page just for listing places to look for jobs. I think there are more Clojure jobs than ever before! I just updated it with more resources, so if you're looking for a job, there's no excuses not to apply.

Maybe Not YouTube

Rich Hickey's recent Clojure/conj keynote caused some strife because he talked about some of the tradeoffs of using Maybe. Maybe is a common type in typed languages. It is used for representing optional values. Many people interpreted this as an argument against static typing in general (on both sides of the debate), which demonstrates how difficult it is for us to communicate.


This looks like an interesting library for doing pull-style queries to a SQL database. Have you tried this? I'd love to hear if it's good.

Improvements to PurelyFunctional.tv New features

I'd like to announce three improvements to PurelyFunctional.tv that I've been working on all week.

1. PDF versions of the notes and transcripts

I want PurelyFunctional.tv courses to be watchable anywhere. There is no DRM and there's no need for an internet connection when you download the videos. This was true for the videos, but not true for every thing.

As you may know, lessons on PurelyFunctional.tv have notes and sometimes transcripts. That's where I supplement the video with references, code, and explanations. However, until just now, that information was not included in the downloaded zip packages of the lessons.

Now, there is a PDF included with each zip file that contains all of the notes, the transcripts, and links to the code. This should complete the downloads so that they are truly watchable (and readable!) everywhere.

2. Updated code

I make every effort to make my courses timeless. That is, I teach things that should be useful in 5 years. That respects your time and mine. You can use the material for a long time and I can focus on making more courses instead of updating old ones.

Clojure is generally very stable. However, Java 9 broke many things. I was not aware of how many things it broke until recently. I started getting more and more questions about errors. So, this week, I dove in and updated the code to all courses (with one exception) to make sure they work on Java 8 and Java 9+. If you had a problem running the code from a course before, I apologize. Please check again.

Because I generally use code that I think will last, I didn't have a process in place for testing and updating code. That contributed to this lasting so long. Even after I learned about the problems, I didn't know how to fix it. I experimented a bit and came up with some simple changes and one major change: git repos will now use branches to mark different points in the progress of the course instead of tags. Tags are great, but they don't let you update them easily. Branches, on the other hand, are made to update independently, and so I can update dependencies on all branches easily. All of the navigation commands should still work the same.

All of this work was in the hope that the next time there is a compatibility problem, I will be able to address it sooner. However, rest assured that the repos work as of this week. I'd love to hear if something doesn't work, however, as I can make mistakes.

The one exception I mentioned above is the React Native app I made. re-natal, the tool for using ClojureScript in React Native, still requires Java 8. So I did not test it with Java 9+.

3. Code repository in downloads

I've included the code in the downloads for a long time. It was basically a checkout of the git repo. However, I was checking it out using the git: protocol, and when you do this, github will try to authenticate you. Even though the repos were public, you can run into issues. Now they are all checked out with the https: protocol, so there shouldn't be any problems there.

You can browse the available courses here.