<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>OctoBlog</title>
  <subtitle>The OctoLabs Blog.</subtitle>
  <description>The OctoLabs Blog.</description>
  <id>http://www.octolabs.com/blogs/octoblog</id>
  <link href="http://www.octolabs.com/blogs/octoblog"/>
  <link href="http://www.octolabs.com/blogs/octoblog/feed.xml" rel="self"/>
  <updated>2017-03-15T06:11:00Z</updated>
  <author>
    <name>Jeremy Green</name>
  </author>
  <entry>
    <title>Working in public</title>
    <link rel="alternate" href="http://www.octolabs.com/blogs/octoblog/2017/03/15/working-in-public/"/>
    <id>http://www.octolabs.com/blogs/octoblog/2017/03/15/working-in-public/</id>
    <published>2017-03-15T06:11:00Z</published>
    <updated>2021-06-02T14:21:47-05:00</updated>
    <author>
      <name>Jeremy Green</name>
    </author>
    <content type="html">&lt;p&gt;I spent a few days in Las Vegas this week, and as I was strolling
down Fremont street yesterday afternoon I stopped to watch this guy
paint.&lt;/p&gt;

&lt;p&gt;&lt;img alt="" src="https://www.octolabs.com/images/working_in_public/painter.jpg" /&gt;&lt;/p&gt;

&lt;p&gt;I watched him start with a completely blank peice of paper. Then he
started applying paint (with spray paint cans!),
using other peices of paper to block off sections of his "canvas",
and removing or smearing paint with rags.&lt;/p&gt;

&lt;p&gt;After a while he had created this painting:&lt;/p&gt;

&lt;p&gt;&lt;img alt="" src="https://www.octolabs.com/images/working_in_public/painting.jpg" /&gt;&lt;/p&gt;

&lt;p&gt;As I was watching him paint it occurred to me that this is the ultimate
example of "working in public".&lt;/p&gt;

&lt;p&gt;Every single drop of paint was added in
full view of anyone who cared to watch. He never raised a curtain to
protect a "trade secret". He never obscured the view of his work in
progress to preserve a special technique.&lt;/p&gt;

&lt;p&gt;He never worried that I might watch what he was doing and then go home
and do it myself. In fact, it's just the opposite. As I watched him paint I continually thought
"Wow, that takes some skill! I couldn't pull that off with 15 hours of work, and
he's doing it in 15 minutes."&lt;/p&gt;

&lt;p&gt;He's well aware that if I were looking to pick up his techniques that I
was never going to be his customer in the first place. He knows that
letting me see the process of creating this painting is part of what
makes the end result impressive.&lt;/p&gt;

&lt;p&gt;A little later in the day I passed the same spot again, and there was a
different guy doing the same thing, in the same spot, with the same gear.&lt;/p&gt;

&lt;p&gt;&lt;img alt="" src="https://www.octolabs.com/images/working_in_public/painter2.jpg" /&gt;&lt;/p&gt;

&lt;p&gt;I don't know which painter is the "master" and
which is the "apprentice" in this situation (I have a guess), but it's clear that there's a
group of people all working together. I'd bet that whoever is the "ring
leader" managed to recruit others to the cause by working in public and
demonstrating mastery of skills.&lt;/p&gt;

&lt;p&gt;So, to wrap up, I think there are two main benefits that these guys (and
their group) get from working in public.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Their customers have a better appreciation for the end product that
they produce and the skill it takes to produce it.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;They have increased visibility and a means to recruit new painters.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This post is as much for my own benefits as anyone's. I'm still
working to internalize the concept of working in public, and still
trying to figure out exactly what it means for my type of work. I think
this is a good example to keep in mind when The Fear&lt;sup&gt;TM&lt;/sup&gt; pops up and tries
to convince me that I need to "protect my secrets".&lt;/p&gt;

&lt;p&gt;Btw, the first painter that I saw is a guy named Tony Vegas. You can &lt;a href="http://fineartamerica.com/profiles/antonio-reyes.html"&gt;see
(and buy) some of his art here&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Going Serverless @ Okc.js</title>
    <link rel="alternate" href="http://www.octolabs.com/blogs/octoblog/2016/04/19/going-serverless-okc-js/"/>
    <id>http://www.octolabs.com/blogs/octoblog/2016/04/19/going-serverless-okc-js/</id>
    <published>2016-04-19T15:09:00Z</published>
    <updated>2021-06-02T14:21:47-05:00</updated>
    <author>
      <name>Jeremy Green</name>
    </author>
    <content type="html">&lt;p&gt;Today at &lt;a href="http://okcjs.com"&gt;Okc.js&lt;/a&gt; I'm presenting a talk called
"Going Serverless" about the &lt;a href="http://serverless.com"&gt;Serverless
framework&lt;/a&gt; and &lt;a href="http://aws.amazon.com/"&gt;Amazon Web Services&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id="slides"&gt;Slides&lt;/h3&gt;

&lt;p&gt;&lt;a href="/pdfs/going_serverless_okcjs.pdf"&gt;Going Serverless&lt;/a&gt;&lt;/p&gt;

