ThatConference 2017 – Day 1

It’s another year at That Conference! I’m excited to be back again this year though I am bummed to not be speaking. Here is a run down of my reflections on the first day.

Forget Fight or Flight…Fight Fear

This morning’s keynote was put on by a good friend and mentor of mine, Brian Hogan. His talk was a call to action for us as an industry to work together to reduce fear. Brian and I have had many conversations in the past on a similar topic. Every time I chat with him I am energized and ready to go to battle. As I struggled with fear and doubt over the past couple months in my job search, this talk really hit home. It even fed a little into the open space I facilitated. One of the main take aways I got from Brian is that fear is real and it is crippling. It’s not something to take lightly and brush off your shoulder. It’s something that can impact your physical and mental health.

To beat fear we need to all work together and recognize when someone may be struggling with a fear. Look at your co-worker during a meeting, are they sitting quietly when a topic comes up that you know they are passionate about? They may have a fear of speaking up because they fear that if they make the wrong comment or pick the wrong solution they could lose their job. Run with that thought, now what if they are the sole breadwinner for the family and provide the health care. Add to that a really bad situation like their partner or child is chronically ill. That fear of losing a job could make the company miss out on a great opportunity.

When we notice situations like this we should work to make the environment safe and collaborative.

Route-planning your monitoring stack climb

After the inspiring talk by Brian, I headed over to hear Jamie Riedesel talk about planning out monitoring initiatives. Jamie did a wonderful job breaking down all the thoughts and questions that should go into monitoring.

I took away 3 major points to use as some goals in my next monitoring and alerting project:

  • Make every alert actionable
  • Make every alert specific
  • Don’t allow alerts to be ignored, not having actionable and specific alerts will do this.

In the past, I have been guilty of creating “alerting spam”. I’ve created alerts with the intention of “cleaning them up later”, you can guess the number of times I’ve cleaned them up.

Having a good plan and making sure that these 3 points are accounted for will go along way to creating successful alerts.

Intro to Docker

I dropped into this talk towards the end and was glad that is when I did show up. The main meat of the talk was something I have already experienced. The portion of the talk description that caught my attention was deploying it to Azure and AWS. I was really impressed with the DockerHub and Azure integration.

Open Space: Developer Interview Process

After having spent 2 months looking for my next adventure I wanted to share what I had just been through and also talk about how to make interviews for developers much more consistent. A side benefit was to gain some information to share with my students who are heading out into the workforce.

The conversation was really interesting in that there were a few folks that were hiring managers. Their perspective came from working at large companies where the resumes they got passed through HR screeners and it was a major frustration. Often the thought that they lost out on potential candidates and also got the wrong candidates through this process.

We talked about how to evaluate someone’s technical skill level and fit for a specific job fairly and really struggled to come up with anything different than the broken pattern of a take home exercise.

Overall the first day was fun and exciting. I didn’t even finish this article before crashing into bed.  More to come from day 2!

One week in

Well after 2 months of interviewing and applications submitting I landed a new gig! I was able to join the team at healthfinch as the Operations Manager. The opportunity gives me the chance to work with some talented folks on a platform aimed to increase the quality of care and reduce the number of busy work tasks doctors and nurses have to complete on a daily basis.


Looking for the next career challenge

I never thought I would be publicly on the look for a new gig, but here I am. I went on a rollercoaster ride the last few months and have exited the ride and am in search of a new thrill.

As I have progressed in my career I feel ever more confident in the set of skills I have acquired and my ability to use them. Reflecting on my accomplishments over the past few years I am inspired to continue to add to that list. Those accomplishments all have come through hard work and collaboration. I love collaborating in some capacity, everything from being in a room or video call with someone to pair programming to a discussion over pull requests.

I’ve reflected also on how much I have learned over the years and this also inspires me to keep growing as a person, developer, and manager. I care about helping mold quality people and quality software. I find the best way to do this is with constant feedback and education. I love being a part-time instructor at the local community college, there is a feeling of accomplishment I get vicariously through my students as they achieve success.

My time in the classroom impacts my daily work in so many ways. One of the biggest lessons I have learned is how to communicate to someone your idea in a way that is empathetic and compassionate. Much like the co-workers I have had or employees I have managed, students come to me with different experiences. These are both life and education experiences, some know object-oriented programming others don’t. Some have used an operating system other than Windows, some not. The list can continue on. This poses a challenge when giving assignments and even during lecture and lab times. Through practice and constant feedback from students and employees, I have developed a communication platform that consists primarily of storytelling and analogies.

Storytelling allows me to frame the content in a way that is best fitted for the individual, in order to do that I need to have a good understanding of the person that I am communicating with. Building a relationship to a level that allows me to communicate effectively has the side effect of building trust with the person. This trust increases their comfort in speaking up when they don’t understand something, knowing I will find another way to communicate with them.

As I move forward in my career I am looking for a place that will allow me to use all my skills and acquire new ones. I’m open to opportunities that push me out of my comfort zone and give me more perspectives to attack problems with. I have really enjoyed my time with Ruby on Rails and specifically the Ruby language. I see new things on the horizon like ELM and WebAssembly along with tools like React Native which is gaining traction and I’m excited about something new.

If you are looking for someone like me, please contact me chris at You’ll find my resume related information on LinkedIn and code related information on Github. My course materials are out on my course Github organization including class samples and lectures.

Twin Cities Code Camp 19 – Recap

Hey all,

This past weekend I made the 5 hour drive up to Minneapolis, MN for the 19th edition of Twin Cities Code camp.  I had the opportunity to speak there with a long time friend.  We demonstrated how to build an app using the Phoenix web framework and then adding Angular on top of it. We did a screencast style recording of the presentation which is linked below.

