Connecting People with Knowledge

March 4, 2015. Toronto.

I'm pleased to announce that I'm joining Volley - a local Toronto startup that aligns perfectly with my long term FindNext project goals.


In 1999 during a co-op workterm I first developed FindNext. Search engines were a new idea - web directories were still commonplace. I had the idea to combine results from many search engines, reorder and optimize their relevance, and as queries took a long time to run, deliver the results by email.

Over time, as I learned other web and server technologies and how to optimize my own code, FindNext evolved too. Queries could be run in real-time and the user interface improved. FindNext was finding an audience, but mostly to break firewalls or run objectionable content queries. Paid content started to be given precedence in search engine results also, breaking my parser. It quickly became hard to maintain. I was very early in my agency career by this time and opted to shut down the site rather than solve these issues and rework the platform.

In the many years that followed, sparks of inspiration came and went - generally driven by new technologies and devices. I made good use of my codebase to learn these new languages and concepts. This served me well in my day-to-day work at several interactive agencies but I didn't put enough back into FindNext to turn it into a public product again.

In 2009 I attended WWDC. I had been doing a little bit of iOS development in my spare time but wanted to jumpstart my understanding of developing for the iPhone. I got a lot out of the conference - mobile development came more easily and I once more turned to using FindNext as a quick trial build platform.

FindNext at this point had moved away from its search engine beginnings. Thinking about how I'd regularly tap my friends for help with unsearchable topics that aligned with their interests, and how people would ask me about movies or photography (my main interests), I began to develop an API and platform to allow people to pose queries seeking results from those friends or members of the public that could help. The wisdom of crowds in place of 'lazyweb' shouting from the rooftops on social media or hunting for the right search keywords. I also thought of some unique onboarding concepts and ways to engage users (more on that down the road...)

Meanwhile, I had transitioned to iOS development full-time at my day job. In the process of developing several production iOS apps I learned about server security, building an API, database platforms, good UX practices, and many other technologies to support an app.

At the end of 2014 the agency I was working for closed. I began having conversations with companies looking for someone with my skillset. Many interesting opportunities in many locations - some nearby, others across the continent. Admittedly I didn't do a great job of communicating with everyone who reached out during that overwhelming process, but it became clear that a role similar to my last position wouldn't scratch the itch to build something myself.

I made the decision to reinvest in FindNext. I began looking at costing new servers, seeking office space as I don't work well at home, and doing some preliminary planning to shake the dust and cobwebs away.

At almost the same time, David at Volley reached out looking to have a chat, expressing his interest in what I was planning with FindNext.


"Volley is a community of developers, designers, entrepreneurs, and artists all helping each other make better things."

David and I met for lunch and had a good conversation about my recent experiences around the agency closure. Afterward we met with Mike in Volley's space at the Ryerson DMZ and continued our chat - me talking more about my FindNext ideas and learning more about Volley. It was a phenominal conversation and experience. I messaged friends and called up family to talk about it immediately afterward. During that conversation it had become clear that our goals were the same - connecting people with the knowledge they need by creating a human / technology bridge to help one another.

Our discussions continued over the following few weeks. My potential involvement in the company quickly evolved over that time as well - from an iOS development hire to talking and brainstorming on the platform and ultimately deciding to have Volley acquire FindNext and myself via a Co-founder and CTO position at the company. I feel this will be an amazing opportunity to build a platform while seeing some of my FindNext ideas through to fruition at the same time.

Over the last few days we built Volley's first office together. We took on painting, furnishing, designing, and even some demolition work. Mike, David and I are really proud of what we've built, and can't wait to put the same effort and detail into Volley in the months and years to come!

A Defining Experience

January 30, 2015. Toronto.

Today marks the end of my time with Teehan+Lax. It has been an amazing (nearly) 7 years - from my first project, to TweetMag and Readability and all the iOS projects that followed, along with fun challenges working with Labs and so many smart and forward-thinking clients... I couldn't have asked for better.

To past-partners Jeremy Bell and Dave Stubbs - thank you for bringing me on. And here's to all the t+l'ers that made the office such an incredible place to work.

