<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[SIGJE]]></title>
  <link href="http://iennae.github.io/atom.xml" rel="self"/>
  <link href="http://iennae.github.io/"/>
  <updated>2016-01-01T19:32:04-08:00</updated>
  <id>http://iennae.github.io/</id>
  <author>
    <name><![CDATA[Jennifer Davis]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[Using Test Kitchen to Create Sandboxes for Learning]]></title>
    <link href="http://iennae.github.io/blog/2016/01/01/using-test-kitchen-to-create-sandboxes-for-learning/"/>
    <updated>2016-01-01T18:26:51-08:00</updated>
    <id>http://iennae.github.io/blog/2016/01/01/using-test-kitchen-to-create-sandboxes-for-learning</id>
    <content type="html"><![CDATA[<p>Earlier in 2015, I heard about <a href="https://www.meteor.com/">Meteor a JavaScript App platform</a> when someone was describing their application stack. When I saw it available as an <a href="https://www.coursera.org/learn/meteor-development/home/welcome">introductionary course</a> on Coursera, I decided to take the class and build on my JavaScript, HTML, and CSS experience.</p>

<p>I&rsquo;m loathe to install development software directly onto my laptop when I&rsquo;m first learning about it. One, I don&rsquo;t know what I don&rsquo;t know, and being able to quickly destroy the environment helps me to clean up if there is any security issues. Two, if there are conflicts with software that I depend on in my day to day this could be a nightmare of creating extra yaks to shave just to get back to a working state.</p>

<p>I solve this by using <a href="http://kitchen.ci/">Test Kitchen</a> with <a href="https://www.chef.io/">Chef</a> and <a href="https://www.vagrantup.com/">Vagrant</a> (or AWS) to quickly spin up a system that I can use to complete the coursework and experiment without impacting my system (other than system resources like diskspace, memory, cpu when using Vagrant).</p>

<p>The following documents a little bit about how I do this. It&rsquo;s very much an iterative and incremental process that leaves me with something that I can repeat the course as needed. If used in combination with <a href="https://git-scm.com/">git</a>, I can quickly revert to a specific module within the class even.</p>

<h3>Pre-Requisites</h3>

<p>Install the <a href="https://downloads.chef.io/chef-dk/">Chef Development Kit</a>, which includes Test Kitchen.</p>

<h3>Setup the Base Cookbook</h3>

<p>First I setup a base cookbook that is essentially my class project cookbook. For the Meteor class, I called it <code>meteor-app</code> which is probably not the best name to use, but it works. If I were commiting my code back to GitHub to share, I&rsquo;d probably be a bunch more specific in the naming.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>
</span><span class='line'>$ kitchen create cookbook meteor-app
</span></code></pre></td></tr></table></div></figure>


<p>I edit the newly created <code>.kitchen.yml</code> and edit the platforms section, choosing a single platform. As this is for a class and testing for a specific application, I&rsquo;m not trying to test across all platforms. I chose to stick with Centos as that will work fine in this instance for this class and deleted the Ubuntu platform specification.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$ kitchen list</span></code></pre></td></tr></table></div></figure>


<p>The output of kitchen list at this point will show one instance that is Centos specific.</p>

<h3>Creation of Base Image</h3>

<p>Setting up the base image is quick with a <code>kitchen create</code>. If the base OS image (for this instance <a href="https://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-7.1_chef-provisionerless.box">https://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-7.1_chef-provisionerless.box</a>) isn&rsquo;t available on the system, this will be downloaded from the internet. In this case, I&rsquo;ve done this many times so it&rsquo;s already available to me and the setup is very quick. I could also modify this and specify exactly what image I want to use.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$ kitchen create</span></code></pre></td></tr></table></div></figure>


<p>Running kitchen create will set up an instance of Centos 7 for me based off of this image on my local laptop. If I wanted to use AWS, I would modify the driver name from <em>vagrant</em>.</p>

<h3>Installation of Chef</h3>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>kitchen converge
</span></code></pre></td></tr></table></div></figure>


<p>Converging my node with <code>kitchen converge</code> will install chef, and run the <em>default</em> recipe found in <code>meteor-app/recipes/default.rb</code> (which is currently empty).</p>

<h3>Logging In</h3>

<p>Next I&rsquo;ll log into the system and follow through the process required for the class.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>kitchen login
</span></code></pre></td></tr></table></div></figure>


<p>If I had more than one instance, I would need to specify a specific instance <code>kitchen login INSTANCE</code>. My instance is called <code>default-centos-71</code> so <code>kitchen login default-centos-71</code> would work.</p>

<p>By default I&rsquo;m logging in as the user <code>vagrant</code> when I do <code>kitchen login</code>.</p>

<p>Within the course, the first thing they ask is to setup a working directory. It doesn&rsquo;t matter as much since I&rsquo;ve created a separate development instance. I make the directory <code>mkdir dev</code>, and also update the <code>default.rb</code> recipe with a resource <a href="https://docs.chef.io/resource_directory.html"><code>directory</code></a>.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='ruby'><span class='line'><span class="n">directory</span> <span class="s2">&quot;/home/vagrant/dev/&quot;</span>
</span></code></pre></td></tr></table></div></figure>


<p>Now if I were to copy my <code>meteor-app</code> cookbook to a new system and run <code>kitchen converge</code> the system that booted up will have the <code>dev</code> directory created for me.</p>

<p>For each change that the class asks me to do, I can try it out, then set up my recipe to reflect what needs to be done. I can then commit the changes as I go through each module with documentation to a local git repository or even GitHub which would allow me to go back to that specific state in time of the environment as I want to. If I want to test out something that is different from what the instructor has asked, I can without worry of completely breaking my environment. This is especially important when I&rsquo;m working with something new that I don&rsquo;t have enough context about to understand how my changes impact the system.</p>

<p>The next step is to install the Meteor JavaScript App. This uses the curl bash syntax <code>curl https://install.meteor.com/ | sh</code>.</p>

<p>To translate into Chef for my recipe, I could try out the Community Cookbook <a href="https://supermarket.chef.io/cookbooks/meteor"><code>meteor</code></a>, <a href="https://github.com/huned/meteor-chef-cookbook"><code>meteor</code></a>, or I can just setup the minimum needed using the shell script that is available at <a href="https://install.meteor.com/"><code>https://install.meteor.com</code></a>. We could even store the specific version within the cookbook. If we browse the <a href="https://install.meteor.com/">script</a> we can examine exactly what it&rsquo;s doing and plan accordingly.</p>

<p>Next within the course, I created an app from the commandline on the virtual machine with <code>meteor create my_first_app</code>.</p>

<p><img src="http://www.jendavis.org/assets/01_01_5_56_32.png" alt="Starting up meteor"></p>

<p>This sets up 3 files:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'> my_first_app.css
</span><span class='line'> my_first_app.html
</span><span class='line'> my_first_app.js
</span></code></pre></td></tr></table></div></figure>


<p>Next, within the <code>my_first_app</code> directory I start up my system with <code>meteor</code>.</p>

<p>Once I install <code>meteor.js</code>, setup the app, and start up <code>meteor</code>, I realize that it is running on port 3000 by default. Since I&rsquo;m running this on a virtual machine, I can&rsquo;t just go directly to port 3000 from my web browser. I can fix this by updating the driver for vagrant to have a section on network to forward the local port on my system to the port on the virtual machine.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>driver:
</span><span class='line'>  name: vagrant
</span><span class='line'>  network:
</span><span class='line'>  - ["forwarded_port", {guest: 3000, host: 3000}]</span></code></pre></td></tr></table></div></figure>


<p>With this configuration, I can now browse to <code>localhost:3000</code>.</p>

<p><img src="http://www.jendavis.org/assets/01_01_5_57_27.png" alt="Browsing to the Virtual Machine localhost:3000"></p>

<p>Now I have a working environment that allows me to edit my local cookbook, converge my node, and see the output of my changes from my browser without breaking anything on my base system. I can keep iterating and changing as needed. As long as my cookbook reflects the changes that I need to replicate my environment, I can quickly get back to a working state as needed.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Open Source Community for Collaboration Skill Practice]]></title>
    <link href="http://iennae.github.io/blog/2015/12/23/open-source-community-for-collaboration-skill-practice/"/>
    <updated>2015-12-23T21:19:14-08:00</updated>
    <id>http://iennae.github.io/blog/2015/12/23/open-source-community-for-collaboration-skill-practice</id>
    <content type="html"><![CDATA[<p>Earlier in the month, I shared some feelings about <a href="http://sysadvent.blogspot.com/2015/12/day-2-examining-tools-with-devops-lens.html">examining tools with the devops lens</a>. In this article, let&rsquo;s dig into more of the technical aspects of working with some of these tools that enable automation and give us increased understanding, transparency, and collaboration.</p>

<p>One of the best things about open source communities is practicing collaboration. One of the worst things is the how to successfully work with each project can be implicit.</p>

<p>In this example, I&rsquo;ll illustrate collaboration with tools using the <a href="https://github.com/chef-cookbooks/users">Chef community cookbook <code>users</code></a> open source project. The goal of the <code>users</code> cookbook is to distill the complexities of what is required when adding a user to a system on various platforms into an easy to use resource. This is challenging due to the differences per platform. It’s unlikely that a single person would know everything that is required for every single platform. I&rsquo;m using the <code>users</code> cookbook as an example as even if someone doesn&rsquo;t know about the intricacies of using Chef, they can understand the intent of the cookbook, and if desired they can still contribute whether through providing additional context or correcting assumptions about existing platforms.</p>

<p>In community cookbooks managed by Chef, a <code>CONTRIBUTING.md</code> doc refers to a centralized <a href="https://github.com/chef-cookbooks/community_cookbook_documentation/blob/master/CONTRIBUTING.MD">CONTRIBUTING.md doc</a>. Including a CONTRIBUTING doc (or a reference to contributing within the README.md) is a recommended practice for open source projects. GitHub will include a banner linking to this doc to potential contributors if it exists.  This allows you to describe up-front the ways in which you would best like to interact with contributions, and the types of contributions that you would and would not like to recieve. For instance, if your project is written in Python, but you don&rsquo;t care for PEP-8, you could state there that a contribution of applying PEP-8 conventions would be unwelcome.</p>

<p>Often these contributing documents sketch out only the minimum processes to get started but there are many workflows and branching strategies that individuals use to collaborate and resolve the conflicts that arise with different perspectives and approaches.</p>

<p>Many learning git tutorials give experience with solo git, but leave out the complexities of collaborative tool use. One can read up on the intricacies of git usage, but without a way to practice, understanding git workflows can be difficult.</p>

<h2>Git Configuration Files</h2>

<p>One way to learn about some of the hidden secrets of git is to examine dotfiles available on GitHub. If something doesn&rsquo;t make sense review the <a href="https://git-scm.com/docs/git-log">git documentation</a>. Let&rsquo;s take a look at a modified example alias from <a href="https://github.com/fnichol/dotfiles/blob/master/home/.gitconfig">Fletcher Nichol&rsquo;s dotfile</a>.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>graph = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset %C(cyan)(%an)%Creset' --date=relative</span></code></pre></td></tr></table></div></figure>


<p>The <code>--graph</code> option creates a text based graphical representation of the commit history.</p>

<p>With the <code>--pretty</code> flag, you can specify a formating string.</p>

<p>The format string allows us to focus on what we want to see when looking at the history of commits. In this alias, the symbols translate to showing us the following information in the specific colors.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>%h: abbreviated commit hash
</span><span class='line'>%d: ref names
</span><span class='line'>%s: subject
</span><span class='line'>%cr: committer date, relative
</span><span class='line'>%an: author name</span></code></pre></td></tr></table></div></figure>


<p>Finally <code>--date=relative</code> shows dates relative to the current time, e.g. “2 hours ago”.</p>

<p>When using <code>git graph</code> with this alias, it gives you output like the following:</p>

<p><img src="http://www.jendavis.org/assets/git_graph_example.png" alt="Example of git graph in action."></p>

<p>This makes it easy to see recent commits. If there is a commit of interest, this view makes it really easy to just do <code>git show</code> of the object you want to inspect.</p>

<p>Examining past commits helps us understand how the code is structured on a project, as well as some of the design patterns that project uses for git workflows.</p>

<h2>Issues and Pull Requests</h2>

<p>Looking at open <a href="https://github.com/chef-cookbooks/users/issues">issues</a> and <a href="https://github.com/chef-cookbooks/users/pulls">pull requests</a> (&ldquo;PR&rdquo;) we can obtain additional information about the project and get an idea of the needs of consumers.</p>

<p><a href="https://docs.travis-ci.com/user/for-beginners">Travis</a> is a hosted, distributed and continuous integration service used to build and test projects. <a href="https://travis-ci.org/">Travis integration</a> is free for open source projects. This provides one mechanism for testing pull requests prior to integration to give some level of confidence about risk. The <a href="https://github.com/chef-cookbooks/users/blob/master/.travis.yml">.travis.yml</a> file defines the configuration.</p>

<p>We can look at a sample pull request (PR), <a href="https://github.com/chef-cookbooks/users/pull/117">Pull Request 117</a> from <a href="https://github.com/funzoneq">Arnoud Vermeer</a>. The GitHub GUI will link to a <a href="https://travis-ci.org/chef-cookbooks/users/builds/85706180">build</a>. We can see that <a href="https://github.com/chef-cookbooks/users/pull/117">Pull Request 117</a> has a failure with the <code>rubocop</code> check.</p>

<p><img src="http://www.jendavis.org/assets/example_pr117_failure.png" alt="Pull Request 117 rubocop failure."></p>

<p>When we look at a PR we may find that there are changes we want to accept and changes that we don&rsquo;t want to accept. We can cherry pick explicitly what we want to accept with the <code>cherry-pick</code> command with git, or we can adopt different work flows that have a similar effect.</p>

<h3>Examining a Pull Request - Example 1</h3>

<p>To facilitate working with <a href="https://github.com/chef-cookbooks/users/pull/117">Pull Request 117</a>, let&rsquo;s incorporate another helpful git <a href="https://github.com/fnichol/dotfiles/blob/master/home/.gitconfig">alias</a>, <code>git pr</code>:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>pr = "!_git_pr() { git fetch origin pull/$1/head:pr-$1 && git checkout pr-$1; }; _git_pr"</span></code></pre></td></tr></table></div></figure>


<p>This allows us to quickly pull down and examine someone&rsquo;s contributions from a PR. In this case, I want to pull down PR 117 in the <code>users</code> cookbook and examine it.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>➜  users git:(master) git pr 117
</span><span class='line'>remote: Counting objects: 8, done.
</span><span class='line'>remote: Total 8 (delta 4), reused 4 (delta 4), pack-reused 4
</span><span class='line'>Unpacking objects: 100% (8/8), done.
</span><span class='line'>From github.com:chef-cookbooks/users
</span><span class='line'> * [new ref]         refs/pull/117/head -&gt; pr-117
</span><span class='line'>Switched to branch 'pr-117'</span></code></pre></td></tr></table></div></figure>


<p>We can examine the commits in the pull request with <code>git graph</code>.</p>

<p><img src="http://www.jendavis.org/assets/git_graph_users_before.png" alt="Output of git graph with alias"></p>

<p>This shows two commits <code>7623e00</code> and <code>bc74a45</code>.</p>

<p>The main changes are in <code>bc74a45</code>. In this commit the contributor is adding code, so that on FreeBSD platforms it checks to see if the shell specified in the databag json object exists on the node as specified, or in /usr/local. If the shell isn&rsquo;t available in these two locations, we set the shell to the FreeBSD default shell <code>/bin/sh</code>. This PR exposes some fragility in our current definition as we don&rsquo;t check the existence of the shell on any other platform. Depending on our current priority and workload we may rewrite the resource to be less fragile or accept the contributions as they are.</p>

<h3>Examining a Pull Request - Example 2</h3>

<p>There are additional utilities that can help us beyond just the simple git aliases that we can construct. One example is <a href="https://hub.github.com/">hub</a>. As a wrapper around git, <a href="https://hub.github.com/">hub</a> provides some useful additions to the git client making it easier to work with PRs. Once you&rsquo;ve <a href="https://hub.github.com/">installed</a> hub, you can see the project&rsquo;s issues, open up a project&rsquo;s wiki, and a number of other options from the command line.</p>

<p>When working with a PR, you can quickly create a new branch with its contents with a simple checkout:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>git checkout https://github.com/chef-cookbooks/users/pull/117</span></code></pre></td></tr></table></div></figure>


<p>Similar to the <code>pr</code> alias:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>➜  users git:(master) git checkout https://github.com/chef-cookbooks/users/pull/117
</span><span class='line'>Updating funzoneq
</span><span class='line'>remote: Counting objects: 8, done.
</span><span class='line'>remote: Total 8 (delta 4), reused 4 (delta 4), pack-reused 4
</span><span class='line'>Unpacking objects: 100% (8/8), done.
</span><span class='line'>From git://github.com/funzoneq/users
</span><span class='line'> * [new branch]      master     -&gt; funzoneq/master
</span><span class='line'>Branch funzoneq-master set up to track remote branch master from funzoneq.</span></code></pre></td></tr></table></div></figure>


<p>This will create an appropriate named branch, and allow you to take what you want from the PR and add any necessary changes. For example if a PR has minor failures with any test cases, you might want to checkout the PR, tweak it until any failing test passes, and then commit the code.</p>

<p>After checking out the PR, the commits can be evaluated.</p>

<h4>Squashing Commits</h4>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>git rebase origin/master -i</span></code></pre></td></tr></table></div></figure>


<p>Commits can be skipped, squashed, or edited interactively. Squashing is the process of taking one or more commits and merging it into a previous commit. This is useful to simplify the set of commits that a peer has to review. For just this reason, some projects prefer that commits be rebased or squashed prior to sending a pull request. Some organizations or teams discourage the practice of rebasing or squashing in order to have a high amount of verbosity and code history. Check the contributing documentation or talk to a team member before you adopt a specific practice.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>pick bc74a45 Check if shell exists on FreeBSD. If not, fall back to /bin/sh by default. If it's a manually installed shell, then it lives in /usr/local/bin/{bash,zsh,rbash}
</span><span class='line'>pick 7623e00 Make Travis CI happy
</span><span class='line'>
</span><span class='line'># Rebase 72d3800..7623e00 onto 72d3800
</span><span class='line'>#
</span><span class='line'># Commands:
</span><span class='line'>#  p, pick = use commit
</span><span class='line'>#  r, reword = use commit, but edit the commit message
</span><span class='line'>#  e, edit = use commit, but stop for amending
</span><span class='line'>#  s, squash = use commit, but meld into previous commit
</span><span class='line'>#  f, fixup = like "squash", but discard this commit's log message
</span><span class='line'>#  x, exec = run command (the rest of the line) using shell
</span><span class='line'>#
</span><span class='line'># These lines can be re-ordered; they are executed from top to bottom.
</span><span class='line'>#
</span><span class='line'># If you remove a line here THAT COMMIT WILL BE LOST.
</span><span class='line'>#
</span><span class='line'># However, if you remove everything, the rebase will be aborted.
</span><span class='line'>#
</span><span class='line'># Note that empty commits are commented out</span></code></pre></td></tr></table></div></figure>


<p>I can modify the second <code>pick</code> to <code>s</code> and squash this into a single commit.</p>

<p>When I squash the commit, it creates a new object. After I squash the commit, <code>git graph</code> shows me a new commit object.</p>

<p><img src="http://www.jendavis.org/assets/git_graph_users_after.png" alt="Output of git graph after commit squashed."></p>

<h4>Testing</h4>

<p>I can now test to see if the travis issue is still a problem in the current branch by running <code>rubocop</code>, the command that was failing in the Travis Build earlier manually.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>  users git:(funzoneq-master) rubocop
</span><span class='line'>Inspecting 16 files
</span><span class='line'>................</span></code></pre></td></tr></table></div></figure>


<p>With rubocop, a <code>.</code> represents a file without issues.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>git push -fu origin funzoneq-master</span></code></pre></td></tr></table></div></figure>


<p>This sets up a tracking branch and force pushes the edit of the history. In this example, it gives me the option to do a PR (which I did), resulting in <a href="https://github.com/chef-cookbooks/users/pull/123">Pull Request 123</a>. This is possible because I have permission to commit to this repository.</p>

<h3>Examining an Issue</h3>

<p>Let&rsquo;s take a look at a reported issue, <a href="https://github.com/chef-cookbooks/users/issues/118">Issue 118</a>. In this issue, <a href="https://twitter.com/wolf31o2">Chris Gianelloni</a> reported a problem with the <code>users</code> cookbook on Mac OS X.</p>

<p>There is no PR in this case, so I create a branch with <code>git checkout -b</code></p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>git checkout -b issues_118</span></code></pre></td></tr></table></div></figure>


<p>In the earlier example, I skipped over how to validate that the code actually worked on the system. We can manually test the code if we had a Mac OS X laptop using the <a href="https://docs.chef.io/ctl_chef_apply.html"><code>chef-apply</code> command</a>, an executable that runs a single recipe from the command line.</p>

<p>Examining the cookbook structure shows that there are <a href="https://github.com/chef-cookbooks/users/tree/master/spec">chefspec tests</a>, but no other tests. Inside the <code>test</code> directory, there is only a fixtures directory that includes sample cookbooks. This exposes the risk of making changes to code in this project.</p>

<p>In last years sysadvent, I introduced writing <a href="https://docs.chef.io/custom_resources.html">custom resources</a> and using <a href="http://kitchen.ci/">Test Kitchen</a> in the <a href="https://www.chef.io/blog/2014/12/22/sysadvent-day-21-baking-delicious-resources-with-chef/">Baking Delicious Resources with Chef article</a>. <a href="http://kitchen.ci/">Test Kitchen</a> is an implementation of sandbox automation that can run on a individual&rsquo;s computer and integrates with a number of different cloud providers and virtualization technologies including Amazon EC2, CloudStack, Digital Ocean, Rackspace, OpenStack, Vagrant, and Docker. It has a static configuration that can be easily checked into version control along with a software project.</p>

<h4>Using Test Kitchen to Spin Up Instances</h4>

<p>Inside the <code>users</code> cookbook, there is a <a href="https://github.com/chef-cookbooks/users/blob/master/.kitchen.yml"><code>.kitchen.yml</code></a> that has a vagrant driver and the chef_zero driver with a number of platforms. This would allow us to test any of the platforms listed with vagrant and virtualbox.</p>

<p>Apple&rsquo;s EULA has implications towards Mac OS X image availability. While there are some images available on the internet, organizations (and individuals) have to define how to meet Apple&rsquo;s legal requirements. Within Chef, we use <a href="https://atlas.hashicorp.com/">Atlas</a> to store private images for employees use.</p>

<p>To test Mac OS X, I created a new file <code>.kitchen.vmware.yml</code> with the following configuration:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>driver:
</span><span class='line'>  name: vagrant
</span><span class='line'>  provider: vmware_fusion
</span><span class='line'>  customize:
</span><span class='line'>    numvcpus: 2
</span><span class='line'>    memsize: 2048
</span><span class='line'>
</span><span class='line'>provisioner:
</span><span class='line'>  name: chef_zero
</span><span class='line'>
</span><span class='line'>platforms:
</span><span class='line'>  - name: macosx-10.11
</span><span class='line'>    driver:
</span><span class='line'>      box: chef/macosx-10.11 # private</span></code></pre></td></tr></table></div></figure>


<p>Once I do a <code>vagrant login</code> on the command line I can now download the image. I created a symlink to <code>.kitchen.vmware.yml</code></p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>ln -s .kitchen.vmware.yml .kitchen.local.yml</span></code></pre></td></tr></table></div></figure>


<p><em>Note</em> It&rsquo;s also possible to just define environment variable <code>KITCHEN_LOCAL_YAML</code> rather than creating a symlink.</p>

<p>I can list my instances and see the Mac OS X 10.11 images.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>➜  users git:(issues_118) ✗ kitchen list
</span><span class='line'>Instance               Driver   Provisioner  Verifier  Transport  Last Action
</span><span class='line'>default-macosx-1011    Vagrant  ChefZero     Busser    Ssh        &lt;Not Created&gt;
</span><span class='line'>sysadmins-macosx-1011  Vagrant  ChefZero     Busser    Ssh        &lt;Not Created&gt;</span></code></pre></td></tr></table></div></figure>


<p>I converged <code>kitchen converge default-macosx-1011</code>  and reproduced the issue that <a href="https://twitter.com/wolf31o2">Chris</a> reported.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>================================================================================
</span><span class='line'>           Error executing action `create` on resource 'user[test_user]'
</span><span class='line'>
</span><span class='line'>
</span><span class='line'>           ArgumentError
</span><span class='line'>           -------------
</span><span class='line'>           can't find user for test_user
</span></code></pre></td></tr></table></div></figure>


<p>Logging into the host with <code>kitchen login default-macosx-1011</code>, I could check to see if the user was created with the <code>dscl</code> command.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'> vagrant$ dscl . list /Users | grep test_user
</span><span class='line'>test_user</span></code></pre></td></tr></table></div></figure>


<p>After digging a little further, and some pair code review with <a href="https://twitter.com/nathenharvey">Nathen Harvey</a> we discovered that the issue was with the directory resource wanting a UID rather than a username when declaring the owner on Mac OS X.</p>

<p>Switching from username to UID resolved the errors, but this only tested against Mac OS X. We should do some tests against other operating systems to make sure we haven&rsquo;t broken the provider.</p>

<p>To speed up tests, I use Docker rather than trying to spin up that many VMs with Virtual Box or VMWare. I already have docker-machine installed, if you don&rsquo;t check out this <a href="https://docs.docker.com/machine/get-started/">getting started guide</a>.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>➜  users git:(issues_118) ✗ docker-machine start  default
</span><span class='line'>Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.
</span><span class='line'>➜  users git:(issues_118) ✗ docker-machine env default
</span><span class='line'>➜  users git:(issues_118) ✗ eval "$(docker-machine env default)"</span></code></pre></td></tr></table></div></figure>


<p>I&rsquo;m going to use <a href="https://twitter.com/someara">someara&rsquo;s</a> <a href="https://github.com/someara/kitchen-dokken">kitchen-dokken</a> plugin rather than kitchen-docker. After cleaning up my previous run with <code>kitchen destroy</code>, I update the symlink to point to <code>.kitchen.dokken.yml</code>. Now when I issue a <code>kitchen list</code>:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>➜  users git:(issues_118) ✗ kitchen list
</span><span class='line'>Instance               Driver  Provisioner  Verifier  Transport  Last Action
</span><span class='line'>default-centos-6       Dokken  Dokken       Busser    Dokken     &lt;Not Created&gt;
</span><span class='line'>default-centos-7       Dokken  Dokken       Busser    Dokken     &lt;Not Created&gt;
</span><span class='line'>default-fedora-21      Dokken  Dokken       Busser    Dokken     &lt;Not Created&gt;
</span><span class='line'>default-debian-7       Dokken  Dokken       Busser    Dokken     &lt;Not Created&gt;
</span><span class='line'>default-ubuntu-1204    Dokken  Dokken       Busser    Dokken     &lt;Not Created&gt;
</span><span class='line'>default-ubuntu-1404    Dokken  Dokken       Busser    Dokken     &lt;Not Created&gt;
</span><span class='line'>sysadmins-centos-6     Dokken  Dokken       Busser    Dokken     &lt;Not Created&gt;
</span><span class='line'>sysadmins-centos-7     Dokken  Dokken       Busser    Dokken     &lt;Not Created&gt;
</span><span class='line'>sysadmins-fedora-21    Dokken  Dokken       Busser    Dokken     &lt;Not Created&gt;
</span><span class='line'>sysadmins-debian-7     Dokken  Dokken       Busser    Dokken     &lt;Not Created&gt;
</span><span class='line'>sysadmins-ubuntu-1204  Dokken  Dokken       Busser    Dokken     &lt;Not Created&gt;
</span><span class='line'>sysadmins-ubuntu-1404  Dokken  Dokken       Busser    Dokken     &lt;Not Created&gt;</span></code></pre></td></tr></table></div></figure>


<p>A successful <code>kitchen create</code> and <code>kitchen converge -c</code> confirm that the changes work as expected. <code>kitchen converge -c</code> will run a converge against all matching instances concurrently.</p>

<p>Since there are no integration tests, we manually login in and check whether the home directory gets created as expected.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>root@079f902cf103:/home/test_user# ls -al
</span><span class='line'>total 24
</span><span class='line'>drwxr-xr-x 3 test_user test_user 4096 Dec 20 07:02 .
</span><span class='line'>drwxr-xr-x 3 root      root      4096 Dec 20 07:02 ..
</span><span class='line'>-rw-r--r-- 1 test_user test_user  220 Apr  9  2014 .bash_logout
</span><span class='line'>-rw-r--r-- 1 test_user test_user 3637 Apr  9  2014 .bashrc
</span><span class='line'>-rw-r--r-- 1 test_user test_user  675 Apr  9  2014 .profile
</span><span class='line'>drwx------ 2 test_user root      4096 Dec 20 07:02 .ssh</span></code></pre></td></tr></table></div></figure>


<p>After manual verification, I commited and checked in the code, and created a <a href="https://github.com/chef-cookbooks/users/pull/124">PR</a>.</p>

<h2>More Than Code</h2>

<p>The writing process I follow with sysadvent uses some of these collaborative tips. I post my article up on GitHub in a private repository, and then invite my peer reviewers to the repository.</p>

<p>While collaboratively writing <a href="http://shop.oreilly.com/product/0636920039846.do">Effective Devops</a> with <a href="https://twitter.com/beerops">Katherine Daniels</a>, we used git, AsciiDoc, and O&#8217;Reilly&rsquo;s Atlas; a git-backed web-based platform for publishing books.</p>

<p>The lightweight formats of markdown and AsciiDoc can be collaborative with the use of git. I find limitations compared to more traditional writing tools are around GUI formating within the editors I use. I regularly find myself having to do a little extra commits to the repository to check what the browser view or generated PDF looks like with included images. Overall, this is a small price to pay when getting the benefit of a stronger piece through collaboration. Some of these limitations may be overcome with the use of extensions available in specific editors.</p>

<h2>Summary</h2>

<p>Using <a href="http://kitchen.ci/">Test Kitchen</a> allows me to quickly change which set of tools I want to use - docker, vagrant with Virtual Box, or vagrant with VMWare - depending on the current need. The kitchen configuration files can be saved alongside the project allowing anyone to quickly get going and collaborate from a consistent point.</p>

<p>Combined with the flexibility of <a href="http://kitchen.ci/">Test Kitchen</a>, Vagrant allows us to combine private and publicly available resources so if you are in a situation where you are working on something internal to your company while also contributing to Open Source, you can manage that complexity. In the above example, I&rsquo;m providing my team with knowledge of how to replicate my testing without adding initial complexity to the base <code>.kitchen.yml</code>. It allows me to be transparent about my process without blocking people who don&rsquo;t have access to Chef&rsquo;s internal images or VMWare Fusion.</p>

<p>Additionally, local git configurations or tools like <a href="https://hub.github.com/">hub</a> can simplify the collaboration process allowing us to cherry pick our commits. Talk to your team, peers in the industry, or review a project&rsquo;s CONTRIBUTING.md file to discover other mechanisms that individuals use when working.</p>

<p>Here are a few examples of helpful git snippets that other folks shared with me via Twitter:</p>

<blockquote class="twitter-tweet" data-conversation="none" lang="en"><p lang="und" dir="ltr"><a href="https://twitter.com/sigje">@sigje</a> <a href="https://t.co/CR2HURUcmk">https://t.co/CR2HURUcmk</a></p>&mdash; Robb Kidd (@robbkidd) <a href="https://twitter.com/robbkidd/status/678225258994905088">December 19, 2015</a></blockquote>




<blockquote class="twitter-tweet" data-conversation="none" lang="en"><p lang="en" dir="ltr"><a href="https://twitter.com/sigje">@sigje</a> My favorite git alias:&#10;&#10;up = &quot;!f() { git stash &amp;&amp; git pull &#8211;rebase origin master &amp;&amp; git stash pop; }; f&quot;</p>&mdash; Joe Nuspl (@JoeNuspl) <a href="https://twitter.com/JoeNuspl/status/678480616724152320">December 20, 2015</a></blockquote>


<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>


<p>Kennon Kwok also shared <a href="https://github.com/jonas/tig">tig</a>, a text mode interface for Git as a useful utility.</p>

<p>In addition, folks mentioned <a href="https://twitter.com/sethvargo">Seth Vargo</a> as being the inspiration for some common habits, and Seth has kindly shared his <a href="https://gist.github.com/sethvargo/73dd1d915411ebffaec0">Git config</a>.</p>

<h2>Further Resources</h2>

<ul>
<li><a href="http://gitforteams.com/">Emma Jane Hogbin Westby&rsquo;s Git for Teams</a></li>
<li><a href="https://www.atlassian.com/git/tutorials/rewriting-history/git-rebase-i">Atlassian git rebase history</a></li>
<li><a href="https://docs.travis-ci.com/user/for-beginners">Travis CI for Complete Beginners</a></li>
<li><a href="http://www.martinfowler.com/articles/continuousIntegration.html">Continuous Integration article from Martin Fowler</a>
​* <a href="https://www.youtube.com/watch?v=HRrc6UCXFMs">Introduction to Rubocop with Frank Webber</a></li>
<li><a href="https://learn.chef.io/test-your-infrastructure-code/rhel/">Test your Infrastructure Code - Chef Skill Library</a></li>
<li><a href="https://atlas.hashicorp.com/help">Atlas documentation</a></li>
<li><a href="https://docs.docker.com/machine/">Docker Machine</a> and <a href="https://docs.docker.com/machine/get-started/">Getting Started</a></li>
<li><a href="https://github.com/someara/kitchen-dokken">kitchen-dokken</a></li>
</ul>


<h2>Thank you!</h2>

<p>Thank you <a href="https://twitter.com/gwaldo">H. Waldo Grunenwald</a>, <a href="https://twitter.com/robbkidd">Robb Kidd</a>, <a href="https://twitter.com/kamihack">Carlos Maldonado</a>, <a href="https://twitter.com/vmbrasseur">VM Brasseur</a>, and <a href="https://twitter.com/kennonkwok">Kennon Kwok</a> for peer review and aditional edits.</p>

<p>Thank you to all of the <a href="https://twitter.com/chef">Chef Community Engineering Team</a> that provided answers to my questions over the last few months inspiring this article.</p>

<p>Thank you to <a href="https://github.com/funzoneq">Arnoud Vermeer</a> for contributing <a href="https://github.com/chef-cookbooks/users/pull/117">PR 117</a> and <a href="https://twitter.com/wolf31o2">Chris Gianelloni</a> for contributing <a href="https://github.com/chef-cookbooks/users/issues/118">Issue 118</a> giving me the opportunity to add context to talking about collaboration with reported issues and pull requests. Your continued contributions to the Chef community are valued and appreciated!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Adventures in Django With OpsWorks and Chef]]></title>
    <link href="http://iennae.github.io/blog/2015/12/04/adventures-in-django-with-opsworks-and-chef/"/>
    <updated>2015-12-04T23:34:07-08:00</updated>
    <id>http://iennae.github.io/blog/2015/12/04/adventures-in-django-with-opsworks-and-chef</id>
    <content type="html"><![CDATA[<p>Recently I had the opportunity to work with the new released <a href="http://blogs.aws.amazon.com/application-management/post/Tx1T5HNA1TSU8NH/AWS-OpsWorks-Now-Supports-Chef-12-for-Linux">OpsWorks Chef 12 for Linux</a>. I wrote up a process to deploy Django with the <a href="https://supermarket.chef.io/cookbooks/application_python">application_python</a> cookbook walking through a sample deploy.</p>

<p>I learned quite a bit of Django in the process and found some great resources in the process. The following is just a snippet of that information.</p>

<h2>Django Terminology</h2>

<p>Django is a free and open source web application framework written in Python.</p>

<p>Web application frameworks provide a set of components that are common across applications allowing an individual to speed up development and deployment of a web application. Functionality like user authentication and authorization, forms, file management, are some examples of these common components. These frameworks exist to speed up delivery so that you don&rsquo;t have to reinvent the wheel each time you want to create a site.</p>

<p>Within Django, an app is a Web application that does something, for example a poll app. Within Django, a project is a collection of apps and configurations. An app can be in multiple projects.</p>

<p>Django follows the MVC(Model View Controller) architectural pattern. In the MVC architectural pattern, the model handls all the data and business logic, the view presents data to the user in the supported format and layout, and the controller receives the requests (HTTP GET or POST for example), coordinates, and calls the appropriate resources to carry them out.</p>

<p>When creating a web application, we generally create a set of controllers, models, and views. The reason that it uses this pattern is to provide some separation between the presentation (what the user sees) and the application logic.</p>

<p>In Django, the view pattern is implemented through an abstraction called a template and the controller pattern is implemented through an abstraction called a view.</p>

<h2>Further Resources</h2>

<ul>
<li><a href="https://code.djangoproject.com/wiki/DjangoResources">Django Resources</a></li>
<li><a href="https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-centos-7">Django Digital Ocean tutorial</a></li>
<li><a href="http://python-deploy-framework.readthedocs.org/en/latest/pages/django-deployment.html">Deploying a Django application tutorial</a></li>
<li><a href="http://dpaste.readthedocs.org/en/latest/integration.html">Dpaste docs</a></li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Examining Tools With a Devops Lens]]></title>
    <link href="http://iennae.github.io/blog/2015/12/01/examining-tools-with-a-devops-lens/"/>
    <updated>2015-12-01T21:03:41-08:00</updated>
    <id>http://iennae.github.io/blog/2015/12/01/examining-tools-with-a-devops-lens</id>
    <content type="html"><![CDATA[<p>Please enjoy my <a href="http://sysadvent.blogspot.com/2015/12/day-2-examining-tools-with-devops-lens.html">Sysadvent</a> offering for 2015.</p>

<p>Over the last few years I have had the opportunity to attend a variety of conferences, meeting people and hearing diverse stories about work environments and challenges. It is fascinating to hear the variety of explanations about devops and its ongoing impact on the industry and the workplace. As I worked to gain a better appreciation of others&#8217; experiences, I realized the challenge of misinformation about devops. How do we expect individuals to understand and choose devops when we have so many competing themes?</p>

<p>Two big themes I have heard:
* Devops is culture not tools.
* Devops is automation.</p>

<p>In this article, I will tackle one aspect of the challenge focusing on examining tools within the industry with a devops lens.</p>

<h2>Devops is culture not tools.</h2>

<p>What is culture? Culture is the totality of <strong>learned, socially transmitted customs</strong>, <strong>knowledge</strong>, <strong>objects</strong>, and <strong>behaviors</strong>. It includes the ideas, values, customs, and artifacts of a group of people. Culture encompasses everything about how we live and work, and how life and work evolve to meet the challenges we have in our environments. It gives meaning to social, political, economic, aesthetic, religious norms, and modes of organization that distinguishes us from others.</p>

<blockquote><p>&ldquo;We become what we behold, we shape our tools and then our tools shape us.&rdquo;</p>

<p>Father John Culkin</p></blockquote>

<p>What are tools? Tools are a vital component of our identity, how we interact with the world around us, how we use and conserve energy, and how we buffer ourselves from harm. Tools shape our thoughts and behaviors including our transparency, level of exertion over our environment, and conflict response. Tools are a cultural artifact.</p>

<p>Consider the introduction of automobiles and the changes to city landscapes that came about because of them; new cities have wider streets to accommodate vehicles with less care taken to provide pedestrians with safe walking. Automobiles impacted how we work and where we work. As <a href="http://www.citylab.com/commute/2015/11/why-the-wealthy-have-been-returning-to-the-city-center/416397/">commute times</a> have increased in densely populated regions, the value of owning a car has decreased and the landscape will transform again.</p>

<p><img src="http://www.jendavis.org/assets/public-domain-images-free-stock-photos-light-sky-silo-windows-lillyphotographer.jpg" width="300" alt="Concrete Light Sky Silo Windows Sunlight Rays" align="left"></a></p>

<p>Prior to the introduction of devops, an organization might incentivize and reward teams based on each team&rsquo;s particular priorities; developers strove to build features quickly, operations stabilized systems, security minimized risk and controlled access, and so on across the organization. When the bonus for the VP of Operations is driven by uptime, system administrators will be incentivized to ensure stability and availability. When the bonus for the VP of Development is driven by meeting deadlines, developers will be incentivized to deliver features. This leads to a fundamental conflict in deciding highest priority between individuals trying to work together across organizational boundaries.</p>

<p>Organizations have created islands of culture based on their existing individual and collective values. For example, the roles and responsibilities of an operations engineer at one organization may significantly differ at another. Consequentially, operations engineers at different companies often have substantially disparate skill sets. Over time, the roles and concerns within an organization change leading to fractured capabilities even within a single organization.</p>

<p>As organizations grow larger, each team&rsquo;s individual focus narrows further. Each team adopts a specific tool that meets their requirements, leading to multiple tools that overlap in purpose. This proliferation of tools both hinders transparency within the organization and stifles collaboration.</p>

<p>For example, bug tracking within development teams led to the development of tools like <a href="https://www.atlassian.com/software/jira/">JIRA</a> and <a href="https://www.bugzilla.org/">bugzilla</a>. Ticket tracking within operations teams led to development of tools like <a href="https://www.bestpractical.com/rt/">Request Tracker(RT)</a>.  Bugs and tickets are both issues. While a single <em>issues tracking tool</em> can be selected at the organizational level, the tool can impact the cognitive load of teams unequally as a team tries to adopt a tool that isn&rsquo;t specific to their domain.</p>

<p>The problem of tool proliferation continues today with the belief that a specific tool might solve all the problems an organization may have. When people say <em>Devops is culture not tools</em>, it is in part to focus on solving the organizational issues that can not be solved with a change in technology alone.</p>

<p><strong>What is Devops?</strong></p>

<p>Devops is an ideology that seeks to change how individuals <strong>think about work</strong>,  <strong>value the diversity</strong> of work done, <strong>develop deliberate acceleration</strong> of business value, and <strong>measure the effect</strong> of social and technical change.</p>

<p>In <a href="http://shop.oreilly.com/product/0636920039846.do">Effective Devops</a>, <a href="https://twitter.com/beerops">Katherine Daniels</a> and I introduced the 5 pillars of devops: <strong>Collaboration</strong>, <strong>Hiring</strong>, <strong>Affinity</strong>, <strong>Tools</strong>, and <strong>Scale</strong>.</p>

<p>These 5 pillars form the foundation for effective devops and the <strong>devops compact</strong>, the <strong>continuous building of a shared mutual understanding</strong> within a team, organization, and across the industry.</p>

<p>With the devops compact, we commit to working together, communicate our intentions and any issues, and adjust our work in order to work towards shared organizational goals. We answer questions like: what is the value of what we are we trying to do, how are we going to do it, and what exactly are we doing? We don&rsquo;t just decide to do devops, and then we’re done. The nature of doing devops, means that we are commiting to adjusting to change.</p>

<p><strong>Devops is culture which includes tools and their use</strong>. Tools are not devops. How tools are used, and the ease with which they can be used impacts the acceptance and proliferation of specific aspects of culture. When we talk about devops tools, we mean the tools and the manner of their use&ndash;not fundamental characteristics of the tools themselves.</p>

<p><strong>Devops tools stress &ldquo;We&rdquo; over &ldquo;Me&rdquo;</strong>; they allow teams and organizations to build mutual understanding to get work done. Your choice of tools is a choice in a common language. Is this language one that benefits your organization as a whole or merely a subset of specific teams? At times, due to the lack of availability of an equally balanced tool, a choice must be made that has a higher cognitive cost to one team over another. Be aware of the cost and empathetic to the teams impacted.</p>

<p>The devops culture that we embrace is one of collaboration across teams, across organizations, and across industries. When developing solutions, I think about my team instead of thinking about the easiest thing for me to do now. This sometimes means adjusting my expectations for the good of the organization and choosing something a little more difficult than my current working structure.</p>

<h3>Tool Examination</h3>

<p><a href="https://blackstock.co/collection/young-girl-tilting-camera-up/"><img src="http://www.jendavis.org/assets/girl_lens_camera.jpg" width="300" alt="Young Girl tilting camera up." align="left"></a></p>

<p>Let&rsquo;s examine a few tools with the devops lens. First we&rsquo;ll look at version control systems and then infrastructure automation. Please note that this examination of tooling is not meant as a judgement or advocacy of a specific tool in your environment. Without understanding your organization&rsquo;s culture, noone can tell you the right tool to choose.</p>

<p>Version control systems record changes to a set of files over time. CollabNet founded the Subversion project in 2000 as an open source software versioning and revision control system that was architected to be compatible with the widely used Concurrent Versions System (CVS). Subversion 1.0 (svn) was released in February of 2004. Technology and habits at the time dictated svn&rsquo;s use and features. Core to svn&rsquo;s architecture is the concept of a centralized repository. This central repository allowed users to control who was and was not allowed to commit changes.</p>

<p><img src="http://www.jendavis.org/assets/svn_vs_git.png" width="400"></p>

<p>A year later in 2005, Git was released. It’s also an open source software version control system with a focus on decentralized revision control, speed, data integrity, and support for distributed nonlinear workflows. This gives every developer full local control. While you can adopt a centralized workflow and establish a &ldquo;central&rdquo; repository, the processes can be flexible allowing you to use technology as you wish rather than having it defined for you. While the ramp up time may be a little longer, the functionality allows for quicker organizational changes.</p>

<p>Andy Peatling shared the WordPress <a href="https://developer.wordpress.com/2015/11/23/the-story-behind-the-new-wordpress-com/">technical refresh</a> in migrating from svn to git in 2015, and the desirable changed behaviors that included:</p>

<ul>
<li>improved developer communication through code reviews and hangouts</li>
<li>improved development practices of reviewing code prior to committing to the repository because of the availability of the <em>pull request</em> with git</li>
<li>increased collaboration between designers and developers on a daily basis</li>
<li>greater feedback on individual work,</li>
<li>customized workflows</li>
</ul>


<p>The technical merits between git and svn aside, significant value is derived from increased cross-team collaboration.</p>

<p>In many organizations, system configuration is a manual process. Individuals document the process and upgrade with a checklist. A missed step can lead to systems in an unknown state requiring considerable effort to recover.</p>

<p>Chef is an infrastructure automation system. Infrastructure automation is creating systems that reduce the burden on people to manage services and increase the quality, accuracy, and precision of a service to the consumers of a service.</p>

<p>When Adam Jacob was developing Chef software, he was <a href="https://www.youtube.com/watch?v=Ia2ItmjRsw8&amp;feature=plcp">trying to create a solution that could work across different organizations</a>. Chef was built to provide abstractions for configuration and management, creating a language allowing individuals to define its infrastructure and policies with code.</p>

<p>Trying to create a language that allows for the nuanced views of developers, system administrators, security operations, and quality assurance engineers is difficult. With Chef, rather than reusing terminology that shows preference to one role over another, we have new terminology including resources and recipes.</p>

<p><strong>Resources</strong> make up the basic building blocks of our infrastructure. We can use resources as provided by Chef core libraries, use resources provided by the larger Chef community, or we can build and customize our own.</p>

<p><strong>Recipes</strong> describe a specific piece of an application that we want to have running on a system. It&rsquo;s the ordered set of resources and potentially additional procedural code. Just as with a recipe for baking chocolate chip or oatmeal cookies, the recipe will be specific to what we want to create.</p>

<p><img src="http://www.jendavis.org/assets/chef_example.png" width="450"></p>

<p>In this simple <em>webserver.rb</em> recipe from the <a href="https://learn.chef.io/tutorials/">Learn Chef</a> website, we use 3 resources: <strong>package</strong>, <strong>service</strong>, and <strong>file</strong>. These resources describe everything needed to stand up an apache web server, have it run at boot time, and have it serve a simple &ldquo;hello world&rdquo; page.</p>

<p>More complex tasks like opening specific ports in a firewall or deploying Hadoop can be abstracted into a common language that allows for comprehension across teams. Because this code is stored in your standard version control, you can take advantage of the same ease of use and transparency that the rest of your source code is afforded.</p>

<p><strong>Devops is not limited to infrastructure.</strong> A lot of focus is on tools that improve collaboration between development and operations teams as those teams are where the devops movement originated. As other teams begin adopting devops methodology, we&rsquo;ll see tools that support the devops compact between new teams.
For example, Chef has released <a href="https://www.chef.io/delivery/">Chef Delivery</a> this year. Chef Delivery simplifies organizational complexity by creating a common language to describe the process of promoting products between teams. This common language allows us to codify &ldquo;delivery as code&rdquo;.</p>

<h2>Devops is Automation</h2>

<p>When people say <em>Devops is Automation</em>, it is due in part because many tools in devops, while codifying understanding to bridge the chasm between teams and increase velocity, have resulted in <strong>automation</strong> for repetitive tasks. Automation is a result of improved technology focused on repeatable tasks.</p>

<p>While reviewing the aviation industry in 1977, the House Committee on Science and Technology identified cockpit automation as a leading safety concern. Studies of the aviation field discovered that while pilots could still fly planes, the automation in use was causing an atrophy to critical thinking skills. Pilots were losing the ability to track position without the use of a map display, decide what should be done next, or recognize instrument system failures. This is a warning for us as we implement automation within our environments. Tools change our behavior and the way that we think.</p>

<p>In July 2013, Asiana Airlines flight 214 struck a seawall at San Francisco International Airport, resulting in three fatalities. During the investigation, the National Transportation Safety Board (NTSB) identified a number of issues, among them that there was insufficient monitoring of airspeed due to an overreliance on automated systems that they didn&rsquo;t fully understand.</p>

<blockquote><p>“In their efforts to compensate for the unreliability of human performance, the designers of automated control systems have unwittingly created opportunities for new error types that can be even more serious than those they were seeking to avoid.”
James Reason, Managing the Risks of Organizational Accidents</p></blockquote>

<p>Automation is critical to us as systems become more complex and organizations become interdependent due to shared services. Without shared mutual context or concern for human needs, automation creates unknown additional risk.</p>

<p><strong>Devops enabled automation may make work faster, but more importantly it has increased transparency, collaboration, and understanding.</strong></p>

<p>In summary, devops is <strong>culture</strong> which includes <strong>tools and their use</strong>. Tools help us progress from <strong>manual</strong> to <strong>continuous</strong> processes. Effective devops tools enable <strong>automation</strong> without isolating humans from the automation process so that the mutual understanding occurs across time, ensuring that the &ldquo;we&rdquo; of tomorrow understands the &ldquo;we&rdquo; of today.</p>

<h2>What Next?</h2>

<p>Find a local <a href="http://www.devopsdays.com">DevOpsDays</a>, <a href="http://www.coffeeops.org">CoffeeOps</a>, or other cross-functional meetups that facilitates people coming together to build strong foundations of common understanding.</p>

<p>The <a href="http://www.devopsdays.org/events/calendar/">devops community calendar</a> also lists upcoming conferences and events.</p>

<h3>Study</h3>

<ul>
<li><a href="https://try.github.io/levels/1/challenges/1">Github git tutorial</a></li>
<li><a href="https://www.atlassian.com/git/tutorials/">Atlassian Git tutorial</a></li>
<li><a href="https://www.youtube.com/watch?v=Ia2ItmjRsw8&amp;feature=plcp">History of Chef</a></li>
<li><a href="https://learn.chef.io/tutorials/">Learn Chef</a></li>
</ul>


<h3>Watch</h3>

<ul>
<li><a href="https://www.youtube.com/channel/UChZXJu3ZGfsQYkJBJvlDjEA">DevOpsDays Silicon Valley 2015 Videos</a></li>
<li><a href="https://www.chef.io/blog/event/webinar-effective-tools-for-effective-change/">Tools for Effective Change Webinar</a></li>
</ul>


<h3>Listen</h3>

<ul>
<li><a href="http://www.arresteddevops.com/">Arrested DevOps</a></li>
<li><a href="http://foodfightshow.org/">Foodfight Show</a></li>
<li><a href="http://devopscafe.org">DevOps Cafe</a></li>
</ul>


<h3>Read</h3>

<ul>
<li><a href="http://www.devopsweekly.com/">devops Weekly</a> - weekly newsletter of curated devops news from <a href="https://twitter.com/garethr">Gareth Rushgrove</a></li>
<li><a href="https://en.wikipedia.org/wiki/Comparison_of_issue-tracking_systems">Comparison of Issue Tracking Systems</a></li>
<li><a href="https://en.wikipedia.org/wiki/Comparison_of_version_control_software">Comparison of Version Control Software</a></li>
<li><a href="http://www.ntsb.gov/news/events/Pages/2014_Asiana_BMG-Abstract.aspx">NTSB report for Asiana Airlines flight 214</a></li>
<li><a href="http://shop.oreilly.com/product/0636920039846.do">Effective Devops</a></li>
</ul>


<h3>Share</h3>

<p>I&rsquo;d love to hear your feedback! What tools are you using in your environment and how do they impact organizational culture?</p>

<p>Tweet at @sigje with hashtag #sysadvent, email me at sparklydevops@chef.io, or add a comment to the article.</p>

<h2>Thank yous</h2>

<p>Many thanks to <a href="https://twitter.com/grepory">Greg Poirier</a> for being my Sysadvent Editor. Additional thanks to <a href="https://twitter.com/nathenharvey">Nathen Harvey</a>, <a href="https://twitter.com/peternealon">Peter Nealon</a>, <a href="https://twitter.com/amye">Amye Scavarda</a>, and <a href="https://twitter.com/gwaldo">H. Waldo Grunenwald</a> for peer review and aditional edits.</p>

<ul>
<li>Image Credits</li>
<li>Young Girl Tilting Camera Up. Licensed from Kenneth Wiggins on <a href="https://blackstock.co/collection/young-girl-tilting-camera-up/">https://blackstock.co/collection/young-girl-tilting-camera-up/</a></li>
<li>Light Sky Silo Windows Sunlight Rays from Public Domain Archive</li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[DevOpsDays Silicon Valley Welcome]]></title>
    <link href="http://iennae.github.io/blog/2015/11/14/devopsdays-silicon-valley-welcome/"/>
    <updated>2015-11-14T16:30:48-08:00</updated>
    <id>http://iennae.github.io/blog/2015/11/14/devopsdays-silicon-valley-welcome</id>
    <content type="html"><![CDATA[<p>On November 6, 2015, I opened <a href="http://www.slideshare.net/sigje/bridging-devops-cultures-devopsdays-silicon-valley-2015-welcome">DevOpsDays Silicon Valley 2015</a>. My goal in sharing this is to provide help in organizing conferences for future and current organizers. I also hope that it encourages others to share their processes.</p>

<p>Opening a conference requires a careful balance of a few things including the purpose of the conference, thank yous to the sponsors who make the event possible, setting the values and expectations of the event to align behaviors, and conveying important information like wireless connectivity and agenda.</p>

<p>Thanks to the captioning provided by White Coat Captioning, I have (an edited) version of the speech I gave.</p>

<hr>


<p>What is DevOps?  Well, it started out a few years ago in 2009 where John and Paul Hammond gave a talk at Velocity Conf talking about developers and operations.  Meanwhile Andrew Clay Shafer and Patrick Debois were trying to come up with a way for people to do agile system administration.  As Andrew sat in the audience he realized of course DevOps.  Developers and operations staff working together.  Now, DevOps has become so much more.  We know every part of the business matters not just in our organization but across organizations in the industry.  We are changing how we work, why we work, what we&rsquo;re working on together.</p>

<p>DevOps is about the we, not the me.  I can solve a problem very fast, and it&rsquo;s good enough for me.  But my organization has a single point of failure or a single point of knowledge.  Later on, we will have talks from people talking about the challenges of being that single point of failure.</p>

<p>What are DevOpsDays?  Well, they&rsquo;re held all around the world, every year there&rsquo;s been more.  This is the Silicon Valley one.  This is your and my DevOpsDays. We all come together as participants in this movement to create a space where everyone can share what they&rsquo;re working on, how they&rsquo;re working on it, and the problems they face.  It has been shown through many studies that the diversity of voices and experience help us to make stronger products, make stronger, stable solutions.</p>

<p>That&rsquo;s why we want to talk about bridging DevOps cultures because each one of us works at a company that has a slightly different culture, the values that we talk about, what we care about, we are bridging here at DevOpsDays, connecting our islands together so that we can have strong, stable foundations to build the products that are going to get us on those spaceships out to Mars; right?  I don&rsquo;t want to be in a spaceship where people are arguing who&rsquo;s the person responsible for the oxygen supply?  Everyone&rsquo;s dead if we don&rsquo;t actually figure that out.</p>

<p>So the amazing thing about the Bay Area is we talk about the Bay Area, and we talk about Silicon Valley, but we&rsquo;re all separate little cultures.  We&rsquo;ve got great, rich culture in Oakland.  We&rsquo;ve got little coffee shops, all kinds of music, great innovation labs. We&rsquo;ve got culture in San Francisco.  We&rsquo;ve got culture here in South Bay.  One of the challenges of creating a DevOpsDay for this area is the commute is pretty bad; right?  There&rsquo;s a lot of people here.</p>

<p>We have people talking, we&rsquo;re going to try to figure out a way so we can have more voices coming in.</p>

<p>Why are we here?  Well, I think of this is balance.  We want to create that strong, stable structure at the bottom, have that flexibility in the middle, and have the agility at the top.  From the individual down to the organizational and industry levels, this is what we need to do in order to be successful.</p>

<p>It&rsquo;s a journey, it&rsquo;s not just a destination.  We want to make sure that people are able to get where they need to get to and not just think &ldquo;Oh, there&rsquo;s where we&rsquo;re at.  We got there, we&rsquo;re done&rdquo; DevOps is a constant journey.</p>

<p>There&rsquo;s going to be a lot of friendly faces, you&rsquo;ll see people saying hello, if this is your first time, raise your hand.  Welcome to DevOpsDays.  The rule of three is you see people, you have permission to talk to them.  I tell you go up, say hello, tell us your name.</p>

<p>Now, if you&rsquo;re an introvert, it&rsquo;s cool.  Just walk up and stand there.  It&rsquo;s cool.  We&rsquo;re cool with that.  Except in the chillax zone, it&rsquo;s a special place for us to recharge, no talking on your cell phone, no talking to each other.  If you see someone in the chillax zone, leave them alone, you can smile but that&rsquo;s the recharge zone.</p>

<p>The goals for the next two days is to listen to the stories we all have to tell.  Share those stories you have from your experiences because you have different points of view and learn from each other.</p>

<p>Respect the different perspectives.  We&rsquo;re all coming from different places.  Some of us might see this as an old woman, some might see it as a young lady; right?  We all have value to bring.  It doesn&rsquo;t matter if you&rsquo;re a developer, a operations, data scientist, a product manager, a marketer, salesperson, we all have value to bring to improve our businesses.</p>

<p>Towards that, we also want to make this as much of as inclusive space as we can.  We have an anti-harassment policy.  We are dedicated to providing harassment-free space to come together.  Everyone by attending this is agreeing to our code of conduct, which you can find here.</p>

<p>Can all my speakers stand up or wave?  We&rsquo;ve got some awesome speakers.  They come from all walks.  We&rsquo;ve got a very diverse line up.  This is not just a developers and operations staff conference.</p>

<p>We&rsquo;ll have games crafting here in the grand hall as well as in the rooms.  So what is this gaming at a conference about?  Isn&rsquo;t that for the nerds?  No.  Well, yes, but it&rsquo;s okay.</p>

<p>It&rsquo;s also for all of us.  It is a great way to build teams.  To create the collaboration and corporation we want to see.  It teaches the separation of our personal identity from the role we play.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[DevOpsDays Silicon Valley 2015 Speaker Selection Process]]></title>
    <link href="http://iennae.github.io/blog/2015/10/05/devopsdays-silicon-valley-2015-speaker-selection-process/"/>
    <updated>2015-10-05T10:35:29-07:00</updated>
    <id>http://iennae.github.io/blog/2015/10/05/devopsdays-silicon-valley-2015-speaker-selection-process</id>
    <content type="html"><![CDATA[<p>Earlier in the year, I mentioned wanting to write up a blog post on my talk selection process. This isn&rsquo;t that blog post. Instead I&rsquo;m going to share a behind the scenes for the DevOpsDays Silicon Valley 2015 speaker selection process. The process for creating a viable program is <em>hard</em>.</p>

<p>Viable is the right word for so many reasons when it comes to a DevOpsDays event.</p>

<p>Every DevOpsDay event is locally organized and managed by passionate individuals who care about the sociotechnical concerns in the workplace. Organizers strive to create an environment that engages everyone to be part of the conference. <a href="http://www.carolynvanslyck.com/blog/2015/08/devops-days-chicago-2015/">Carolyn Van Slynck</a> described her experience of <a href="http://www.devopsdays.org/events/2015-chicago/">DevOpsDays Chicago 2015</a> and the value of the emphasis on this <a href="http://blog.lanyonm.org/articles/2015/09/01/a-participants-conference-devopsdays-chicago.html">participation</a>. DevOpsDays provide an environment that allows individuals to create with others a learning, inspiring, problem-solving safe space.</p>

<p>Each and every one of us comes from different backgrounds with different day to day experiences leading to a multiplicity of devops. Sharing our experiences in this open space format allows for cross-pollination across organizations strengthening our industry as a whole.</p>

<p>Speakers, whether 30 minute sessions or 5 minute ignites <em>seed</em> the conference participants with ideas. After lunch, we come together as a group to plan out the rest of the day with the ideas that:</p>

<ul>
<li>Whoever comes to a session are the right people,</li>
<li>Whatever happens is the only thing that could have,</li>
<li>Whenever it starts is the right time,</li>
<li>When a session is over, it&rsquo;s over.</li>
</ul>


<p>Every participant of DevOpsDays is ok to leave an Open Space when they are no longer engaged or continue discussing a topic if it&rsquo;s not over (even if the schedule says it&rsquo;s over. Just be respectful to the group interested in the next topic and move the discussion if necessary). Participation is about engagement and speaking up when it feels right for the individual.</p>

<p>So when it comes to speaker selection, we are looking for charismatic diverse speakers AND topics that will encourage discussions. How do we do this, and not allow our unconcious (or concious) biases get in the way? How do we uncover those new voices that will bring topics that we don&rsquo;t even know we need to consider, or bring new perspective to problems that we think are solved? I&rsquo;m not going to go into ensuring you have enough proposals here, instead I&rsquo;m going to focus on the selection process of the available proposals.</p>

<p>The TL;DR; is:</p>

<ul>
<li>Anonymize proposals.</li>
<li>Identify proposal review process.</li>
<li>Rate proposals.</li>
<li>Rank proposals based on rating, unanonymize and take the top 30 talks.</li>
<li>Discuss, re-rank as necessary and plan program.</li>
</ul>


<p>After proposals are emailed to the list, <a href="https://twitter.com/pmoosh">Peter Mooshammer</a>, one of the Silicon Valley DevOpsDays Organizers, anonymized proposals for the website as well as for <a href="https://github.com/obfuscurity/judy">Judy</a>, the tool we chose to use for our first round of ranking talks. Anonymizing is hard work because it was a very manual process. Removing company and personally identifying information. Next year we need to come up with a better way to do this. Thanks Peter for taking the time and effort to anonymize!</p>

<p>Thanks to Jason Dixon for sharing <a href="https://github.com/obfuscurity/judy">Judy</a> and making it easy to setup which allows organizers to collect abstracts in one place, read abstracts in a common format, rate talks, and provide a way to analyze ratings.</p>

<p>I wrote up a proposal reviewing process. It&rsquo;s an important step to have reviewers start with a common language and process of understanding how to rate proposals. <a href="https://github.com/iennae/devopsdays-sv-programplanning/blob/master/proposal_process.md">Here</a> is a modified version of our <a href="https://github.com/iennae/devopsdays-sv-programplanning/blob/master/proposal_process.md">proposal review process</a>. You&rsquo;re welcome to take it as is, or extend.</p>

<p>Once the more than 100 proposals were input into Judy, and the CFP closed, all reviewers were encouraged to rate proposals.</p>

<p>A week after the CFP proposal closing, we met to plan the program. We did a scan for any anonymized proposals that hadn&rsquo;t received as many reviews based on the convenient mode sorting in Judy, and verified whether any of them should be included. This was an important step as we did find a few proposals were higher ranked once we came together as a group. We took the top 30 talks based on ranking and unanonymized them.</p>

<p>Overall the general anonymized ranking process worked to generate a diverse set of speakers. In the next few days we&rsquo;ll be announcing the program. I&rsquo;m pretty excited to share and get your feedback! I&rsquo;d love to hear some ideas on measuring &ldquo;viability&rdquo;, metrics to collect during and after the conference to help improve future selection processes.</p>

<p>There are definitely some problems around how we selected proposals. For now, I&rsquo;ll share 3 of the problems uncovered.</p>

<p>One problem is that it biases us towards well written proposals. One mechanism that helps with this problem, is the Agile Conf&rsquo;s process of opening up CFPs and providing coaching as part of the process. Speakers can choose whether they want to have feedback for their proposal before submitting it. A direct submission portal for speakers into Judy that allowed staging proposals before commiting to the proposal would help with this.</p>

<p>A second problem is that we didn&rsquo;t allocate enough time to review proposals allowing for additional input on our individual rankings. Even with adjusting the CFP (separate issues with this to come in a later blog post), we didn&rsquo;t have enough time to meet as a group multiple times. I saw how throughout the meeting, we discussed proposals and this changed how we perceived some of the proposals. One method of solving this problem is to pair over proposal review. Different perspectives helped us recognize value.</p>

<p>A third problem was managing multiple systems of entry. <a href="https://twitter.com/pmoosh">Peter</a> and I coordinated to make sure we included all proposals, even so a proposal ended up being missed. We caught it before the selection period, but this took time and added stress.  It wasn&rsquo;t easy to &ldquo;un-anonymize&rdquo; submissions, notify speakers of acceptance, receive acceptances from speakers, notify individuals who had not been accepted, coordinate to the website for program listing, or provide a way for speakers to easily update information if needed. This is a problem that definitely could use some improved automation.</p>

<p>I hope this peek behind the curtain has been helpful. Further blog posts to come on observations and improvements on conference organization.</p>

<p>Thanks <a href="https://twitter.com/peternealon">Peter Nealon</a> for being my beta reader!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Idea Generation Summary]]></title>
    <link href="http://iennae.github.io/blog/2015/07/28/idea-generation-summary/"/>
    <updated>2015-07-28T21:57:48-07:00</updated>
    <id>http://iennae.github.io/blog/2015/07/28/idea-generation-summary</id>
    <content type="html"><![CDATA[<p>Today we had a CoffeeOps DevOpsDays Silicon Valley <a href="http://www.jendavis.org/blog/2015/07/27/devopsdays-sv-idea-generation-event/">Idea Generation event</a>, and I had a ton of fun. I led an <a href="https://github.com/chef/chef-summit-2014/wiki/find-your-voice">Open Space at Chef Summit</a> last year which included an idea generation exercise and I followed that format.</p>

<p>We started off in normal SV CoffeeOps style chatting around topics. We then took a look at the <a href="http://www.devopsdays.org/events/2015-siliconvalley/proposals/">current proposals</a>, reading off the titles to prime the creativity pump. I had everyone take 5 minutes to just think about their feels and any ideas. Everyone wanted to start writing so I pushed a little on that. We ended up only &ldquo;thinking&rdquo; for 3 minutes.</p>

<p>Then, for 5 minutes we used postits to write down ideas, 1 idea per postit. If you want to host an event like this yourself, figure out what works for your group. The most important items is that everyone gets primed through some mechanism, the process is explained with supporting tools as needed (whiteboard, postits, etc), and everyone gets the opportunity to share.</p>

<p>Because I know the folks who showed, I forgot to explicitly express &ldquo;This is a safe space with no stupid ideas&rdquo;. Sometimes I go so far as to say &ldquo;stupid&rdquo; is banned. This is really important to level set expectations around communicating within a group setting especially with folks who may not know each other well.</p>

<p>Since we were a small group, I changed up the format from Chef Summit, and we each shared an idea and then discussed the ideas for that round. Time flew by so quickly that we didn&rsquo;t get a chance to brainstorm through all of the ideas.</p>

<p>I did take a few minutes at the end to share Julie Gunderson&rsquo;s <a href="https://www.youtube.com/watch?v=v5yZXjBixys">Embracing My Sparkle</a> Ignite. We had gotten in a discussion about what can be shared in 5 minutes. My feeling is that an effective ignite means that you distill down your content to the most essential. You might not say everything you feel on a topic, but you say enough to start conversations.</p>

<p>With the permission of my fellow attendees, I&rsquo;m sharing some of the <a href="https://docs.google.com/spreadsheets/d/1d_bwz1Rfr6LNYOv6zK51DwZMtmHjV1vldbmty-CxAA8/edit?usp=sharing">talk ideas</a> that we came up with. If you are interested in adding your own, taking one of these and expanding on it, please do.</p>

<p>If you are taking one of the ideas, please update the spreadsheet and in the second column comment so folks know that you are planning on using that topic. If someone is doing an idea that you are interested in, just update the column with your name too. You might even consider reaching out and working together on the topic. Everyone has a different perspective, so it&rsquo;s entirely possible that you&rsquo;ll approach the same idea in completey different unique ways!</p>

<p>Note, that these are potential topics, not necessarily titles.</p>

<p>As a location, <a href="http://www.yelp.com/biz/crema-coffee-roasting-co-san-jose">Crema Coffee Roasting Company</a> has a great space, delicious beverages, gelato and friendly staff. I totally encourage folks in the South Bay to consider it as an option to do these kind of small group events.</p>

<p><strong>About the Chef Summit</strong></p>

<p>By the way, if you have the opportunity you should totally go to <a href="https://www.chef.io/summit/">Chef Community Summit</a>. It&rsquo;s much smaller than Chef Conference, allowing for deep dives on subjects from training to community building, from developing for a specific product, to learning to contribute as a new person in a community. There is one in Seattle and one in London this year.</p>

<p>While the <a href="https://www.chef.io/summit/seattle/">Chef Summit</a> does give people the opportunity to connect with Chef engineers, more importantly it gives people the opportunity to connect with one another. A key pillar of <a href="http://shop.oreilly.com/product/0636920039846.do"><em>Effective Devops</em></a> is affinity; the strength of relationships between individuals, teams, organizations, and even companies. Within the context of describing work, it is generally broken down into 4 categories: reactionary, planning, procedural, and problem solving. I think there is a fifth category that is often overlooked: relationship work.</p>

<p>Relationship work is a catalyst, facilitating all the other kinds of work so that it shortens the time to get other work done, reducing communication barriers, and building trust based on regard. <a href="https://www.chef.io/summit/seattle/">Summit</a> is an opportunity for people to build and strengthen relationships between organizations allowing companies to cross-pollinate ideas and technology, work on building affinity at a larger scale than a coffeeops event.</p>

<p>Affinity is hard to measure. Even harder is measuring and exposing the value of relationship work. I see the outcomes in the community as companies host their own <a href="https://pulse.target.com/2014/02/our-own-devopsdays-conference-inside-of-target/">internal knowledge sharing events</a> encouraging inter-company cooperation based off of stronger affinity. I&rsquo;d love the opportunity to talk about this with others in upcoming open spaces!</p>

<p>Thank you, <a href="https://twitter.com/ljl_geek">Linda</a> and <a href="https://twitter.com/funjon">Jonathan</a> for a great evening of shared idea generation and discussion. I look forward to your awesome proposals!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[DevOpsDays SV Idea Generation Event]]></title>
    <link href="http://iennae.github.io/blog/2015/07/27/devopsdays-sv-idea-generation-event/"/>
    <updated>2015-07-27T10:36:02-07:00</updated>
    <id>http://iennae.github.io/blog/2015/07/27/devopsdays-sv-idea-generation-event</id>
    <content type="html"><![CDATA[<p><strong>tl;dr CoffeeOps - DevOpsDays Idea Generation <br>
July 28, 2015 7:00 PM to 9:00 PM at <a href="http://www.yelp.com/biz/crema-coffee-roasting-co-san-jose">Crema Coffee Roasting Company</a> <br>
950 The Alameda, San Jose, California</strong><br></p>

<p>As one of the DevOpsDays Silicon Valley (DODSV) organizers, I care about creating a diverse and inclusive event. As a whole, DevOpsDays organizers value the participation of each member of the DevOps community and want all attendees to have an enjoyable and fulfilling experience. DODSV has a <a href="http://www.devopsdays.org/events/2015-siliconvalley/conduct/">Code of Conduct</a> as used by previous DevOpsDays.</p>

<p><a href="http://www.devopsdays.org/events/2015-siliconvalley/propose/">The DODSV CFP is open and we want to hear from you!</a> Your views and experiences in enterprise or startup, security, database design and administration, development, operations, community management and more have value in improving the ecosystem, informing others of how to build strong, resilient teams in a sustainable manner while getting work done. Bridget Kromhout, DevOpsDays core  and DOD Minneapolis organizer wrote about this to a greater depth in <a href="http://bridgetkromhout.com/blog/2014/11/03/the-first-rule-of-devops-club/">The First Rule of DevOps Club</a>. The CFP for <a href="http://www.devopsdays.org/events/2015-siliconvalley/propose/">DevOpsDays Silicon Valley</a> is currently open until September 30.</p>

<p>Taking off my &ldquo;DevOpsDays SV&rdquo; organizer hat, and putting on my &ldquo;Community Builder&rdquo; hat for a moment, to help encourage folks who have thought about speaking but are not sure about their ideas, and to provide a space for folks who aren&rsquo;t interested in speaking but want to participate in the process of building a great diverse and inclusive local conference, I&rsquo;ve organized a special edition CoffeeOps event for DevOpsDays Idea generation at <strong><a href="http://www.yelp.com/biz/crema-coffee-roasting-co-san-jose">Crema Coffee Roasting Company</a> in San Jose on July 28, 2015 at 7pm.</strong></p>

<p>This event is open to anyone who is interested in brainstorming potential talk ideas, providing feedback about talk ideas, and connecting individuals who might want to work on ideas together.</p>

<p><strong>More information about DevOpsDays Silicon Valley</strong></p>

<p><strong>DODSV 2015 Dates</strong></p>

<ul>
<li>Call for Proposal closes September 30, 2015</li>
<li>Schedule announced October 7, 2015</li>
<li>DevOpsDays Silicon Valley November 6-7, 2015</li>
</ul>


<p><strong>Conference Details</strong></p>

<p>DevOpsDays Silicon Valley is returning to the <a href="http://www.computerhistory.org/">Computer History Museum</a> in Mountain View.</p>

<p>We are expecting approximately 510 attendees.</p>

<p><strong>Speaking Details</strong></p>

<p>Most talks will be 30 minutes; auto-advancing Ignites are 5 minutes.</p>

<p><strong>Looking for ideas?</strong></p>

<p>Can&rsquo;t make the meeting and looking for ideas? Take a look at our previous DevOpsDays events in <a href="http://www.devopsdays.org/events/2013-mountainview/program/">2013</a> and <a href="http://www.devopsdays.org/events/2014-siliconvalley/program/">2014</a>.</p>

<p>We are looking for fresh, current and unique talks that target a wide range of skill levels from beginner to experts on technology, culture, and community.</p>

<p><strong>Speaker Benefits</strong></p>

<p>All accepted speakers will receive a ticket to DevOpsDays Silicon Valley, including all meals.</p>

<p>Thank you Dave Dash, Jeremy Price, Jamesha Fisher for proof-reading this post! Thanks to my local <a href="http://www.jendavis.org/blog/2015/07/01/starting-a-local-coffeeops/">CoffeeOps</a> crew for giving me the idea to have this event.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Working With Gists Within Sublime]]></title>
    <link href="http://iennae.github.io/blog/2015/07/26/working-with-gists-within-sublime/"/>
    <updated>2015-07-26T23:47:28-07:00</updated>
    <id>http://iennae.github.io/blog/2015/07/26/working-with-gists-within-sublime</id>
    <content type="html"><![CDATA[<p><a href="http://www.sublimetext.com/">Sublime</a> is a pretty sweet editor in combination with the Sublime <a href="https://packagecontrol.io/">package manager</a>. Today, I learned about the <a href="https://github.com/condemil/Gist">Gist package add-on</a>. Gists are a way to share work. Every gist is a git repository which means that it can be forked and cloned in the same ways. Gists can be public or secret. Public gists are searchable; secret gists are not, but they are accessible by anyone with the URL. Most of the time, I use gists for training classes to assign IPs, as well as snippets of code.</p>

<p>After installing the package, to interact with Github&rsquo;s gist repository generate a <a href="https://github.com/condemil/Gist#generating-access-token">new token on Github</a>. You can also configure the settings to use Enterprise Git.</p>

<p>All of the commands to interact with Gist require 2 key combinations by default. With the <a href="https://github.com/condemil/Gist">Gist package add-on</a> on OS X, Command + K is the first key combination. The second is dependent on the desired action. Command + K followed with Command + O will open up a list of available gists. Double clicking opens up a new window in sublime with the content.</p>

<p>To save the gist, it&rsquo;s more than just saving the file in Sublime, it requires the key combo of Command + K Command + S.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Diversity in Lens - Optimism]]></title>
    <link href="http://iennae.github.io/blog/2015/07/23/diversity-in-lens-optimism/"/>
    <updated>2015-07-23T19:26:20-07:00</updated>
    <id>http://iennae.github.io/blog/2015/07/23/diversity-in-lens-optimism</id>
    <content type="html"><![CDATA[<p>Earlier today I was sharing my feelings about optimism and it being one lens to look through to view the world. Each of us make a choice about &ldquo;reality&rdquo;. We process a moment in time through our experiences and our current state of mind cataloging it for future interactions. Shared stories from others help us to further entrench ourselves in our beliefs and values. Even in listening to a story, we are interpreting it based on our own assumptions about reality and what the words mean. We assign context based on our own beliefs, often assigning values of someone&rsquo;s character over words and behaviors rather than viewing it through the subjective context that individual is experiencing.</p>

<p>The lens that we view the world through can be of optimism or pessimism; neither of which are inherently bad or good. Just as with a dev or ops role where it doesn&rsquo;t matter what role we are in as long as we understand the impact on business workflow; it doesn&rsquo;t matter what lens we are using as long as we understand its impact on our overall processing. The lens in place for a particular moment impacts our perceptions and affects the decisions that we make. When I&rsquo;m viewing the world through the optmist lens, I&rsquo;m driven by enthusiasm and energy seeing the opportunities and possibilities around me. When I&rsquo;m viewing the world through the pessimist lens, I&rsquo;m preparing myself for negative outcomes conserving energy until needed.</p>

<p>In 2008, I wrote the following for myself. I&rsquo;m sharing it because I think it&rsquo;s important that we start talking about and actively choosing the way we choose to see the world. Sharing our personal context helps others to understand our behaviors perhaps even seeing themselves in a different light.</p>

<blockquote><p>&ldquo;Focus on the best. The brilliance. The love. The hope. The best of what your life is. When someone asks you how your day was, or what you&rsquo;ve been up to.. reply with the very best of what is. Don&rsquo;t think about the frustrating bits.&rdquo;</p>

<p>That&rsquo;s the advice I&rsquo;ve been giving myself. On these last few days of taking time off of work.. and really spending time on self, I&rsquo;ve thought about where I want to be and what I want to do.</p>

<p>So there is this possibility of getting laid off. The economy sucks. There is so much gloom, doom, sadness.. I could wallow in the depths of it. I could hurt with the internal drama of a variety of situations.</p>

<p>Not everyone is going to like you. Not everyone is going to agree with you. It doesn&rsquo;t matter. Believe in yourself, and believe in others. Believe the best, cherish your friends and loved ones, and do whatever it is that you feel driven to do.</p>

<p>I feel happy. Things are good. I enjoy my job. I have a variety of friends and interests and life is <em>rich</em>.</p></blockquote>

<p>These words still guide me. With time and experience I&rsquo;ve realized that it&rsquo;s important to share the experiences and my authentic feelings with people. Letting toxicity of experiences build up without an outlet impacted me in a way that was unhealthy impacting my health in a myriad of ways. I still choose the optimist lens; believing in me and believing in others. I am happy. Things are good. I enjoy my job. I have a variety of friends and interests and life is <em>rich</em>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Sparkle Edition Washington DC Training]]></title>
    <link href="http://iennae.github.io/blog/2015/07/20/sparkle-edition-washington-dc-training/"/>
    <updated>2015-07-20T11:18:49-07:00</updated>
    <id>http://iennae.github.io/blog/2015/07/20/sparkle-edition-washington-dc-training</id>
    <content type="html"><![CDATA[<p>Since I&rsquo;m co-chairing the Devops track at Agile 2015 with <a href="http://www.ddegrandis.com/">Dominica DeGrandis</a>, I figured I&rsquo;d take the opportunity to meet more folks in the Washington DC area to see what kind of different challenges folks are facing with implementing Chef and Devops in general. One way I&rsquo;m doing this is an open invite for early edition <a href="http://www.coffeeops.org/">CoffeeOps</a>. I&rsquo;m also giving <a href="https://www.chef.io/blog/event/chef-intermediate-topics-washington-dc-3/">Chef Intermediate</a> on August 10-11 and <a href="https://www.chef.io/blog/event/2-day-chef-fundamentals-washington-dc-5/">Chef Fundamentals</a> on August 12-13.</p>

<p>One thing that I really enjoy about Chef (the company) is that we make our <a href="https://www.chef.io/contact/open-training/">training materials</a> available to folks under a <a href="http://creativecommons.org/licenses/by-sa/4.0/">Creative Commons license</a> that allows (even encourages) folks to share and adapt the content as long as appropriate credit and licensing is maintained. Every individual that does Chef training teaches a little bit differently in terms of style although the materials are exactly the same. The value in the training isn&rsquo;t the materials, but the conversations, interactions and space that is created by the actual class. Every class is completely different because the people going to the training are completely different.</p>

<p>Private trainings (trainings for specific companies) are really interesting because we can have really deep discussions about specific topics (depending on time) and it&rsquo;s easier to get people in a collaborative mindset.</p>

<p>Public trainings are also very interesting because I can encourage folks to cross the chasms between companies and share their individual challenges. I&rsquo;ve found that depending on the area that I&rsquo;m training, it can be harder to encourage folks to get into a collaborative mindset. (Shoutout to the trainings I did in Chicago where folks were 100% helpful. Extra kudos to Phaedra Evans and <a href="https://twitter.com/MarvinEStreet">Marvin Street</a> for going above and beyond in supporting their fellow students!)</p>

<p>My goals when training are to create a safe place for folks to learn, share and build connections. All of our trainings fall under the Chef community <a href="https://docs.chef.io/community_guidelines.html">code of conduct</a>.</p>

<p>In Fundamentals, my goals are to help folks understand the core concepts of chef, read cookbooks confidentally with an eye towards identifying good and bad patterns, write cookbooks, and debug issues that occur through understanding what&rsquo;s going on. In Intermediate, my goals are to help people to understand more about identifying good patterns in using chef through greater understanding of resources through writing lightweight resource and providers (LWRPs),  additional debugging skills, and basic testing while in the process of leveling up ruby skills.</p>

<p>How do you know whether you are ready for <a href="https://www.chef.io/blog/event/chef-intermediate-topics-washington-dc-3/">Intermediate training</a>?</p>

<ul>
<li>Do you understand what happens when chef-client runs?</li>
<li>Can you explain Chef terminology clearly without having to look it up? i.e. concepts like resource, recipe, cookbook, organizations, roles, environments</li>
<li>Are you comfortable with your editor of choice and navigating the organization of a Chef cookbook?</li>
<li>Do you have Chef DK installed on your workstation?</li>
</ul>


<p>A second thing that I really enjoy about Chef (the company) is the attention to diversity and inclusion measures. Earlier in the year we provided <a href="https://www.chef.io/blog/2015/03/05/apply-for-a-chefconf-2015-diversity-scholarship-by-march-13/">diversity scholarships to Chef Conf</a>. Additionally, we regularly provide training scholarships.</p>

<p>I have a diversity training pass for <a href="https://www.chef.io/blog/event/2-day-chef-fundamentals-washington-dc-5/">Chef Fundamentals</a> on August 12-13. Training includes a continental breakfast, lunch, and an assortment of beverages. Please get in touch with me <a href="mailto:sigje@chef.io">sigje@chef.io</a> if you are available for the days of the class, have transportation to and from the class, have a wifi-enabled laptop, a SSH/SCP agent (OpenSSH, putty/WinSCP or equivalent), and a text editor, and most importantly have an interest in learning how to write infrastructure as code with Chef. Please provide the following information:</p>

<ul>
<li>Name</li>
<li>Contact information</li>
<li>Background</li>
<li>Confirmation that you can attend Fundamentals training on August 12-13, 2015 at the MicroTek in Washington DC with a functional laptop.</li>
</ul>


<p>If you are interested, but feel you don&rsquo;t have the right skills please get in touch anyways. I will help you identify whether you are gauging your abilities correctly for this Fundamentals class, and also point you in the direction of resources that will help you get the right skills. One resource that is available to you right now is the <a href="http://learn.chef.io/">Learn Chef site</a> that will walk you through some of the initial concepts and prep your workstation to be ready for the class.</p>

<p>I also have a sekret code &ldquo;HELLO-CHEF&rdquo; that will take 10% off both <a href="https://www.chef.io/blog/event/2-day-chef-fundamentals-washington-dc-5/">Chef Fundamentals</a> and <a href="https://www.chef.io/blog/event/chef-intermediate-topics-washington-dc-3/">Chef Intermediate</a>.</p>

<p>ETA: Extra special code &ldquo;WDC20&rdquo; for 20% off both classes!</p>

<p>The conference and training start early, so if you are an early person and are up for some <a href="http://www.coffeeops.org/">CoffeeOps</a> time in the DC area let me know!</p>

<p>Sparkle On!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Starting a Local Coffeeops]]></title>
    <link href="http://iennae.github.io/blog/2015/07/01/starting-a-local-coffeeops/"/>
    <updated>2015-07-01T01:00:00-07:00</updated>
    <id>http://iennae.github.io/blog/2015/07/01/starting-a-local-coffeeops</id>
    <content type="html"><![CDATA[<p>A few years ago I met <a href="https://twitter.com/mariusducea">Marius Ducea</a> at <a href="http://www.chromaticcoffee.com/">Chromatic Coffee</a>. Afterwards reflecting on the time that I spent, I felt more enthusiastic about my work in the industry due to Marius being awesome and the mental engagement outside of the everyday.</p>

<p>Marius has been a key <a href="http://www.devopsdays.org/events/2015-siliconvalley/">DevOpsDays Silicon Valley</a> organizer for years and community builder within the Chef and DevOps community. His insight into a variety of current and future technology was interesting and educational.</p>

<p>The conversation allowed me to see beyond the perceived value of my role based on the the technology and cultural mores of my company, that &ldquo;ladder of prestige&rdquo; present in some organizations that ranks Operations staff lower than Engineering (and &ldquo;non-technical&rdquo; roles lowest of all). Being in the middle of my company&rsquo;s &ldquo;ladder of prestige&rdquo; led to a lot of pressure with little reward. I had been having problems seeing the value of the work I was doing or what impact it made.</p>

<p>Talking to Marius gave me insight about what I was working on. It helped me recognize that I needed a change and that it was critical for my mental health to connect with a larger community of practitioners on a more regular basis. I envisioned creating a &ldquo;hallway track&rdquo; space with intra-company cooperation; affording individuals a place to meet together with no agenda, to connect and share in an undirected manner.</p>

<p>Conferences have this informal hallway track; the conversations in conference corridors in between sessions and after hours. There are barriers to quality hallway track time: inclusiveness of the conference, costs of attendance and job flexibility.</p>

<p>If a conference does not have a lot of diversity, and the attendees are very cliquish, this can lead to people feeling very isolated who aren&rsquo;t already established in the community. Conferences that have a code of conduct and make other efforts to be inclusive can help facilitate individuals participating in the hallway track. Additionally costs of attendance and job flexibility, may make the hallway track unavailable to a majority of people in the industry. Any specific conference may only last for a few days, why wait a whole year to get the benefits of the &ldquo;hallway track&rdquo;?</p>

<p>I sent out a tweet with a location, time and #coffeeops and showed up. The first few times, only one or two folks would show up. As time passed more people joined and interesting discussions like <a href="https://medium.com/bridging-the-gaps/leveling-up-your-skills-51169238e0d7">leveling up your skills</a> were had. Years later, other folks have started up local coffeeops from <a href="http://www.meetup.com/Downtown-Seattle-Friday-Morning-CoffeeOps/">Seattle, Washington</a> to Sydney, Australia. I&rsquo;ve changed jobs, and as a remote employee at <a href="http://chef.io">Chef</a>, it has become even more valuable to me as water cooler time; that time to take a break and remember to breathe.</p>

<p>It&rsquo;s also a place to share ideas in their nascent form allowing room for the ideas to grow to greatness through the contributions and challenges of the group. All of the folks attending CoffeeOps Santa Clara were critical in helping me shape my thoughts in the well-received <a href="http://livestream.com/devopsdaysorg/events/3044568/videos/52394934">&ldquo;Hero to Zero&rdquo;</a> talk on <a href="http://burnout.io/">burnout and &lsquo;heroic&rsquo; behaviors in the workplace</a>.</p>

<p><a href="http://www.coffeeops.org/">Coffeeops</a> is a way to generate your own hallway track, cross company cooperation and individual improvement.</p>

<h2>How do you start up a CoffeeOps?</h2>


<ul>
<li>Should you start a CoffeeOps? How much community do you already have? Are there people looking for the same kind of outlet? Is there already something filling the gap? What is the density of people in your area? Do you have the time and energy to expend if this is completely new in your area?</li>
<li>Be patient, it takes time to catch hold.</li>
<li>It&rsquo;s important to be welcoming, encouraging inclusivity as new people join.</li>
<li>Talk about it. Ask for help. Use twitter and mailing lists.</li>
<li>Pick a good environment for talking.</li>
<li>Have coffee and show up. More people will show up over time. (You can also drink tea or cocoa or have brunch!)</li>
<li>When starting out don&rsquo;t get too bogged down by formalities of rules and procedures. Code of Conduct is important. Any other aspect is open for discussion based on the group of people that come together. Some folks will make the decision to come based on an agenda. Others will be more likely to come if it&rsquo;s more freeform as they deal with other obligations before heading over.</li>
</ul>


<p>Shout out to all the Slack CoffeeOps folks who helped me polish my thoughts here, and for the introduction to <a href="http://www.gouletpens.com/ink-drop">Ink Drop</a> to help me in my quest for awesome ink.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Uniball Jetstream]]></title>
    <link href="http://iennae.github.io/blog/2015/01/23/uniball-jetstream/"/>
    <updated>2015-01-23T12:49:59-08:00</updated>
    <id>http://iennae.github.io/blog/2015/01/23/uniball-jetstream</id>
    <content type="html"><![CDATA[<p>I purchased a set of 3 Uniball Jetstream RT 0.7 mm black ink in January of 2014. The first thing I noticed was the length of the pen was significantly shorter from the Safari that I&rsquo;ve been using. It will take some time before I can tell whether this is actually a problem or just a difference.</p>

<p>The ink definitely dries quickly. I can&rsquo;t see how someone could smudge this unless the paper was somewhat wet already.</p>

<p>On moleskin paper, it was more readily stuttering where ink seemed to stop.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Examing Writing]]></title>
    <link href="http://iennae.github.io/blog/2015/01/23/examing-writing/"/>
    <updated>2015-01-23T11:55:55-08:00</updated>
    <id>http://iennae.github.io/blog/2015/01/23/examing-writing</id>
    <content type="html"><![CDATA[<p>As a supporter of the <a href="http://www.thesparknotebook.com/">spark notebook</a> kickstarter, I&rsquo;m eagerly looking forward to the &ldquo;perfect&rdquo; notebook. I find the act of writing notes much more helpful to organizing my thoughts than typing in to a computer most of the time. The challenge is finding the right combination of paper, pen, and ink. When everything is in balance, the flow of thoughts is seamless. There is no thoughts blocked as the pen dribbles, sticks, or stutters across the page. Ink flows in a seamless concert without the fear of smearing as I pause and withdraw inwards to reflect.</p>

<p>When Kate Matsudaira blogged about the search for the <a href="https://popforms.com/notebooks-fall-short/">perfect notebook</a> it resonated with me for many reasons. The deconstruction of the problems of the many notebooks she examined illuminated an important process that I hadn&rsquo;t thought through before especially around keeping track of what works, why, and how it could be better. I don&rsquo;t think there is a &ldquo;one&rdquo; perfect notebook, but I think the <a href="http://www.thesparknotebook.com/">spark notebook</a> is perfect for organization of goals, time keeping and the &ldquo;big&rdquo; ideas in daily work life.</p>

<p>When the spark notebook delivery email came out, I realized that I wanted to know more about the writing utensils people use and prefer to write with. I tweeted out and the twitterverse responded.</p>

<blockquote class="twitter-tweet" lang="en"><p>what is the recommended pen to use with my soon to be here perfect notebook :) <a href="https://twitter.com/katemats">@katemats</a></p>&mdash; Jennifer (@sigje) <a href="https://twitter.com/sigje/status/558101746208493568">January 22, 2015</a></blockquote>


<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>


<p>Generally I try pens out and then forget what worked and didn&rsquo;t. So I&rsquo;m going to try out some of the suggestions and share my experiences.</p>

<p><strong> Lamy Safari Fountain Pen </strong></p>

<p>Back in April 2014 at Chef Conf, <a href="https://twitter.com/isafarnik">@isafarnik</a> let me borrow his Lamy Safari. It flowed, was a great width for me in my hand and wrote nicely in my moleskin.</p>

<p>I purchased the <a href="http://www.amazon.com/gp/product/B0002T401Y/ref=as_li_tl?ie=UTF8&camp=1789&creative=390957&creativeASIN=B0002T401Y&linkCode=as2&tag=sigjesspace-20&linkId=VD7GXIAUV7QRUYMT">Lamy Safari Charcoal Fountain Pen</a><img src="http://ir-na.amazon-adsystem.com/e/ir?t=sigjesspace-20&l=as2&o=1&a=B0002T401Y" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> (along with a second blue one) and it&rsquo;s been my go to pen since then.</p>

<p>I also have tried out different ink with the <a href="http://www.amazon.com/gp/product/B0019W4EIW/ref=as_li_tl?ie=UTF8&camp=1789&creative=390957&creativeASIN=B0019W4EIW&linkCode=as2&tag=sigjesspace-20&linkId=VWI4SOYVWBXFKCGT">Lamy Safari Converter Z24</a><img src="http://ir-na.amazon-adsystem.com/e/ir?t=sigjesspace-20&l=as2&o=1&a=B0019W4EIW" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> and <a href="http://www.amazon.com/gp/product/B00BZ28JDW/ref=as_li_tl?ie=UTF8&camp=1789&creative=390957&creativeASIN=B00BZ28JDW&linkCode=as2&tag=sigjesspace-20&linkId=VBG3ZQMCTOPX2SXP">Lamy Refills by Monteverde Rainbow Fountain Pen Cartridge</a><img src="http://ir-na.amazon-adsystem.com/e/ir?t=sigjesspace-20&l=as2&o=1&a=B00BZ28JDW" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />.</p>

<p>In the converter cartridge, I used <a href="http://www.amazon.com/gp/product/B000WJAJQ4/ref=as_li_tl?ie=UTF8&camp=1789&creative=390957&creativeASIN=B000WJAJQ4&linkCode=as2&tag=sigjesspace-20&linkId=3MYQARAGEZLVGZ5X">Noodlers Polar Blue Eternal Ink</a><img src="http://ir-na.amazon-adsystem.com/e/ir?t=sigjesspace-20&l=as2&o=1&a=B000WJAJQ4" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />.</p>

<p><strong>The good</strong>:</p>

<ul>
<li>Pen is a great width for my hand.</li>
<li>Ink flows easily.</li>
<li>My handwriting is improved just from feeling like I&rsquo;m writing with something substantial.</li>
<li>The Lamy ink and the Noodlers Polar Blue ink are great colors.</li>
</ul>


<p><strong>The problems</strong>:</p>

<p><strong><em> The Ink </em></strong></p>

<ul>
<li>The ink can smear if touched right after, so if I pause or am writing too quickly &ndash; smudge.</li>
<li>The ink bleeds through on most papers. I received the &ldquo;perfect&rdquo; notebook at a conference that did NOT which was amazing (yay for conference swag of good notebooks!). A notebook I got from a Google event has also been great. It works &ldquo;ok&rdquo; in moleskin notebooks.</li>
<li>The Monteverde Rainbow ink has some not great colors. I should have figured out what maps to what, but for example the red wasn&rsquo;t RED, and the color I&rsquo;m currently trying out is a murky brown.</li>
</ul>


<p>Due to the first problem, I tend to write a bit differently filling in the top of the back and front of facing pages and then filling in below.</p>

<p><strong><em> The Pen </em></strong></p>

<p>I don&rsquo;t really pay attention too much to the fact that I get ink all over me most of the time. I&rsquo;ve noticed this with most pens. I noticed that my blue Lamy was more messy than the black pen. After examining the nib closely I think that there might actually be a defect in the nib. <a href="http://www.reddit.com/r/fountainpens/comments/1uhn2t/really_bad_ink_creep_on_lamy_safari/">When I did some google searches</a> which led me to <a href="http://www.richardspens.com/?page=ref/ttp/creeps.htm">A case of the Creeps</a>. So it could be a mixmatch between the ink and the nib (which is why I purchased the different ink to try out). Essentially, I need to find a &ldquo;less wet&rdquo; ink to try out with the safari to see whether the experience changes.</p>

<p>In future posts, I&rsquo;ll take a look at the Unball JetStream, Bic Atlantis, PaperMate InkJoy, Uniball Signo 207, and Le Pens.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Octopress Tips to Myself]]></title>
    <link href="http://iennae.github.io/blog/2015/01/04/octopress-tips-to-myself/"/>
    <updated>2015-01-04T00:20:00-08:00</updated>
    <id>http://iennae.github.io/blog/2015/01/04/octopress-tips-to-myself</id>
    <content type="html"><![CDATA[<p>When building from source to add new posts.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>git clone git@github.com:REPO
</span><span class='line'><span class="nv">$ </span><span class="nb">cd </span>REPO
</span><span class='line'><span class="nv">$ </span>git checkout -b <span class="nb">source </span>origin/source
</span><span class='line'><span class="nv">$ </span>git clone git@github.com:iennae/iennae.github.io.git _deploy
</span><span class='line'><span class="nv">$ </span>rake new_post<span class="o">[</span><span class="s2">&quot;TITLE&quot;</span><span class="o">]</span>
</span></code></pre></td></tr></table></div></figure>


<p>Write blog entry.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>rake generate
</span><span class='line'><span class="nv">$ </span>rake deploy
</span><span class='line'><span class="nv">$ </span>git add .
</span><span class='line'><span class="nv">$ </span>git commit -m <span class="s1">&#39;MESSAGE&#39;</span>
</span><span class='line'><span class="nv">$ </span>git push origin <span class="nb">source</span>
</span></code></pre></td></tr></table></div></figure>


<p>For zsh issues for <a href="https://github.com/imathis/octopress/issues/117">rake new_post</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[First Hike of 2015: Nisene Marks SP]]></title>
    <link href="http://iennae.github.io/blog/2015/01/03/first-hike-of-2015-nisene-marks-sp/"/>
    <updated>2015-01-03T23:12:22-08:00</updated>
    <id>http://iennae.github.io/blog/2015/01/03/first-hike-of-2015-nisene-marks-sp</id>
    <content type="html"><![CDATA[<p>A little over seven years ago I was starting a new job. At the time I was 3 years into a health journey and had a goal of doing 25 hikes in 1 year. In 2009, I hiked my longest single day hike of 14 miles across two parks.</p>

<p><img src="https://farm4.staticflickr.com/3453/3393516147_e760d05d33_n.jpg" alt="" /></p>

<p>Over time being the single point of failure at work meant that I was not able to spend weekends hiking. Somewhere along the way, job stress combined with appendicitis and complications from surgery led to a state of low energy, high pain and not a lot of positive fueling activities.</p>

<p>In 2014, I joined Chef. All of a sudden some of the barriers that were in place fell away. Admittedly some of these were self imposed based on my own (high) expectations of my work. I started physical therapy and celebrated being able to walk further month by month.</p>

<p>For the last 3 weeks I have been on vacation and taking advantage of it in part by getting back into hiking. Each year for the last few years I&rsquo;ve set a reading goal on Goodreads that I have accomplished, this year I&rsquo;m bringing back my hiking goals! Rather than setting a number of hikes, my goal is to be able to hike <strong>15 miles</strong> in a single day by December 2015.</p>

<p>Today George, Brian and myself went on our first hike of 2015 at <a href="http://www.parks.ca.gov/?page_id=666">The Forest of Nisene Marks State Park</a> which is a few miles north of Aptos. It was relatively short as I&rsquo;m still sore from the last hike of 2014. Even though I&rsquo;ve lived in the Bay area for years, until this past December I&rsquo;ve never gone to this park. It&rsquo;s about an hour away from home and actually has a nicer area to walk with your dog than Henry Cowell. There are not great bathroom facilities here so not a great park for young families and long trips. The toilet at the trail head is enclosed in a small dark, dank building with the corpses of hundreds of flies on sticky paper hanging over your head. Paths are also not well marked. Lower areas allow dogs on leashes but past the &ldquo;Winter Gate&rdquo; dogs are only allowed on the fire road. Some of the trails cross the creek, and the expectation is to cross logs or rocks or wade.</p>

<p>Second growth redwoods line the road past the locked &ldquo;Winter Gate&rdquo;. There are also some eucalyptus trees. The creek burbles along to the side. Mary Easton Picnic area is very quiet with lots of picnic tables and another small dark less dank toilet stop.</p>

<p>We didn&rsquo;t see most of the items on this <a href="http://www.inaturalist.org/check_lists/6438-The-Forest-of-Nisene-Marks-State-Park-Check-List">checklist</a> but we did see Oyster mushrooms! Apparently there is a yearly <a href="http://ffsc.us/fair/2015/about">Fungus Fair</a> coming up next weekend where you can learn about the different fungi in the forest. We did see quite a bit of English Ivy which appears to be an invasive species.</p>

<p>Later this year we hope to hike up to the <a href="http://www.parks.ca.gov/pages/666/files/TheForestNiseneMarksWebBroch2012.pdf">1989 Loma Prieta Earthquake epicenter</a>. This is in a no-dog area part of the park so it will have to be a no-dog hiking day.</p>

<p>Overall this was a great adventure. I can easily see us coming back multiple times as I build back my stamina. There are short and long hikes with a wide range of experiences. The Aptos Creek Fire Road between the Steel Bridge to the Mary Easton Picnic area is mostly flat with a small bit of elevation towards the end. Past this area there is a gate that marks where dogs aren&rsquo;t allowed (and they aren&rsquo;t allowed on the Porter Trail or the West Ridge Trail). The Terrace Trail, and Oak Ridge Trail both have a small bit of elevation. While our hike was short, there is so much more for us to do here including hiking all the way out to the Soquel Demonstration State forest.</p>

<p>I&rsquo;m really glad that my current job allows for me to even consider the idea of working towards this goal for myself. With the additional travel for clients and conferences there is potential for me to explore other areas as well. I am privileged to live in an area that continues to develop additional trails and parks to explore. I&rsquo;m looking forward to finding out about other places that have trails to explore. If you have recommendations for your favorite areas to hike please do share!</p>
]]></content>
  </entry>
  
</feed>
