Private Ruby Gem Versioning

TLDR Don’t use version specifiers when referencing gems from git in your Gemfile. Use tags or refs instead. Most of the time when declaring our Ruby projects’ dependencies via a Gemfile, we pull our gems from a source like RubyGems.org: source 'https://rubygems.org' gem 'rails', '4.1.0' In this case you nearly always want to specify a version number for each gem to keep bundle update sane and safe. But when you have your own branch of a public gem, or an internal project that can’t live on the public web, the typical solution is to pull it from git via a :git or :github specification:

Automatically Installing Your Emacs Packages

The interactive list-packages command in modern Emacsen is handy for finding and trying out new packages, but once we’ve found packages we want to use, how can we have them automatically installed on all machines where we use Emacs? There’s a decent Stack Overflow question on the topic, but I want to dig into the various answers a bit and provide a slightly cleaner (IMHO) code snippet. First let’s define that list of packages we want installed by adding a defvar form to our .

Switching to MELPA Stable: Why, How, What I Learned

Background

Writing my first Emacs package a couple months ago left me more cognizant of how Emacs’ packaging system is put together and raised questions about how I use its capabilities. I had been installing all of my packages from MELPA, but now, as a fancy-schmancy package author I’d become intensely aware that MELPA builds its packages based on the latest commit in a project’s repository1. Suddenly I’d become paranoid about exactly what I pushed to the master branch of my project and worried about leaving things in a broken state.

Generally speaking, I keep the master branch on my projects in a functional state, and–yes–I could adopt a development methodology whereby work is always done on a development or feature branch and QA’d before being merged into master. But even if I have the inclination and discipline to manage my projects this way, all of my other Emacs packages are getting built from whatever happened to be pushed to master in their own project when the MELPA bot decided to make the rounds. I’ve run my fair share of beta software, but I don’t need every commit as it happens (cutting vs. bleeding edge).

As it turns out, there’s a new kid on the block–MELPA Stable–and she’s come to solve this exact problem.

Goal Refactoring Insights

In IOI#1 I mentioned “goal factoring”. In a nut, the idea is to apply a consistent, rational process to the goals you’re thinking of setting for yourself to ensure they’re appropriately sized, likely to succeed, and the best path to the underlying thing that you want to accomplish.

I’m currently working on my own goal definition / factoring process, but I wanted to offer a tip of the hat towards these two templates which I’ve repeatedly pored over:

Résistez à la Résistance

I awoke this morning to a text message from an old friend with a rather sharp tongue:

Lol. You’ve gotta stop it with these Facebook posts.

I knew exactly what it meant. It stung a bit because it was precisely what I worry about: I have a tenuous relationship with Facebook because there’s a disconnect between the people I know & consider (Internet) friends, and the interests I have. I vacillate between thinking I should post content I’m interested in (and let the audience self-select) and thinking that I should tailor my posts to my audience.

Items of Interest #2

A round-up of interesting links from my recent internet travels.

Emacs Hangouts

Two weeks ago I had the pleasure of participating in an Emacs-themed Google Hangout arranged by Sacha Chua, in which several of us Emacs geeks got together and discussed what we’ve been working on, questions we have about particular packages or workflows, etc.:

μProject: checkbox.el

I’ve been playing with Emacs in the evenings lately and writing a lot of Elisp, and I just finished a little Emacs package for quickly manipulating textual checkboxes ([ ] / [x], etc.) in buffers, like a simple version of org-mode’s task manipulation, but available everywhere. It’s called checkbox.el.

Solving Problems Rationally a.k.a. Optimizing Dick Van Dyke with Fluid Dynamics

From 2006 to 2009 I worked for a company called Tektronix on the 9th floor of a curvilinear glass-and-concrete tower in Richardson, Texas. My division built network monitoring solutions for Fortune 100 companies like AT&T “that enable[d] network operators to more strategically and profitably operate their businesses”—which sounds like fairly memorable work, but more than anything, I remember the door.

I’d park my car in the underground parking garage and climb the two flights of concrete steps towards the ground floor lobby. And waiting for me daily at the top of the stairs was one of the most poignant lessons in design that I’ve ever received. It was a plain door, hinged outward, with a metal push plate. And six inches above the plate, the paint was worn off the door from years of pushing.

Hold for consideration.

μProject: resque-backtrace

I was trying to debug a Resque job recently and I was actually quite surprised to find that it didn’t print backtraces on exceptions. Now, in production you’re definitely going to using an exception tracker like Honeybadger or AirBrake, but you probably won’t be doing so in development, so there’s nowhere at all to view backtraces when things go wrong. I threw together a tiny gem to dump them to the console like you’d expect: resque-backtrace.