Writing

  1. Asynchronous browser tests with Phoenix (making our tests faster 🚀)

    Recently I have been working on a project using Elixir and its web framework, Phoenix. I have enjoyed learning many new things but have thus far been…

  2. How to act

    Responding to my recent article about the ecological crisis, my friend Kai asked: How would you respond to the criticism that this perspective is…

  3. The Other Crisis

    Right now the world is grappling with COVID-19, but over the past year or so I’ve spent quite a bit of time trying to make sense of the worsening…

  4. Pillars of the Guardians: Building an interactive LED art installation

    A couple of months ago I attended Burning Seed, which is an Australian Burning Man-style event. A few months prior, I’d had the opportunity to join…

  5. Weeknotes 20: the end for now

    20 seems like a good number to go out on? I’ve decided to finish this weeknotes experiment for now. While having the structure of writing (almost)…

  6. Weeknotes 19: a shift in consciousness

    I recently heard about what Joanna Macy calls the “Great Turning” – the shift from an industrial growth society which is gobbling up and killing the…

  7. Weeknotes 18: self-set salaries

    I read an interesting article from design company Hanno about the process that lead them to implementing self-set salaries. Yep, indiviual team…

  8. Weeknotes 17: to where do you hurry?

    We moved house last week. It was busy. I did not write any weeknotes. We’ve moved in with another couple. We decided to consciously open ourselves up…

  9. Weeknotes 16: couldn’t we be doing this differently?

    I was wondering why some Rails tests were so slow to boot, which gave me an opportunity to try out rbspy. It was really quick and easy, and I could…

  10. Weeknotes 15: not selling up

    I started doing some contracting with TidyHQ this week. TidyHQ is software which helps sporting and community groups manage their organisation’s…

  11. Weeknotes 14: capitalism has largely been a way of not needing each other

    Via Richard D. Barlett, I listened to a podcast with Daniel Schmachtenberger on what he calls the “generator functions” (i.e. root causes) of…

  12. Weeknotes 13

    My friend Sieta did an interview on the Subtle Disrupters podcast, about her work at CERES, where they help people to “fall in love with the earth…

  13. Weeknotes 12: Our inner and outer crises are two sides of the same coin

    For a few weeks I’ve been dabbling with using Elixir to generate some SVG art. My technology choice was entirely based on the fact that I wanted to…

  14. Weeknotes 11: Regenerative agriculture

    I finished reading Call of the Reed Warbler, which is written by an Australian farmer (Charles Massy) about the practise of regenerative agriculture.…

  15. Weeknotes 10

    If you’re paying attention, you may have noticed that I’ve missed a few weeks of this here weeknotes project. Oh well, here we are, I’m not going to…

  16. Weeknotes 9

    The photo above is from a lovely hike we did with a visiting friend from the UK last weekend. It’s in the Yarra Ranges and is described here…

  17. Weeknotes 8

    This week I joined Enspiral as a contributor. (If you want to know what Enspiral is, I recently wrote about their book, Better Work Together.) You…

  18. Weeknotes 7

    On Monday we squeezed in a final morning of climbing in the Blue Mountains (see weeknotes 6) and then started driving back to Melbourne, arriving…

  19. Climate: A New Story

    Can you imagine a world without climate change? I don’t mean one where we’ve engineered our way through the problem, I mean one in which the problem…

  20. Weeknotes 6

    This week has been full, but the filling was nutritious. I’ve had quite a few coffees and lunches, and there have been some thought-provoking…

  21. Better Work Together

    There is a trickle of human energy going into solving the greatest challenges of our time. How do we turn it into a river? Better Work Together is a…

  22. Weeknotes 5

    This one is coming a bit early because I’m going away camping tomorrow for a friend’s birthday. Monday marked a year since we moved to Australia. I…

  23. Weeknotes 4

    I spent the Labour Day long weekend near Warburton with my partner. It was nice to get a bit of a hit of nature—Australian forests and bird life are…

  24. Weeknotes 3

    Happy International Women’s Day! I am constantly impressed by my sister Esther’s tenacious work campaigning for equal access (she is a wheelchair…

  25. Weeknotes 2

    The big news for me this week is that I left my job at Up. It’s not that I didn’t like it or had a falling out with anyone. I actually think it’s a…

  26. Weeknotes 1

    I’ve decided to have a go at doing week notes. I’ve observed a few people on the internet doing this. It strikes me as a nice way to reflect on…

  27. My first steps contributing to Servo (and learning Rust)

    I remember first learning about web technologies as a teenager. This was back in the days when the majority of websites still used tables for layout,…

  28. Principles for deciding what to work on

    Towards the end of last year I bowed out of a four and a half year stint as Loco2’s Technical Director. Doing so forced me to consider, for the first…

  29. Square pegs, round holes, and Rails' directory structure

    Where should you put code in your Rails application? Often, the answer is obvious: models go in app/models/, controllers go in app/controllers/, and…

  30. Overhauling Loco2's hosting infrastructure with AWS, Docker and Terraform

    Recently I worked on a major overhaul of the infrastructure hosting Loco2.com. In this post, I’ll dig into the details of what we did and why. Table…

  31. Revocable sessions with Devise

    By default, session data in Rails is stored via a cookie in the user’s browser. It’s a nice, simple storage mechanism, but it means that the server…

  32. Poltergeist 1.0!

    Almost a year ago, on a complete whim, I decided to try to hook up the headless browser PhantomJS with Ruby’s full-stack acceptance testing…

  33. Explaining Focused Controller

    Controllers in Rails are a problem. Actions sometimes become unmanageably long, and it’s often difficult to know how to test them when you need it…

  34. Rails controllers and OOP

    Rails controllers violate the Single Responsibility Principle. Each “action” has a different responsibility and should be contained in a separate…

  35. Poltergeist 0.6.0: Javascript error handling and remote debugging

    Recently I pushed version 0.6.0 of Poltergeist. This version brings some pretty awesome features that I am very excited about. My goal with…

  36. Tracking down method definitions in Ruby

    One of my favourite features of Ruby 1.9 is the #source_location method of Proc and Method. Let me explain. Often I am confronted with a large code…

  37. How to prevent Ruby's test/unit library from autorunning your tests

    Today I had a situation where I wanted to use perftools.rb to profile a test suite, which was written with Ruby’s test/unit library. test/unit…

  38. Hashes and encapsulation

    Earlier today I made an off-the-cuff remark about encapsulation on twitter. Then Josh, not realising that I was simply casting judgement down from my…

  39. Poltergeist: A PhantomJS driver for Capybara

    This announcement is coming way later than I had originally intended. Last October I started experimenting with the idea of writing a driver for…

  40. initialize_clone, initialize_dup and initialize_copy in Ruby

    Ruby has two methods for creating shallow copies of objects: Object#clone copies the object, including its frozen state Object#dup copies the object,…

  41. Mass assignment security shouldn't happen in the model

    Mass assignment security is a feature in Active Model (and therefore Active Record) which allows you to be selective about what input you will accept…

  42. How to write an awesome Active Record bug report

    The main area of Ruby on Rails that I work on is Active Record. As such, I see a lot of bug reports for Active Record. This article will be about how…