<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Cameron Stitt on Medium]]></title>
        <description><![CDATA[Stories by Cameron Stitt on Medium]]></description>
        <link>https://medium.com/@cam_stitt?source=rss-e32754d60b02------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*0SbXuv2ZkhH2_O8EXVbGnQ.jpeg</url>
            <title>Stories by Cameron Stitt on Medium</title>
            <link>https://medium.com/@cam_stitt?source=rss-e32754d60b02------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 30 May 2026 17:38:55 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@cam_stitt/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Using Codeship with Go and Glide]]></title>
            <link>https://medium.com/openpixel/using-codeship-with-go-and-glide-66c015984b71?source=rss-e32754d60b02------2</link>
            <guid isPermaLink="false">https://medium.com/p/66c015984b71</guid>
            <category><![CDATA[codeship]]></category>
            <category><![CDATA[testing]]></category>
            <category><![CDATA[golang]]></category>
            <category><![CDATA[docker]]></category>
            <category><![CDATA[ci]]></category>
            <dc:creator><![CDATA[Cameron Stitt]]></dc:creator>
            <pubDate>Wed, 24 Aug 2016 12:17:37 GMT</pubDate>
            <atom:updated>2016-08-25T07:40:35.757Z</atom:updated>
            <content:encoded><![CDATA[<p><strong>Note:</strong> This has been migrated from my original blog. Originally posted on Wednesday, May 25, 2016</p><p><a href="https://codeship.com/">Codeship</a> is a fantastic tool to assist in all your continuous integration/deployment needs. Go support is provided out of the box however does not use aspects such as version locked dependencies out the box. When I happened to trial it out, I managed to get a working example of a Go setup including <a href="https://github.com/Masterminds/glide">Glide</a> dependencies. This post will provide you with a breakdown of how I managed to get this working. The example should be easily transferable to most other vendor tools such as Godep.</p><h4>Test Settings</h4><p>Our test settings need to do a few things.</p><ol><li>Install Glide</li><li>Run <em>glide install</em></li><li>Ensure dependencies are in $<em>GOPATH</em></li><li>Run our tests</li></ol><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/51029f4f6d37b057f26974bf470ec455/href">https://medium.com/media/51029f4f6d37b057f26974bf470ec455/href</a></iframe><p>Let’s step through this line by line:</p><pre>source /dev/stdin &lt;&lt;&lt; “$(curl -sSL <a href="https://raw.githubusercontent.com/codeship/scripts/master/languages/go.sh">https://raw.githubusercontent.com/codeship/scripts/master/languages/go.sh</a>)&quot;</pre><p>First, we run this script that installs the version of Go declared in the <em>GO_VERSION</em> environment variable. This is not required for this tutorial, but can be helpful when using Go within Codeship.</p><pre>go get github.com/Masterminds/glide</pre><p>Then we have to install Glide via the go get command. This is the easiest way to install the dependency and automatically has it included in the <em>PATH</em>.</p><pre>glide install</pre><p>Now that glide is installed, we need to fetch all of our dependencies.</p><pre>rsync -razC vendor/ $GOPATH/src/</pre><p>Our final step in preparation is syncing the vendor directory into our <em>GOPATH</em>.</p><p>Now that we have all our version locked dependencies installed into our <em>GOPATH</em> we can run our desired test commands.</p><pre>go vet -v $(glide novendor)<br>go test -v $(glide novendor)</pre><p>If you have not previously used Glide, <em>$(glide novendor)</em> allows us to ignore the vendor directory when running our test commands.</p><p>All done. We now have version locked dependencies being used within our continuous integration platform.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=66c015984b71" width="1" height="1" alt=""><hr><p><a href="https://medium.com/openpixel/using-codeship-with-go-and-glide-66c015984b71">Using Codeship with Go and Glide</a> was originally published in <a href="https://medium.com/openpixel">OpenPixel</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Day to Day]]></title>
            <link>https://medium.com/@cam_stitt/day-to-day-c4c3936b6bd3?source=rss-e32754d60b02------2</link>
            <guid isPermaLink="false">https://medium.com/p/c4c3936b6bd3</guid>
            <category><![CDATA[self-improvement]]></category>
            <category><![CDATA[productivity]]></category>
            <category><![CDATA[time-management]]></category>
            <dc:creator><![CDATA[Cameron Stitt]]></dc:creator>
            <pubDate>Thu, 15 Oct 2015 05:53:28 GMT</pubDate>
            <atom:updated>2015-10-15T05:53:28.370Z</atom:updated>
            <content:encoded><![CDATA[<h4>How journaling has helped my productivity</h4><p>For the past week or so I have been keeping a journal of my thoughts throughout the day. Although not a new idea by any means, I would love to share my experience.</p><p>Like most people, I have a lot going on in my life. Three months ago I started my own consulting company. Two months ago I became a first time father, which is easily the most terrifying and rewarding moment of my life. Amongst all this change, I found that I couldn’t find any time to reflect on my own thoughts and feelings. Previously, there always seemed to be the time to find a quiet place to sit down and think about what I had been doing and how I was feeling. This is certainly not the case anymore but I wouldn’t want to change it for anything. Instead, it was time to adapt and find new ways to achieve the same outcome.</p><p>Having never journaled before I wanted to find a process that was simple, easy to follow and provided value to reflect on in future days or weeks.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pg7wsPAlAlgZAtuUzsxQ6w.png" /><figcaption>My journal for today.</figcaption></figure><p>It is extremely simple, but allows me to see my progress throughout the day including what has held me back or pushed me on to achieve a lot. The Sleep and Overall scores are also great for reflection and can even be tallied and the end of the week to give an average score. Providing a time for each section of thoughts also assists you in tracking your progress throughout the day.</p><p>So far the journal has achieved a few things. My focus throughout the day is generally better, due to the small amounts of time I spend writing notes to look on later. If there is a frustrating moment, I try to note it down immediately so I can move on from it. The biggest thing for me is that I am getting a true sense of what motivates me and what makes me happy, something I have never really been able to achieve.</p><p>Any note taking tool will work, but I recommend [Evernote](<a href="https://www.evernote.com/">https://www.evernote.com</a>), [DayOne](<a href="http://dayoneapp.com/">http://dayoneapp.com/</a>) or a similar tool. A few bonus features can be tagging people or places to see what has the biggest impact on your life.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c4c3936b6bd3" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Taking Flight]]></title>
            <link>https://medium.com/@cam_stitt/taking-flight-ac40dd0003d?source=rss-e32754d60b02------2</link>
            <guid isPermaLink="false">https://medium.com/p/ac40dd0003d</guid>
            <dc:creator><![CDATA[Cameron Stitt]]></dc:creator>
            <pubDate>Wed, 14 Aug 2013 04:39:49 GMT</pubDate>
            <atom:updated>2013-08-14T05:12:44.399Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*_dOLwC-Om-TzwqaK.jpeg" /></figure><h4>An overview of the Flight framework by Twitter</h4><p>I first tried Flight in March this year when I created a simple <a href="http://soarapp.herokuapp.com/">Todo app</a>. After completing that, I didn’t look at Flight again until a month ago. I started using it for a personal project and after a few initial struggles I feel like it could be the long-term framework I have been looking for. The reason for this is summed up nicely on the Flight website:</p><blockquote>It’s agnostic to how requests are routed, which templating language you use or even if you render your HTML on the client or the server.</blockquote><h3>Lift Off</h3><p>Getting Flight set-up was easy. Using Bower, I installed the known requirements (<a href="https://github.com/kriskowal/es5-shim">es5-shim</a>, <a href="http://jquery.com/">jQuery</a>, <a href="http://requirejs.org/">requirejs</a>) and setup my first component.</p><pre>define(function(require) {<br>  var defineComponent = require(“flight/lib/component”);<br>  return defineComponent(helloWorld);<br>  <br>  function helloWorld () {<br>    this.after(&quot;initialize&quot;, function() {<br>      alert(&quot;Hello World!&quot;);<br>    });<br>  }<br>});</pre><p>Pretty simple, isn’t it. This is doing nothing more than using Flight’s <a href="https://github.com/flightjs/flight/blob/master/doc/advice_api.md#thisafterexistingfuncname-customfunc">Advice API</a> to wrap the default “initialize” method and alert them once it’s ready. For this to run, you need to attach the component to the page.</p><pre>require([&quot;ui/helloWorld.js&quot;], function(HelloWorldUI) {<br>  HelloWorldUI.attachTo(document);<br>});</pre><p>Again, pretty simple. The attachTo method accepts a DOM element which becomes the context for the component.</p><h3>Where Are My Models?</h3><p>Flight does not handle models directly. The following is a quote from the Flight website:</p><blockquote>It doesn’t prescribe or provide any particular approach to rendering or providing data to a web application</blockquote><p>This means it is up the developer to choose the best approach for each application. Some approaches I have seen mentioned in regards to Flight are:</p><ul><li>No models (Objects and arrays. Wow!)</li><li><a href="https://github.com/arendjr/laces.js">laces.js</a></li></ul><p>At this point I am leaning towards the modeless approach. Libraries such as <a href="http://lodash.com/docs">Lodash</a> provide enough utilities to make working with arrays and objects more than bearable. Some Mixins could easily be created to help manage anything that seems to be repeating. What is a mixin you ask? Great question.</p><h3>Mixins</h3><p>Mixins are the most powerful feature of Flight. They are plug and play scripts that help keep your code DRY. Mixins can be applied to both components or standard objects. <a href="https://gist.github.com/cam-stitt/6226780">Here</a> is an example of a simple request Mixin that helps handle ajax. This can then be applied to a component like so:</p><pre>var withRequests = require(&quot;mixins/withRequests&quot;);<br>return defineComponent(helloWorld, withRequests);</pre><pre>function helloWorld() {<br>  this.after(&quot;initialize&quot;, function() {<br>    this.post(...);<br>  };<br>}</pre><h3>Folder Structure</h3><p>The standard folder structure consists of the following:</p><ul><li>ui — Files that handle DOM interaction</li><li>data — Files that handle data (eg. perform requests, filtering)</li><li>mixins — Mixins, obviously</li></ul><h3>Event Naming</h3><p>I recommend using TweetDeck’s <a href="https://blog.twitter.com/2013/flight-tweetdeck">guide</a> to event naming in Flight. The three below are the ones I most commonly use:</p><ul><li>UI data request — <em>uiNeedsUsers</em></li><li>UI request — <em>uiRemoveUser, uiShowUsers</em></li><li>Data event (usually a flow-on from a UI data request) — <em>dataUserProfile</em></li></ul><p>A quick example of how these could work can be found <a href="https://gist.github.com/cam-stitt/6228030">here</a>.</p><h3>Smooth Landing</h3><p>Although Flight is not gaining the same amount of traction as Backbone.js or AngularJS, it is a more than worthy competitor. Although it does not provide Model-view-controller functionality out of the box, the developer has full control over how data will be managed, how rendering will be performed and so on. If you’re interested, head on over to the <a href="http://flightjs.github.io/">Flight website</a> and try it out.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ac40dd0003d" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>