Spreading parentheses of love

Last weekend, with the help of 14 teachers and TAs, we brought the first ClojureBridge workshop to London. 20 students that showed up on a day had a wide range of experience levels from total beginners to experienced programmers in other languages.


It happens on Friday and has a Friday night vibe. All participants must attend so it can be verified they have the appropriate Clojure development environment set up on their laptops for Saturday’s workshop. We had prepared memory sticks with LightTable and git for various operating systems (in case interwebs goes bonkers) and sent set-up instructions to attendees. When the Friday came, we were ready. OSX, Linux, Windows, it didn’t matter – no one left without having a working Clojure environment and a ClojureBridge sticker. When all laptops were ready we could socialise over pizza and drinks.


It takes most of Saturday and it’s a hands-on programming experience. Student – volunteer ratio was 20:14 and some students were lucky enough to get 1:1 help! We started with breakfast.

A short welcome talk was followed by a few demos to spark students interest by showing what can be built with Clojure: composing music with Overtone (by @ctford), front-end programming with ClojureScript (by me), The Game of Life in a browser (@philandstuff showing @thattommyhall‘s demo).

Then we split students into groups of similar level and went through the standard ClojureBridge curriculum. There were two breaks in between hacking before we finished the day with dinner and drinks.

Everyone was very positive, willing to chat, share their experiences. Watching people have a-ha moments is really rewarding. And seeing teachers and TAs explaining programming without falling back on computer science terms was quite impressive. It’s pretty incredible how much people were able to pick up in a day. I know that we had some students in the class that had never written code in their life and it was awesome to see them hacking in just a few hours.

We had ClojureBridge cookies too! (who turned us into goths but shhh)

We asked all students to fill in a post-workshop survey, and so far the results have been very positive:
– 92.31% of students are very likely to recommend the workshop to friend or colleague.
– Students were very happy with the teachers and TAs and found the curriculum well designed.
– LightTable caused sometimes too much friction but it’s hard to find a tool that would perform well under those circumstances.
– We should consider to reduce the length of the workshop (it was 9-5 + dinner/drinks)
– Need to remember to order LESS food for the next workshop!

A big thank you goes again to the fantastic sponsors who made this event happen:
uSwitch, 8Light, Buyapowa, Metosin, Yeller, ThoughtWorks, LispCast and Tom Hall.
And to the awesome volunteers!

There is definitely going to be another one ClojureBridge London workshop, very likely organised by one of the recent alumni! :)

Organising ClojureBridge is extremely rewarding – if you’d like to spread your love for Clojure (or programming in general) and promote diversity in your community, click here for more information on how to get involved.

Travis CI and ClojureScript tests

I have something to confess: I haven’t written any ClojureScript tests until this very morning. There were various reasons for that and often I would copy whatever was possible to Clojure namespace and test it there using clojure.test. So when a new ClojureScript with a port of the clojure.test namespace – cljs.test – was released, I could no longer ignore it.

I wrote some tests, I googled for information on how to actually run them, and I hit the wall. Most of the posts were outdated and if it weren’t for Andrew Keedle‘s post on basic cljs.test setup, I’d probably be still banging my head against the wall.

I like open source projects, and I like Travis CI (which is free for open source projects), so the next step was quite obvious:

Set up ClojureScript tests with Travis CI

1. Add .travis.yml

   language: clojure
   lein: lein2
   script: lein2 cljsbuild test

2. Add test command to your project.clj

   :test-commands {"test" ["phantomjs" "phantom/unit-test.js" "phantom/unit-test.html"]}

If you followed Andrew’s post you should have phantom directory in your project already, and unit-test.js and unit-test.html within it.

With this setup you can now either continuously test your project by running lein cljsbuild auto test (tests will be run whenever you save changes to your project) or you can run your tests manually by executing lein cljsbuild test. The latter option will be invoked by Travis.

For a real life, but tiny, example you can go to my is-it-time repository.

I hope this is of help!

My first Conj

Thanks to good people at Cognitect and the sponsors of the Opportunity Grant I had an opportunity to speak at Clojure/conj 2014. It was the second time I’ve given a talk, and a fourth tech conference I attended. And it’s been amazing!

The venue, Warner Theatre, is the most beautiful conference venue I’ve seen. Just look at this photo! It might have been a little cold, but nothing that hot coffee or tea wouldn’t fix.

Warner Theatre chandelier
Image by Warner Theatre

The talks were awesome, speakers well prepared and approachable and organisers friendly and helpful. I’m very glad my talk was second on the first day as I could just sit back and take it all in. And there was a lot to take in. Eye-opening talk about data-driven systems by Paul deGrandis, brain melting introduction to persistent data structures by Michał Marczyk, very educational talk about variants by Jeanine Adkisson, hilarious walk through game development by Zach Oakes, two amazing keynotes and lots of other talks left me with a long TODO list. There’s so much I want and need to learn and I’m very grateful to all speakers and attendees for sharing their knowledge and experiences. You can watch all talks on Clojure TV YouTube channel.

But as we all know people is what makes for a great conference. We can watch the talks online but we can’t talk to the speakers and other attendees, be challenged, go through “a-ha!” moments or have a small hackathon in the hotel lobby. We can’t make new friends and new interesting contacts. And being at Clojure/conj provided me with all the above. I’ve said it before, and I’m going to say it again: Clojure community is the friendliest community I’ve experienced. I felt very welcomed and supported both as a speaker and attendee. And I felt safe and treated like an equal. I truly hope other communities will follow in our footsteps because nothing inspires more than a room full of smart people who don’t try to prove their superiority but share their knowledge instead. We all have a common goal after all: improve technology, improve industry, improve our lives and ourselves.

Lambda Ladies Dinner
Dinner with the Lambda Ladies

Dinner with the Lambda Ladies, sponsored by the kind people at Living Social was a blast too! Lots of good advice and laughter – I hope it won’t be long before I see you again!

I’ve returned to London energised, with some great memories that I play on repeat in my head. I hope this state of mind will last a little longer or at least till the next event.

Thank you everyone who made Conj so memorable – I hope we meet again!