&lt;h3 id="demo-project"&gt;Demo Project&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/jagthedrummer/going_serverless_demo"&gt;https://github.com/jagthedrummer/going_serverless_demo&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>How much should custom development cost?</title>
    <link rel="alternate" href="http://www.octolabs.com/blogs/octoblog/2015/05/26/how-much-should-custom-development-cost/"/>
    <id>http://www.octolabs.com/blogs/octoblog/2015/05/26/how-much-should-custom-development-cost/</id>
    <published>2015-05-26T22:19:00Z</published>
    <updated>2021-06-02T14:21:47-05:00</updated>
    <author>
      <name>Jeremy Green</name>
    </author>
    <content type="html">&lt;p&gt;I remember when my parents took me to get my first car. Like many teenage boys my list of requirements for a car looked something like this:&lt;/p&gt;

&lt;h3 id="things-i-want-in-a-car"&gt;Things I want in a car&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;sporty&lt;/li&gt;
  &lt;li&gt;fast&lt;/li&gt;
  &lt;li&gt;red or black&lt;/li&gt;
  &lt;li&gt;deluxe stereo system&lt;/li&gt;
  &lt;li&gt;power everything&lt;/li&gt;
  &lt;li&gt;new&lt;/li&gt;
  &lt;li&gt;"cool"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Unfortunately the budget at hand meant that I could have few of those things.&lt;/p&gt;

&lt;p&gt;I also had another requirement that was a little bit unique. I played drums in a band and &lt;strong&gt;I needed something that would allow me to move my drum set.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;My parents recognized that this was the single most important requirement for this new vehicle. In order to make sure that I stayed on task they had me load up my drums set and we took it to the (used) car dealership. Every time that a vehicle caught my eye the very first thing that we did was move the drum set from my parents car into the new candidate to make sure that everything would fit. Much to my dismay, this process immediately ruled out a wide range of fast/sporty/cool cars, but it ensured that I never had any chance to get the least bit emotionally attached to any option that wouldn't fulfill the primary goal of the purchase.&lt;/p&gt;

&lt;h2 id="knowing-what-really-matters"&gt;Knowing what really matters&lt;/h2&gt;

&lt;p&gt;My original list of requirements were almost all based on what I thought would make for a "cool" car. I wasn't even that into cars, but still wanted to have a cool one. This was strictly about status. My parents knew that I needed to focus on utility instead. They also knew that budget was important.&lt;/p&gt;

&lt;p&gt;Had I gone to the dealership on my own I'd have described wanting a Porsche and then been shown a Pinto based on my budget. Car dealers know that it's very common for a person to have desires and budgets that are at odds with each other (I mean, who doesn't?), so the &lt;strong&gt;very first&lt;/strong&gt; question that they ask is: "What is your budget?"&lt;/p&gt;

&lt;p&gt;The available budget is the single most important factor in the first step of narrowing down which cars are realistically in play. It's a waste of time for everyone involved for a dealer to show and test drive a car that is significantly lower or higher than the target budget range. (You might think that ones significantly lower would be a safe bet, but that's most often not the case. That's due to people seeking both utility and status in a vehicle.)&lt;/p&gt;

&lt;p&gt;Now to bring us to the original question:&lt;/p&gt;

&lt;h2 id="how-much-should-custom-development-cost"&gt;How much should custom development cost?&lt;/h2&gt;

&lt;p&gt;To continue with the car scenario, we might ask :"How much should a vehicle cost?"&lt;/p&gt;

&lt;p&gt;The question itself doesn't contain enough information to be answerable. We need to know much more about the intended use of the vehicle to even begin to answer
that question.&lt;/p&gt;

&lt;p&gt;Are we talking about a car for a family or some sort of business use?&lt;/p&gt;

&lt;p&gt;Any family buying a car will almost certainly have a budget in mind when they go to buy a new car.&lt;/p&gt;

&lt;p&gt;If we assume that it's for a business then the real
question is "&lt;strong&gt;How will this vehicle help the company make money?&lt;/strong&gt;" Only after answering that question will we be able to start to decide on a reasonable budget for this vehicle.&lt;/p&gt;

&lt;p&gt;For instance, if the business is a bicycle messenger service, then the budget for a new vehicle is drastically lower than if it's a moving van company. Likewise the moving van is drastically less expensive than a big rig for hauling cargo long distance. Or maybe the business plans to race this new vehicle in a major stock car tournament.&lt;/p&gt;

&lt;p&gt;In each of these cases the use to the business and the expected return on investment dictates a &lt;strong&gt;budget range&lt;/strong&gt; that is reasonable to spend on a new vehicle. There may be wide variation within that range, but the range itself is set by the expected return to the business by incurring that expense.&lt;/p&gt;

&lt;p&gt;The variations in price within the available options will represent a variety of factors including:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Quality&lt;/li&gt;
  &lt;li&gt;Extra features&lt;/li&gt;
  &lt;li&gt;Risk management (warranty coverage)&lt;/li&gt;
  &lt;li&gt;Status signalling&lt;/li&gt;
  &lt;li&gt;Speed of delivery (for custom orders)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Custom development is very much like this.&lt;/p&gt;

&lt;p&gt;I sometimes hear from business owners, or people with an idea for a business who ask me to give them a quote on some custom development project. They want to spend a few minutes describing their idea to me and then have me tell them what it should cost.&lt;/p&gt;

&lt;p&gt;Often they describe a Porsche of a project, but then have sticker shock when it comes to building their custom Porsche. Many times this is due to focusing on features and status signals more than utility.&lt;/p&gt;

&lt;p&gt;I recommend that business owners do two things to make things go smoother.&lt;/p&gt;

&lt;h3 id="understand-and-group-your-requirements"&gt;1. Understand and group your requirements.&lt;/h3&gt;

&lt;p&gt;As with most things, a project of this sort ends up being a series of trade offs and compromises. More than just having a set of requirements you also need to understand which business objective each requirement is trying to accomplish so that you can make the most effective trade offs. I'd recommend grouping your requirements (and the business justifications for them) into 3 main groups.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Must have - Without these the site is useless to you.&lt;/li&gt;
  &lt;li&gt;Probably need - These are not mission critical, but are almost certainly needed but theoretically could be traded away in a worst case scenario.&lt;/li&gt;
  &lt;li&gt;Nice to have - These are things that have the lowest expected ROI and are the first to go if there are scope/budget concerns.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thinking of your objectives and requirements in this way allows you to more easily resolve any conflicts that may lurk in competing objectives and requirements.&lt;/p&gt;

&lt;p&gt;It also means that you can be shooting for varying levels of success that might be characterized as "Good enough", "Pretty damn good" and "OMG Home Run!!!".&lt;/p&gt;

&lt;h3 id="develop-a-budget-at-least-just-a-ballpark"&gt;2. Develop a budget. At least just a ballpark.&lt;/h3&gt;

&lt;p&gt;I know that it's tempting to just throw requirements out there and get proposals, but the truth of the matter is that if you looked hard enough for almost any project you'd be able to find somebody who'd propose it at $500 (you don't want that person), and you'd be able to find somebody to quote it for $500k (you probably don't want that person either). Having a ballpark budget in mind helps to avoid wasting anyone's time (most importantly, yours!).&lt;/p&gt;

