Garrett Nay

I develop web.

I Have Been Learning the Wrong Way

I recently finished an excellent course titled “Learning How to Learn: Powerful mental tools to help you master tough subjects”, available for free on Coursera. While by most measures the course wasn’t particularly demanding—the lectures were short, and the quizzes were easy enough to pass—it did make me take a hard look at how I’ve been learning.

It turns out I’ve probably been doing it wrong for most of my life.

Still Not Sure About AngularJS

I had originally planned to title this post “I’m Starting to Get Sold on AngularJS,” but a blog post I read the other day got me thinking again. In “Opinionated Rundown of JS Frameworks”, Henrik Joreteg from &yet gives some interesting critiques of Angular (as well as other JavaScript frameworks) that caused some of my old doubts to resurface. I still think Angular is a very cool framework, and I intend to continue experimenting with it, but I’m hesitant to treat it like the only serious player in the game, as so many developers seem to do already.

Lessons Learned From Creating an Open-Source Library

This past week I released a simple jQuery plugin on GitHub. It’s nothing special; in fact, I don’t imagine very many people ever needing it. But I learned quite a few valuable lessons during the development process—not just about writing jQuery plugins specifically, but about creating, developing, and releasing a software product and publishing its source code for all the world to see.

I’m not necessarily going to say anything groundbreaking here. You’ve probably heard many of them before. In fact, I already knew a lot of these things at least on an intellectual level, but there’s definitely something different about learning from real experience. I hope these little lessons I’ve learned will be helpful to some of you.

Battle of the Clouds: Koding vs. Codio

Today I’d like to talk about two different cloud IDEs that I’ve had the chance to use, Koding and Codio, and the pros and cons of each. I know that cloud IDEs aren’t really new at this point, and these two that I’m talking about certainly aren’t the only ones out there, but I’ve only recently gotten into this game. Hopefully my perspective will help you if you’re trying to decide on a cloud IDE to go with.

Spoiler: I prefer Codio and use it quite a bit. What you get for the price is great, and overall it seems faster and more polished than Koding.

The Obligatory Redesign Post

Hi. Yes, I’m still here. And check out my new design! It may not look like much, but it represents a big step for me.

You see, ever since I started this Octopress blog, I always had this nagging feeling that I should do something about the design. The default Octopress theme is nice, but nobody wants to stick with the default theme, right? It’s like how Twitter Bootstrap looks nice, but it’s so nice that for a while it seemed as if half of the Web were using it. You could spot a Bootstrap-based site immediately (still can, I suppose). And you could pin my blog as an Octopress blog immediately, too. Not that that was a bad thing, but I didn’t want this to get written off as “yet another Octopress blog.”

I wanted to create a new theme. Oh, I had big plans. I envisioned adapting one of the awesome templates by HTML5 Up, and eventually open-sourcing it so everyone could easily integrate it into their own Octopress blogs. But then some things started happening in the Octopress world that put me in stop-and-wait mode for quite a while.

Write Modular JavaScript That Works Anywhere With UMD

Have you ever used a JavaScript library that gives you more than one way to include it in your project? Take, for example, the Backbone localStorage adapter. The readme gives you two ways to put it into your project: including it through a separate script tag in your HTML, or loading it through RequireJS.

As a developer that is still learning to navigate the JavaScript landscape, I’ve wondered how libraries like that do it. The two methods of inclusion work entirely differently. When you include a library using a script tag, you’re usually creating global variables that other scripts can use. But one of the main benefits of using RequireJS is that it eliminates the need for global variables. How can the same resource be loaded in both ways?

After some digging, I learned that many of these projects use a pattern called the Universal Module Definition.

Manage Your Dotfiles Easily With Git and Homeshick

It’s been a while since my last post, and one reason for that is that I spent some time upgrading to Ubuntu 13.10 and configuring my new system. It may be a bad idea, but for some reason I prefer doing a fresh install rather than directly upgrading when a new version of Ubuntu is released. But as fun as it can be to configure a shiny new system, I’ve learned that I really need a more systematic way to keep track of some of the more repetitive tasks. One very useful tool I found for doing this is called Homeshick.

Amazing Resource DevDocs Goes Open Source

DevDocs, the all-in-one API documentation tool for web developers, released its code on GitHub yesterday, officially becoming an open-source project. This is good news indeed. Now that anybody can contribute documentation, this already-amazing resource is only going to get better.

If you are a web developer and aren’t using DevDocs, you are seriously missing out. Here are a few reasons why.

Run Programs From Your Home Directory in Ubuntu

Update 23 Nov 2013: Since I upgraded to Ubuntu 13.10, setting variables in .pam_environment no longer works for me. No matter what I have in there, even if the syntax is correct, I get blocked from logging in to my account. I haven’t yet figured out why this is happening or what the solution is, but until I do, I’m setting my PATH variable in .profile instead. I recommend you do the same.


Setting up a directory to run local applications is very simple. You just need to do two things:

  1. Create a directory for them. I like to use .local/bin in my home directory.

  2. Edit the PATH in one of the files that sets environment variables. In Ubuntu, I recommended setting it in .pam_environment .profile.


I really enjoy using Ubuntu, and GNU/Linux systems in general. In my opinion, they’re ideal for web development.

A situation I’ve run across recently is when I want to run applications that exist in my user directory, rather than in the system directories.