Below you will find pages that utilize the taxonomy term “clojure”
Writings
Mission accomplished
A year and four months ago I joined Atlassian to pursue a very exciting opportunity: to deliver realtime collaborative editing to Confluence. I have talked about it last year at EuroClojure and this year at QCon Brazil. Even Cognitect wrote a few words about it.
In a nutshell this involved writing Clojure code all day to build an awesome service we call Synchrony. Synchrony is capable of realtime data synchronisation - not just collaborative editing - and as such its applications are many!
Writings
The Clojure Sydney Meetup, four years in
In the beginning Nearly 4 years ago I founded the Sydney Clojure User Group. I had been playing with Clojure for a little while and started a small study group to learn more. Initially this group was private and held at the ThoughtWorks office.
After a couple of meetups and conversations I decided to open up the group to the public and then realised we weren’t the only ones interested in Clojure and, even more important, interested in meeting like-minded people, share experiences and help each other.
Writings
Clojure Reactive Programming has been published
I’m extremely happy to let everyone know my book, Clojure Reactive Programming, has finally been published!
You can get it at the publisher’s website or on Amazon. I had a great time writing it and I truly hope you find it useful!
I’ve met a few authors here and there and I heard more than once that a book is never really finished. I now know what they mean.
The book doesn’t cover everything I wanted to write about due to time and space limitations.
Writings
ClojureBridge Sydney, vol. I
This past weekend - 19-20th of December - a group of highly motivated individuals gave up their Friday night and their entire Saturday simply to learn how to code in Clojure!
It was the first ever ClojureBridge edition in Sydney and if you haven’t heard of it before, its goal is to increase diversity in the Clojure community. It does so by offering free workshops targeted at beginners.
You should totally read Julian Gamble’s post about the event for details.
Writings
EuroClojure 2014 and announcing my book
A bit late for a EuroClojure 2014 post but I suppose “better late than never” applies here.
The best part of every conference is the networking. Meeting new and interesting people is priceless and I did plenty of that - mostly over Polish beer and food. Polish beer isn’t the greatest but if you must have it, better stick to Żywiec. It’s widely available and was the one which didn’t give me a headache :) - I’ve been told there are amazing microbreweries though I didn’t get a chance to try any while in Krákow.
Writings
Validation and Internationalization in Clojure with bouncer & tower
I released bouncer in April last year and since then it has had a small but steady growth in usage.
So much so that I received some community feedback in the form of emails and pull requests which is simply great!
The latest and most substantial pull request, submitted by Vadim Platonov, added the ability to customise validation messages in anyway you like, as you can see in the section Internationalization and customised error messages of the README.
Writings
CUFP/ICFP 2013
I’m sitting in the Lobby of the Hilton in Boston and since my flight back to Australia isn’t for a few hours I thought I’d write my experience report while everything is still fresh in my mind.
CUFP - Commercial Users of Functional Programming - is a Workshop-like conference targeting the practically-minded functional programming community.
As it’s stated on their website, “The CUFP workshop is a place where people can see how others are using functional programming to solve real world problems […]".
Writings
Purely functional data structures in Clojure: Red-Black Trees
This post is part of a series about Chris Okasaki’s Purely Functional Data Structures. You can see all posts in the series by visiting the functional-data-structures category in this blog.
Recently I had some free time to come back to Purely Functional Data Structures and implement a new data structure: Red-black trees.
Red-black trees Red-black trees are a type of self-balancing binary search tree. Back when I first learned the balancing algorithm used in operations such as insert and delete, I remember it being a particularly tricky one.
Writings
Clojure, core.async and the Lisp advantage
Long gone are the days when systems needed to do only one thing at a time.
Concurrency is the word but it often leads to complex code, dealing with locks, mutexes etc…
There are several different abstractions which allows us to both model and think about asynchronous code in a more sane fashion: futures, promises and events/callbacks are but a few of them.
I won’t get into the merits - or lack thereof - of these alternatives in this post but rather focus on a different alternative: Communicating Sequential Processes - CSP.
Writings
Functional Programmers Unite! LambdaJam down under
I hinted at LambdaJam Australia back in my 2012 Highlights post and the dates are fast approaching so I thought appropriate to blog about it once more.
YOW! LambdaJam is a conference targeted at intermediate and advanced functional programmers and is organised in talks, jams and workshops.
Talks are the traditional format and are 30 minutes long; Workshops aim to introduce a specific subjects to attendees in great detail and are up to two hours long; Jams are hands-on sessions.
Writings
clojure and why calculating is better than scheming
Last week while attending Clojure/West in Portland I came across a paper called Why calculating is better than scheming. In a nutshell, this paper is a critique to Abelson and Sussman‘s classic textbook SICP - Structure and Interpretation of Computer Programs, used by MIT for many years to teach their introductory programming course.
If you haven’t read SICP, you should. It’s an amazing book. It uses Scheme, a dialect of Lisp, as the vehicle to present fundamental programming concepts.
Writings
Purely functional data structures in Clojure: Leftist Heaps
This post is part of a series about Chris Okasaki’s Purely Functional Data Structures. You can see all posts in the series by visiting the functional-data-structures category in this blog.
Last year I started reading a book called Purely Functional Data Structures. It’s a fascinating book and if you’ve ever wondered how Clojure’s persistent data structures work, it’s mandatory reading.
However, all code samples in the book are written in ML - with Haskell versions in the end of the book.
Writings
bouncer validation lib for clojure
Today I’m releasing bouncer, which was extracted from a project I’ve been working on.
It’s a validation library for Clojure apps and it lets you write code like this:
(def person {:name "Leo"}) (validate person :name required :age [required number]) If you’d like to see more examples and a detailed guide check out the github repository. The README should get you started.
This post however isn’t only about announcing bouncer. It’s also about the motivation and implementation details behind it.
Writings
Monads in small bites - Part IV - Monads
This is Part IV of my Monads tutorial. Make sure you read the previous parts:
Part I - Functors
Part II - Applicative Functors
Part III - Monoids
Part IV - Monads (this post)
A quick recap In Part I we learned about Functors, which are things that can be mapped over using a normal function - fmap is used for that.
Writings
Monads in small bites - Part III - Monoids
This is Part III of my Monads tutorial. Make sure you read the previous parts:
Part I - Functors
Part II - Applicative Functors
Part III - Monoids (this post)
Part IV - Monads
Monoids Simply put, Monoids describe types containing a binary function and an identity value.
When applied to the identity value and a random value x, said function leaves its argument x untouched, returning it as a result.
Writings
Monads in small bites - Part II - Applicative Functors
This is Part II of my Monads tutorial. Make sure you read the previous parts:
Part I - Functors
Part II - Applicative Functors (this post)
Part III - Monoids
Part IV - Monads
Applicative Functors In Part I I talked a little about Haskell type signatures and introduced Functors, which provide a way to map standard functions over values which are wrapped inside a Functor - we used fmap for that.
Writings
Monads in small bites - Part I - Functors
Today I join the already bloated group of people who wrote monad tutorials. It’s a bit of a ritual, really.
Different than most tutorials though I aim to take a different approach. The good news is that I won’t be comparing monads to burritos :)
People say one needs to have his/her own epiphany in order to understand Monads and reading explanations from others is of little help. My goal is to disprove that.
Writings
Clojure, leiningen 2 and Heroku: AOT compilation gotchas
Recently I upgraded the clojure project I’m working on to Leiningen 2 in order to start using nrepl - since swank-clojure is now deprecated. Little did I know this would lead me to a small debugging adventure.
Heroku I use Heroku as my deployment platform and my project had been running on it for a few weeks without any issues. I also use Heroku’s PostgreSQL solution.
However, by upgrading to Leiningen 2, my project started throwing some weird exceptions during deployment - it couldn’t connect to my database any longer.
Writings
Sean Corfield: Clojure and CFML sitting in a tree
Last night I attended the Adobe User Group here in Sydney. That might strike some of you as a big surprise given my relationship with Adobe is pretty much limited to fiddling with Photoshop/Lightroom to get my photos looking nice.
However the reason for which I attended the meetup is that Sean Corfield - a prolific member of the Clojure community - gave a presentation on how he introduced and migrated most of his backend code at World Singles from CFML to Clojure - hence my interest.
Writings
clj syd report number 0
Last night we held the first ever meetup for the Sydney Clojure User Group!
When I decided to start running the meetups I had no idea we’d end up with 37 people on the first night! What a great turn out!
As for the content, here’s what you missed:
Running Clojure apps on Heroku - Lincoln Stoll (@lstoll) Linc works for Heroku but ended up not spending a whole lot of time talking about that - instead he showed us how to build a simple web application using Compojure, a small Clojure web framework.
Writings
project euler problem 4 in clojure
I solved a few of the problems on Project Euler in the past, both in Java and Ruby, and thought it would be useful to redo them in Clojure, thus improving my skills on the language’s core functions and libraries. Today I’ll share problem 4.
Go ahead and read it but here’s the meat of it:
“Find the largest palindrome made from the product of two 3-digit numbers."
From this statement we can tell two things: (1) we’ll need a function that can tell whether a number is a palindrome or not and (2) that the largest palindrome is given by the product of two numbers between 100 and 999, inclusive.
Writings
backlog ola bini on clojure conj
As I promised in my previous post, here are the highlights of what Ola Bini had to say about Clojure/conj.
Clojure/conj is the largest gathering of clojure programmers, hackers and enthusiasts, with a single track of talks spanning three days. Ola selected his favorite talks and summarised each one of them.
The actual slides for each one of the talks can be found on github.
You can find Ola’s slides here.
Writings
announcing the sydney clojure user group
Update: We now have a [Meetup.com page][9]. Head over there to learn about our next meetups as well as to RSVP to them. We’ll discontinue usage of the wiki for registering attendees, in favor of the new site. Everything else on this post however still holds.
If you’ve been following my blog, you’ll have noticed I started running internal Clojure meetups/hack nights at ThoughtWorks here in Sydney a while ago. While being closed, we’ve already had one international speaker - [Ola Bini][7] - come and share his experience as an attendee at [Clojure/conj][8].
Writings
Report: Clojure Meetup - 1
Last Tuesday we held ThoughtWorks' Australia first Clojure meetup here in Sydney. It was a lot of fun so I thought I'd share a few words about it.
The format was rather simple. First, we had a brief introduction to the language syntax by breaking down a couple of snippets and understanding how each bit worked. For instance, this is one of those snippets:
;;word count (reduce #(if (%1 %2) (assoc %1 %2 (inc (%1 %2))) (assoc %1 %2 1)) {} (clojure.