Writing
-
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…
-
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…
-
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…
-
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…
-
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)…
-
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…
-
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…
-
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…
-
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…
-
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…
-
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…
-
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…
-
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…
-
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.…
-
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…
-
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…
-
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…
-
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…
-
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…
-
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…
-
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…
-
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…
-
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…
-
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…
-
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…
-
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…
-
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,…
-
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…
-
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…
-
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…
-
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…
-
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…
-
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…
-
Rails controllers and OOP
Rails controllers violate the Single Responsibility Principle. Each “action” has a different responsibility and should be contained in a separate…
-
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…
-
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…
-
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…
-
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…
-
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…
-
initialize_clone
,initialize_dup
andinitialize_copy
in RubyRuby has two methods for creating shallow copies of objects: Object#clone copies the object, including its frozen state Object#dup copies the object,…
-
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…
-
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…