Thank you to the partners - Geoff, Jon, and Dave for creating an environment that provided opportunities to learn so much, evolve my thinking around client / business relationships, and make use of my personal interests and hobbies regularly in my day-to-day work. Thanks again, and all the best on the west coast.

I'm looking forward to what comes next. It would be great to hear from you.

A Simple Blog Platform (Updated)

January 26, 2015. Toronto.

Read my original post from June 4, 2013. As predicted, I moved away from PHP and mod_rewrite in favour of Flask and Python-Markdown. Architecturally, this site is quite similar to the original setup. Here are the components:

Dropbox / Dropbox for linux
Twitter Bootstrap

On the Road Again

October 1, 2014. Niagara-on-the-Lake.

After another engine oil leak catastrophe, I took my old VW in for a proper service. It took a month to get it back in shape but it's running better than ever. I went for a long drive around Niagara-on-the-Lake before putting the car in storage for the winter.

A Simple Blog Platform

June 4, 2013. Toronto.

A couple of months back I decided I should refresh my website and do something more with the content I create. Sites I have traditionally used to share thoughts and photographs have fallen out of favour and my work is scattered across a bunch of networks. Time to take ownership again.

Unfortunately, I struggled to find a blog / content platform that clicked with my needs. I used WordPress off and on but found dealing with a database and login permissions fussy for a personal site, and Tumblr triggers concerns over ownership and copyright. So, I decided to build my own using familiar technology and the simplest server setup possible.

Here are the components I tied together.


"Markdown allows you to write using an easy-to-read, easy-to-write plain text format, then convert it to structurally valid XHTML (or HTML)."

Thanks to GitHub and its rich commenting and push request system, I've become fairly well-versed in Markdown syntax. All the content for this site is stored as Markdown (.md) files which are parsed by the PHP Markdown library.


Dropbox is used as the CMS. It just made sense - I have access to it from anywhere, basic versioning is built-in, and I can author and push content from my iPhone (using Byword for example) if I like. I can create a document with any path and filename I like and then link to it. Done.

For example, this post is The filesystem and mod_rewrite (see below) do the rest. Dropbox for linux was installed and a daemon and upstart script put in place. Rather than sync my entire Dropbox account to this server, I created a dedicated account for the content and then I shared a directory back to my primary account. Sync is extremely fast.

Note: Dropbox wants to be in a user's root directory by default, and while there are tools to change that I decided not to mess with the configuration. Instead, I created a symlink so the web server could access the files.

Apache mod_rewrite

For the display of content, there is only one PHP script on this server. It looks at the incoming request URI, locates the markdown file with that path and parses it using the PHP library. Here are the rewrites being used - requests for images or other files on the filesystem aren't tampered with.

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]



git has grown on me, again mostly thanks to GitHub. While the content is managed using Dropbox, scripts and server config are checked into git. As this platform idea is a work in progress, git allows me to tinker without worrying. I can roll back a change if something goes awry. Also I can add nearly any configuration file to the repo by copying the file and then symlinking back to the expected location.

Twitter Bootstrap

The Twitter Bootstrap framework is probably overkill for a simple site like this one, but there is some great built-in functionality I can tap should I need it. Since I'm managing the server config and scripts using git, I brought Bootstrap in as a submodule. I simply symlink to the compiled CSS and JS files.

URL Shortener

I reluctantly used a database for this one. I moved my existing custom shortener ( data from MySQL to MongoDB and simplified the code to include it in the main PHP script. If a Markdown file isn't found for a given URL, it checks to see if a matching slug exists in the Mongo DB. If so, it'll redirect to that site (and perform some tracking along the way). Otherwise, it just pushes to a 404 page. Administration functions are rolled in too.

More to explore

Down the road, I'll likely transition to Flask and Python-Markdown (which I've used elsewhere). There are certain aspects of this platform approach that require more manual intervention than I'd like, but I'm very happy with the workflow to post new content. Let me know what you think or if you implement a similar setup!