&lt;p&gt;Ideally you'd want your budget to structured in 3 parts, to match the 3 groups of requirements.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Baseline budget - The minimum amount you are looking to spend to get your "Must have" objectives met.&lt;/li&gt;
  &lt;li&gt;Middle of the road budget - A range reflecting what you'd like to spend to get all of your "Must have" and most or all of your "Probably need" objectives met.&lt;/li&gt;
  &lt;li&gt;Top end budget - The maximum amount you are willing to spend to meet every single one of your objectives.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Obviously your budget should be related to the business objectives you have for this project. For instance if your plan is for the project to generate $1 million in sales over the first year you'd obviously want to have a much different budget than if you only expect it to do $100k.&lt;/p&gt;

&lt;h2 id="whats-your-project"&gt;What's your project?&lt;/h2&gt;

&lt;p&gt;Do you have a business or project idea that you'd like to get off the ground? Do you know whether you need a Porsche or a cargo van?&lt;/p&gt;

&lt;p&gt;&lt;a href="/roadmapping/"&gt;I can help you assess your true needs and lay the ground work to make your dream a reality.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;PS. I ended up with a 1984 Dodge Duster hatchback. :)&lt;/p&gt;

&lt;p&gt;&lt;img alt="1984 Dodge Duster" src="http://upload.wikimedia.org/wikipedia/commons/5/50/Plymouth_Duster_EEK.jpg" /&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Analysis of the rumored Heroku pricing changes</title>
    <link rel="alternate" href="http://www.octolabs.com/blogs/octoblog/2015/03/31/analysis-of-the-rumored-heroku-pricing-changes/"/>
    <id>http://www.octolabs.com/blogs/octoblog/2015/03/31/analysis-of-the-rumored-heroku-pricing-changes/</id>
    <published>2015-03-31T01:35:00Z</published>
    <updated>2021-06-02T14:21:47-05:00</updated>
    <author>
      <name>Jeremy Green</name>
    </author>
    <content type="html">&lt;p&gt;It &lt;a href="http://notes.ericjiang.com/posts/881"&gt;was recently reported&lt;/a&gt; that
Heroku will soon be making some changes to their basic dyno pricing
structure. I wanted to take a look at the changes and see what they will
mean for all of the apps that I host there, some already on a paid tier,
and some using their generous free tier.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h2 id="the-changes"&gt;The changes&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://notes.ericjiang.com/posts/881"&gt;You should read the original post&lt;/a&gt; if you want
all of the details, but the basic rundown is this:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Free tier : Will be limited to 1 web dyno and 1 worker dyno, will
sleep after 1 hour of inactivity, can be active for up to 12
hours a day, and can not support custom domains. Dynos have 512 MB
RAM.&lt;/li&gt;
  &lt;li&gt;Hobby tier : Dynos can run 24x7 for $7/dyno/mo and custom domains
are supported. Max of one dyno per Procfile entry. Dynos have 512 MB
RAM.&lt;/li&gt;
  &lt;li&gt;Standard tier : All Hobby features, plus multiple dynos per Procfile
entry, app metrics, faster builds and preboot. 512MB or 1GB RAM for $25 or $50/dyno/mo.&lt;/li&gt;
  &lt;li&gt;Performance tier : All Standard features, plus the availability of
