While 2022 was all about joins , this year we made a whole new record. Her name is Zoé and she’s wonderful. I can’t wait for her to meet the world in spite of its flaws. Along the way, Zoé helped me refocus on what really matters: getting lost in that afternoon shine holding hands (or fingers) ~naps~ the percussive pleasure of deep farts 💨 improvising harmonies to soothing songs watching sunrises…
This post is reproduced from an original I authored in A List Apart on November 4th, 2014 . A decade later it’s still so relevant to my daily work on a computer. Pierre Choffé was kind enough to translate it en français sur son blog La Cascade . Contributing to open source software always involves a bit of tedious setup. While it often distracts from the end goal (solving problems), the setup…
12 years ago today, I spoke these words into a microphone after writing them late at night. If you forgive my 26 year old pompousness I think they aged… OK. The test of time might be passed when something you wrote for yourself ends up coming back in your mind for over a decade. A constant variable. Life is, love is, work is. Things change, perpetually. Change is frightening but it’s good. We…
Some foreign keys you forget to create indices for. Then you start noticing that you’ve written many records together, and you enjoy retrieving those too. While it’s hard to explain and pointless to analyze, you’ve been filtering a single reference in particular. This reference, it has familiar type that you can trust. It’s clear this will be a write-heavy relationship, but you’re also going to…
Before the pandemic even started, remote work was already on the rise around the world because it makes sense . Knowledge work doesn’t need to depend on crammed, loud, and unhealthy open offices located in expensive areas devoid of affordable housing. Bringing a laptop to a room inside of a building you spend hours to travel to every day is the definition of absurdity. Instead working remotely has…
In the last decade, while phone cameras have gone from shooting tiny noisy pictures to producing DSLR-level quality shots, webcams have coasted on the mediocre lane. As distributed or remote work became more common, we’ve never relied on webcams more yet they’re just as bad as they were ten years ago. The Logitech C920 (~$50), still The Wirecutter’s top pick in 2020, came out in January 2012 — the…
It’s strange how many people who work or communicate in a distributed fashion treat the transmission of their voice as an afterthought. My audio setup is a bit excessive for most people. You would probably be better served by something as pricey-yet-simple like AirPods. Despite their size, they carry a surprisingly decent microphone, as do EarPods. And unlike a serious microphone setup, you’re…
The following post is reproduced from Orientation — Code School’s internal documentation system. I wrote it many years ago when we first decided to build out the team that took care of codeschool.com. I was an early member of that team and many things we had built were created under very different circumstances by a rotating cast of developers who rarely stuck around for more than a few weeks or…
These days , I’m always eager when I have a chance to pair program with someone for the first time. Whether they’re more or less experienced than I am, I know that we’ll most likely learn a ton from each other. Maybe they’ll make me explain something I thought I understood, but in fact had incomplete knowledge of; or maybe they’ll take something that used to intimidate me and make it easily…
As a programmer or someone who spends a lot of time in command line shells, it’s likely that you regularly move around directories in ways that might feel less than efficient. Especially if you often visit the same directories every day. The routine probably goes a bit like this: 1 2 3 4 5 6 7 8 9 10 cd ~/Development ls # look around... cd project # whoops, never mind, let's go back... cd .. #…
Did you know that changelog URLs have been valid metadata since 2017 on RubyGems.org ? If you maintain a gem you can now make it easier for your users to find out what’s changed in a specific version. You can easily update your gems’s .gemspec to point to a rendered or plain text version of your changelog using the changelog_uri key in the metadata hash, like this: 1 2 3 4 5 6 7 8 9 10 11 12 13 14…
You just received notification from GitHub’s nifty new repository dependency scanner that there is a critical vulnerability report for the Nokogiri Ruby gem you currently have locked to version 1.6.8.1 in your Rails application’s Gemfile. It looks a little bit like this: Concerned, you decide to immediately update this dependency, run your test suite, and deploy to production to prevent even the…
This post was originally published as a Gist which I since forgot about and accidentally rediscovered recently when the need arose to resolve a similar accidental upgrade. I felt like it deserved to live somewhere where there is a chance I might update it. Update In Homebrew 1.5 and above, there’s a new process to upgrade your Postgres database across major versions using the brew…
After years of small improvements and two years since the last minor release, Keep a Changelog finally reached version 1.0 today . What’s new? Well, read the changelog! In short we have 6 new language translations, simplified version-aware language navigation, much clearer and succinct sections that describe the What , Why , and Who of changelogs, and a lot of refinements. For people who like…
I’m sad to announce that there won’t be a Ruby Heroes ceremony at RailsConf 2017 and going forward. The responsibility of organizing the voting, judging, travel accomodations, and ceremony has rested largely on my shoulders (with much needed assistance from Ruby Central and Code School) for the past two years after I was handed the reins of the event. I’ve also been maintaining the Rails codebase…
Note : Since this post was written four years ago, Guilds were renamed Ractors and were released as an experimental feature in Ruby 3.0 . The feature now includes great documentation and copious usage examples in the Ruby API documentation . At Ruby Kaigi 2016, Koichi Sasada — designer of the current Ruby virtual machine and garbage collector — presented 1 his proposal for a new concurrency model…
Although the circumstances are more rushed than I would have hoped, I’m starting a weekly Ruby news podcast called Ruby Facets . The first episode is already available and I’m using Patreon to fund the ongoing production of the show. If you were a Ruby5 listener in the past, Ruby Facets may sound familiar to you. There’s a reason for that. Ruby5 is no more. After 7 years, 645 episodes, 69 hosts,…
Since this past week I’ve been staying in a place that I’ve been coming to for over 15 years. I come back every time around the same time of year: the last month of summer. Here there’s a forest behind us and hills before us. I always come here driving too fast and because they don’t have enough people living here to maintain the road well, I have to slow down. It’s annoying at first to drive more…
Recently I completed a Rails 4 upgrade for codeschool.com which I originally started in the fall of 2014. Almost two years to upgrade from Rails 3.2 to Rails 4.2. Rationalizations What took us so long? Why didn’t we do it faster? Are we just really bad at upgrading things? Do we not care about security? Is it because Rails can’t scale? Or maybe Rails 4 is bad? No. It was just hard. Because I did…
I still use Sublime Text. If you do too, great, I’m sure you love it. That said if you own a screen larger than 13” it’s very likely you find the default font size in the sidebar madeningly small. I used to wear glasses with a very strong prescription. The sidebar font size in Sublime drove me nuts because it’s one of those things so clearly created by someone who has excellent vision — or someone…
After months of slow but steady work, keepachangelog.com is now officially versioned and translated in nine languages! Prior to this, we have of course been using an internal changelog to document minor version evolutions but so far this wasn’t properly reflected on the website. I’ve been impressed with how popular this rant-turned-project 1 has been. It looks like many more people than I’ve ever…
Update (November 18th, 2015): Since these new methods have been announced a few people have expressed concerns that they would interfere with Hash#sort . I addressed those concerns in an addendum to this post below. It’s been over a year since I wrote my initial “Proposal for a better Ruby Hash#include?” and I’m so happy to announce that since Tuesday November 10, 2015, Hash comparison methods…
I did technical reviewing for Jay McGavren’s new and excellent Head First Ruby book which comes out November 30th. I can tell you that it’s by far the best book I’ve ever read for people who are new to programming, new to Ruby, and new to Object-oriented thinking. That said, I’m neither, and I still found it a great read. You should pre-order a copy on Amazon while it’s still 43% off ($25.70…
I recently decided to migrate from a ad-hoc solution for URL slugs on Orientation to Norman Clarke ’s excellent FriendlyId gem . The main reason was that wanted to keep a slug history in order to avoid 404 File Not Found errors when users decide to change an article title. I have to be able to guarantee that you will find a piece of documentation regardless of how many time its title has changed…
I was building a class yesterday and I wanted the instantiation process of the class to be self-documenting so I decided to use a keyword argument in the initializer method. 1 2 3 4 5 class HallMonitor def initialize ( user: nil ) @user = user end end As you can see, I also decided to make the user keyword argument optional by making it default to nil. Later while pairing and refactoring the…
Impostor Syndrome is much more pervasive in our industry than even many successful people are willing to admit. I’ve been crippled by it many times in my life. Over time, the only reliable system I’ve developed to combat it is something I called the “ego time machine”. Once in a while, get lost in your own brain and try to remember a time when you knew less about the topic you find yourself…
Yesterday, a pretty serious security vulnerability was revealed which affects all versions of git. You should upgrade to one of the maintenance releases described in the link above, but that’s assuming you can. A lot of people don’t know how to do that. A lot of people are using the git version that ships with Apple’s OS X or their operating system of choice. I can’t help you if you use Windows or…
You can’t judge a book by its cover You’ve surely had this trope dogmatically thrown at you at some point. Perhaps by someone fond of prepackaged thinking and unsolicited advice. It may have had uses as a tool to protect people against easy judgement, but when generalized in its popular form, it’s thoughtless. I’m going to make a daring assumption: you and I agree that design usually tends to…
The way John and I pair together works like this. He’ll ask me a pointed question which will require some thinking. John won’t rush me. Beyond the answer, he is looking to understand how I think. I’m a programmer. He’s a sales person. Our audience is composed of programmers. Whenever I have a chunk of free time I’ll hop on Screenhero with John so that he can see my screen or me his. When we talk…
Today I was going through some of our worst queries on Skylight and trying to find some low-hanging fruit to improve performance with the least effort possible. I like Skylight because it’s a tool designed to reduce noise. Whenever you get into the optimization mindset, noise is your worst enemy. It turns the most innocent pursuit of necessary speed improvements into a rabbit hole chase of…
When I have a conversation with a fellow programmer — and they know that I’m a programmer too — the tone of the conversation is adjusted to exclude explanations of commonly understood concepts. They assume I know about variables, functions, objects, caching, blocks (or closures), loops, and flurry of other programming concepts. I do know about these concepts, at least I think I do. There’s a good…
Jeremy Ashkenas shared some counter-current thoughts about Semantic Versioning recently. You should read his entire piece. It’s very enlightening to hear the frustrations of a major open source project maintainer, there’s always a lot to learn about how we could improve things. Unsemantic Versioning Jeremy’s gripes are quite valid. It is hard for maintainers to figure out how to communicate about…
There are many obvious ways to waste one’s time, and there are the less obvious ones. Let’s talk about the latter. One of the first thing I notice when pairing with co-workers and friends is whether or not they have what is often described as “option as meta key” enabled in their Shell app. Even in a basic text editor like OS X’s TextEdit, whenver you type words separated by spaces, you can easily…
The greatest lie we tacitly perpetuate as programmers is that somehow, one day, with enough experience, it’s possible for someone to stop writing code that creates bugs. If you believe this because someone told you: they are wrong. If you believe this because you really want to: please stop. This idea of evolving above bugs is a very dangerous because it creates an unrealistic expectation. Worse,…
“So this is, like, if I took a spaceship to Titan — the moon of Jupiter — and I saw Taco Bell there, I’d be like: ‘No.’”. This comes from a conversation I had while pairing the other day. Let me bring in some context. I had showed Morgan — the newest member of our Internal Code School team — how awesome Bash autocompletions are inside a shell session, especially when dealing with unfamiliar file…
My friend Anthony Colangelo and I just recorded the third episode of our new podcast on Monday. Anthony’s the kind of guy I could have hourlong phone conversations with on anything and it would be the most entertaining thing ever. While he was retelling a memorable moment, Anthony reminded me of a funny little concept we came up with while we were studying at Full Sail University: Bose Mode.…
It’s 5:58 and I just finished watching The Internet’s Own Boy by Brian Knappenberger . I have some dried tears and some fresh ones running down my cheeks because the subject of this important movie — Aaron Swartz — would have been proud today. Today an ambitious campaign lead by Lawrence Lessig called Mayday reached an incredible funding goal of five million US Dollars which will be matched by…
For your own sake, don’t run commands with . without thinking hard about what you’re doing. Why? Because . means every directories here, right? So in your development environment that probably means the cute little directories you expected to be there. In my development environment (Ruby on Rails), the only thing with spec files in it for RSpec to run is that /spec folder. But what happens in my…
When I was a teenager I went to see a late night movie in a theater on Sainte-Catherine Ouest in Montréal. After the movie, I didn’t feel like going back to my hotel room so I decided to wander around for a few hours. I walked by a church on my way to the older part of town. I saw people in groups: lonely people like me, drunk people, happy people. I was fascinated by this big dark city at night.…
Recently, I announced that we were hiring a software developer for Code School’s internal team : My tweet The good Philip Arndt answered that: Philip Arndt’s tweet It’s a fair question since the meaning isn’t self-evident. To me there are two basic circumstances in which you build software: the one where you build the software you own the one where you build the software somebody else owns I think…
One late night of January 2013 , I had a little bout of anger. The culprit: these badges I was starting to notice all over the place on open source project README files. The idea behind the badges was great: provide useful metadata regarding how well tested the project is, whether those tests are passing or not, how well factored the codebase is, etc. Yet, most of these badges seemed were lazy…
I went to a private full-time university where you go to class at least 40 hours a week and generally spend between 60 and 70 hours a week working on learning things. In late 2009 a few months after I had started school, my classmate and friend Zachary Nicoll and I co-founded our first little company. Although we were still both in school, by the summer of 2010 we had worked on three professional…
The Use Case Earlier I was writing a test to ensure that a Hash contains a specific key and value. 1 2 3 it "sets the anonymous key to true" do expect ( properties ). to include { a: true } end It then dawned on me that this kind of comparison, while possible in the RSpec DSL with its built-in matchers 1 was actually impossible in raw Ruby. Take a Hash: 1 x = { a: true , b: false } Now take…
Sublime Text 3 ships with a CLI called subl . By default you can’t use this command line utility unless you do some fiddling. A word about the load $PATH The Sublime Text documentation on this tool does explain where it’s located ( /Applications/Sublime Text.app/Contents/SharedSupport/bin/subl ) but it assumes you have ~/bin (or /Users/username/ ) in your load path ( $PATH ) which is downright…
Update : It has been over 8 years since I wrote this post and since then Jacob Applebaum has been credibly accused by several people in cryptography circles of multiple instance of sexual abuse and deeply troubling manipulation, threats, and blackmail. I still think the subject of this post deserves attention which is why I’m not pulling it down, but I’d like to highlight how disappointing it is…
If you have no patience or aren’t interested in my debugging process, skip to the last section. On September 3rd, 2013 GitHub announced a long awaited implementation of two-factor authentication on github.com. Of course I immediately turned that feature on, and you should too. Authentication failed After setting up 2FA on GitHub, I moved on and forget about it. I imagined that my week would go on…
As I sat here tweaking some HTML & CSS on my About page to use a swanky <figure> element that I learned how to properly use from the great Drew Barontini , I realized it was silly that I had to manually refresh my browser every time. I’m using jekyll serve --watch to automatically update the page in the background when any file is updated so I don’t have to shut down jekyll server and restart it…
It’s enraging that at the time in my life when I truly need to write, somehow I worry if I’m still able to. It’s not really about attempting to write and failing, it’s the perpetual problem of finding every possible distraction to keep me away from the keyboard so I can’t discover that — in fact — I have nothing to say. I know I have things to say. I know some of them are relevant to a great many…
With some very minor modifications, below is a reproduction of a Basecamp message I sent to my co-workers this afternoon. Hello everyone, I’ve been putting off writing this because I like to think of myself as feisty and I didn’t really want to admit defeat. I’ve been working in the US for the last 2 and half years under a non-renewable work visa that is set to expire on December 15th, 2013. The…
In the Rails world, it seems to be a truth universally acknowledged that convention over configuration is a great philosophy. “I think empty folders and empty files are two of the pivotal innovations in Rails that have encouraged us to write clean applications since the framework appeared.” — David Heinemeier Hansson during his Keynote at RailsConf 2011 Empty files and folders, isn’t that just…