May 22, 2013
Big wins: Multi-armed bandit testing.

I'm all about big wins. I could care less about incremental optimizations if there's a major victory to be had instead. That's why I'm way into multi-armed bandit testing right now.

May 19, 2013
Idea: Device-specific screenshots (or, Abusing Retina.js on Addressbin)

In January I came into possession of a new retina-display Macbook Pro. The screen is amazing, but has the side effect of making images on websites look mostly like garbage, unless the developer has taken extra steps to serve double-sized images to people with fancy screens.

May 13, 2013
"Good Enough" error handling in Clojure

Writing Clojure is not like writing Java. In Java, exceptions are an accepted part of the workflow; in Clojure, they are begrudgingly supported out of necessity, but generally avoided.

Why is that?

Probably because writing code that throws exceptions makes your

Apr 7, 2013
Clojure web apps: Zero to 'Hello World' on Heroku in Clojure in 15 minutes.

I've been talking a lot about Clojure lately, but the pool of people who want to listen is pretty small. I know, I know, it's pretty different, but I promise it's really cool – maybe even better than the languages you already know – once you get to know it. So today I want to step back to the very basics by outlining how to get a Clojure app up and running, and maybe produce some more Clojurenauts in the process.

Apr 5, 2013
Why Clojure? Part 2: Effortless async by design

As a second part in what I've decided will be a series attempting to justify my choice of Clojure as a general-purpose web language, I'd like to talk a little bit about writing asynchronous code in Clojure, and just how easy the design decisions made by Mr. Hickey make that.

Apr 2, 2013
Middleman + Enlive: The best thing since PHP

Before I begin, the ideas in this article were introduced to me by this blog post, which I consider a must-read for anyone who uses Clojure on the web.

I've been using Clojure for web development a lot more lately. This can be a contentious topic for some people. “Clojure is hard to hire for”, they say. “It's for pretentious nerds”. “It's overkill for the web”.

Mar 25, 2013
The same app 4 times: PHP vs Python vs Ruby vs Clojure

Here's a toy program I wrote implemented in PHP, Python, Ruby, and Clojure. I hope it's helpful for someone who knows at least one of those and wants to learn another.

Feb 28, 2013
Cover Letters: Then and now

I was told the other day that my communication style (as interpreted by cover letters I sent) had changed dramatically for the better over three years. Thanks for that! So I thought I'd share in hopes of helping someone else do the same.

Jan 3, 2013
Trending: The iOS Stock Viewer that's better than the stock viewer

Trending, by Tapfolio, is an iOS app for tracking stocks, available now on the app store. It makes viewing your stock portfolio's current pricing a snap, and sorts on most changed so you always see what you want to know about.

Dec 21, 2012
Welcome to the blog, mark III

Welcome to the new blog. I hope you like it, I made it myself.

Dec 17, 2012
Civilize your Python @decorators

Here's a quick tip. I was trying to use Sphinx's autodoc on a function that I had decorated, and found that the docstrings were consumed by the process, and therefore that the function did not appear in the documentation output.

After looking around a bit, I found the relevant mention in the Sphinx docs:

Nov 22, 2012
My experiences deploying a small Clojure+MongoDB app on Heroku and MongoHQ

Recently, I wrote an app in Clojure (using the Noir framework), with MongoDB (via congomongo) for a data store. The app in question, http://www.ladieschoicevictoria.com/, is a dating website providing privacy for women and efficiency for men by requiring women to send a message before a man can even see their profile.

Oct 28, 2012
Why we don’t have an “ethnicity” option

We’ll say it outright: In an ideal world, we don’t think an ethnicity field ought to be necessary. “Be the change” and all that. At LadiesChoiceVictoria, we’re really concerned with creating an environment where everyone can feel comfortable and included. Of course, in an ideal word, any words we could choose to identify ethnicity wouldn’t carry the baggage that such identifiers have now.

Oct 28, 2012
On Customer Support, and doing it right.

I've been really busy lately. I launched a hyperlocal online dating website with a friend this month, and we got picked up by the local newspaper and by CBC Radio on Thursday.

The story in the paper

Oct 14, 2012
Voicemail-via-email with Twilio and Heroku in 30 minutes.

I recently decided to give my development company Refinry a toll-free number. Really classes the joint up. I decided to use Twilio, since their API is so impressive (and since Google Voice doesn't exist in Canada). And since Twilio makes it just so easy, I went ahead and set up voicemail-to-email, which can be done at no extra charge.

Oct 5, 2012
How to avoid the Favor Zone

Freelancers often have a lot of things going at once. Besides "real work" and personal projects, we often want to use our powers to help others out of the goodness of our hearts. Unfortunately, sometimes in our eagerness to please we accidentally end up with projects in the "Favor zone".

Sep 23, 2012
September's project: LadiesChoiceVictoria.com

I made a dating website. Well, me and my friend Paul.

The premise (his idea) is that only women can initiate conversations. He came up with it after observing the catastrophic bias that exists on other dating sites, where men get almost no initiating messages and women get tons.

Sep 17, 2012
Functional Programming in MATLAB (Yes, that MATLAB)

I spent a little bit of time implementing some functional programming tools in MATLAB. I called the package "functools", and you can get it from Github.

Here's the link: https://github.com/adambard/functools-for-matlab

Aug 16, 2012
An I/O pitfall in Clojure (or, RandomAccessFile says "invalid handle")

I had this problem today. I was attempting to use RandomAccessFile and kept getting errors trying to write to it.  Things like, "Write error [Thrown class java.io.IOException]" 

I eventually figured out the problem. Here is an example.

Aug 7, 2012
Introducing Franslate: French/German/Polish/Russian vocabulary flash quiz

I had a few hours free on Monday, so I spent them throwing together a French quiz. Since then, I added support for 3 other languages (Russian, German & Polish). Here's the process, and the results.