isolated high-performance dynos with 6 GB RAM for $500/dyno/mo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So let's look at a few different configurations and see how monthly
costs would differ between the current pricing and the new pricing.&lt;/p&gt;

&lt;h2 id="a-disclaimer"&gt;A Disclaimer&lt;/h2&gt;

&lt;p&gt;For the record, I do not work for Heroku and was not paid or otherwise
encouraged by them to write this. My goal here is not to convince you to
move to Heroku, but rather to take a fair look at how these changes will
affect apps currently hosted at Heroku, both free and paid.&lt;/p&gt;

&lt;p&gt;Also, I'm assuming fairly simple (and possibly naive) usage patterns. One
of the big benefits to Heroku (and other services like it) is that you
can be very intelligent about how and when you run your infrastructure
and scale up and down based on demand and/or time of day.
For the sake of easy calculations I'm going to be looking at static dyno
configurations. Many of these are real configurations that I've used,
and some are better thought of as a base-line minimum for busier sites,
which would be augmented with some additional dynos on-demand.&lt;/p&gt;

&lt;p&gt;I'm also interested in helping developers understand
that the economics of changes like these may not be as cut and dried as
they appear at first.&lt;/p&gt;

&lt;p&gt;Which leads me to my next point…&lt;/p&gt;

&lt;h2 id="valuing-your-time"&gt;Valuing your time&lt;/h2&gt;

&lt;p&gt;One of the things that's motivating me to explore this pricing change is
that I've seen some grumbling from developers who are ready to move away
from Heroku simply because they're not getting everything they need for
free anymore and think that there are "cheaper" options.&lt;/p&gt;

&lt;p&gt;On the raw numbers, yes, there may be cheaper options out there. However,
moving to those other options will take time and effort, and unless you value your
time at $0/hour there is a real cost to you in spending the time to make
the change. This is true of any big change in hosting providers.&lt;/p&gt;

&lt;p&gt;For the purposes of this conversation let's say that your time on the
open job market, as a person who is technically capable enough to use
Heroku effectively is $85/hour. This is a very realistic number, and in
fact, is on the low end for contract developers. But it's a convenient
number for our purposes. If you know how to use Heroku and you don't believe
you time is worth at least $85/hour I'd reccomend that you read
everything you can find from &lt;a href="http://www.kalzumeus.com/"&gt;Patrick McKenzie, aka patio11&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id="keeping-it-free"&gt;Keeping it free&lt;/h2&gt;

&lt;p&gt;The current free tier at Heroku basically allows you to run one dyno
24x7 at no cost. Dynos are currently put to sleep after 1 hour of
inactivity, but I think that only applies to web dynos, and they can be
kept alive by setting up site monitoring tools to ping them at least
once an hour. So, basically 1 free dyno 24x7.&lt;/p&gt;

&lt;p&gt;The new pricing indicates that the best you can do on the free tier is
to run one web dyno AND one worker dyno each 12x7. If you currently have
a site with only one web dynor or with just one worker dyno it seems
that you'll be out of luck for staying on the free tier if you want to
keep your dynos alive all the time. If you can schedule your dyno
availability around business hours (for example) and allow them to sleep
at night, you may be able to squeak by on the free tier.&lt;/p&gt;

&lt;h2 id="starting-to-pay"&gt;Starting to pay&lt;/h2&gt;

&lt;p&gt;If you really need your one web or worker dyno to live 24 hours a day 7
days a week OR if you want to host your web dyno at a custom domain,
then under the new pricing structure you'll pay $7 a month,
or $84 dollars a year.&lt;/p&gt;

&lt;p&gt;I know that some people will balk at this figure, but based on the
number we agreed to above, if staying on Heroku saves you even 1 hour
over the next year it has paid for itself.&lt;/p&gt;

&lt;p&gt;If we assume, for a moment, that you have the option to move to some
other hosting service that is free, you can't spend more than 1 hour
making the transition to the new service, and you really can't spend any
time at all over the next year doinking with your new hosting provider.&lt;/p&gt;

&lt;p&gt;If you value your time &lt;strong&gt;at all&lt;/strong&gt; it's worth it to pay the $84/year to keep
a project running there that was previously free.&lt;/p&gt;

&lt;h2 id="currently-paid-but-small-apps"&gt;Currently paid, but small apps&lt;/h2&gt;

&lt;p&gt;Let's say that you currently have one web dyno and one worker dyno
staying alive 24x7, both on the 1X or 512 MB dynos. (I'm running
exactly this configuration for a couple of small apps.) Currently
you get one of those dynos for free, and you pay about $35/month for the
other one.&lt;/p&gt;

&lt;p&gt;Under the new pricing structure you'd pay $7/month for your web dyno,
and $7/month for your worker dyno, for a total of $14/month. This is
clearly a better deal and represents a savings of over 50%.&lt;/p&gt;

&lt;h2 id="larger-but-still-small-paid-apps"&gt;Larger, but still small paid apps&lt;/h2&gt;

&lt;p&gt;Let's say that you currently run 2 web dynos and 1 worker 24x7, on the
1X dynos. One of those dynos is free, and you're paying $35/month for
the other two, for a total of $70/month.&lt;/p&gt;

