Travis Ingram2022-05-25T01:45:38+00:00https://github.com/TravisIngram/travisingram.github.ioTravis Ingramingramtravis@gmail.comHTML, CSS - The Basics2016-10-04T00:00:00+00:00https://github.com/TravisIngram/travisingram.github.io/2016/10/04/HTML-CSS-Basics<h3 id="html-and-css">HTML and CSS</h3>
<p>I’m not sure where I came by or developed the notion that HTML and CSS are simple. Simple to understand and simple to implement. Simple to make the markup and code you write do what it is you intend for it to do. But I did. And I think it has made learning more about them more difficult. Because while compared to other aspects of web and application development, they may indeed be somewhat easier to understand, in and of themselves they are not. Which is what I have discovered over the past few weeks. I think it’s important to look at this, to understand why I thought what I thought, because unchecked assumptions can be dangerous.</p>
<p>I don’t have a really solid answer or reason for this particular belief. I think it stems from the fact that I’ve been exposed to and messing around with HTML and CSS for years. I know and understand some of the <a href="https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Introduction">foundational concepts</a>, elements, tags, attributes and so on. But the interaction between all the various parts, coupled with CSS, make it so much more challenging. And when you start to introduce the various frameworks things just scale up from there.</p>
<p>As I mentioned last time, I’m working through a book by <a href="http://learn.shayhowe.com/html-css">Shay Howe</a>. It’s been great thus far and has served to reintroduce and reinforce things that I only partially understood. I’m going to keep plugging along and hope to be able to make use of what I learn in a project that I’m about to start. I’ve got the rough scope of work laid out and am hoping to begin in the next week or two.</p>
<h3 id="github-challenge">GitHub Challenge</h3>
<p>I’ve managed to make some sort of commit everyday for the past week. They haven’t been great commits, mostly updates to existing repositories, but they weren’t totally superfluous either. Once I have a project up and running it’ll get easier and I’ll be less concerned about the exactly nature of the things that I’m committing. The whole point of the challenge is to get you looking at, learning, and writing some type of code everyday. And in that respect I’m doing okay.</p>
GitHub Challenge2016-09-29T00:00:00+00:00https://github.com/TravisIngram/travisingram.github.io/2016/09/29/GitHub-Challenge<h3 id="github-challenge">GitHub Challenge</h3>
<p>Building new skills is important, as is maintaining or refining existing ones. It’s something that I’ve been doing for quite a while now. It’s challenging, though, for all sorts of reasons. Deciding what to learn can be difficult. Finding the time to learn can be difficult. Staying motivated can be difficult. I run into all these issues at various times which is why for the next thirty days, I’m joined a group that is committed to learning something every day for the next month. Not only that, we’ll be coding and committing that work to GitHub every day. Hopefully. That’s the plan anyway.</p>
<p>I’ve decided to spend the next month working with JavaScript and a bit of HTML and CSS. I feel like reviewing some of is considered the basics of web development will be a good place to start. I plan to review the two <a href="http://learn.shayhowe.com/html-css">Shay Howe books</a> as well as <a href="http://eloquentjavascript.net">Eloquent JavaScript</a> by Marijn Haverbeke. I’ll likely branch out into other things, too, but that’s where I want to start.</p>
<p>We’ll see how it goes.</p>
Balance2016-07-17T00:00:00+00:00https://github.com/TravisIngram/travisingram.github.io/2016/07/17/Finding-Balance<h3 id="four-weeks">Four weeks</h3>
<p>It’s been more than a month since I finished the program, since I graduated. I had initially hoped to develop a routine focused on finding and applying for jobs as well as continuing to learn and code. A balance of those things. But doing so has proved trickier than I thought. I’ve done some learning and some coding but the majority of my time has been spent looking for and applying for jobs. It’s an ongoing process, and while I hope to find a job that meshes well with my current experience and focus, it might take a while to find something that’s a good fit. So I need to find a way to balance the job search with my desire for continued learning and coding.</p>
<h3 id="balance">Balance</h3>
<p>What does a balanced workload look like? How can I divide up my day to ensure that I have time to learn and time to code and time to devote to the job hunt? I’m not exactly sure. I have to admit that looking for a job is hard, challenging work. If all I was doing was randomly sending out my resume to various companies, that might not be the case. But my process for applying typically involves researching the company, the type of work that they do and how their development teams are set up. It involves trying to get a sense of whether I would be a good fit for their team and how long it might take to be a productive, contributing member.</p>
<p>Which all takes time.</p>
<p>Putting all the application materials together takes time, too. I try my best to tailor the resume and cover letter to the position that I’m applying for. The cover letter is what typically takes the most time. All these activities have stretched what ought to be a relatively straightforward and short process into something much longer and drawn out. Which has made it difficult to then incorporate the aforementioned learning and coding.</p>
<h3 id="language-overload">Language Overload</h3>
<p>I discovered early on that there are no shortage of positions to apply for. What’s been more challenging is finding the ones that are relevant to my skill set and aspirations. I’ve found that while there are numerous jobs out there, few companies are looking for junior developers. Most postings state that they are looking for people with mid to senior level skills, folks with three to five to seven years of experience. Which makes it challenging. I’ve also found that many positions are focused on languages and technology stacks that I haven’t worked with or have much experience with. It seems like the Minneapolis market is geared more towards the LAMP stack, Linux, Apache, MySQL, and PHP or the Microsoft stack, including .NET and ASP. Another one is Ruby and the Rails framework.</p>
<p>There just aren’t as many pure JavaScript based jobs. And while I think that, given some time and assistance, I could pick up any of these languages, it doesn’t seem like many HR departments or recruiters share that same view. Even though the underlying concepts I know and have learned would, in many cases, transfer over. So it’s been hard. Moving forward, I don’t know what the best approach is. Do I dive into other languages and frameworks in the hope that I’ll be considered for a specific job or do I just keep learning and working on my JavaScript skills? I wish there was a clear answer, but I’m afraid that there’s not. These are the things that I’ve been working through over the past month, though. I do have some ideas, but for now I’ll leave it there. I’ll share some possible solutions in a separate post.</p>
First Code Challenge2016-06-21T00:00:00+00:00https://github.com/TravisIngram/travisingram.github.io/2016/06/21/First-Code-Challenge<h3 id="code-challenges">Code Challenges</h3>
<p>This afternoon I took my first official code challenge. It was part of the application process for a job I’m interested in. I was nervous because time constrained tests have at times proved difficult. But there was a practice problem that I managed to complete so I wasn’t too worried. In retrospect, maybe I should have been.</p>
<h4 id="three-questions">Three Questions</h4>
<p>There were three questions that I had to complete. I was given ninety minutes to do so and could make use of my text editor of choice and general documentation. All three questions involved manipulating data within an array. Either identifying an individual index or sorting or pulling some pieces out or shoving others back in. They weren’t the most straight forward problems but, given my current level of understanding, they were things that I ought to be able to do. For various reasons reasons, thought, nerves mostly, I didn’t do as well as I could have. In fact I felt pretty bad when, with less than a minute to spare, I clicked the submit button.</p>
<h4 id="three-solutions">Three Solutions</h4>
<p>The disappointment faded shortly after I finished. It was replaced with a feeling of annoyance at myself and my performance. That feeling was soon replaced with a less judgmental view that, really, tests are hard. And I shouldn’t be too critical of myself or my performance. In general, I know how to work with arrays. And even if I wasn’t able to fully answer every question, I knew that with a little more work, I could.</p>
<p>So that’s what I did. I spent a decent chunk of time this evening figuring out various ways to go about solving each problem. I plan to talk to some friends tomorrow and get their input. And once I’m satisfied with the results, I’ll send them off to the folks who had me take the test. I’ll let them know that I’m capable of solving such problems. I don’t know if it will make any difference, but I’ll at least feel a bit better about it. And next time, I’ll likely do better because of what I learned tonight. Fingers crossed anyway.</p>
Prime Complete2016-06-17T00:00:00+00:00https://github.com/TravisIngram/travisingram.github.io/2016/06/17/Prime-Complete<p>My last public post was dated February, 8th. There, I outlined the program that I had chosen to undertake and some of the things I hoped I’d be able to accomplish as well as some of the things that I feared. For the most part, my fears proved unfounded and as I was able to complete what I had hoped I would complete. So in that sense, I’m happy with the outcome. But I still have a lot of work left to do, a lot of things left to learn. Which I understood going in, so doesn’t come as any big shock or surprise.</p>
<p>My focus at this point is finding a job. While I certainly wish that I had a something lined up, I don’t. Not yet anyway. It’s a process like anything else and will take some time. But I have the necessary skills and feel like I could make a meaningful contribution to a team if given the chance. In the mean time, I’ll continue to push my learning and work on personal projects. I’ll keep reaching out to my peers and attending meet-ups in the area. I’ve already been in contact with a number of companies and am looking forward to continuing those conversations in the coming weeks. I’m confident that I’ll find something soon. It should be interesting.</p>
<h3 id="private-posts">Private Posts</h3>
<p>As I’ve mentioned in the past, I write every day. The intent of this site was to have a place where I could put development related posts. A place where I could talk about what I was learning and the projects that I was working on. I’ve written about such things, but I haven’t actually posted them. I’m now considering going back and adding a few of them in. There’s a lot of material that I could share, but have been somewhat hesitant to do so. Learning can be messy, and putting that process out there is a little scary. But folks I’ve asked have encouraged me to do so anyway, so I think I will. Although maybe with a bit of editing thrown in. So that’ll be something to look forward to. As always, we’ll see how it goes.</p>
Prime2016-02-08T00:00:00+00:00https://github.com/TravisIngram/travisingram.github.io/2016/02/08/Prime<h2 id="starting-again">Starting Again</h2>
<p>Today I started the pre-work phase of <a href="https://primeacademy.io">Prime Digital Academy</a>, an accelerated learning program for folks looking to transition into web development. I’ve tried this before. Tried to make the move on my own but have never quite made it. I’m hopeful that this time will be different. That spending a total of 18 weeks learning about web development will provide me with the foundation that I need to find a job and launch my career. I’m pretty anxious, apprehensive, but optimistic, too. I plan to take it one day at a time and focus on the task at hand. That’s the only way I know how to keep from getting overwhelmed.</p>
<p>The first six weeks are spent working on your own, watching and reading various tutorials. There are online meetings and discussion groups available for when I get stuck or need help. I’m hoping that they provide some additional motivation and support, too. It’s easy to get discouraged when working on your own so being able to reach out when your confused about a topic ought to help.</p>
<p>The second phase consists of twelve weeks of in-person training. We’ll be meeting every weekday from 8 to 5, with additional work expected during the evening and weekends. I’ll be moving up north shortly before hand. I have everything lined up so the transition shouldn’t be too bad. Fingers crossed.</p>
<p>Today I worked through the <a href="https://www.codeschool.com/courses/front-end-foundations">first module</a>, an introduction to HTML and CSS. It was pretty basic but a nice refresher none the less. I’ll be completing another one tomorrow and then working on a few basic sites of my own to try and commit the material to memory. I’m not a huge fan of the tutorials that use an integrated text editor. I find them too restrictive. They also occasionally break and prevent you from progressing. I had that happen a few times today and it was pretty frustrating. In general, I don’t learn as much as I do when I’m just building things from scratch.</p>
<p>So that was day one. The first group meeting isn’t until Thursday. I’m looking forward to it, to meeting my classmates and the instructors. It’ll be nice to chat a bit and find out more about the group.</p>
<p>I don’t know how often I’ll post here. My goal is to add something once or twice a week. Just a quick check in and update on how things are progressing. I’ll try to add in and document what I’m learning, what’s sticking and what I’m struggling with. We’ll see how it goes. Until then.</p>
HTTP Query String Parameters2015-07-17T00:00:00+00:00https://github.com/TravisIngram/travisingram.github.io/2015/07/17/HTTP-Query-String-Paramaters<h2 id="understanding-parameters">Understanding Parameters</h2>
<h3 id="introduction">Introduction</h3>
<p>While this discussion will focus primarily on defining what parameters are, how they’re generated and passed from the <em>client</em> to the <em>server</em>, I’ll also attempt to cover, in brief, some of the related or ancillary topics as well. I encourage those that are interested in learning more about the underlying processes to visit the links embedded throughout this post. Most of them point to either <a href="http://en.wikipedia.org/wiki/Internet_protocol_suite">Wikipedia</a> or to documentation provided by the various standards bodies like the <a href="http://www.w3.org">Web Consortium</a>. They likely give a more nuanced introduction to these topics and also have plenty of additional information and resources available to peruse.</p>
<p>In addition, I feel that it’s important to distinguish between what parameters are, <em>independently</em> of how they are used once received by the <em>server</em>. While most <a href="http://en.wikipedia.org/wiki/Web_framework">web frameworks</a> or <a href="http://en.wikipedia.org/wiki/Domain-specific_language">domain-specific languages</a>, <code class="language-plaintext highlighter-rouge">DSL</code>s, will <a href="http://en.wikipedia.org/wiki/Parsing">parse</a> the incoming string of characters in conceptually similar ways, there will undoubtedly be some discrepancies in how the resulting data is formatted and made available for use by the developer.</p>
<p>So, while some examples have been included that are specific to <em><a href="https://en.wikipedia.org/wiki/Ruby_on_Rails">Rails</a></em> and <em><a href="http://www.sinatrarb.com/intro.html">Sinatra</a></em>, in general, this post will strive to discuss parameters outside of any one specific implementation.</p>
<hr />
<h3 id="what-are-parameters--what-purpose-do-they-serve">What are Parameters? What purpose do they serve?</h3>
<p>It’s important to understand that, conceptually, <em>parameters</em> are a tool. They provide developers with a way of enabling end users to interact with a given website, be it a service or application, in a more dynamic way. That interaction might take the form of requesting specific information <em>of</em>, or passing data to be used and stored <em>by</em> the website in question.</p>
<p>As such, each developer decides, based on the type of service or application they are building, what the parameters are. They decide what information will be requested from the user and how that information will be used by their specific service or application. A simple search query is one example, posting a message to a blog is another.</p>
<p>The term <em>parameter</em> refers to the pieces of associated data, <code class="language-plaintext highlighter-rouge">name | value</code> pairs, that originate on the <em>client</em>, and are passed to the <em>server</em>. Once generated, there are two ways that parameters are transmitted from <em>client</em> to <em>server</em>, either within the <a href="http://en.wikipedia.org/wiki/Query_string"><em>query string</em></a> of a <a href="http://en.wikipedia.org/wiki/Uniform_resource_identifier"><code class="language-plaintext highlighter-rouge">URI</code> / <code class="language-plaintext highlighter-rouge">URL</code></a> through an <code class="language-plaintext highlighter-rouge">HTTP</code> <code class="language-plaintext highlighter-rouge">GET</code> request, or as part of the body of an <code class="language-plaintext highlighter-rouge">HTTP</code> <a href="http://en.wikipedia.org/wiki/HTTP_POST"><code class="language-plaintext highlighter-rouge">POST</code> request</a>.</p>
<hr />
<h3 id="how-are-they-generated">How are they generated?</h3>
<p>The definition above likely raises some additional questions.</p>
<ul>
<li>How are parameters actually created?</li>
<li>What is meant by <em>associated data</em>?</li>
<li>What does a parameter look like in practice?</li>
</ul>
<p>Since parameters are data and often represent information that the developer needs the user of her website or service to provide, they are typically created using an <a href="http://www.w3schools.com/html/html_forms.asp"><code class="language-plaintext highlighter-rouge">HTML</code> form</a>. Every <code class="language-plaintext highlighter-rouge">HTML</code> form contains <em>fields</em>, places for users to enter data, and typically those <em>fields</em> are explicitly <em>named</em>. The relationship between the <code class="language-plaintext highlighter-rouge">name</code> of the field and its contents, the <code class="language-plaintext highlighter-rouge">value</code> of the data entered, represents the association mentioned above.</p>
<p>For example, this is what the <code class="language-plaintext highlighter-rouge">HTML</code> code for a basic form might look like. It’s here, within the <code class="language-plaintext highlighter-rouge">input</code> <em>attribute</em> that the <code class="language-plaintext highlighter-rouge">name</code> of each field is set.</p>
<p><img src="http://cl.ly/image/000o2C0C1o1w/Params_HTML_Form.jpg" alt="HTML-Form-Code" title="Basic-HTML-Form" /></p>
<p><strong>Please Note</strong></p>
<p>It’s important to distinguish between the <em>label</em> given to a form field and the <code class="language-plaintext highlighter-rouge">name</code> <em>attribute</em>. The <em>label</em> is a more general, superficial term and does not effect the relationship between the <code class="language-plaintext highlighter-rouge">name</code> and the <code class="language-plaintext highlighter-rouge">value</code> of the parameter being generated.</p>
<p>That said, the resulting form would look like this.</p>
<p><img src="http://cl.ly/image/2W1e3n2V1I3c/Params_Basic_Form.jpg" alt="Form-Example" title="Basic-Form" /></p>
<p>When this form is submitted, each corresponding <code class="language-plaintext highlighter-rouge">name | value</code> pair will be passed from the <em>client</em> to the <em>server</em>.</p>
<p>Each of these associated pieces of data, each <code class="language-plaintext highlighter-rouge">name | value</code> pair, is a <em>parameter</em>.</p>
<p>How they are sent and what they look like once received by the <em>server</em>, is, in part, covered below.</p>
<hr />
<h3 id="how-are-they-sent-http-and-the-request--response-cycle">How are they sent? <code class="language-plaintext highlighter-rouge">HTTP</code> and the <em>Request</em> / <em>Response</em> Cycle</h3>
<h4 id="request--response"><em>Request</em> / <em>Response</em></h4>
<p>The <a href="http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol">Hypertext Transfer Protocol</a>, <code class="language-plaintext highlighter-rouge">HTTP</code>, defines, at a high level, how a <em>client</em> and <em>server</em> communicate over a network. While there are other protocols that help facilitate this communication, such as <a href="http://en.wikipedia.org/wiki/Internet_protocol_suite">TCP/IP</a>, for our purpose, we’ll limit the discussion to the messages passed via <code class="language-plaintext highlighter-rouge">HTTP</code> through a process called <a href="http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Technical_overview"><em>request</em> / <em>response</em></a>.</p>
<p>The <em>request</em> / <em>response</em> cycle begins with the <em>client</em> sending a <a href="http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_message">request message</a> to the <em>server</em>, and then waiting for the <em>server</em> to <a href="http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Response_message">respond</a> with a message of its own. Typically, the <em>client</em> is requesting a resource of some kind, a web page or the results of a search query. The <em>server</em> will then respond, delivering the various resources that were requested. The links above provide examples of what these messages look like and how the data is encoded, transmitted, and decoded at each end.</p>
<p>While all the information contained within each message serves an important function, the two most relevant for this discussion are the <a href="http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods">request method</a> and the Uniform Resource Locator or <a href="http://en.wikipedia.org/wiki/Uniform_Resource_Identifier"><code class="language-plaintext highlighter-rouge">URI</code> / <code class="language-plaintext highlighter-rouge">URL</code></a>. These two pieces of information define the nature of the request and the resource that is being interacted with. When used in conjunction with <code class="language-plaintext highlighter-rouge">HTTP</code>, the <code class="language-plaintext highlighter-rouge">URI</code> / <code class="language-plaintext highlighter-rouge">URL</code> is often referred to as the web address.</p>
<p><strong>Please Note</strong></p>
<p>While outside the scope of this post, it’s important to recognize that <code class="language-plaintext highlighter-rouge">URI</code>s provide a standardized way for different parts of a computing device to identify one another, thus enabling them to pass messages back and forth. For more information on all the different types of <code class="language-plaintext highlighter-rouge">URI</code>s, check out <a href="http://en.wikipedia.org/wiki/URI_scheme#Official_IANA-registered_schemes">this link</a>.</p>
<h4 id="uniform-resource-locator-url">Uniform Resource Locator, <code class="language-plaintext highlighter-rouge">URL</code></h4>
<p>The <code class="language-plaintext highlighter-rouge">URL</code> is the means by which users interact with a website. They determine how resources are requested and specific behavior triggered.</p>
<p>But what is a resource?</p>
<p>Often it’s a static file or web page. That’s probably the most common interpretation. But resources are actually any addressable thing or bit of data, including the result of a search or the return value of a function. The <code class="language-plaintext highlighter-rouge">URL</code> is the destination, the server endpoint, which, when used in conjunction with a block of code, enable the functionality of most of the web services and applications in use today. So it’s important to understand, or at least be aware, of what the individual parts of a <code class="language-plaintext highlighter-rouge">URL</code> represent in addition to how they work.</p>
<p>To begin with, <code class="language-plaintext highlighter-rouge">URL</code>s all share the same basic structure, which is determined by the type of resource they point to.</p>
<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt"><scheme</span> <span class="na">name</span><span class="nt">></span> : <span class="nt"><host</span> <span class="na">or</span> <span class="na">domain</span><span class="nt">></span> / <span class="nt"><hierarchical</span> <span class="na">part</span><span class="nt">></span> [ ? <span class="nt"><query></span> ] [ # <span class="nt"><fragment></span> ]
</code></pre></div></div>
<ul>
<li>The <em>scheme name</em> is often a protocol, the communication method, such as, <code class="language-plaintext highlighter-rouge">http</code>, <code class="language-plaintext highlighter-rouge">ftp</code>, <code class="language-plaintext highlighter-rouge">ssh</code>, <code class="language-plaintext highlighter-rouge">mailto</code>, or <code class="language-plaintext highlighter-rouge">irc</code>.</li>
<li>The <em>domain name</em> or host is the address of the server where the individual resources reside. Such as google.com, twitter.com, or en.wikipedia.org</li>
<li>The <em>hierarchal part</em> is appended to the host and resembles the file path often found in a Unix based OS. <strong>/file/lives/here</strong></li>
<li>The <em>query string</em> follows the hierarchal part and always begins with a <strong>”?”</strong>. The data following it is grouped by an <strong>”=”</strong> and the <code class="language-plaintext highlighter-rouge">name | value</code> pairs are separated by an <strong>“&”</strong>.</li>
<li>The <em>fragment</em> follows the hierarchal part and always begins with a <strong>”#”</strong>. It points to a specific location, often a section heading within a static file.</li>
</ul>
<p>A <code class="language-plaintext highlighter-rouge">URL</code> formatted in conjunction with <code class="language-plaintext highlighter-rouge">HTTP</code> will include the first three components above and, possibly, a <em>query string</em> or <em>fragment</em>. Here’s an example of a web address that includes a <em>query string</em>.</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>http://superwall.com/register?name=travis&city=San+Francisco&state=California
</code></pre></div></div>
<h4 id="http-methods"><code class="language-plaintext highlighter-rouge">HTTP</code> Methods</h4>
<p>There are a number of different request methods defined within <code class="language-plaintext highlighter-rouge">HTTP</code> that govern how information is passed during the <em>request</em> / <em>response</em> cycle…how messages, and the data they contain, are passed. These methods are often referred to as <em>verbs</em> since their names typically correspond to the action they preform. Two of the most common <code class="language-plaintext highlighter-rouge">HTTP</code> methods are <code class="language-plaintext highlighter-rouge">GET</code> and <code class="language-plaintext highlighter-rouge">POST</code>.</p>
<p>As its name implies, the <code class="language-plaintext highlighter-rouge">GET</code> method is used to request a specific <a href="http://www.w3.org/1999/05/WCA-terms/#PRIMITIVE">resource</a>. Any data associated with a <code class="language-plaintext highlighter-rouge">GET</code> request is represented in the <code class="language-plaintext highlighter-rouge">URL</code>. Typically within the <em>hierarchal part</em> or <em>path</em>. When a user makes a specific request, a search for example, the information is <a href="http://en.wikipedia.org/wiki/Percent-encoding">encoded</a> within the <em>query string</em>.</p>
<p>The messages sent via the <code class="language-plaintext highlighter-rouge">GET</code> method are intended to read, <strong>not</strong> create, update, or destroy, the target resource. As such, a <code class="language-plaintext highlighter-rouge">GET</code> request cannot be used to alter or modify existing data on a <em>server</em>. This makes it the most common type of request used on the web since most activity involves asking for and receiving a specific resource, often an individual webpage.</p>
<p>The <a href="http://en.wikipedia.org/wiki/POST_(HTTP)"><code class="language-plaintext highlighter-rouge">POST</code> method</a>, on the other hand, is used to create and, in conjunction with <a href="(http://en.wikipedia.org/wiki/RESTful#Applied_to_web_services)"><code class="language-plaintext highlighter-rouge">PUT</code> and <code class="language-plaintext highlighter-rouge">DELETE</code></a>, modify or destroy existing data. While not as common as the <code class="language-plaintext highlighter-rouge">GET</code> method, <code class="language-plaintext highlighter-rouge">POST</code> is the primary way developers enable users to interact with, and persist or store data using, web applications and services.</p>
<h3 id="passing-parameters---the-http-get-method">Passing Parameters - the <code class="language-plaintext highlighter-rouge">HTTP</code> <code class="language-plaintext highlighter-rouge">GET</code> Method</h3>
<p>Since we’ve already established what parameters are, associated pieces of data that originate on the <em>client</em> and passed to the <em>server</em>, it’s time to discuss how they get passed. There are two common ways to transmit data from the <em>client</em> to the <em>server</em>, an <code class="language-plaintext highlighter-rouge">HTTP</code> <code class="language-plaintext highlighter-rouge">GET</code> request and and <code class="language-plaintext highlighter-rouge">HTTP</code> <code class="language-plaintext highlighter-rouge">POST</code> request.</p>
<p>When passing data in conjunction with an <code class="language-plaintext highlighter-rouge">HTTP</code> <code class="language-plaintext highlighter-rouge">GET</code> request, the <a href="http://en.wikipedia.org/wiki/Query_string"><em>query string</em></a> portion of the <code class="language-plaintext highlighter-rouge">URL</code> is used as the mode of transport between <em>client</em> and <em>server</em>. As mentioned above, the <em>query string</em> always begins with a <strong>”?”</strong>, followed by the <code class="language-plaintext highlighter-rouge">name | value</code> pairs of data.</p>
<p>Here’s that example <code class="language-plaintext highlighter-rouge">URL</code> again.</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>http://superwall.com/register?name=travis&city=San+Francisco&state=California
</code></pre></div></div>
<p>The parameters being sent in this case are the three <code class="language-plaintext highlighter-rouge">name | value</code> pairs following the question mark, separated by an ampersand.</p>
<p>It’s also worth mentioning again that <em>how</em> this string of information is <a href="http://en.wikipedia.org/wiki/Parsing">parsed</a> and formatted once received by the <em>server</em>, will differ based on the framework that was used when building the web application.</p>
<p>In a Ruby based web framework like <em>Rails</em> or a <em>DSL</em> like <em>Sinatra</em>, these <code class="language-plaintext highlighter-rouge">name | value</code> pairs are the same as <code class="language-plaintext highlighter-rouge">key | value</code> pairs, a <code class="language-plaintext highlighter-rouge">Hash</code>, and are often referred to as the <code class="language-plaintext highlighter-rouge">params hash</code>.</p>
<p>So the resulting <code class="language-plaintext highlighter-rouge">Hash</code> from the <code class="language-plaintext highlighter-rouge">URL</code> above might look like this.</p>
<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="s2">"name"</span><span class="o">=></span><span class="s2">"travis"</span><span class="p">},</span> <span class="p">{</span><span class="s2">"city"</span><span class="o">=></span><span class="s2">"san francisco"</span><span class="p">},</span> <span class="p">{</span><span class="s2">"state"</span><span class="o">=></span><span class="s2">"california"</span><span class="p">}</span>
</code></pre></div></div>
<p><strong>Please Note</strong></p>
<p>While outside the scope of this post, it’s important to recognize and be aware that since the primary message associated with a <code class="language-plaintext highlighter-rouge">GET</code> request is the <code class="language-plaintext highlighter-rouge">URL</code> itself, data sent in this manner is visible during the transport process. As such, it’s generally best to avoid sending anything that might be considered sensitive via a <code class="language-plaintext highlighter-rouge">GET</code> request and instead use a <code class="language-plaintext highlighter-rouge">POST</code> request.</p>
<hr />
<h3 id="passing-parameters---the-http-post-method">Passing Parameters - the <code class="language-plaintext highlighter-rouge">HTTP</code> <code class="language-plaintext highlighter-rouge">POST</code> Method</h3>
<p>Passing parameters via the <code class="language-plaintext highlighter-rouge">HTTP</code> <code class="language-plaintext highlighter-rouge">POST</code> method is similar to the <code class="language-plaintext highlighter-rouge">HTTP</code> <code class="language-plaintext highlighter-rouge">GET</code> method described above. Instead of the data being passed to the <em>server</em> as part of the <code class="language-plaintext highlighter-rouge">URL</code>, though, it’s passed within the body of the <code class="language-plaintext highlighter-rouge">HTTP</code> request using <code class="language-plaintext highlighter-rouge">POST</code> and, of course, an <code class="language-plaintext highlighter-rouge">HTML</code> form.</p>
<p>Understanding the difference, the implications of how the information is passed, is important. As touched upon in the <code class="language-plaintext highlighter-rouge">HTTP</code> section above, there are inherent limitations on how request methods can be used. The <a href="http://en.wikipedia.org/wiki/RESTful#Applied_to_web_services"><code class="language-plaintext highlighter-rouge">POST</code> method</a> is for creating or adding new information to a website, service, or application. It also enables, through the use of the <code class="language-plaintext highlighter-rouge">PUT</code> and <code class="language-plaintext highlighter-rouge">DELETE</code> methods, data to be updated or destroyed.</p>
<p>The developer decides what information will be added, the <code class="language-plaintext highlighter-rouge">name | value</code> pairs, when she creates the form. Here again is the <code class="language-plaintext highlighter-rouge">HTML</code> code for a basic <code class="language-plaintext highlighter-rouge">POST</code> request.</p>
<p><img src="http://cl.ly/image/0y0t43400N1q/Params_HTML_POST.jpg" alt="HTML-POST-Code" title="HTML-POST" /></p>
<p>Here’s what the resulting form would look like.</p>
<p><img src="http://cl.ly/image/0L153n1G1z1W/Form_Params_Example.jpg" alt="Form-Example-Params" title="Form-Params" /></p>
<p>The body of a <code class="language-plaintext highlighter-rouge">POST</code> request will look slightly different depending on the information being entered into the <code class="language-plaintext highlighter-rouge">HTML</code> form and, again, how that information is being used as defined within the application running on the <em>server</em>.</p>
<p>In the case of <em>Rails</em> or <em>Sinatra</em>, the <code class="language-plaintext highlighter-rouge">name</code> of the various fields will correspond to the <code class="language-plaintext highlighter-rouge">key</code>. So “title”, “description”, and “created_by” are all <code class="language-plaintext highlighter-rouge">keys</code>. The data entered into the form fields, “Wall of Super”, “Here I describe super things.”, and “Travis” are the <code class="language-plaintext highlighter-rouge">values</code>.</p>
<p>The resulting <code class="language-plaintext highlighter-rouge">key | value</code> pairs, the <code class="language-plaintext highlighter-rouge">params Hash</code>, might look like this when received by the server.</p>
<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="s2">"wall"</span><span class="o">=></span><span class="p">{</span><span class="s2">"title"</span><span class="o">=></span><span class="s2">"Wall of Super"</span><span class="p">,</span> <span class="s2">"description"</span><span class="o">=></span><span class="s2">"Here I describe super things."</span><span class="p">,</span> <span class="s2">"created_by"</span><span class="o">=></span><span class="s2">"Travis"</span><span class="p">}}</span>
</code></pre></div></div>
<p>In this example, there are actually two hashes. The first hash has a <code class="language-plaintext highlighter-rouge">key</code> of “wall”, the <code class="language-plaintext highlighter-rouge">value</code> is the second <code class="language-plaintext highlighter-rouge">Hash</code> we just described. Once submitted, this form would likely create a new “wall” record within the database, containing the data that corresponds to the various <code class="language-plaintext highlighter-rouge">key | value</code> pairs.</p>
<p><strong>Please Note</strong></p>
<p>As this example demonstrates, the data passed from <em>client</em> to <em>server</em> can become quite complex in nature. One of the benefits of using the <code class="language-plaintext highlighter-rouge">HTTP</code> <code class="language-plaintext highlighter-rouge">POST</code> method is that the data being transmitted is carried within the body of the request. This gives developers the freedom, or option at least, to obfuscate or hide what’s being passed between <em>client</em> and <em>server</em>.</p>
<hr />
<h3 id="how-are-they-used--a-basic-example">How are they used? A Basic Example.</h3>
<p>While largely outside the scope of this post, I wanted to provide a basic example of how parameters are often used.</p>
<p>Think for a moment about the Tweets you make or all the updates you post to your Facebook Timeline. All the information you enter, through a web browser, a desktop or mobile app, must be passed on to appropriate server. So the information leaves you and your <em>client</em>, transmitted via a form using an <code class="language-plaintext highlighter-rouge">HTTP</code> <code class="language-plaintext highlighter-rouge">POST</code> request, and ends up being received by a <em>server</em> running proprietary software designed by the nice folks at Twitter or Facebook.</p>
<p>Once it arrives, all the data is parsed and formatted as a series of <code class="language-plaintext highlighter-rouge">key | value</code> pairs that are then acted upon in a way defined by the developers at Twitter or FB. They undoubtedly use the information in a myriad of ways but eventually it’s inserted or added to a database and the results then displayed, in perpetuity. for all the world to see.</p>
<p>Or at least for your 4 followers and friends.</p>
<hr />
<h3 id="summary">Summary</h3>
<p>What parameters are, (formatted data originating on the <em>client</em>), how they are generated and passed on to the <em>server</em>, (typically via an <code class="language-plaintext highlighter-rouge">HTML</code> form in conjunction with an <code class="language-plaintext highlighter-rouge">HTTP</code> method), is key to understanding their importance and the foundational role they play within a website, service, or application. The examples above attempt to demonstrate that role and hint at what they make possible.</p>
<p>The implementation details, how parameters are used once they are received, parsed, and made available to the developer, is almost completely dependent on the web framework or DSL being used to create the website, service or application. Put simply, how parameters are used within <em>Sinatra</em> will be different than how they are used within <em>Django</em>. Which is why such discussions are best left for a later post.</p>
Updating Bundler2014-10-07T00:00:00+00:00https://github.com/TravisIngram/travisingram.github.io/2014/10/07/Updating-Bundler<h4 id="bundler">Bundler</h4>
<p><a href="http://bundler.io">Bundler</a> is a tool designed to help manage dependencies within Ruby applications. It allows developers to specify the <a href="http://rubygems.org">gems</a> needed to run an application and then installs and tracks them for each environment; development, staging or production. It’s a pretty important tool for many Ruby developers, one that should be kept up-to-date.
The <a href="http://bundler.io/v1.7/whats_new.html#version17">latest version</a>, 1.7.3, is a security release meant to fix a potentially vulnerability.</p>
<p>Before updating, it might be a good idea to verify what version you’re currently running. If it’s been a while, looking over the <a href="https://github.com/bundler/bundler/blob/master/CHANGELOG.md">change-log</a> might be prudent. While unlikely, it’s possible that aspects of how the tool works were changed in intervening releases.
It’s better to be sure you’re aware of what’s changed than find out after the fact.</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>bundle version
</code></pre></div></div>
<p><img src="http://cl.ly/image/1d2L3W1k0M3g/bundle_version.jpg" alt="Blunder version" title="Bundler version" /></p>
<h4 id="updating">Updating</h4>
<p>But how do you update Bundler?</p>
<p>This may seem like a simple question, a basic question that anyone using Bundler ought to know. I didn’t, though. And I spent what might be considered an embarrassingly long time trying to figure it out.
The problem is, when you use a tool on a near daily basis to install or update gems, it’s easy to forget there are other ways to install and update gems.</p>
<p>In this case, to update Bundler simply run the following command.</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>gem update bundler
</code></pre></div></div>
<p>Once complete, you’ll have the latest version and be able to move on.</p>
Writing and Sharing2014-09-12T00:00:00+00:00https://github.com/TravisIngram/travisingram.github.io/2014/09/12/sharing-caring<h3 id="intent">Intent</h3>
<p>When I created this site, I did so with the intent of regularly posting about development and learning related topics. But that hasn’t happened. Not because I haven’t been writing about them, but because I haven’t been willing to actually put them up. To post them.</p>
<p>Over the past month I’ve come to realize how difficult it is, for me anyway, to write for public consumption. As I’ve pointed out a <a href="http://travisingram.github.io/2014/07/23/initial-commit/">couple</a> <a href="http://travisingram.github.io/2014/07/23/projects/">times</a> now, I write a lot. Every day. So this realization has come as something of a shock. But given my situation, it probably shouldn’t have.</p>
<h3 id="aspiration">Aspiration</h3>
<p>My goal, what I hope to accomplish in the next six months to a year, is to learn enough about the development process to secure an apprenticeship or similar position. I understand, to a certain extent, what that requires and how challenging such a transition will be. Getting to where I’m at now has been a struggle. It’s required a lot of time, energy, and sustained effort on my part and will undoubtedly require more.</p>
<p>But what if it’s not enough? What if I never get the chance? What if, in spite of my best intentions, I’m not able to make it? That something I did or said or <em>wrote</em> prevented me from achieving my goal.</p>
<p>What then?</p>
<h3 id="realization">Realization</h3>
<p>I think it’s easy to slip into a pattern like this, especially when the stakes are high or you’re under a lot of pressure. Thankfully, after thinking about it, talking about it, I realized what had been holding me back, why I hadn’t been willing to post what I’d written.</p>
<p>Put simply, I was worried. I was worried about who might stumble upon the site and read what I wrote. I was worried about what they might think and the conclusions they might draw. What they might decide about me and my abilities, about what I know, how I learn, what I’m capable of and so on. I was worried that somehow, simply writing about my experiences, sharing what I was learning, articulating problems and their potential solutions, might reduce my chance of ever finding a job. Which, when framed like that, sounds a bit ridiculous. Mainly because, at the root of it all, potential employment isn’t the reason I write and certainly shouldn’t keep me from posting the results.</p>
<h3 id="resolution">Resolution</h3>
<p>Moving forward, I’ll be pushing out some of the material that I’ve produced over the past month. I have about half a dozen secret <a href="https://gist.github.com/TravisIngram">Gists</a> that, with a little editing, would be worth sharing. I also have a lengthy post that covers different aspects of the Hypertext Transfer Protocol, <a href="http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol">HTTP</a>, such as the request response cycle, the methods involved, URL and query parameters and so on. While a bit long in its current state, I think it could easily be broken up into smaller, more manageable chunks. Doing so would also allow me to expand on, write more about the individual topics. We’ll see.</p>
<p>So that’s the plan. I’m excited and looking forward to posting and sharing more material.</p>
CodeUnion - The Beginning2014-08-10T00:00:00+00:00https://github.com/TravisIngram/travisingram.github.io/2014/08/10/beginning-code-union<h3 id="preface">Preface</h3>
<p>I’ve been learning about different aspects of software development, learning how to code, for a couple of years now. It’s been challenging to say the least. This is the first in a series of posts that will detail and document my experiences. Some, like the one below, were written a while ago and not necessarily meant for public consumption. But I’ve come to feel that it’s important to acknowledge and share challenging experiences. So I’ll be doing just that.</p>
<p>Most of these posts were written over the past couple months, since the beginning of June, 2014, since I started participating in the workshops offered by CodeUnion.</p>
<h3 id="20140602---codeunion-day-01">20140602 - CodeUnion, Day 01</h3>
<p><a href="http://codeunion.io">CodeUnion</a> is an online developer bootcamp founded by <a href="https://twitter.com/jfarmer">Jesse Farmer</a> and <a href="http://www.johncdavison.com">John Davison</a>. They offer a few different workshops that cover the various skill sets needed to work as a software developer. Each of the three main courses last eight weeks and are conducted remotely, via Google Hangouts.</p>
<p>Their goal is to provide a learning environment for people who have an interest in development but are unable to uproot their lives and move across the country to pursue it. The first cohort began yesterday, June 2nd. I’m one of the six students selected for the inaugural class. This is my experience.</p>
<h3 id="beginnings">Beginnings</h3>
<p>I stumbled upon CodeUnion while browsing <a href="https://www.quora.com/Are-programming-boot-camps-a-better-way-to-learn-programming-instead-of-self-study">Quora</a>.</p>
<p>I sent off an email asking for more information. They responded and we set up a time to meet. Our first conversation lasted almost two hours. It was pretty intense, at least from my perspective. I’d not talked to anyone else about development related topics for, well, ever. At least not to that degree or depth.</p>
<p>It was great.</p>
<p>After our conversation they sent off some example exercises to give me a feel for the type of material that they would be covering. A few days later they got in touch and offered me a spot in their first workshop.</p>
<p>It wasn’t an easy decision. I had some concerns, most of which centered on my own abilities, on my capability to learn the material. I gave it some thought, though, and ultimately decided to accept.</p>
<p>Class stated less than a week later.</p>
<h3 id="structure">Structure</h3>
<p>The class meets as a group twice a week, in two, two hour sessions. In addition, Jesse and John will be pushing out projects, via <a href="https://github.com/codeunion">GitHub</a>, as well as numerous coding exercises, katas, for folks to work on.</p>
<p>The goal is to develop a routine where the class is forking the repositories, working through the problems, and then pushing the exercise files back up to GitHub for review. J & J believe that writing code and getting feedback is key to the learning process. They want to provide students with as much feedback as possible. They recommended that everyone set aside a block of time, thirty to sixty minutes, and work through a given exercise, making as much progress as possible. Once the limit is reached, the file is pushed back up to GitHub, regardless of its current state, for review.</p>
<p>Since we haven’t met yet I don’t know exactly how the classes will be structured or what’s going to happen. The goal, I believe, is to give a high level overview of the projects that we’re working on and talk through any questions that have come up during the week. I’ll find out for sure soon enough.</p>
<h3 id="challenges">Challenges</h3>
<p>My biggest concern or challenge is whether I’ll be able to overcome my hesitancy to ask questions or speak up when I get stuck. It’s really hard for me to do so but that’s pretty much the key to learning. Being able to recognize when you’re stuck, when you need help, and asking for it. I worry about being perceived as stupid or lazy or incapable of learning the material. I also don’t want to slow the others down or hold them back.</p>
<p>My first day wasn’t as productive as I had hoped. I spent some time testing out my environment and making sure things still worked. I’d been more than a year since I set up <code class="language-plaintext highlighter-rouge">Homebrew</code> and <code class="language-plaintext highlighter-rouge">Ruby</code> and <code class="language-plaintext highlighter-rouge">RVM</code> and <code class="language-plaintext highlighter-rouge">Sublime Text</code> and the rest. Since I don’t have a real firm grasp on how they all interact, the setup always makes me a bit nervous. Typing random things into the Terminal app and hoping everything goes smoothly isn’t my idea of a good time. I prefer to understand what’s happening but finding information on such things is challenging. I often times don’t even know how to even start looking for information. So I type and then cross my fingers and hope for the best.</p>
<p>Thankfully, I survived. As did my <a href="http://www.everymac.com/systems/apple/mac_pro/specs/mac-pro-eight-core-2.8-2008-specs.html">Mac Pro</a>. There was an error or two with <code class="language-plaintext highlighter-rouge">Homebrew</code>, but nothing major. I didn’t want to spend too much time on it because I’ll be getting a new machine soon. Once it arrives I’ll have to go back through and set everything up again. Which isn’t a huge deal and will actually be nice. I know my current machine hasn’t been cleaned up in ages so this is a great opportunity to start fresh.</p>
<p>So that’s where I’m at. I don’t really know what I want to say in these posts or how to say it. I’d like to have a place to talk about what I’m doing, learning, struggling with, understanding and so on. I’ll keep working on the format, though, and try to develop some consistency around what and when I post. I think doing so will be handy, a way to document and also review what I’ve done and serve as a reminder of what’s possible if I stick with a given project.</p>
<p>That’s the goal, anyway, we’ll see what happens.</p>
Sublime Text - Editing Preferences2014-08-10T00:00:00+00:00https://github.com/TravisIngram/travisingram.github.io/2014/08/10/Sublime-Text-Preferences<h2 id="sublime-text-preferences">Sublime Text Preferences</h2>
<p><a href="https://www.sublimetext.com">Sublime Text</a>, while quite powerful, extensible, and customizable, isn’t very user friendly. At least for those folks more accustomed to consumer focused applications. The most obvious example is the lack of a preference pane. To make changes to the look and feel of Sublime Text, users must manually edit the preference files.</p>
<p>And yes, that’s files, plural.</p>
<p>Sublime Text separates out the preferences into three main categories.</p>
<ul>
<li>Settings - Default</li>
<li>Settings - User</li>
<li>Syntax Specific - User</li>
</ul>
<p>These settings files are essentially one big <a href="http://en.wikipedia.org/wiki/JSON">JSON</a> object and must be formatted as such. Sublime Text is expecting something that looks like this;</p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nl">"preference_name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"string"</span><span class="p">,</span><span class="w">
</span><span class="nl">"preference_name"</span><span class="p">:</span><span class="w"> </span><span class="mi">15</span><span class="p">,</span><span class="w">
</span><span class="err">//</span><span class="w"> </span><span class="err">Comments</span><span class="w"> </span><span class="err">are</span><span class="w"> </span><span class="err">also</span><span class="w"> </span><span class="err">allowed</span><span class="p">,</span><span class="w"> </span><span class="err">even</span><span class="w"> </span><span class="err">though</span><span class="w"> </span><span class="err">not</span><span class="w"> </span><span class="err">supported</span><span class="w"> </span><span class="err">in</span><span class="w"> </span><span class="err">JSON</span><span class="w">
</span><span class="nl">"preference_name"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<p>===</p>
<h3 id="user-settings">User Settings</h3>
<p>The <code class="language-plaintext highlighter-rouge">Preferences.sublime-settings - Default</code> file is best left alone. It’s actually overwritten every time the application is updated which, given its beta status, might happen now and again. So to avoid the chance of loosing your changes, it’s best to simply add the settings you’d like to modify to the appropriate file. And just in case you forget, there’s a friendly reminder at the top of the default file that states all user specific preferences should be placed in <code class="language-plaintext highlighter-rouge">Preferences.sublime-settings - User</code>.</p>
<p>The first time you launch this file, it’s empty. There are numerous individual settings you could add but, unfortunately, the Sublime Text documentation leaves much to be desired. So much so that they provide a link to the <a href="http://sublime-text-unofficial-documentation.readthedocs.org/en/sublime-text-2/reference/settings.html">Unofficial Documentation</a>.</p>
<p>I’ve included a few basic settings below. They are pretty self explanatory. If you find that you’re missing something specific, chances are a quick Google search will bring up the relevant setting. Which you can then add, restart, and be good to go.</p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="nl">"bold_folder_labels"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="nl">"font_face"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Monaco"</span><span class="p">,</span><span class="w">
</span><span class="nl">"font_size"</span><span class="p">:</span><span class="w"> </span><span class="mi">12</span><span class="p">,</span><span class="w">
</span><span class="nl">"highlight_line"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="nl">"highlight_modified_tabs"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="nl">"ignored_packages"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"Vintage"</span><span class="p">],</span><span class="w">
</span><span class="nl">"indent_to_bracket"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="err">//</span><span class="w"> </span><span class="err">Columns</span><span class="w"> </span><span class="err">in</span><span class="w"> </span><span class="err">which</span><span class="w"> </span><span class="err">to</span><span class="w"> </span><span class="err">display</span><span class="w"> </span><span class="err">vertical</span><span class="w"> </span><span class="err">rulers</span><span class="w">
</span><span class="nl">"rulers"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="mi">80</span><span class="p">],</span><span class="w">
</span><span class="err">//</span><span class="w"> </span><span class="err">The</span><span class="w"> </span><span class="err">number</span><span class="w"> </span><span class="err">of</span><span class="w"> </span><span class="err">spaces</span><span class="w"> </span><span class="err">a</span><span class="w"> </span><span class="err">tab</span><span class="w"> </span><span class="err">is</span><span class="w"> </span><span class="err">considered</span><span class="w"> </span><span class="err">equal</span><span class="w"> </span><span class="err">to</span><span class="w">
</span><span class="nl">"tab_size"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w">
</span><span class="err">//</span><span class="w"> </span><span class="err">Set</span><span class="w"> </span><span class="err">to</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="err">to</span><span class="w"> </span><span class="err">insert</span><span class="w"> </span><span class="err">spaces</span><span class="w"> </span><span class="err">when</span><span class="w"> </span><span class="err">tab</span><span class="w"> </span><span class="err">is</span><span class="w"> </span><span class="err">pressed</span><span class="w">
</span><span class="nl">"translate_tabs_to_spaces"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="err">//</span><span class="w"> </span><span class="err">Set</span><span class="w"> </span><span class="err">to</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="err">to</span><span class="w"> </span><span class="err">ensure</span><span class="w"> </span><span class="err">the</span><span class="w"> </span><span class="err">last</span><span class="w"> </span><span class="err">line</span><span class="w"> </span><span class="err">of</span><span class="w"> </span><span class="err">the</span><span class="w"> </span><span class="err">file</span><span class="w"> </span><span class="err">ends</span><span class="w"> </span><span class="err">in</span><span class="w"> </span><span class="err">a</span><span class="w"> </span><span class="err">newline</span><span class="w">
</span><span class="err">//</span><span class="w"> </span><span class="err">character</span><span class="w"> </span><span class="err">when</span><span class="w"> </span><span class="err">saving</span><span class="w">
</span><span class="nl">"ensure_newline_at_eof_on_save"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="err">//</span><span class="w"> </span><span class="err">Set</span><span class="w"> </span><span class="err">to</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="err">to</span><span class="w"> </span><span class="err">removing</span><span class="w"> </span><span class="err">trailing</span><span class="w"> </span><span class="err">white</span><span class="w"> </span><span class="err">space</span><span class="w"> </span><span class="err">on</span><span class="w"> </span><span class="err">save</span><span class="w">
</span><span class="nl">"trim_trailing_white_space_on_save"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="nl">"word_wrap"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<p>===</p>
<h3 id="syntax-specific-settings">Syntax-Specific Settings</h3>
<p>Sublime Text allows you to maintain settings on a language by language basis. This allows you to ensure that your <code class="language-plaintext highlighter-rouge">Python</code> files have 4 spaces of indention and your <code class="language-plaintext highlighter-rouge">Ruby</code> or <code class="language-plaintext highlighter-rouge">YAML</code> files, only 2.</p>
<p>In order to modify the syntax specific settings, either create and save a new file with the appropriate extension, <code class="language-plaintext highlighter-rouge">.rb</code> for example, or open an existing one.</p>
<p>With the file open and active, select the following option:</p>
<p><img src="http://cl.ly/image/1X052V3n3q0B/Sublime_Text-Pref.jpg" alt="ST Pref Selection" title="Sublime Text Pref" /></p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Sublime Text => Preferences => Settings-More => Syntax Specific-User
</code></pre></div></div>
<p>Sublime Text will open a new, blank document. As before, you’ll need to type out or paste in the settings you’d like to have. I typically add;</p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nl">"tab_size"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w">
</span><span class="nl">"translate_tabs_to_spaces"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<p>If you want to add additional settings later on, simply repeat the process, remembering to save the file once you’re done.</p>
<p>===</p>
<p>There’s much more that can be done but this should at least get you started. Feel free to ping me if you have any questions. I’ll do my best to answer them.</p>
Dev Tools - Git, GitHub, Sublime Text2014-08-02T00:00:00+00:00https://github.com/TravisIngram/travisingram.github.io/2014/08/02/Dev-Tools<h3 id="20140802---original-post">20140802 - Original Post</h3>
<p>Here are some links that you might find helpful. They are meant to serve as additional resources to get you up and running. Don’t feel like you need to read them all or follow every piece of advice.</p>
<p>I’ve tried to highlight the potentially relevant bits but there’s a lot of information in some of them that could be useful later on. For example, I just recently moved away from the Terminal app built into OS X and started using <a href="http://iterm2.com">iTerm</a>. I didn’t need to but it offered a feature or two that I found handy and helpful.</p>
<p>Once you’ve worked with the tools that comprise your environment for a while, you’ll undoubtedly discover and develop preferences and habits around your own workflow.</p>
<hr />
<h3 id="git-and-github">Git and GitHub</h3>
<p>As you progress in this course and as a developer, <a href="http://en.wikipedia.org/wiki/Git_(software)">Git</a> and <a href="https://github.com">GitHub</a> will become more and more important. There are numerous resources available online. I’ve included a few that have helped me gain a better understanding of the basics, below.</p>
<hr />
<h4 id="try-git-an-interactive-tutorial"><a href="http://try.github.io/">Try Git, an interactive tutorial</a></h4>
<blockquote>
<p>Git allows groups of people to work on the same documents (often code) at the same time, and without stepping on each other’s toes. It’s a <a href="http://en.wikipedia.org/wiki/Distributed_revision_control">distributed version control system</a>.</p>
</blockquote>
<p>Try Git is a quick interactive tutorial that provides a great introduction to the concept of Git and an overview of the basic commands. It only takes about fifteen minutes to run through.</p>
<hr />
<h4 id="github-for-beginners-a-two-part-series"><a href="http://readwrite.com/2013/09/30/understanding-github-a-journey-for-beginners-part-1">GitHub for Beginners: A Two Part Series</a></h4>
<p>Lauren Orsini:</p>
<blockquote>
<p>Git is version control software, which means it manages changes to a project without overwriting any part of that project.</p>
</blockquote>
<p>This series covers the basics of Git as well as some additional information on navigating the command line. It doesn’t make many assumptions and is quite easy to follow. You can find the <a href="http://readwrite.com/2013/10/02/github-for-beginners-part-2">second part here</a>.</p>
<hr />
<h4 id="git-commands-and-visualizations"><a href="https://www.atlassian.com/git/workflows#!workflow-centralized">Git Commands and Visualizations</a></h4>
<p>Understanding how Git works, what the various <em>commands and concepts</em> mean, is challenging. At least it is for me. In addition to providing a nice overview, the Atlassian site also has some handy <a href="https://www.atlassian.com/git/tutorial/git-basics"><em>visualizations</em></a> that might help clarify or provide a mental model of how Git is working.</p>
<hr />
<h4 id="git-pro---free-on-the-git-scm-homepage"><a href="http://git-scm.com/book/en/Git-Basics">Git Pro - Free, on the Git-SCM Homepage</a></h4>
<p>Scott Chacon:</p>
<blockquote>
<p>If you can read only one chapter to get going with Git, this is it. This chapter covers every basic command you need to do the vast majority of the things you’ll eventually spend your time doing with Git.</p>
</blockquote>
<p>Once you’ve got a pretty decent grasp of the basics, it might be time to visit the Git homepage. In addition to housing all the documentation, they have a number of learning resources. Including the full version of Pro Git, which covers most every aspects of git. The <em>Git Basics</em> section linked above might prove helpful after you’ve spent some time using Git first hand.</p>
<hr />
<h3 id="sublime-text">Sublime Text</h3>
<p><a href="https://www.sublimetext.com">Sublime Text</a> is a great editor. It’s a very powerful, extensible, and customizable application. But being a developer tool means it’s not very friendly, at least for new users. The links below should provide you with enough information to set up and modify Sublime Text to your liking.</p>
<p>I’ll add, though, that while the links provided are indeed handy, no one article provides a succinct overview of using Sublime Text. The biggest omission is the process by which you edit or modify the application preferences.</p>
<p>I wrote up a brief tutorial on how to make some basic changes, including the steps required to set up syntax specific preferences. Which, once changed, will ensure <code class="language-plaintext highlighter-rouge">Ruby</code> will always indent by 2 spaces. It can be found at the link below.</p>
<h4 id="modifying-sublime-text-preferences"><a href="https://travisingram.github.io/2014/08/10/2014-08-10-Sublime-Text-Preferences">Modifying Sublime Text Preferences</a></h4>
<p>As many of the articles below advise, you should consider installing <a href="https://sublime.wbond.net">Package Manager</a>. It will enable you to extend the core functionality of Sublime Text and also add interesting themes and styles.</p>
<p>It’s also worth noting that even though most of these post reference Sublime Text 2, the information, almost universally, is applicable to Sublime Text 3. Which, while for download and use, is technically still in beta.</p>
<hr />
<h4 id="perfect-workflow-in-sublime-text-2"><a href="http://courses.tutsplus.com/courses/perfect-workflow-in-sublime-text-2">Perfect Workflow in Sublime Text 2</a></h4>
<p>Jeffrey Way:</p>
<blockquote>
<p>Hi, there! I am a confessed code editor addict. I’ve tried them all. I was an early adopter of Coda; I became a Vim faithful; and then, I found Sublime: far and away the best code editor I’ve ever used.</p>
</blockquote>
<blockquote>
<p>In this course, I’d like to show you every spec of information that I’ve learned from this amazing editor.</p>
</blockquote>
<p>This free course provides 2.5 hours of video instruction on Sublime Text. It’s a great resource. The individual lessons are broken up into bite sized pieces, which makes finding the time to view them much easier. Most are less than five minutes in length.</p>
<hr />
<h4 id="sublime-text-2"><a href="http://drewbarontini.com/setup/sublime-text/">Sublime Text (2)</a></h4>
<p>Drew Barontini:</p>
<blockquote>
<p>The usefulness of this setup guide will vary based on your personal preferences for how your text editor should function, but it should help with the initial setup of Sublime Text.</p>
</blockquote>
<p>Drew opens his post with an appropriate caveat. While the information he provides should help you get started, some additional digging might well be required to get things set up just so. Each section should at least point you in the right direction. That’s the beauty of an application like Sublime Text, once you understand how to make modifications, you can quickly and easily change things around and experiment with your setup.</p>
<hr />
<h4 id="setting-up-sublime-text-2"><a href="http://blog.alexmaccaw.com/sublime-text">Setting up Sublime Text 2</a></h4>
<p>Alex MacCaw:</p>
<blockquote>
<p>After a few weeks of using Sublime Text, I can safely say that it’s the best editor I’ve used. It’s fast, extensible and hasn’t ever crashed on me. That said, no editor is perfect and Sublime Text does require a <em>fair bit of initial configuration</em>.</p>
</blockquote>
<p>Alex walks through installing Package Manager and briefly covers themes, tabs & spaces, and changing the icon associated with Sublime Text.</p>
<hr />
<ul>
<li>Additional Sublime Text Set-up
<ul>
<li><a href="http://plausiblethought.net/my-sublime-text-setup/">Marc Jenkins: My Sublime Text Setup</a></li>
<li><a href="https://medium.com/on-web-development/setting-up-sublime-text-3-614d88e04ee">Carlos Castillo: Setting up Sublime Text 3</a></li>
</ul>
</li>
</ul>
<hr />
<h3 id="terminal--the-shell">Terminal / The Shell</h3>
<p>Mac OS X provides an application to interact with the command line interface called Terminal. One of the best resources for quickly getting up to speed working via the command line is the <a href="http://cli.learncodethehardway.org/book/">Command Line Crash Course</a> by Zed Shaw. It might take a day or two to get through but it’s a great way to get started.</p>
<p>Onno Schwanen created a concise <a href="https://github.com/0nn0/terminal-mac-cheatsheet/wiki/Terminal-Cheatsheet-for-Mac-(-basics-)">list of commands</a> that augment Zed’s course quite well.</p>
<hr />
<p>By default, the Terminal app isn’t much to look at. Thankfully there are many ways to make changes to its appearance. Some are available through the built in preferences, (<code class="language-plaintext highlighter-rouge">⌘ + ,</code>) while others can be modified by editing the file(s) referenced by the application when it launches, namely .bash_profile.</p>
<p>This is also the file where you would add aliases, which are a handy way to reduce the number of keystrokes for commonly typed commands.</p>
<p>I’m working on a separate post that goes into more detail about setting up and modifying your shell. It’s a pretty intimidating process but one that I think can be understood. That’s my goal, anyway, to demystify it a little bit.</p>
<hr />
<h3 id="documentation">Documentation</h3>
<h4 id="dash-is-an-offline-api-documentation-browser"><a href="http://kapeli.com/dash">Dash is an offline API Documentation Browser</a></h4>
<blockquote>
<p>Dash is an API Documentation Browser and Code Snippet Manager. Dash stores snippets of code and instantly searches offline documentation sets for 150+ APIs. You can even generate your own docsets or request docsets to be included.</p>
</blockquote>
<p>I recently installed Dash and have been very impressed. As someone who is occasionally without access to the internet, having offline, language specific documentation comes in quite handy. There are numerous plugins that extend the core functionality. You can, for example, install the <a href="https://github.com/farcaller/DashDoc#readme">Sublime Text package</a> to enable searching from within the editor.</p>
<p>Dash is available as a free download through the Mac App store, provided you don’t mind waiting for doc sets to load or the occasional reminder to purchase.</p>
Gaps2014-07-29T00:00:00+00:00https://github.com/TravisIngram/travisingram.github.io/2014/07/29/my-gaps<p>I’m actively working to identify gaps in my current understanding of how the development process works, what it’s comprised of, the component parts, and how they fit together. It’s not easy, though, figuring out what it is that you don’t know. My plan was to start with mapping out what I do know and the degree to which I feel I know it, and then move out from there. Eventually getting to the point where I’m barely aware of, in the broadest sense, a specific topic or idea or concept, but know little more that its name, if even that. Once I’m able to do that, find that edge, I can strike off in another direction. If I repeat this process enough, I’ll get to the point where I have a nice list or group of concepts that I know nothing about and can then shift my focus to correcting those deficiencies.</p>
<p>That’s the plan, anyway.</p>
<p>Like I said, it’s not easy trying to figure out what it is that you don’t know. But doing so is the first step. The first of many.</p>
<p>So this, like the post below, is an entry that I hope to update periodically. I’ll add the things that I feel comfortable with and those that I don’t. I might even expand it to include the steps that I’m taking or plan to take to actually fill in some of the gaps. We’ll see. For now, I just wanted to start this post. I hope to spend some time tomorrow and then subsequent days working on this project.</p>
<p>I’m in the process of recording a bunch of screen casts, reviews basically, of exercises that I’ve already gone thorough. I feel like the two are complementary in nature and have no doubt that be working through this material, I’ll come across areas that I’m not terribly comfortable with. Which will be quite obvious, as I stumble and stammer my way through an explanation. It should be entertaining if nothing else.</p>
Collaboration Tools2014-07-28T00:00:00+00:00https://github.com/TravisIngram/travisingram.github.io/2014/07/28/Collaboration-Tools<h3 id="20140728---original-post">20140728 - Original Post</h3>
<p>Here are some basic collaboration tools that I’ve found can come in handy when needing to work remotely with others. Most are pretty straight forward and friction free in their use. These are primarily geared towards situations where you need some quick feedback or are working through an exercise or project with your peers.</p>
<p>The site <a href="http://www.pairprogramwith.me">Pair Program with Me</a> is another great resource and offers many additional options.</p>
<p>If you have other tools you’ve used and find useful, please don’t hesitate to share them!</p>
<hr />
<h3 id="google-hangouts">Google Hangouts</h3>
<p><a href="https://www.google.com/hangouts/">Google Hangouts</a> offer a convenient way for individuals and groups to meet up and talk. They have been integrated throughout most of Google’s services and can be accessed in Gmail, Google Plus, Voice, or individual apps for iOS and Android. In addition to audio, video, chat, and screen sharing, the platform offers numerous plugins (like Floobits) that expand its basic functionality. The <a href="https://zapier.com/blog/google-hangouts-video-calls-guide/">Zapier</a> link below is a great overview of the service and its user interface. It also does a nice job of detailing the numerous ways to go about initiating a call.</p>
<p>To take advantage of <a href="https://support.google.com/hangouts/#topic=2944848">Google Hangouts</a>, you’ll need to have a Google account and install the <a href="https://www.google.com/tools/dlpage/hangoutplugin">plugin</a> on your browser of choice.</p>
<p>Google Hangouts and the associated GTalk plugin are very resource intensive. Laptop users should be mindful of their battery, chances are it won’t hold up over the course of a two hour session. Anecdotal evidence suggests that Safari is slightly better in this regard than Chrome.</p>
<p>Here are a few basic best practices to keep in mind when interacting with others via Google Hangouts.</p>
<ul>
<li><strong>Always use headphones.</strong>
<ul>
<li>The Apple earbuds with inline mic work well, a dedicated headset, even better.</li>
</ul>
</li>
<li>Background noise can be distracting and make it difficult to focus on the presentation.
<ul>
<li>Please be mindful of your environment. Maintaining an open mic helps keep the communication flowing but excess noise is a distraction. Use your best judgement when deciding to mute or not.</li>
<li>As a general rule, if you’re in a consistently noisy environment, like to fidget, or are prone to snacking, it might be best. =]</li>
<li>If you are muted and need to talk, pressing <code class="language-plaintext highlighter-rouge">⌘ + d</code> (<code class="language-plaintext highlighter-rouge">ctrl + d</code> for Windows), will activate your mic.</li>
</ul>
</li>
<li>If you’re experiencing distorted audio or blocky video, it may be related to your connection. Try reducing the quality via the <a href="https://support.google.com/hangouts/answer/2979333">bandwidth icon</a> or <a href="https://support.google.com/hangouts/answer/1254313?hl=en&ref_topic=2944918">turning off</a> your camera entirely.</li>
</ul>
<p><strong>Resources</strong></p>
<ul>
<li>Zapier, <a href="https://zapier.com/blog/google-hangouts-video-calls-guide/">The Missing G+ Hangouts Guide</a></li>
<li>University of Minnesota, <a href="http://it.umn.edu/services/all/training-usability/self-help/self-help-guides/google-video-calls.html">G+ Hangout Self-Help Guide</a></li>
<li>Headset recommendation from The Wirecutter: <a href="http://thewirecutter.com/reviews/best-usb-office-headset/">Microsoft LifeChat LX-6000</a></li>
</ul>
<h4 id="use-case">Use case:</h4>
<ul>
<li>Anytime you need convenient access to audio AND video AND screen sharing AND collaborative text editing.
<ul>
<li>If video isn’t required, there might be better options, like one of the services listed below.</li>
</ul>
</li>
</ul>
<hr />
<h3 id="screenhero">ScreenHero</h3>
<p><strong>ScreenHero has officially launched and is now a paid service. It costs $10/mo. This makes me a little sad as I think that’s a bit prohibitive for folks who just want to pair and aren’t using it as a production tool.</strong></p>
<p><a href="http://screenhero.com">ScreenHero</a> is an application that enables remote collaboration through integrated voice / text chat and (surprise!) screen sharing.</p>
<p>One person acts as the host, sharing their screen with another, remote user. A word of caution, though, the remote user will have full access to the host machine. So when connecting as the remote, be mindful of where you’re clicking. Thankfully, ScreenHero provides each user with their own labeled cursor. Which makes it much easier to keep track of where you’re at and who is moving and typing.</p>
<p>In a typical session, you might be working on a file in Sublime Text or in the Terminal. In either case, it’s easy to track who’s doing what and follow along. When it’s time for the remote user to type (drive) they will be able to do so, albeit with some input lag. Since there’s no video involved, at least in the traditional sense, the bandwidth required is much lower. Especially when compared to something like Google Hangouts. Still, depending on the connection, there’s usually a brief delay when typing or clicking. It can be a little disorienting at first but shouldn’t take long to get accustomed to.</p>
<p><del>ScreenHero is currently free to use. It’s in beta, though, so the occasional bug might pop up.</del></p>
<p><del>It will move to a paid service in the coming weeks.</del></p>
<h4 id="use-case-1">Use case:</h4>
<ul>
<li>A great tool if you don’t require video and don’t mind hosting or connecting to another user.</li>
</ul>
<hr />
<h3 id="floobits">Floobits</h3>
<p><a href="https://floobits.com">Floobits</a> is a collaborative text editor and screen sharing solution. It’s primarily intended for folks who need to remotely pair program but has a number of features that make it appealing for small groups as well.</p>
<p>I hope to post a rather extensive overview / tutorial that I wrote a while back. I need to modify some of the screenshots first, redact some personal information. As soon as I finish, I’ll post it at the link below.</p>
<p><strong>Resources</strong></p>
<p><a href="https://travisingram.github.io/2014/08/10/2014-08-10-Floobits-Locally"><strong>Working with Floobits locally</strong></a></p>
<hr />
<h3 id="stypil">Stypil</h3>
<p><a href="https://code.stypi.com/">Stypi</a> is a realtime text editor that enables quick collaboration on a shared documents.</p>
<p>It’s a handy alternative to something like ScreenHero or Floobits if you just want to quickly connect and work through an exercise. It also has many of the basic features you’d expect from a text editor. It offers syntax highlighting for a number of programming languages such as Ruby, HTML, CSS, and Javascript. It also allows you to set up the appropriate tab distance and has a few built in themes like Monokai and Solarized. If you register for an account it will store your documents and settings for later sessions.</p>
<p><strong>Resources</strong></p>
<p>Here’s a short <a href="http://vimeo.com/76870082">tutorial</a> for basic Stypi use.</p>
<h4 id="use-case-2">Use case:</h4>
<ul>
<li>Since it doesn’t have integrated voice chat, you’ll need to use another application for that. But it’s a good choice if, for whatever reason, you don’t want to share your own environment or make a direct connection to someone else machine.</li>
<li>For those with an account, saving files and being able to continue working on an exercise is pretty convenient.</li>
</ul>
<hr />
<h3 id="cloudapp">CloudApp</h3>
<p><a href="http://www.getcloudapp.com">CloudApp</a> is an application that allows you to quickly upload and share screenshots. It can be quite useful when debugging and you want to share an error message.</p>
<h4 id="use-case-3">Use case:</h4>
<ul>
<li>Any situation where you need to quickly share an individual screenshot.</li>
<li>If you upgrade your account you can also store and share video files.</li>
</ul>
<hr />
<h3 id="hastebin">Hastebin</h3>
<p><a href="http://hastebin.com/about.md">Hastebin</a> is a simple site that allows you to quickly save and share code snippets. It even has a <a href="https://github.com/seejohnrun/haste-client">gem</a> that, once installed, will allow you to use it from the command line.</p>
<h4 id="use-case-4">Use case:</h4>
<ul>
<li>This site makes it easy to share code. It’s a quick way to send off a link for review or feedback. The recipient can review and edit as needed and provide feedback inline.</li>
</ul>
<hr />
<h3 id="github-gist">GitHub Gist</h3>
<p><a href="https://gist.github.com">GitHub Gists</a>, much like Hastebin, is a great way to quickly save and share code snippets, full documents, or multiple files. They are also able to be forked and cloned, just like a regular git repository.</p>
<h4 id="use-case-5">Use case:</h4>
<ul>
<li>This site makes it easy to share anything ranging from a single snippet to multiple files. It offers a quick way to disseminate information and do so in a private way. Unlike Hastebin, people aren’t able to make inline comments, so Gists are a little less handy in that regard. Overall, still a handy resource.</li>
</ul>
<hr />
<h3 id="sizeup">SizeUp</h3>
<p><a href="http://www.irradiatedsoftware.com/sizeup/">SizeUp</a> is a utility that allows you to quickly change the position of the currently active window. It’s very useful when screen sharing with someone else.</p>
<h4 id="use-case-6">Use case:</h4>
<ul>
<li>This utility makes it easy to quickly move and resize windows, especially during a pairing session.</li>
</ul>
Projects2014-07-23T00:00:00+00:00https://github.com/TravisIngram/travisingram.github.io/2014/07/23/projects<h2 id="purpose">Purpose</h2>
<p>The life cycle of a given idea is usually pretty short. At least mine are. Primarily because, up until now, the only method I had to capture and save them was a rarely revisited OmniFocus view. Outside of that, I’ve had nothing in place to capture, save, and review them.</p>
<p>I want to change that. I am going to try to use this entry as a way to track ideas, from formulation to execution. I also plan to explore some of the different subject areas that I find interesting and any associated resources that I come across.</p>
<p>For example, I mentioned <a href="http://travisingram.github.io/2014/07/23/initial-commit/">elsewhere</a> that I write a lot. Which means I have a lot of text files laying around. I’d like to build a command line app to search, parse, and analyze those files. I think it’d be a fun and useful learning experience.</p>
<p><em>Update 20140724</em></p>
<p>I have an existing Sinatra based app that I’d like to add some functionality to. Mainly user authentication. That’s the first step, anyway.</p>
<p>I’d like to create a reminder app that will check the status of a service and, given a certain parameter, send off a text or other alert. For example, if I haven’t posted a new entry to 750words by 11:00pm, it would let me know.</p>
Initial Commit2014-07-23T00:00:00+00:00https://github.com/TravisIngram/travisingram.github.io/2014/07/23/initial-commit<h3 id="purpose">Purpose</h3>
<p>I write everyday. Informally, privately, but everyday. The tools are simple, just a blank plain text file and the site <a href="http://750words.com">750words.com</a>. I completed my first entry of 772 words on June 15th, 2011. Since then, I’ve added an additional thousand or so entries and recently passed one million words. Which is a little crazy, I admit. But when viewed as a habit or practice, a method to sort and make sense of the day, I think it’s worthwhile, valuable even. Which is why I keep at it.</p>
<p>I created this site to act as something of a counter, to balance what is effectively an extension of my own internal dialogue. I wanted to have a place to talk publicly and a little more formally about the various projects that I’m thinking about or working on. I hope that by documenting the process, I’ll better understand the problem and potential solutions.</p>
<p>That’s the goal, anyway. It’s a little sparse at the moment, but I’ll be addressing that in the very near future.</p>
<p>We’ll see how it goes.</p>