walls.corpus

By Nathan L. Walls

Articles tagged “development”

Tool Sharpening: Nov. 9, 2014

For some background on what’s going on here, see the first tool sharpening post

This week, there’s not a lot with regard to more than podcasts or articles read. On one hand, I’m not happy in hindsight with not having written much code. But, I have to balance that against the fact that I did more reading and, honestly, that’s what the week felt like.

Environment + Process tweaks

  • Added a few GMail filters for mailing lists to help improve inbox sanity

Project work

Somehow, the week was busier than expected and somehow, not code-focused, so the pieces I wanted to get to, I didn’t. I don’t like that outcome.

Skill improvements

Nothing particularly of note here, this week.

Articles read

Alright, here’s where most of my post-work tool-sharpening time went. There were several interesting pieces.

  • “The Road to Ember 2.0” by Tom Dale
    • A polite, but audible, shot across the bow of Angular JS and the notion of having to rewrite apps to keep up with framework changes as being an acceptable course of action
  • “AngularJS: The Bad Parts”, by Lars Eidnes, who throws down early against AngularJS

    • Quote:

    Popularity wise, Angular is beating the shit out of the other frameworks. I spent most of last year working on a large project built on AngularJS, and I’ve gotten to know the framework in some depth. Through this work I have learned that Angular is built around some really bad ideas that make it a pain to work with, and that we need to come up with something better. Whatever the reason is for Angulars popularity, it isn’t that it’s a great framework. - The polemic against Angular is good. Stick around for the conclusion, too.

  • “Rebuilding the Shopify Admin: Improving Developer Productivity by Deleting 28,000 lines of JavaScript”

    • A possible outrider indicating a move away from thick front-end web applications back to server-side focused applications

Altogether, these first three pieces point to a trend I won’t pretend is anyway new – this is where the women and men programming in the 70s and 80s shake their heads and mutter, “kids” – but one that I’ve noticed over the last couple of years is that as an industry, we are so eager to think of something new and shiny as a self-evidently worth replacement for whatever came before it. We pick frameworks or languages because of where everyone else is going, but not stopping to look at what’s there before ditching something we know.

There’s a lot more nuance and complexity to this than I can think through and write right now, but I liked these three pieces because each of them, to a degree calls out practices I’ve seen recently that have left a bad taste in my mouth.

Screencasts, podcasts and presentations

  • Listened to Giant Robots Smashing Into Other Giant Robots Ep. 119: “Create Value or Create Technology? (Pete Hunt)”
  • Listened to Back to Work Ep. 192: “Party City Trophies”
    • Dan and Merlin have a great episode about finding how to motivate their kids without backstopping their parenting with fear. Powerful and personal
  • Listened to Is TDD Dead?: Ep. 2: “Test-induced design damage”
    • David Heinemeier Hansson expands on why he thinks TDD leads to damaged repository. I thought Kent Beck did quite well in pointing out that TDD doesn’t make you do anything. My opinion is closer to Beck’s so far and I am very much enjoying hear him express a depth to his point of view that is worth listening to, whether or not you agree with him

Tool Sharpening: Nov. 1, 2014

For some background on what’s going on here, see the first tool sharpening post

Environment + Process tweaks

  • Upgraded to BBEdit 11, which was released Oct. 22
  • Improved my tmuxinator profile for my Pomodori project and created one for my Dayplan project (see below)
  • Updated MsgFiler to work with OS X Yosemite
  • Updated OmniFocus Clip-O-Tron to work with OS X Yosemite

Project work

  • I started to update my Dayplan script to improve how the files for previous days archive and decided that I wanted to get it under testing, so I’ve started a Gem project around it

Skill improvements

  • I went through two Ruby lessons on typing.io
    • The first lesson gave me 46 words per minute with an unproductive keystroke overhead of four percent
    • The second lesson gave me 34 words per minute and 10 percent unproductive keystroke overhead
      • This one was pretty humbling with far more curly braces, which my fingers don’t naturally know how to find
      • I’m also realizing as I type that I really move my right hand around far more than I should to type far keys with my index and middle finger when I should be using my ring finger. My right pinky largely goes unused. For command keys, on either side, I favor my index and middle fingers vs. my ring or pinky fingers
  • Reviewed the BBEdit 11 release notes and a related TidBits article on changes to BBEdit 11 in order to pick up some of the new built-in editing functionality
  • Learned that I can rename files in a more efficient fashion. Instead of typing:

    1
    
        mv foo-long-file-name.md bar-long-file-name.md
    

    I can instead type:

    1
    
        mv {foo,bar}-long-file-name.md
    

    That’s much nicer. This also works with git mv

Articles read