&lt;p&gt;On the new structure you'll need to step up to the Standard pricing
to be able to run the 2 web dynos simultaneously, so you'd be paying
$25/month for each of 3 dynos. So all together you'd be paying $75/month
instead of $70/month, for a total increase of $60/year.&lt;/p&gt;

&lt;p&gt;Again, if you value your time in the least, an increase of $60/year is
pretty poor motivation to change infrastructure providers.&lt;/p&gt;

&lt;p&gt;If you're looking for places to complain about the new pricing this is
one of your only sweet spots. ;) From here on up the new pricing is
advantageous to Heroku customers.&lt;/p&gt;

&lt;h2 id="larger-still-but-barely"&gt;Larger still, but barely&lt;/h2&gt;

&lt;p&gt;Let's say you have 2 web and 2 worker dynos running 24x7 on 1X
dynos. Currently you pay $35/month for 3 of them, with one being free.
Total cost is $105/month.&lt;/p&gt;

&lt;p&gt;The new pricing would see you paying $25/month for each of those dynos,
for a total cost of $100/month.&lt;/p&gt;

&lt;p&gt;So, it's not a huge difference, but about a 5% savings on the new plans
if you run 4 1X dynos 24x7.&lt;/p&gt;

&lt;h2 id="getting-bigger"&gt;Getting bigger&lt;/h2&gt;

&lt;p&gt;Let's jump up and say that you're using 2X dynos and have 2 each of web
and worker dynos. The details of the calculation start to get a little
messy, but the &lt;a href="https://www.heroku.com/pricing"&gt;Heroku pricing calculator&lt;/a&gt;
shows the total cost to be $250.50/month.&lt;/p&gt;

&lt;p&gt;The new pricing structure has 2X dynos at $50/month, giving you a total
of $200/month. A 20% savings.&lt;/p&gt;

&lt;h2 id="what-about-really-big"&gt;What about really big&lt;/h2&gt;

&lt;p&gt;The bigger your app, the better the news.&lt;/p&gt;

&lt;p&gt;If you currently run 16 1x dynos you pay about $538/month.
Under the new pricing you'll pay $400.&lt;/p&gt;

&lt;p&gt;If you currently run 16 2x dynos, instead of paying your current
$1,114/month you can pay a more comfortable $800. 28% saving.&lt;/p&gt;

&lt;p&gt;32 2X dynos? How about $1,600/month instead of $2,26? 30% savings? Yes!&lt;/p&gt;

&lt;h2 id="it-just-keeps-getting-better"&gt;It just keeps getting better&lt;/h2&gt;

&lt;p&gt;As you can see, the larger your app, the more savings you'll see under
the new pricing.&lt;/p&gt;

&lt;h2 id="show-me-all-the-numbers"&gt;Show me all the numbers!&lt;/h2&gt;

&lt;p&gt;Here you can see that the savings for 1X dynos trends towards 27% as you
add more an more dynos.&lt;/p&gt;

&lt;p&gt;&lt;img src="https://www.octolabs.com/images/heroku-economics/1x.png" /&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;For 2X dynos the savings trends towards 30%.&lt;/p&gt;

&lt;p&gt;&lt;img src="https://www.octolabs.com/images/heroku-economics/2x.png" /&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;For performance dynos the savings trends towards 13%.&lt;/p&gt;

&lt;p&gt;&lt;img src="https://www.octolabs.com/images/heroku-economics/performance.png" /&gt;&lt;/p&gt;

&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;If you already pay Heroku just about anything for hosting your app(s)
this new pricing is nothing but Good News&lt;sup&gt;TM&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;If you're currently relying on the free tier, you can continue to host
your project there for $84/year. Your time as a developer is worth &lt;em&gt;AT
LEAST&lt;/em&gt; $84/hour. So, if you value your time at all you
should stop trying to find a "cheaper" alternative and just give Heroku
your credit card.&lt;/p&gt;

&lt;p&gt;The only good reason to move away as a result of these (rumored) changes
is if &lt;strong&gt;you enjoy&lt;/strong&gt; managing infrastructure as a low level. If you're
into that, then great! Have fun managing servers.&lt;/p&gt;

&lt;h2 id="what-do-you-think"&gt;What do you think?&lt;/h2&gt;

&lt;p&gt;Did I miss something in the rumored pricing? Do you run a configuration
on Heroku where the new pricing isn't a good thing? &lt;a href="http://twitter.com/jagthedrummer"&gt;Tweet at
me&lt;/a&gt; or &lt;a href="&amp;#109;&amp;#097;&amp;#105;&amp;#108;&amp;#116;&amp;#111;:&amp;#106;&amp;#101;&amp;#114;&amp;#101;&amp;#109;&amp;#121;&amp;#064;&amp;#111;&amp;#099;&amp;#116;&amp;#111;&amp;#108;&amp;#097;&amp;#098;&amp;#115;&amp;#046;&amp;#099;&amp;#111;&amp;#109;"&gt;send me an
email&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>NDC London - Client MVC != Server MVC</title>
    <link rel="alternate" href="http://www.octolabs.com/blogs/octoblog/2014/12/03/ndc-london-client-mvc-server-mvc/"/>
    <id>http://www.octolabs.com/blogs/octoblog/2014/12/03/ndc-london-client-mvc-server-mvc/</id>
    <published>2014-12-03T13:35:00Z</published>
    <updated>2021-06-02T14:21:47-05:00</updated>
    <author>
      <name>Jeremy Green</name>
    </author>
    <content type="html">&lt;p&gt;Today at &lt;a href="http://www.ndc-london.com/"&gt;NDC London&lt;/a&gt; I'm presenting a session called