I also went to a couple sessions while I was there, one on developing apps for the Apple TV and another on managing technical debt.

The Apple TV session was interesting as it was the first time I had heard about TVMLKit from Apple.  The TL;DR is you can now write Apple TV apps using remotely hosted JavaScript.

The session on managing technical debt was interesting in that I heard a large amount of horror stories that made me really appreciate working at Getty along with specifically all the things we have done in the Madison office to continue to work on paying our technical debt off.

Then I got to enjoy this tasty beverage at the speaker dinner:


Monitoring disk space in linux

Recently I ran into a situation where I need to monitor disk space on a couple servers while a code fix was being made. I needed to stop and start services when the disks got too full.

To do this I used a bash one liner loop to output information from the df command:

while :; do df; sleep 10; done

Sleeping for 10 seconds as to not thrash the disk horribly bad.

The disk free command gives you output similar to the following:

Filesystem 1K-blocks Used Available Use% Mounted on
/dev/xvda1 8256952 4582112 3255412 59% /
udev 3806520 8 3806512 1% /dev
tmpfs 762928 180 762748 1% /run
none 5120 0 5120 0% /run/lock
none 3814624 0 3814624 0% /run/shm
/dev/xvdc 41276736 180236 38999760 1% /mnt

And thats it, you get to loop over the command you want until you hit ctrl-c to exit the loop.

Fixing mass amounts of merge conflicts with Git

At work I use VCR to capture output to make cucumber test runs faster.  One problem is that these cassettes expire and cause merge conflicts.  I recently found a solution to clean those up with grep and git.  Let’s look at the command below:

$ grep -lr '<<<<<<<' . | xargs git checkout --ours

Here we see using grep to search in files for  ‘<<<<<<<‘ and then use git checkout –ours to use our version of the conflict. We could also use –theirs if we wanted to use their version of the commit.

Find and replace in directory with grep and sed

Recently I needed to find an replace a method name in a project as part of a re-organization. So rather than just using an editor to do it for me I figured I would spend some time with a small science project on the command line.

What I was able to come up with is a combination of using grep to find all the files that had the method name in them and pipe that list to set to do the global substitution.

grep -lr -e 'bad_method_name' * | xargs -n1 sed -i '' 's/bad_method_name/new_method_name/g'

As you we see in the code above we have our command starting with grep, looking for ‘bad_method_name’ in * and are piping that to sed.  With sed the only issue I had was with the -i flag.  At first I didn’t specify anything for that flag and had errors in OS X about a malformed sed command.  Passing a blank string to it fixed that.

Remote Pairing: SOCKS Proxy

I’m a big fan of remote pair programming. The problem I often run into is the need to share a web browser. In the past I have always jumped strait to a screen sharing tool like or TeamViewer. The problem here is these technologies tend to use quite a bit of bandwidth.

The solution recently I have found is to use a SOCKS proxy to the hosting machine.

The proxy allows us to tunnel our traffic through that person’s machine and therefore allowing you to access things local to them like a VM which may not be publicly accessible.

This solution also has the added benefit of the remote pair not needing to do anything but have an ssh server running.

To start a tunnel we’ll need to use the following command but with some substitutions:

$ ssh -p pairing_server_ssh_port -N -D 9999 ssh_user@pairing_server

Let’s explore this ssh connection string!

First the -p flag followed by the port your pair is running their SSH server on. This flag is optional if your pair is using the standard port 22.

Next we include the -N flag which which tells ssh client to not execute remotely which keeps the process running in our shell allowing us to close the tunnel with a ‘Control+c’.

After that another flag is the -D which actually is the SOCKS proxy flag. This flag takes a port number as an argument. This port number needs to be open on your machine. It is the port that your browser will connect to to tunnel traffic to your pair’s machine.

Then we’ll need to finish filling out the username and server information.

Once you have the command filled out hit enter to start the tunnel running.

After our tunnel is running we just need to configure our browser to use the SOCKS proxy.

The easiest browser to setup for a SOCKS proxy is Firefox so we’ll need that installed on our machine.

Next we’ll need to open Firefox preferences and navigate to the ‘Advanced’ section (1). Once there we’ll want to go to the ‘Network’ preferences (2) and choose the ‘Connection’ settings (3).

Now we’ll specify the Manual proxy and host for the SOCKS server as seen below:

After clicking OK and closing all the preference windows you’ll be able to use Firefox to browse the web through your pair’s internet connection. Like always when remote pairing, etiquette is key and make sure you are using this browser for activities that you need to and not for internet searching, email, etc. All of your traffic for this browser will be going over this tunnel and through your pair’s machine.

Using this tool in-conjunction with Joe Kutner’s Remote Pairing: Collaborative Tools for Distributed Development tmux pairing setup will give you a very low bandwidth solution to web development remote pairing.

Tunneling iTunes through SSH

I was looking for a way to listen to my Christmas playlist running on my Mac Mini at home while at work. Through a little bit of searching I found this post ‘Tunneling iTunes through SSH‘.

I took it a bit further and added the following to my ~/.ssh/config

Host itunes-home
  LocalForward 3690 localhost:3689

This allows me to start up my tunnel with a simple

$ ssh itunes-home

and then run the command in the ‘Tunneling iTunes through SSH

dns-sd -P iTunesServer _daap._tcp local 3690 localhost.local &amp;

and then I see iTunes server in my shared libraries list.

2013-12-11 at 8.35 AM











Now I can listen to my Christmas music at work without having to copy it to my laptop!