Screencasts, podcasts and presentations

  • Listened to Accidental Tech Podcast Ep. 86: “Moving the Party to the Bar Down the Block”
  • Listened to Accidental Tech Podcast Ep. 87: “Not an Accurate Representation of my Mousing Skills”
  • Listened to Ruby Rogues Ep. 178: “Refactoring Ruby with Martin Fowler”
    • There is a ton of great insight in this episode. Lots of great questions and discussion top-to-bottom I’m going to be giving this a relisten very, very soon.
  • Listened to Planet Money Ep. 576: “When Women Stopped Coding”
    • A worthwhile 17 minute 12 second trip into part of why the 1980s saw a significant dip in the number of women pursuing a computer science degree
  • Listened to Is TDD Dead? Ep. 1: “TDD and Confidence”
    • I let this sit for a while to get some distance from feeling immediately negative towards David Heinemeier Hansson’s bomb-throwing assertions that TDD is harmful in a series of blog posts and his RailsConf 2014 keynote and just came back to it after hearing Fowler on Ruby Rogues
    • The entire series of five conversations between Martin Fowler, Kent Beck and David Heinemeier Hansson is available in audio or video and, at least in the first episode, offers good examples and nuance, particularly in unpacking the term “test driven development”. I’m looking forward to the remaining four episodes
  • Listened to Giant Robots Smashing Into Other Giant Robots Ep. 118: “Scare Yourself” with Dan Martell
    • In the interview, Martell used an interesting turn of phrase that I’m still turning over in my head; “compassionate detachment”

Tool Sharpening: Oct. 21, 2014

For some background on what’s going on here, see the first tool sharpening post

Environment + Process tweaks

  • Updated TextExpander shortcuts for phrases I typically drop into work chat windows
  • Added a number of TextExpander shortcuts for creating future Tool Sharpening posts, largely around standardizing snippets for podcasts for consistency
  • Upgraded my Mac to Yosemite (Mac OS X 10.10)
  • Upgraded home projects to Ruby 2.1.3

Project work

I made a little bit of head way with Issue #32 of my Pomodori project. Being honest, I’m not putting the kind of time or attention to this that I would like.

Skill improvements

Bash

This past week, I was preparing a software release. While we have a good deal of automation around this sort of work, there are some cases where the progression to release gets into a condition we haven’t automated for yet. In one of these cases, I needed to remove git tags we placed on the repositories for the release and further steps in our automated process.

Before, I’d likely just suffer through doing this three or four times, because it’s just at the edge of being worth writing a script. However, my coworker Steve Gambino reminded me that Bash is perfectly capable of solving this issue. It’s also a tool I could stand to get more familiar with for situations such as this.

1
for i in $( ls -1 ); do cd $i; git tag -d R36.0.2-20141016; git push origin :refs/tags/R36.0.2-20141016; cd ..; done

I ended up using variations on this for loop multiple times and I didn’t have any of the dollar auction costs of, “well, this will be the last time I do this, so it’s not worth writing a script.”

tmux

This past week, I had couple of tmux panes that I wanted to capture the buffer for and paste into BBEdit for separate examination. Rather than tediously scroll and copy and scroll and copy, I searched for a better way. As it happens, thoughtbot developer Chris Toomey had some additions to .tmux.conf that are very helpful for this sort of situation. Perfect.

Screencasts, podcasts and presentations

Tool Sharpening: Oct. 11, 2014

For some background on what’s going on here, see the first tool sharpening post

So, it’s been a little while since my previous entry. I’d like to thank a 10-day out-of-state and substantially offline vacation for that. I have been posting photographs from the vacation, over on Flickr.

Anyhow, before I left, during and after vacation, I have been able to do some technical self-improvement.

Environment + Process tweaks

  • Added two more smart folders in Mail.app
    • One shows me all mail that I don’t have filters for that’s new within the last 48 hours
    • The other shows me items still in my inbox that are older than two weeks, which I want to serve as a sort of “drop dead” period. If I’m not getting to it by that point, I’m not likely to get to it at all. Archive and move on.
  • Improved my incoming email filtering so fewer automated messages hit my inbox

Project work

There’s been little progress on account of the vacation work, however, I did start on implementing the service object for adding a pomodoro in my Pomodori project.

Skill improvements

  • Learned about Control-R to search through previous commands. I’d been using history | grep <cmd> for years, like a chump
    • This works, but Control-R is more efficient a lot of the time for

Articles read

These next two pieces are vitally important not because they relate to the technical craft of our industry, but the rather awful state our collective social craft is in within this industry. While we’re great at technically building social spaces and connections online, we’re really crappy at understanding how those same tools can be severely abused and mitigating that abuse. These two pieces are two of the saddest and troubling I’ve read. I highly encourage you to read them and reflect on them.

Screencasts, podcasts and presentations

Tool Sharpening: Sept. 15, 2014

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

Screencasts, podcasts and presentations


Looking back, I’m pretty happy with what I was able to learn this week.