"Client MVC != Server MVC".  Here are links to my
slide deck, an example GitHub repo, and a bunch of JSBins that step
through the process of building up a small app.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h3 id="slides"&gt;Slides&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://jagthedrummer.github.io/ember_ndc_london/"&gt;http://jagthedrummer.github.io/ember_ndc_london/&lt;/a&gt;&lt;/p&gt;

&lt;h3 id="repos"&gt;Repos&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/jagthedrummer/pattern-lab"&gt;Pattern Lab - An Ember CLI demo app.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/jagthedrummer/pattern-lab-api"&gt;Pattern Lab API - A Rails app providing a JSON API for the Ember app.&lt;/a&gt;&lt;/p&gt;

&lt;h3 id="jsbins"&gt;JSBins&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/guyed/1/edit"&gt;A very simple app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/boyim/3/edit"&gt;A very verbose and simple app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/rumit/1/edit"&gt;Application layout&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/falat/3/edit"&gt;Adding a page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/jevexo/1/edit"&gt;Rendering partials&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/wiyoh/1/edit"&gt;Displaying data&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/leyog/1/edit"&gt;Data binding&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/letok/1/edit"&gt;Models&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/vibeza/2/edit"&gt;Fixture Adapter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/gekuw/1/edit"&gt;Dynamic routes &amp;amp; Nested routes/templates&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/hatev/1/edit"&gt;Pattern display component&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/falat/8/edit"&gt;Create a new pattern&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/kimoyo/1/edit"&gt;REST Adapter&lt;/a&gt;&lt;/p&gt;

</content>
  </entry>
  <entry>
    <title>ThunderPlains 2014 - Supercharge your productivity with Ember.js</title>
    <link rel="alternate" href="http://www.octolabs.com/blogs/octoblog/2014/10/09/thunderplains-2014-supercharge-your-productivity-with-ember-js/"/>
    <id>http://www.octolabs.com/blogs/octoblog/2014/10/09/thunderplains-2014-supercharge-your-productivity-with-ember-js/</id>
    <published>2014-10-09T14:54:00Z</published>
    <updated>2021-06-02T14:21:47-05:00</updated>
    <author>
      <name>Jeremy Green</name>
    </author>
    <content type="html">&lt;p&gt;Today at &lt;a href="http://thunderplainsconf.com/"&gt;ThunderPlains&lt;/a&gt; I'm presenting a session called
"Supercharge your productivity with Ember.js".  Here are links to my
slide deck, an example GitHub repo, and a bunch of JSBins that step
through the process of building up a small app.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h3 id="slides"&gt;Slides&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://jagthedrummer.github.io/ember_thunder_plains/"&gt;http://jagthedrummer.github.io/ember_thunder_plains/&lt;/a&gt;&lt;/p&gt;

&lt;h3 id="repos"&gt;Repos&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/jagthedrummer/pattern-lab"&gt;Pattern Lab - An Ember CLI demo app.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/jagthedrummer/pattern-lab-api"&gt;Pattern Lab API - A Rails app providing a JSON API for the Ember app.&lt;/a&gt;&lt;/p&gt;

&lt;h3 id="jsbins"&gt;JSBins&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/guyed/1/edit"&gt;A very simple app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/boyim/3/edit"&gt;A very verbose and simple app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/rumit/1/edit"&gt;Application layout&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/falat/3/edit"&gt;Adding a page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/jevexo/1/edit"&gt;Rendering partials&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/wiyoh/1/edit"&gt;Displaying data&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/leyog/1/edit"&gt;Data binding&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/letok/1/edit"&gt;Models&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/vibeza/2/edit"&gt;Fixture Adapter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/gekuw/1/edit"&gt;Dynamic routes &amp;amp; Nested routes/templates&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/hatev/1/edit"&gt;Pattern display component&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/falat/8/edit"&gt;Create a new pattern&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/kimoyo/1/edit"&gt;REST Adapter&lt;/a&gt;&lt;/p&gt;

</content>
  </entry>
  <entry>
    <title>Introducing Remarq.io</title>
    <link rel="alternate" href="http://www.octolabs.com/blogs/octoblog/2014/08/29/introducing-remarq-io/"/>
    <id>http://www.octolabs.com/blogs/octoblog/2014/08/29/introducing-remarq-io/</id>
    <published>2014-08-29T07:18:00Z</published>
    <updated>2021-06-02T14:21:47-05:00</updated>
    <author>
      <name>Jeremy Green</name>
    </author>
    <content type="html">&lt;p&gt;&lt;a href="http://www.remarq.io/"&gt;Remarq&lt;/a&gt; is a tool for constultants and agencies
