I was recently working on a hackathon project with some teammates, and setting up continuous builds and deployments was an easy win, so I setup Codeship with ease to deploy when we pushed to master, which we consider production. I did this because Codeship plans vary primarily on the number of builds you get per month, and how many concurrent builds you can do at a time. Their smallest plan, at $9/month gets you 50 builds and 1 concurrent build.

Well, the problem with Codeship is this: every time you push to any branch, they kickoff a build. So even though you might setup to only deploy from one branch, it will test your build for all branches. You can skip on a per-push basis... but that sucks. Sure you can get around it a few different ways, but again... that sucks.

Codeship's opinions are strongly reflected in their pricing.

Codeship's opinions are strongly reflected in their pricing.

So if a company has the opinion that all branches pushed should be tested, then why do they limit the number of builds you get per month?

So I'm looking at CircleCI and so far, the experience has been wonderful. Not only did they allow me to extend my trial 7 days with the click of a button (I went down this path before, but it was months ago now), but their tools are easy to use and you aren't limited by the number of builds you make. So if they have the same opinion that all branches should be tested, it's irrelevant since their pricing doesn't punish you for something you can't control.

AuthorBrandon Aaskov
2 CommentsPost a comment

I've been using CoffeeScript a lot at work over the past couple of months and have really grown to love how expressive (and clean) everything is. As I started playing with Meteor and working from their book, I hit an issue. If you're not aware, CoffeeScript wraps the generated code in a closure, which is great since it doesn't pollute the global scope, but Meteor relies pretty heavily on variables being shared between files (without explicitly exporting anything).

However, because of this closure problem, these "global" variables (meaning global to the application, not the window object) aren't surfaced automatically.

The solution is straightforward though.

I hit issues with my Posts collection not being available, and after doing some light Googling I realized it's because any variable that needs to be exposed needs to do so via the this/@ (the @ symbol is equivalent to the `this` keyword in CoffeeScript). You only have to worry about this during the assignment of a variable, not the retrieval of it.



AuthorBrandon Aaskov
2 CommentsPost a comment

I was trying to figure out what generation I belonged to, and after some googling, I decided there's no consensus. I want something more general than the hugely broad spectrum that incorporates millennials (unless you're Canadian, apparently). I was trying to think of something that would apply to someone in my age range +- 7 years, and I think I have it: the a/s/l generation. 

For those not in the know, a/s/l means "age, sex, location" and usually came accompanied with a question mark. It was how people interacted in the early days of AOL Instant Messenger, back when chat rooms were prevalent and many of us lived inside the walled garden. It was a convenient way to introduce yourself to someone and get through the basics quickly; enough information to determine if the other person was worth talking to or if you were going to end up on the wrong side of "To Catch a Predator" (not that it existed at the time). Today, Chat Roulette taught us that the new "a/s/l" is a dick pick, or in their case, motion picture. Apps like Tinder and OkCupid answer those questions for you, and let you earn the nude selfies. 

I have literally no data to support this, but I'm guessing anyone born '93 or later isn't going to know what that is. Of course, we'll always have exceptions, but we know our parents certainly don't know what a/s/l/ means, which leaves us. 

I wonder if we all watched Snick and TGIF too. That's an option... You could also call it the dial-up generation, but you can clearly see which I like better. 

AuthorBrandon Aaskov

I have no idea if this is real or not, nor do I care because it's fucking hilarious. I'll jump you to one of the better parts, but just keep watching from there if you like what you see. I want to play with this guy on my team so badly now. Credit goes to my good friend Coop for sending me this.

AuthorBrandon Aaskov

I've been working with web analytics for a long time now (Omniture, Webtrends, Google Analytics, etc.) and one thing that comes up time and time again are tracking milestone events: typically 25%, 50% and 75% on top of the standard start and complete events (0% and 100%, respectively). The problem with tracking these quartiles is that it doesn't represent user behavior in a useful way. Almost always these are tracked via hitting a cue point on the timeline - for instance, when the playhead crosses the 25% mark, that event is tracked.

