A couple of months ago I blogged about my first venture into clojure. This was driven by the desire to learn something completely different to what I was already familiar with.
Real life got in the way and for a while my dabbling in clojure was put on hold though I continued to lurk on the london-clojurians list. It then so happned there was a Dojo on Monday (yesterday) which I could (finally) make. Travelling between Southampton and London is never cheap through but I tend to see it as an investment.
The dojo followed the same format as the Python dojo I was already very familiar with: problem suggestions, voting, break up into teams, work for 1-1.5 hours, show and tell. There were quite a few interesting problems and no consensus was reached during the voting so eventually there were 5 teams working on 5 different problems. Our team was called Codenoise, the goal being to generate music from the structure of a given clojure source tree.
Leipzig and Overtone were quickly identified as the necessary sound libraries and tools.namespace was used as the starting point to get information about available functions. Being a clojure newbie I was feeling safe from being put on the spot and tasked with coding. However, when my newbie status was revealed the MacBook Air was promptly turned towards me and I was faced with a split Emacs session and a blinking cursor. “Thats how it works” :).
Luckily I had gone through the FastTrack Clojure tutorial on the way there so at least my brain was somewhat warmed. I now also finally have a hands-on understanding of the Vim-Emacs flamewar and for me its a no brainer, Vim all the way 🙂
We rotated coding and things went well until we hit a roadblock trying to generate some sounds. For some reason Leipzig/Overtone was trying to download what looked like the whole internet. Workarounds failed and the rest of the hour was spent experimenting with imports and dependency declarations, eventually attempting a pure Java solution for the required beep(). At some point though a fix was found and we got a simple test case to work just as it was time for show and tell: A note was played for every arity of a defined function. Multiple arities would mean multiple notes (at different frequencies) would be played simultaneously.
With about 25 lines of code there was nothing much to show, but the principle was there. In all another worthwhile trip, friendly crowd, free pizza/beer, and it has motivated to dabble in clojure some more and write up Part 2.