Surfing With Clojure

I was honored to present at Clojure/north 2020. Due to Covid 19, it ended up being a virtual conference, but was a blast nonetheless as the organizers did a fantastic job pulling it all together.

The talk was centered around an application that I have been working on in my spare time which I call DeepSwell that allows me to better visualize the surf forecast for my local area. The basic idea is to continually monitor and record the forecasts provided by NOAA as well as video snippets from the surf cams for those times. The recorded forecast images are then compared to future forecasts, with the closest matches as determined by image analysis being my best guess at what the surf will actually look like. Once I have a list of matches, I use the times associated with them to look up the corresponding videos which become my forecasts.

DeepSwell also supports the ability to search by conditions. By entering values for surf height, direction etc. it ranks and sorts the videos that best match the selected conditions and lets you play them as well as displays their meta information such as date and location.

DeepSwell is primarily written in Clojure and ClojureScript with some Python to support the machine learning aspects. The general architecture is as follows, the heavy borders represent things written in Clojure/Script:

alt text
DeepSwell Architecture

For now it all just exists locally, but hopefully I'll get some time to add additional locations and host it as a proper app for people to use.

Full Clojure/north Presentation

Using Clojure and ClojureScript to bring the surf forecasts to life, DeepSwell shows users real videos of what the surf will look like in the future. But how can you have videos of the waves that haven't happened yet? In this talk, Xavier shows how tying together different components makes it possible.

Clojure/north page