The problem here is that this measurement assumes a linear playback experience, which happens consistently with live TV, but that's not the case for everything else. We're a snacking culture, so we tend to seek around. When working on a project years ago for a well-known adult entertainment website (can't be named for NDA reasons), they said, hilariously, that their audience is very "seek-heavy." And it's true, and not just for content like that. People are impatient and they jump around.

So if people seek heavily, or even moderately, how can tracking a quartile possibly be a valuable measurement? It assumes too much about playback behavior.  

To solve this, the logic should be changed, so consider this an official recommendation. The playback time should be tracked in relation to the entire video, so if someone starts a video, makes it to 5 seconds, and then jumps to 30 seconds, we should consider that the user has only viewed 5 seconds of content, not 30, because that's actually what happened. If the user watched straight through to 30 seconds, then we would know they've watched 30 seconds of content. Since we know the length of on-demand videos, we can easily determine what the aggregate watched time would be compared to the video's length, and thus we can easily know when someone has watched 25% of the content, 50%, and so on. 

We need to stop thinking of these measurements as points on a timeline, and instead thinking of it like water pouring into a bucket, and when that bucket gets filled, we track it and start thinking about the next bucket that is going to be filled.  

Sometimes you'll get into situations where a user's clock changes or something else on the client that causes the time tracking to get way out of whack. Even just pausing and seeking (and buffering) can throw off the tracking, and you need to account for that. Unless you want to get some kind of time tracking server involved (the most robust way to handle this), you may need to discard a user's data from time to time if the tracking gets so far off that it would pollute your data - just check to see if the aggregate time is more than the video's length, and if it is, don't track it.


AuthorBrandon Aaskov

Since everyone has bitched about the lack of details from the Xbox conference regarding games, I want to take a second to ignore all of that. Games run in a "partition" on the Xbox One that will allow them to run as "close to the metal" as possible. Game developers are known to push the limits of a device, so they're given pretty full access to machine. The games will be better and they'll be awesome, as they have with every console release. Get it?

Cool, so on to the important stuff.


Owning the Living Room

The battle has been raging for many years over the living room, and there are no clear winners. With the TiVo, PS3, Xbox 360, Roku, Apple TV, Boxee Box, Google TV, etc. we have a  plethora of options, but nothing that stands out as a clear winner. We see this across the board with every technology: several companies race to be first, but in the end it's the one that rebuilds after the dust settles that wins.

  • Flickr, Photobucket, Snapfish... Instagram wins. 
  • MySpace, Friendster, LiveJournal... Facebook wins. 
  • Nokia, Blackberry, Windows Mobile... iPhone wins (at least in NA). 


start geek rant

That's not always true, but it is more apparent with coding libraries. Over the last few years we've seen a huge surge in frontend frameworks. In my opinion, Backbone did for client-side apps what jQuery did for javascript. But because Backbone was one of the first, it allowed people time to learn it and then improve and fix its problems. And now we have amazing, bleeding-edge frameworks like Ember, AngularJS and Polymer to take us to that next step.

end geek rant


 So is the case with the Xbox One. They've come to dominate the living room and haven't left anything to chance. Let's go through a quick list to appreciate what Microsoft has paid attention to (did I just say that?):

  1. Voice control
  2. Incredibly powerful Kinect (toss the remotes, at least for media apps) 
  3. Always-on: people like to complain about this but people also like to complain about having to run constant updates (e.g. PS3). The Roku is always on, and that seems to work pretty damn well. Plus if you have a DVR, that's always on, so shut up about it if you're one of the whiners.
  4. Personalized: each user of the console has their own customized dashboard, EPG, etc.
  5. Gamification: media apps now will be allowed to award achievements, and as we've seen over the last 6 years, this can be leveraged to amazing effect.

I want to list more. Many, many more, but I did say a "quick" list so let's leave it at that. However, it does segue nicely into the one feature I think trumps them all, and it seems so simple... 


The Killer Feature: Instant Resume

The killer feature of the Xbox One isn't the EPG, which is what you might think based on all Microsoft talks about it.


No, instead it's the instant-resume. To really convey this, let's reframe the context of this. We're going to talk about you as the user, so use your imagination and think of your favorite shows and movies.

Maybe last night you were halfway through that movie you've seen dozens of times (Fight Club? The Notebook?) and just couldn't stick it out and went to bed. You say "Xbox One" and the console wakes up (remember, it's already on) and in less than 2 seconds you're where you've left off and the movie is playing. Niiice. 

While that seems like a really small feature, it's not. Technology give us time/labor-saving tools, and this is one of them. It certainly saves time, but it also reduces the nuisance level. Here's a true example: 

Since the Roku update, the rendition switching algorithm has reminded me of the old days of Real Player ("buffering...").  So I switched back to using my Xbox for Netflix, Hulu and Amazon since it looked better. I informed my lady of this, and yet she still used the Roku. I asked once, after it switched streams for the third time in 10 minutes, why she was still using the Roku. She said "it's just easier" and that was all I needed to hear. She's right. Most people will always opt for the easy option first when it comes to technology because most people don't have the patience to deal with it. As an owner of hundreds of slowly-dying optical media (thank you Microsoft for including a Blu-Ray drive), I noticed this firsthand. Many times I've chosen a movie off of Netflix or Amazon that I already own on Blu-Ray, but the ease-of-use to get it up and running with my Roku is so easy that I just grab that remote.

And that's where Xbox One truly shines. It makes getting to my content so painless that I'll wonder how I ever did it another way. 

If you own a smartphone then there's likely a time you didn't own a smartphone. Now that you know what both sides are like, you probably won't go back. My guess is that the Xbox One will be the same way, and that while the other features are enough to sell the console on its own, the instant-resume feature will be what keeps you turning it back on time after time. 

Xbox On. 

Source: http://www.xbox.com/en-US/xboxone/meet-xbo...
AuthorBrandon Aaskov

Javascript hoisting is a confusing thing. Here's my description of what it is (same description in the gist, hence the references to code):

Hoisting in javascript is pretty simple to understand, and it's incredibly important to learn to avoid introducing bugs into your code. Essentially, a variable is scoped to the closest function (not a for loop, not an if block, a function). This is unlike a lot of other languages where there are strict scoping rules, but what's actually happening behind the scenes here is that every variable I've declared (var example, var prop, var value) is getting "hoisted", or moved, to the top of the function block. When I say that, I mean the javascript engine is doing that internally. That means that when you see something like var value, it's actually just doing an assignment.

I'm not a fan of re-inventing the wheel, so read this article if you want to see the nitty gritty details. 

If you're more of a hands-on type of person, I have a simple example showing how this could get you if you're not paying attention, and I even have that same example on JSFiddle if you want to play with the code directly.

AuthorBrandon Aaskov

Lately I've had this strong urge to perform the way a small development team would, even inside of a larger organization. The problem with big organizations is that they tend to move glacially, and with a lot of red tape. Some businesses are better at getting around this than others, but it's a natural occurrence over time.

As more "process" is put in place, more barriers tend to come with it. The easiest way to spot red tape in an organization is to simply look at the CC field of an email. If you see managers, VPs, product owners, etc. in the CC field of an email sent to you, it probably means someone is pointing the finger at you and trying to cover their own ass. Sometimes, those kinds of emails are necessary, typically when the recipient is unresponsive. But when this happens for the vast majority of emails flying around, it's a good sign that you're missing out on a better culture.

The best way to test this at your company (if it's not already obvious, or if you're new) is to email someone directly - don't CC anyone. If it's a casual email that really doesn't require any other input, and then suddenly there are more people in your email thread with the response, you know that someone is either covering their ass or trying to prove their job's worth. In either case, it's silly and unnecessary. It's the biggest reason we all get way more work emails than we otherwise should.


AuthorBrandon Aaskov

When I was driving across the country, hours alone in the car, I was thinking of how would like to set up a workplace culture if I had control over it. I realized after listening to The Lean Startup that most of my ideas were already pre-discovered by Eric Ries, though he had many more to add. However, one concept wasn't covered. 

When it comes to agency-style work, I agreed with Eric in that teams should be limited to about 5 people to a team to keep them small and nimble. For a team of designers/developers, there should be one Project Manager and one "Producer" as well. Producers in Hollywood are there to just get shit done. Make calls, harass people, get things delivered and organized, etc. These people make life wonderful. Designers and developers should be innovating and creating, not getting bogged down with where to get documentation for Adobe Site Catalyst version 15 for javascript. And that's exactly what a Web Producer would do: get those things taken care of so others don't have to worry about it. This person doesn't even need to come with pre-existing relationships with these companies since a good Producer will find a way to get the answers regardless.

There are certain people that are just born to do that kind of work. They're so good at it that it boggles the mind at times. As a developer, I can honestly say that I'd rather spend time implementing something instead of trying to find where the hell a "developer portal" is and how I get access.

AuthorBrandon Aaskov

I first read about virtual assistants in Tim Ferriss's book "The 4-Hour Workweek", which I won't review here. Or ever. He went on to explain that there are services in India that you can hire for a small price (relative to your income) that can handle menial tasks that you wouldn't otherwise want to do anyway. Essentially, delegating the mundane.  I liked the idea, but didn't want to go through the process of researching good services, finding a good assistant, etc. At the time, I didn't like the idea of paying an hourly rate despite it being cheap (something like $4-$6 an hour). And this is going to sound racist, but I wanted to have an assistant that spoke English well (Fancy Hands's assistants are US based).

When I saw Fancy Hands and looked at their pricing model, I realized this was better suited to me. I get 15 "tasks" a month. A task is essentially an email I send them asking them to fix my problems (or "un-fuck my life" as someone so elegantly put it). They have some suggested tasks on their site, but here are a few I've used it for already: 

  • Getting a stolen UPS package problem taken care of, and a replacement unit shipped out (that I didn't have to pay for, thankfully).
  • Getting a refund on a booking I made with a company that's incredibly difficult to communicate with.
  • Getting information about grocery services that will deliver to the new place I'm moving. 

The first task I sent them was... exhilarating. I realize how ridiculous that sounds, but it was. Have you ever had to call someone and wait on the phone only to have them give you the runaround to call someone else... rinse and repeat? It's infuriating. And it doesn't have to be. I sent a detailed task request outlining what I wanted to do (I like to provide as much detail as possible in the initial message to cut down on back-and-forth). I picked up my XBox 360 controller and played Battlefield 3 with my buddies. An hour later, the email with a solution came in. What a great moment that was.

The beauty of this service is that you realize "how did I ever live without it?" Actually, I take that back. The true beauty of the service is threefold:

  1. These tasks are personal to me, and thus I care more. Which means I'm going to get frustrated when it doesn't go smoothly. So the service eliminates frustration from my life.
  2. The person taking care of the task isn't emotionally tied to its outcome, so they won't get frustrated taking care of it. I'd feel bad if my tasks were just delegating stress to someone else.
  3. In most cases, the person they have to contact on the other end is greeted by my "assistant", which for whatever reason tends to inspire a higher level of service. 

I can't remember the last time something so immediately improved my quality of life. I'll be with Fancy Hands for quite some time, and I can't recommend enough that you do to.  I have a referral link, but you don't have to use it. I would suggest this service whether they had a referral program or not. Their FAQs will probably answer the rest of the questions you have at this point, if you made it this far (and if you did, I'm proud of you, dear reader).

Fancy Hands dashboard.

Source: http://fancyhands.com
AuthorBrandon Aaskov

It dawned on me recently that I should blog more. Okay, it wasn't a recent realization, but one that's been plaguing me time and again for years.

The problem is, I don't want to create/maintain for that. I just want to write the words and be done. That's probably one of the reasons Twitter is so successful - you don't even get design options.

I've always been fond of Squarespace, primarily because they funded The Totally Rad Show, one of my all-time favorite web series. I realized that their slick tools and good templates are worth the $12/month to just not have to think or worry about that crap. And I can get back to making content.

It's a strange thing to admit that there's some aspect of web development that someone else is better suited to do, but that's the case. If I met a film director and she said "I'm not good at editing so I like to have someone else do it" I would probably reply with "well, obviously." So I've accepted the same concept.

AuthorBrandon Aaskov

I have long since been a proponent of watching movies while working. Like... since high school. Now, not everyone understands or agrees with this approach. In fact, many will criticize it, as my bosses have throughout the years. I strongly believe that we're of a different generation, where our ADD needs to be occupied and fueled for productive output.

I don't always watch movies while working - writing emails while a movie is playing is hard for me, not because of the movie, but because of the audio. I can't listen to music and craft an email at the same time either. If you're the type who has considered watching movies while working, I have some tips:

  1. Choose a movie you've seen several times. If you can quote this movie extensively or practically play it in your head, that's the kind of movie you should choose. Otherwise, you'll be paying direct attention to it and the idea is to have it as a background feature.
  2. Choose a movie that's not too heavy on action. For instance, if I try to have Mission Impossible 3 playing in the background, it quickly becomes apparent that it wasn't the right choice. That movie (while awesome) offers hardly any times between totally amazing action scenes.
  3. Be prepared to put it on mute or pause it... a lot. Any time I have to get on a conference call, write an email or read something to fully comprehend it, I have to mute the audio at the very least. In fact, I paused the video I've been watching 4 times since starting this article. I can be in a coffee shop, library, airport, etc. and not be bothered by the background noise, probably because most of it I can't make out. When the audio is blasting into my ears, I have to shut it down to focus. Your mileage may vary. Given this, don't be surprised if it takes an entire day to play a 2 hour movie (I started this hour and 20 minute movie at 3pm and it's now 7pm and I still have 10 minutes left of it).
  4. Know when to cut your losses. As I explained with the MI:3 example above, not all movies work well for this kind of activity. Furthermore, some days just prove to not be the kind of day where having a movie playing is the right choice. Know when to realize that you're not getting anything done and just turn the thing off.

I realize this kind of activity just fuels the prediction of Idiocracy (a great choice for playing in the background if you've already seen it once or twice). People could blame this on ADD, but I think we've just grown up in an environment where we're constantly inundated with media. For us to conform to an environment that strips that all away makes things incredibly difficult.

Not all jobs are conducive to this. If you're a coder, like me, then you're off to a good start. If you swing a hammer for a living, I would stick to listening to the radio blasting from that fancy DeWalt boombox that also charges batteries.

AuthorBrandon Aaskov

The first Neil Strauss book I read was The Game, and that was before its infamy thanks to Mystery and The Pickup Artist. It was an Amazon recommendation, and a good one at that. Before anyone judges what they think that book is about, they should read it. Neil is an fantastic writer, and has a way with words that makes true life accounts both compelling and remarkable. Life tends to have its amazing moments, and Neil captures and delivers it eloquently. Okay, so with that said, I've been reading the Mötley Crüe book called "The Dirt: Confessions of the World's Most Notorious Rock Band" and one page in it delivers on its promise. And then continues to do so page after page. This was an era that I missed out on (not necessarily a bad thing), but I never really, truly understood what a rock and roll life was until this book.

Given that its members were high school dropouts, thieves, beggars, drunks and junkies, it's a wonder they ever achieved what they had. Nikki Sixx created most of the bands songs/lyrics for their early albums, and until I saw a picture of lyrics scribbled onto a stained and torn scrap piece of paper did I realize how short I had sold the band. Don't get me wrong, a lot of the lyrics are around partying, drugs and sex, but that's what rock and roll is. But Nikki's angst comes through from time to time, with lyrics like:

But in the season of wither We'll stand and deliver Be strong and laugh and shout

For some reason, I love those lines. Those were the original lyrics, but the last line was later changed to "Be strong... and rock hard." Rather unfortunate change, but at least I now know the original. If I had less sense (or perhaps was younger and more impetuous) I'd probably get that tattooed somewhere... and then regret it.

AuthorBrandon Aaskov

When working on a project at Brightcove the other day, we hit a fairly common issue. When tapping the video ad playing back in the HTML5 player within an iOS app, the app would move the web view for the ad, but there as no navigation to get back to the app. Typically, the trick with this (at least in terms of Brightcove) is to override the click through behavior, and call a openURI on the Brightcove core package. However, in this case, we weren't sure what Google would support. It turns out, not much. They currently don't support HTML5 players in iOS apps, only their native SDK. That seems crazy to me, so hopefully they change their tune soon.

We discovered they're currently using window.open to get to the ad's click through. Using a plugin, we captured the tap/click of the ad, and we pass the ad tag URL up via postMessage to our application. The player sits inside an iframe, so the plugin includes our javascript at that level, requiring the use of postMessage to get it back to the parent application. If you're using a non-Brightcove player, and you're not using an iframe, you won't have to worry about using postMessage. At that point, we use the Brightcove SDK to open the URL in a modal web view that has navigation for the user to get back to the app.

So, though Google doesn't support it right now, we found a way to make this work. All we need is Google to say "we'll use window.open for the foreseeable future" and we'll be good to go. For now, I've created a gist of the workaround for anyone that needs it. If you're using this for Brightcove, and you've never used javascript plugins, you can get a pretty good idea of how they work from looking at the plugin in that gist.

AuthorBrandon Aaskov

I was working on an edit in Premiere (5.5), and I had created a little audio track in Garageband to use for the video. I converted it to a WAV just to be on the safe side, imported it and tested it. No problems. Then I dragged it to the timeline and it sounded like it was playing back through Macaulay Culkin's Talkboy from Home Alone 2 (if you didn't get that reference, it sounded like slowed down playback). I couldn't figure it out and after much Googling and getting nowhere, I discovered that all of my audio sounded like that in the timeline. I closed Garageband, and it played back fine. There must have been some audio issue with drivers or who knows what - I don't care, because now it's working. I'm posting this just to help others in the future.

AuthorBrandon Aaskov

Remember all those Facebook games people played incessantly? Mafia Wars? Farmville? Countless other Zynga games? The first thing that comes to mind (unless you're 50+ and you just loooooove playing those games and telling all your friends about it), is how g-damn annoying it is to see your Facebook news feed littered with crap about these games and how someone needs 5 cows or some crap. Zynga never really took the hint - people will avoid playing your game if they think they can't have control over their feed. That's the epitome of our online personas, and they're almost as important as our real ones (more important for some people), so we tend to get pissed when someone speaks on our behalf. I know several people who won't use Spotify because they think it's "that app that constantly tells everyone what you're listening to."

And you know what? The people who say that are kind of right. Spotify does this by default, and one of the greatest things about Spotify is the social tie-in. But how do you use Spotify without having this annoyance of spamming your friends? There are ways to disable it, which many have including myself. Quick side note: if you're looking for ways to handle any popular app - even just basic usage - just google what you want and throw in "lifehacker" and you'll probably find your answer. For instance "lifehacker spotify disable facebook posts" were keywords that got me what I wanted.

But it shouldn't have to be that way. In fact, it doesn't. As it turns out, when you're leveraging Facebook for an app, whether that be for something like Spotify or something as simple as a login system for Groupon/LivingSocial/DealChicken, the developer has the ability to request what data they need. Need being the keyword. I can understand if an app wants to know your birthday, or your email so they can send you whatever you purchased (as is the case with DealChicken), but to ask for your friends list, their posts, as well as access to post on your behalf is crazy. It's the equivalent of asking someone if you can marry their daughter, but asking on the first date. "Get the hell out of here kid, before I shoot you!"

Actually, in defense of DealChicken, they give you the opportunity to allow that behavior or skip it, which is a huge improvement and I'm thankful someone started doing it.

I'd prefer not even getting asked in the first place, but one step at a time.

This brings me to the "pure evil" part of the post. Draw Something by OMGPOP. Another story of meteoric rise of popularity, and uses Facebook so that you may play games with your friends (similar to Scramble With Friends or Words With Friends, Zynga games that don't blast stuff to your wall - though they could at any moment).

Yesterday, I got the latest app update for Draw Something on my iPhone. They added some cool features, sure, but what I noticed first was that it was asking me for Facebook permissions again. This time, asking me to be able to post on my behalf. "Hell, no!" I thought, and denied the app. I was then informed that I can't play unless I sign into Facebook, which is when I quickly learned that to sign in and play, I need to adhere to their new "requirements." So I allowed it, but then went to Facebook, dug up my list of apps and revoked the permission instantly. And you can do that at any time with any app, but it's not obvious to most people. Plus, doesn't OMGPOP realize that it's people HATE THAT CRAP? (I put it in all caps to really emphasize the hate, not to make some wordplay off the company name.) What a great way to take your impressive success and just throw it away.

People don't decide to get these apps because they see it inundating their Facebook feed, they get the apps because word of mouth suggest they're fun. I saw someone post a drawing of Green Day on Facebook, it piqued my curiosity so I downloaded the app, and now I play it religiously. Let the viral rumor mill make your app popular, don't try to "make it viral" yourself. There's no such thing. Plus, in trying to do that, you'll probably cannibalize the entire thing.

For extra credit, check out the list of what app developers can ask you for. You'll be pretty surprised the amount of information you can inadvertently give away.

AuthorBrandon Aaskov

I was watching an episode of the Totally Rad Show today, and saw another sponsor message for Netflix. I have Netflix already, so the only way that Netflix would apply to me is if I were to gift it. However, there was nothing in the sponsorship message about gift subscriptions, and I honestly thought until this moment that you had to buy a year subscription. For Valentine's Day, one of the gifts I got Casey was a 3-month subscription to Birchbox. It was the perfect length: long enough to make it a good gift and make a true trial run, but not so long that it was breaking the bank or perhaps even unwanted (what if she didn't even like it?). For a mere $30, I had a pretty neat gift to give.

If you have a subscription service, you should have a 3-month option. In an effort to prove typical companies not doing this, I found out that Hulu and Netflix both do, and that Spotify doesn't have any gift certificates in the States (weird). The 3-month subscription is the gift of the puppy dog sale. The puppy dog sale relates to giving someone a puppy for a short period of time and then making them give it back unless they purchase it. I mean, come on! The majority of people are going to keep a puppy. But they're cuter than most things. I can't remember now off the top of my head what car company did this, but years ago they had a promotion where you could test drive a car and take it home for the night. Sneaky sneaky. The 3-month gift subscription is genius because it gives someone long enough to get used to a service - accustomed to its features and offerings. When that service disappears, most people will step up and pay for their own subscription.

So, if you believe in Hulu, Netflix or Birchbox (or any others), give out a 3-month subscription. That's even cheap enough to do it randomly for a friend. Side note: I'm pretty excited about the Men's version of Birchbox.

AuthorBrandon Aaskov

We now live in a world (well, I do anyway) where the majority of the APIs that we work with are ever-changing, because that's the nature of the web. This is a good thing. We get new API methods and features, tweaked and fixed old methods and... deprecated methods? (sad applause).  Deprecating is the politically correct way of saying "we're not supporting that anymore" without having to risk breaking existing implementations. It's reasonable, it's what we're used to, and we get it. But it doesn't have to be that way, as Github has proven. Entire API versions can be eliminated. There are several companies out there who build their entire service on top of Github's APIs, so for them to say "we're terminating the first two versions in favor of our latest" is ballsy. And awesome. While a feature might be deprecated, it still needs to have plenty of regression testing done so as not to break current customer implementations. That's a real problem. A big one. How can one every hope to evolve an API to suit the ever-changing needs of the world and also keep it from becoming severely bloated? Sure, you can try to be a goddamn wizard and see the future of what your customers will need 3-7 years down the road, but that's just unreasonable. So unreasonable I thought it was necessary to be blasphemous to drive my point home.

The customer mindset needs to change. We need to understand that things like this will change, those changes will likely cost money, but your application and the service providing the APIs will be all the better for it. It's like getting 120k mile maintenance done on your car. It's probably going to be pricey, it's kind of a pain in the butt, but it needs to be done. And considering how rapidly the web landscape changes, we shouldn't be shocked to have to do similar maintenance every 2 to 3 years.

However, there is a problem here. Let's say company XYZ (that almost comes up as often as foobar or Hello World) is using Github's APIs, but they're unaware of what version, how it's implemented, etc. They hired some agency to build their service way back when. Now Github is terminating those API versions, and company XYZ is about to have some serious issues. There needs to be a way to contact the owner of the API keys and inform them that their implementation is in jeopardy of breaking, and they need to be aware of the timeline they have before the **** hits the fan. This means that Github would need to setup some metrics to figure out how many customers, and more importantly who, are using these outdated API versions. At that point, they can reach out to them directly, and if necessary, help them resolve the issues personally. That's a bit of a loss leader for Github, so the hands-on help to resolve issues would probably be reserved for the bigger customers (understandable), but it goes a long way to the long-term health of both companies. Github would have customers using the latest and greatest, and now they don't have to support significantly old versions of their API, which would include a lot of engineering cycles. They can now focus their efforts on new features and optimizing what currently exists.

APIs aren't perfect, and won't be for quite some time, if ever. The web itself is extremely volatile (I think the HTML5 shift and SOPA are great examples there) and it's unfair of us to expect it to exist without change for such long periods of time. If we can all adopt the Github idea (and by "we", I mean the customers of the product), we can help move the web along at an even quicker pace.

Anyway, kudos to Github for doing the right thing.

AuthorBrandon Aaskov

As previously stated, my goal with sewing is to eventually make a men's shirt. I need to work on my skills, obviously (I still suck at seams but I think that's mostly due to my laziness with pressing). However, the other problem I ran into was that several patterns for men are very... outdated (i.e. horrendous looking) and I don't have the skills to modify the pattern heavily to get it more contemporary. Enter the Negroni pattern from Colette. A few people have done this as part of the Male Pattern Boldness sewalong (a 17 part adventure, with part 16 going into detail about changes and tweaks for a good fit), and the results were good enough that I was convinced this would be the pattern I needed. No muslin on this one, not a fan of the fabric with this one, but it came out decently, and I like some of the details on this (stealing those ideas!). Just google Negroni pattern and I'm sure you'll see plenty of results.

I've been to JoAnn fabrics a few times now, and I find it pretty damn overwhelming. Plus, nothing seems to be organized in a way that makes it easy to find what I want. I'm just going to start ordering bed sheets online and using that or something. Anyway, today I visited Z Fabrics in downtown Portland at their new location. Not a big store by any means, and thus a limited selection of everything, but they make up for that with quality. They had some nice shirting fabrics, and I picked up some corduroy just to play around with and hopefully make the Osman tie out of, as well as some all-around machine needles. But lo and behold, they carry Colette patterns. They also carry some other contemporary patterns that are quite a bit more fashionable than the big guys, but I was hunting for that Negroni pattern, and I found it. It wasn't cheap  at $16, but that's the same as it's priced online and I didn't have to pay for shipping and got it immediately. So, obviously I snagged that one.

I'll definitely be frequenting Z Fabrics more. It's definitely more my style, and they offer some classes, which I'll almost definitely be taking. I can't wait to screw up several shirts over and over! I'll keep it simple and keep working on some basic projects for the time being, but now I have the pattern waiting in the wings for when it's time.

AuthorBrandon Aaskov

Someone today, referring to something I had said, quoted "I heard a giggle..." and it dawned on me that "giggle" might be one of the least masculine words out there. Men chuckle, women giggle. Next time someone says you giggled, picture this:

AuthorBrandon Aaskov