December 1, 2014
One of my favorite genres of article to write are the ones that involve
refactoring some code to make it more functional, and (hopefully) improve
it on the way. With that in mind, I’ve decided to embark on a tour
of some of the things users of other popular dynamic languages can
take away from the ideas behind Clojure, even if they never use it
themselves. Today, I’ll be taking an old Python library I wrote and
refactoring it to fit a few ground rules.
Read more »
November 27, 2014
I hate the term “Digital Nomad”. Whenever I see it in the context
of an article or blog post, it reeks of pretension and
better-than-thou-ness – which, I rush to point out, is not a vibe I ever get from actually
talking to fellow travellers in person. Usually, when I meet
someone who asks about my lifestyle, I just laugh and say I’m homeless
but employed.
Whatever you want to call it, a life of permanent travel seems to have
a broad appeal, at least with some segment of society. And, as such,
it’s something I occasionally get asked questions about. Today,
I’ll answer questions that I haven’t been asked, but feel free to
ask more in the comments and I’ll answer.
Read more »
November 24, 2014
The inspiration for the article I wrote last week entitled
Clojure is not for geniuses was inspired by Tommy Hall’s
talk at Euroclojure 2014, wherein
he made an offhand joke about preferring Clojure for its minimal
syntax, as he possesses a small brain (both his blog and his head suggest this assertion
is false). I had intended to bring this up with the original article, but got
sidetracked talking about immutable things and never got back around
to it. Here I’d like to address that, along with some discussion
that arose in various forums after the first article.
Read more »
November 18, 2014
It’s a common attitude that functional languages with immutable collection
semantics, such as Clojure, are for a) pretentious language geeks, or
b) actual genius programmers. I’m in no position to defend against
point a) given the body of my writing on this blog, so today I’d
like to write an article about point b).
Read more »
October 30, 2014
I travel a lot these days. I’d call myself a “digital nomad” as a shorthand,
if there was any way to say it without sounding impossibly smug. Let’s just say
I’m homeless but employed and my wife and I live in AirBnbs.
One of the challenges of moving around so much is dealing with language barriers.
For the most part, even in places where English isn’t widely understood, it’s perfectly
possible to get whatever you need with gestures, chief among them pointing and
holding up money. It’s the little things that are harder when you can’t speak the language.
Read more »
September 29, 2014
Update: Voting is live! Vote for my app at https://clojurecup.com/#/apps/booker, then
check out some more deserving entries at https://clojurecup.com/#/apps and vote for them too!
I’ve just spent about 30 hours this weekend coding up Booker,
my entry to the 2014 Clojure Cup, in which I participated as a one-man team. It was pretty
exhausting, and the app doesn’t do quite as much as I was hoping it might, but I’m
still quite happy with how it all turned out. Here’s how my weekend went.
Read more »
September 5, 2014
Clojure has an approachability problem. In part, this is due to the
relatively unusual syntax, but that can’t get all the credit.
When it comes to building server-side web applications, a
major sticking point is the “lack of frameworks” problem, and
more to the point, the common Clojurian’s response:
“Clojure users prefer to assemble their own stack from small, composable libraries.”
Read more »
August 28, 2014
So you wrote an app. Great! Next step is to put it somewhere
where people can use it. This tutorial will walk you through
the process of deploying your app.
Read more »
August 23, 2014
Problem: You need to extends some Java interface or class to use
some Java API, and for some reason Clojure’s java interop tools are
too unwieldy to do it cleanly.
Read more »
August 22, 2014
I saw this post by Grasswire
today, and I couldn’t resist the urge to throw down a Fizz-Buzz-pocalypse.
So, here’s my implementation in Clojure, along with a list of ways that Clojure
clearly wins. (That last sentence was to be read tongue-in-cheek, Scala is a good language too. Besties!).
Read more »
August 20, 2014
I recently had occasion to test out using Parquet
with protobufs. I got
some simple tests working, and since I had to do a lot of reading
to get to this point, I thought I’d do the world a favor and document
the process here.
Read more »
August 18, 2014
I recently stumbled across a neat library called Flambo.
Flambo is a clojure wrapper for Spark, and it does a really
great job keeping everything nice and Clojure-y. I wanted
to show you so you can enjoy it too!
Read more »
August 15, 2014
Hello sir. I’m here to talk to you today about accepting Clojure into your workflow.
Do you have a few minutes? I’d like to show you these ten ways that Clojure can
help you make better software. Good, here we go!
Read more »
August 13, 2014
In May, I left Canada to do some long-term travelling with my wife. I don’t mention it here because this isn’t tumblr, but it does mean that I have some problems many people don’t, such as figuring out when I can return in the Schengen Area. This is a problem that has been solved, but I’ve yet to see it solved well, so I decided to build my own calculator as an exercise using Kioo with Om.
Read more »
August 1, 2014
It’s that time of year again! Today, we’ll look at just over a half-year’s worth of Github
data to draw unsubstantiated conclusions about the relative popularity of programming languages.
Ok let’s go!
Read more »
July 7, 2014
For the past few years, most of my posts have been beginner-intermediate
essays on various clojure features and coding techniques. Since a lot of
people have told me that they like my blog as a genre piece, I decided to
pull some of my favorites into one place, and order them by difficulty, from
Clojure beginner on up so that folks don’t have to root around.
Read more »
July 2, 2014
It’s been about two years since I undertook my first sizable application in Clojure,
and really my first experience architecting a system in a functional language.
It was a local dating application, and it’s still up and running, despite the sins
below. But, reading the code now, a few dire instances of truely bad code emerge.
So, I crawled through for some examples, which I now impart to you:
Read more »
June 30, 2014
After my last post on using Clojure’s STM as a quick-and-dirty in-memory datastore,
I had an interesting discussion in the comments about
the wiseness of implementing my example with a static global. Coincidentally, I attended
a talk by Stuart Sierra at EuroClojure about this very thing,
and started getting some ideas about how to make things better, which I want to share today.
Read more »
June 10, 2014
I was searching for a good example to illustrate some properties of
refactoring object-oriented code into a more functional style, and
I came across this example from Martin Fowler’s Refactoring.
It describes the process of refactoring code for a video store.
It’s a nice little example with a useful narrative to go along with it.
Read more »
June 2, 2014
I saw this post, “Do It Yourself NoSql”,
recently, and it reminded me of something that Clojure does very very well.
Clojure’s go-to concurrency enabler is its
STM
system: atoms
, agents
, and refs
.
I’ve written about it before, but this seemed like
an opportunity to provide a nice example, and discuss a little more about some of the things
I often do to defer the need for a database.
Read more »