to allow them to create beautiful PDF reports.  Reports can be authored
in Markdown and then converted to high quality professional PDFs with no
extra effort.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h2 id="focus-on-creating-value"&gt;Focus on creating value&lt;/h2&gt;

&lt;p&gt;Spend more of your precious time focused on delivering real value to your clients by creating great content. Write your reports with simple Markdown and stop fighting with word processors or page layout software.&lt;/p&gt;

&lt;h2 id="increase-perceived-value"&gt;Increase perceived value&lt;/h2&gt;

&lt;p&gt;Great looking PDF reports are perceived to contain more value than the same information delivered via standard web pages or emails. Increased perceived value means that your clients trust and value your opinion more highly.&lt;/p&gt;

&lt;h2 id="beautiful-custom-branding"&gt;Beautiful custom branding&lt;/h2&gt;

&lt;p&gt;Customize your report style to fit your brand with custom fonts, colors, and page layout. You never have to worry about sending out a report that doesn't look awesome.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.remarq.io/"&gt;Check out the web site to learn more.&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Client MVC != Server MVC - EmberFest 2014</title>
    <link rel="alternate" href="http://www.octolabs.com/blogs/octoblog/2014/08/28/client-mvc-server-mvc-emberfest-2014/"/>
    <id>http://www.octolabs.com/blogs/octoblog/2014/08/28/client-mvc-server-mvc-emberfest-2014/</id>
    <published>2014-08-28T11:42:00Z</published>
    <updated>2021-06-02T14:21:47-05:00</updated>
    <author>
      <name>Jeremy Green</name>
    </author>
    <content type="html">&lt;p&gt;Today at &lt;a href="http://emberfest.eu/"&gt;Ember Fest&lt;/a&gt; I'm presenting a session
called "Client MVC != Server MVC".  In it I compare and contrast the
Ember style of MVC with the Rails style.  Here's a link to the slides
for the talk, and to a bunch of bonus JSBins that step through the
process of building up a simple Ember application.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h3 id="slides"&gt;Slides&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://jagthedrummer.github.io/ember_mvc/"&gt;http://jagthedrummer.github.io/ember_mvc/&lt;/a&gt;&lt;/p&gt;

&lt;h3 id="jsbins"&gt;JSBins&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/guyed/1/edit"&gt;A very simple app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/boyim/3/edit"&gt;A very verbose and simple app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/rumit/1/edit"&gt;Application layout&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/falat/3/edit"&gt;Adding a page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/jevexo/1/edit"&gt;Rendering partials&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/wiyoh/1/edit"&gt;Displaying data&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/leyog/1/edit"&gt;Data binding&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/letok/1/edit"&gt;Models&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/vibeza/2/edit"&gt;Fixture Adapter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/gekuw/1/edit"&gt;Dynamic routes &amp;amp; Nested routes/templates&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/hatev/1/edit"&gt;Pattern display component&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/falat/8/edit"&gt;Create a new pattern&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/kimoyo/1/edit"&gt;REST Adapter&lt;/a&gt;&lt;/p&gt;

&lt;h3 id="repos"&gt;Repos&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/jagthedrummer/pattern-lab"&gt;Pattern Lab - An Ember CLI demo app.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/jagthedrummer/pattern-lab-api"&gt;Pattern Lab API - A Rails app providing a JSON API for the Ember app.&lt;/a&gt;&lt;/p&gt;

</content>
  </entry>
  <entry>
    <title>Supercharge your productivity with Ember.js - That Conference 2014</title>
    <link rel="alternate" href="http://www.octolabs.com/blogs/octoblog/2014/08/12/supercharge-your-productivity-with-ember-js-that-conference-2014/"/>
    <id>http://www.octolabs.com/blogs/octoblog/2014/08/12/supercharge-your-productivity-with-ember-js-that-conference-2014/</id>
    <published>2014-08-12T14:27:00Z</published>
    <updated>2021-06-02T14:21:47-05:00</updated>
    <author>
      <name>Jeremy Green</name>
    </author>
    <content type="html">&lt;p&gt;Today I'm presenting a session at &lt;a href="https://www.thatconference.com/"&gt;That Conference&lt;/a&gt; called
"Supercharge your productivity with Ember.js".  Here are links to my
slide deck, an example GitHub repo, and a bunch of JSBins.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h3 id="slides"&gt;Slides&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://jagthedrummer.github.io/ember_supercharge/"&gt;http://jagthedrummer.github.io/ember_supercharge/&lt;/a&gt;&lt;/p&gt;

&lt;h3 id="repos"&gt;Repos&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/jagthedrummer/pattern-lab"&gt;Pattern Lab - An Ember CLI demo app.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/jagthedrummer/pattern-lab-api"&gt;Pattern Lab API - A Rails app providing a JSON API for the Ember app.&lt;/a&gt;&lt;/p&gt;

