Tool Sharpening: Sept. 15, 2014
Monday, 15 September, 2014 — development improvement
For some background on what’s going on here, see the first tool sharpening post
For this and following editions of my tool sharpening series, I’ve set-up five different sections below. I’ll explain them briefly:
- Environment + Process tweaks will be for anything like my tweaks to BBEdit, vim, tmux profiles, helper scripts and similar changes
- Project work will cover personal project work I do, since my primary motivation for that work is to learn
- Skill improvements
- Work with code kata, koans, exercism.io or similar
- Typing practice
- Other deliberate skill practice work
- Articles read will be for links of interest I come across from Twitter or mailing lists
- Screencasts, podcasts and presentations will enumerate audio and video media that I’ve reviewed. Expect this to be Ruby Rogues and Ruby Tapas heavy.
Environment + Process tweaks
I have a Getting Things Done-style Weekly Review that just hasn’t been working for me for a little while. Many weeks, I simply look at the weekly review in OmniFocus and mark it complete. It’s important to me, abstractly. But the way I’ve structured it clearly isn’t important to me in the concrete terms of actually doing it.
To that end, I’m hoping to move some of the big scary bits out of the Weekly Review and into a work day Daily Review I have been far more consistent with. Those pieces are to:
- Process email from the last 48 hours for further action or file it
- Review anything I added to OmniFocus in the last day
- I have a perspective set-up for just this purpose
- Review anything I added to the OmniFocus Inbox so it has a context, a project and a next action
Project work
I’ve been stuck recently on my Pomodori gem project. Namely, I was getting to the point where I felt like I was working too hard to make the command line interface work with Behavior Driven Development. So, I idled on the project for a few months.
Thankfully, the work project I’ve been working on has helped me identify where I could close some of the gaps between what I want to do and how to do it intelligently, so I’ve started back on that project, hoping to get the first version wrapped up before too much longer.
- Worked on Issue 28 of my in-progress Pomodori gem
- Put Issue 28 on hold and began work on Issue 30. Once Issue 30 is done, I can come back to Issue 28.
- After review, opened up a new milestone and several smaller issues and closed Issue 30
Skill improvements
Avoiding module and class namespace collisions
So, the most interesting thing I learned this past week was about the purpose and use of the ::
ahead of a namespace in Ruby. At work, my team and I are working on a automation our release preparation, which covers everything from triggering software packaging to building tasks and sending notification emails. For an audit trail piece, we want to log several of the steps to our team chat. And, instead of writing everything to target a third party object directly, I wanted to wrap it in an object that was part of our application’s domain.
So far, so good.
However, I soon saw an unexpected error, along the lines of ReleaseAutomation::Flowdock::Flow not defined
when what I was trying to do was instantiate Flowdock::Flow
within ReleaseAutomation::Flowdock
. It took a little bit to find the right search terms, but I found a Ruby Best Practices post covering modules and namespaces. In that post, I found I needed to invoke Flowdock::Flow
as ::Flowdock::Flow
to tell Ruby to go to the top of the namespace tree vs. trying to match Flowdock as an abbreviated namespace in my project domain.
Articles read
- Read DevOps Weekly No. 193
Screencasts, podcasts and presentations
- Attended Jason Draper’s presentation on Ember.js at Triangle.rb
- Listened to Giant Robots Smashing Into Other Giant Robots Ep. 114: “Offer Value First”
- Listened to Giant Robots Smashing Into Other Giant Robots Ep. 115: “There’s a Spectrum Involved Here”
- Listened to Ruby Rogues Ep. 172 on Extreme Deployment
- Listened to Back to Work Ep. 185, “David Foster Wallace Morning”
- Discussion between hosts Dan Benjamin and Merlin Mann on effective email practices led me to making the project work adjustments on my Daily Review as noted above
- Watched Ruby Tapas Ep. 010: “Finding $HOME”
- Watched Ruby Tapas Ep. 011: “Method and Message”
- Watched Ruby Tapas Ep. 012: “
#fetch
for Defaults”- There’s more on this technique in Avdi Grimm’s Confident Ruby and I absolutely love the technique as it saves me a lot of otherwise defensive programming
Looking back, I’m pretty happy with what I was able to learn this week.