&lt;h3 id="jsbins"&gt;JSBins&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/guyed/1/edit"&gt;A very simple app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/boyim/3/edit"&gt;A very verbose and simple app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/rumit/1/edit"&gt;Application layout&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/falat/3/edit"&gt;Adding a page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/jevexo/1/edit"&gt;Rendering partials&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/wiyoh/1/edit"&gt;Displaying data&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/leyog/1/edit"&gt;Data binding&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/letok/1/edit"&gt;Models&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/vibeza/2/edit"&gt;Fixture Adapter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/gekuw/1/edit"&gt;Dynamic routes &amp;amp; Nested routes/templates&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/hatev/1/edit"&gt;Pattern display component&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/falat/8/edit"&gt;Create a new pattern&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://emberjs.jsbin.com/kimoyo/1/edit"&gt;REST Adapter&lt;/a&gt;&lt;/p&gt;

</content>
  </entry>
  <entry>
    <title>Bootstrap glyphicons with ember-cli</title>
    <link rel="alternate" href="http://www.octolabs.com/blogs/octoblog/2014/05/25/bootstrap-glyphicons-with-ember-cli/"/>
    <id>http://www.octolabs.com/blogs/octoblog/2014/05/25/bootstrap-glyphicons-with-ember-cli/</id>
    <published>2014-05-25T03:53:00Z</published>
    <updated>2021-06-02T14:21:47-05:00</updated>
    <author>
      <name>Jeremy Green</name>
    </author>
    <content type="html">&lt;p&gt;In a &lt;a href="/blogs/octoblog/2014/05/08/ember-cli-broccoli-bootstrap-sass/"&gt;couple of&lt;/a&gt; 
&lt;a href="/blogs/octoblog/2014/05/10/ember-cli-broccoli-bootstrap-sass-part-2/"&gt;previous posts&lt;/a&gt; 
we've seen how to use &lt;code&gt;bootstrap-sass-official&lt;/code&gt; in an &lt;code&gt;ember-cli&lt;/code&gt; app.
Not long after I published the second post, my friend &lt;a href="https://twitter.com/tutec"&gt;Tute&lt;/a&gt;
pointed out that my solution left the bootstrap glyphicons in a broken
state. So, let's get those working!&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;blockquote class="twitter-tweet" data-partner="tweetdeck"&gt;&lt;p&gt;&lt;a href="https://twitter.com/jagthedrummer"&gt;@jagthedrummer&lt;/a&gt; how did you handle glyphicons? Mine get 404s.&lt;/p&gt;&amp;mdash; Tute Costa (@tutec) &lt;a href="https://twitter.com/tutec/statuses/470309123532152834"&gt;May 24, 2014&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async="" src="//platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;

&lt;p&gt;Luckily this ia a pretty easy fix.  We just need to add a few lines to
&lt;code&gt;Brocfile.js&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;First we should remove this line :&lt;/p&gt;

&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;mergeTrees&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toTree&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And replace it with these lines :&lt;/p&gt;

&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Put the bootstrap fonts in the place that the bootstrap css expects to find them.&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;pickFiles&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'broccoli-static-compiler'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;bootstrapFonts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pickFiles&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'vendor/bootstrap-sass-official/assets/fonts/bootstrap'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;srcDir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'/'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;destDir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'/assets/bootstrap'&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Merge the bootstrapFonts with the ember app tree&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;mergeTrees&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'broccoli-merge-trees'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;mergeTrees&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toTree&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="nx"&gt;bootstrapFonts&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That's it!  This will place the font files that provide the glyphicons in the right
place (&lt;code&gt;'assets/bootstrap/'&lt;/code&gt;) so that they can be used by the css files generated from
&lt;code&gt;bootstrap-sass-official&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I just added some glyphicons to &lt;a href="http://watch.canary.io"&gt;watch.canary.io&lt;/a&gt; using this method and you're welcome to checkout the &lt;a href="https://github.com/jagthedrummer/canary-ember"&gt;source code&lt;/a&gt; to see how it all fits together.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;UPDATE :&lt;/em&gt; &lt;a href="https://twitter.com/j_venator"&gt;Joseph DeVenuta&lt;/a&gt; &lt;a href="https://twitter.com/j_venator/status/488736794012176384"&gt;points
out&lt;/a&gt; that the
format of the &lt;code&gt;bootstrap-sass-official&lt;/code&gt; package has changed.&lt;/p&gt;

&lt;blockquote class="twitter-tweet" lang="en"&gt;&lt;p&gt;&lt;a href="https://twitter.com/jagthedrummer"&gt;@jagthedrummer&lt;/a&gt; think I found an error in your ember-cli glyphicons example &lt;a href="https://t.co/38jsbxuNV5"&gt;https://t.co/38jsbxuNV5&lt;/a&gt; This works for me &lt;a href="https://t.co/qJmupOVg24"&gt;https://t.co/qJmupOVg24&lt;/a&gt;&lt;/p&gt;&amp;mdash; Joseph DeVenuta (@j_venator) &lt;a href="https://twitter.com/j_venator/statuses/488736794012176384"&gt;July 14, 2014&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async="" src="//platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;

&lt;p&gt;At the time this post was originally written the first argument to &lt;code&gt;pickFiles&lt;/code&gt;
was &lt;code&gt;vendor/bootstrap-sass-official/vendor/assets/fonts/bootstrap&lt;/code&gt;. It
has been updated to &lt;code&gt;vendor/bootstrap-sass-official/assets/fonts/bootstrap&lt;/code&gt;
in order to match the new format of the package.&lt;/p&gt;
</content>
  </entry>
</feed>
