<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>refactr blog on software development, design, agile processes, and business</title>
	<atom:link href="http://refactr.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://refactr.com/blog</link>
	<description>informs on and evangelizes best practices of using  &#60;a href="http://refactr.com/the-agile-manifesto/"&#62;agile methods&#60;/a&#62; when designing and developing what are currently being called “Web 2.0” products and applications.</description>
	<lastBuildDate>Wed, 25 Jan 2012 15:56:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Grails Database Migration Gotchas</title>
		<link>http://refactr.com/blog/2012/01/grails-database-migration-gotchas/</link>
		<comments>http://refactr.com/blog/2012/01/grails-database-migration-gotchas/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 15:56:55 +0000</pubDate>
		<dc:creator>Josh</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[database migration plugin]]></category>
		<category><![CDATA[grails]]></category>

		<guid isPermaLink="false">http://refactr.com/blog/?p=699</guid>
		<description><![CDATA[Before we dive into gotchas, let me start by saying that the Grails Database Migration plugin is great. It&#8217;s usually the second plugin I install on any new project, right after the Spring Security Core plugin. You&#8217;ll likely never run &#8230; <a href="http://refactr.com/blog/2012/01/grails-database-migration-gotchas/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Before we dive into gotchas, let me start by saying that the <a title="Grails Database Migration plugin" href="http://grails.org/plugin/database-migration">Grails Database Migration plugin</a> is great. It&#8217;s usually the second plugin I install on any new project, right after the <a title="Spring Security Core plugin" href="http://grails.org/plugin/spring-security-core" target="_blank">Spring Security Core plugin</a>. You&#8217;ll likely never run into the problems I describe below, but I did and learned something in the process so I figured I&#8217;d pass it along in hopes it saves someone a bit of debugging time.</p>
<p><span id="more-699"></span></p>
<h2>Setting the Stage: BeersDB</h2>
<p>It&#8217;s the start of Iteration 2 on our fictional BeersDB project, a simple <a title="Grails" href="http://grails.org/" target="_blank">Grails</a> app for tracking and rating different beers. In Iteration 1 we came up with a simple domain class to model the relevant information about a <strong>Beer</strong> and some real-world data for testing the app:</p>
<pre>class Beer {
  enum Style {
    GERMAN_ALE, GERMAN_LAGER, BRITISH_ALE,
    BRITISH_LAGER, AMERICAN_ALE, AMERICAN_LAGER,
    OTHER
  }
  String name
  Style style
}</pre>
<p><img class="alignnone size-full wp-image-710" src="http://refactr.com/blog/wp-content/uploads/2012/01/prod.png" alt="" width="378" height="163" /></p>
<p>After some testing, the client prioritized a few stories in <a title="Lean-to" href="http://lean-to.com/" target="_blank">Lean-to</a> to make the app more useful:</p>
<p><a href="http://lean-to.com"><img class="alignnone size-full wp-image-709" src="http://refactr.com/blog/wp-content/uploads/2012/01/leanto.png" alt="" width="600" /></a></p>
<p>All of these stories require evolving the <strong>Beer</strong> class and the underlying database schema. Since we have existing data, we&#8217;ll be using the database migration plugin to capture and manage migrations in a structured manner. At the end, we&#8217;ll package everything up for a production release.</p>
<p><strong>NOTE</strong>: all of the code for this blog post is available out at GitHub in the <a title="Refactr open-source repo" href="https://raw.github.com/Refactr/open-source/master/Blog/beers.zip" target="_blank">Refactr open-source repo</a>. I&#8217;ll only be highlighting the major changes but I&#8217;ve tagged the full code for each step if you want to explore further. The code for this initial step is tagged as <em>initial</em>:</p>
<pre>$&gt; git checkout -f initial</pre>
<p>With all of that out of the way, let&#8217;s start tackling stories!</p>
<h2>Story 1: Add Origin and Type</h2>
<p>For the first story, the client wants to be able to search for beers by country of origin, e.g. Germany, and by type, e.g. Ale or Lager. This information is encapsulated in the existing <strong>Style</strong> property but not in a form that is convenient for searching. The plan of attack is to add two new properties <strong>Origin</strong> and <strong>Type</strong> and write a migration to populate them for the existing beers in the database.</p>
<p>The new Beer class looks much as you would expect:</p>
<pre>class Beer {
  enum Style {
    GERMAN_ALE, GERMAN_LAGER, BRITISH_ALE,
    BRITISH_LAGER, AMERICAN_ALE, AMERICAN_LAGER,
    OTHER
  }
  enum Type { ALE, LAGER }
  enum Origin { GERMANY, BRITAIN, USA, OTHER }
  String name
  Style style
  Type type
  Origin origin
}</pre>
<p>We&#8217;ve left the existing <strong>Style</strong> property around for the time being; it&#8217;ll get cleaned up in a later story.</p>
<p>For the migration, we&#8217;ll let the plugin&#8217;s <strong>grails dbm-gorm-diff</strong> script take a first pass at writing the migration. It takes care of adding the new columns for us:</p>
<pre>databaseChangeLog = {

  changeSet(author: "josh (generated)", id: "1-1") {
    addColumn(tableName: "beer") {
      column(name: "origin", type: "varchar(255)",
        defaultValue: Beer.Origin.OTHER) {
        constraints(nullable: "false")
      }
    }
  } 

  changeSet(author: "josh (generated)", id: "1-2") {
    addColumn(tableName: "beer") {
      column(name: "type", type: "varchar(255)",
        defaultValue: Beer.Type.ALE) {
        constraints(nullable: "false")
      }
    }
  }
}</pre>
<p>This is a good start, it adds the new columns and sets a default value so the columns can be created as not nullable. The final step is to hand-write a migration to set actual values for <strong>origin</strong> and <strong>type</strong> based on the <strong>style</strong> column of existing data:</p>
<pre>changeSet(author: "josh (generated)", id: "1-3") {
  grailsChange {
    change {
      Beer.list().each { beer -&gt;
        switch(beer.style) {
        case Beer.Style.GERMAN_ALE:
          beer.origin = Beer.Origin.GERMANY
          beer.type = Beer.Type.ALE
          break
        case Beer.Style.GERMAN_LAGER:
          beer.origin = Beer.Origin.GERMANY
          beer.type = Beer.Type.LAGER
          break
        case Beer.Style.BRITISH_ALE:
          beer.origin = Beer.Origin.BRITAIN
          beer.type = Beer.Type.ALE
          break
        case Beer.Style.BRITISH_LAGER:
          beer.origin = Beer.Origin.BRITAIN
          beer.type = Beer.Type.LAGER
          break
        case Beer.Style.AMERICAN_ALE:
          beer.origin = Beer.Origin.USA
          beer.type = Beer.Type.ALE
          break
        case Beer.Style.AMERICAN_LAGER:
          beer.origin = Beer.Origin.USA
          beer.type = Beer.Type.LAGER
          break
        case Beer.Style.OTHER:
          beer.origin = Beer.Origin.OTHER
          beer.type = Beer.Type.ALE
          break
        }
        beer.save(failOnError: true, flush: true)
      }
    }
  }
}</pre>
<p>We use the migration plugin&#8217;s ability to run Groovy and Grails code to loop through each Beer domain class and set the properties accordingly. Running the migration results in what we&#8217;d expect in the database—the <strong>origin</strong> and <strong>type</strong> columns match what is in the <strong>style</strong> column:</p>
<p><img class="alignnone size-full wp-image-706" src="http://refactr.com/blog/wp-content/uploads/2012/01/change1.png" alt="" width="478" height="157" /></p>
<p>If you&#8217;re following along at home, you can see the full set of changes and migrations with:</p>
<pre>$&gt; git checkout -f story1</pre>
<h2>Story 2: Clean up Style</h2>
<p>With the new <strong>origin</strong> and <strong>type</strong> properties, the client has indicated that the <strong>style</strong> property is no longer needed. Let&#8217;s remove it up from the domain class and generate a new migration with <strong>grails dbm-gorm-diff</strong>:</p>
<pre>databaseChangeLog = {

  changeSet(author: "josh (generated)", id: "2-1") {
    dropColumn(columnName: "STYLE", tableName: "BEER")
  }
}</pre>
<p>The migration doesn&#8217;t require any manual modification. Running it against our database results in the <strong>style</strong> column going away:</p>
<p><img class="alignnone size-full wp-image-707" src="http://refactr.com/blog/wp-content/uploads/2012/01/change2.png" alt="" width="378" height="159" /></p>
<p>Same deal as before, the code for this step is available with:</p>
<pre>$&gt; git checkout -f story2</pre>
<h2>Story 3: Add Rating</h2>
<p>Our final change will be to add a <strong>rating</strong> property so the beers can be rated on a 0-5 scale:</p>
<pre>class Beer {
  enum Type { ALE, LAGER }
  enum Origin { GERMANY, BRITAIN, USA, OTHER }
  String name
  Type type
  Origin origin
  int rating

  static constraints = {
    rating min: 0, max: 5
  }
}</pre>
<p>Again the <strong>grails dbm-gorm-diff</strong> script writes the migration for us:</p>
<pre>databaseChangeLog = {

  changeSet(author: "josh (generated)", id: "3-1") {
    addColumn(tableName: "beer") {
      column(name: "rating", type: "integer",
        defaultValue: 0) {
        constraints(nullable: "false")
      }
    }
  }
}</pre>
<p>The database looks as we would expect with a new <strong>rating</strong> column initialized to 0 for the existing beers:</p>
<p><img class="alignnone size-full wp-image-708" src="http://refactr.com/blog/wp-content/uploads/2012/01/change3.png" alt="" width="423" height="159" /></p>
<h2>Ship It!</h2>
<p>With that, we&#8217;re ready to push out a new release. It&#8217;s always a good practice to do a dry run of your migrations against a copy of your production database to catch any issues before the actual release. We can simulate this by checking out our original database and then running the database migration update script against it:</p>
<pre>$&gt; git checkout -f story3
$&gt; git checkout initial devDb.h2.db
$&gt; grails dbm-update

ERROR liquibase - Change Set change1.groovy::1-3 failed.
...
Caused by JdbcSQLException:
  Column "THIS_.RATING" not found;</pre>
<h2>FFFFFFFUUUUUUUUUUUUUUUU-</h2>
<p>We ran each of the migrations without a problem so why is it blowing up now? Turns out you have to be very careful if you try to load domain classes in your migrations. The error above is in our hand-written migration to populate the values of the <strong>origin</strong> and <strong>type</strong> properties. Hibernate is expecting there to be a <strong>rating</strong> column in the database even though that column wasn&#8217;t added until a later migration. The migration has no way to know what our domain class looked like at the time the migration was written, only the current state of our code. Since the current version of <strong>Beer</strong> has a <strong>rating</strong> property, Hibernate expects it to exist in the database as well.</p>
<p>The solution here is to rewrite our migration in Story 1 to use SQL directly instead of relying on GORM to load domain class instances. We also have to be careful not to reference properties such as the <strong>Style</strong> enum which may change or disappear over the lifecycle of the project:</p>
<pre>changeSet(author: "josh (generated)", id: "1-3") {
  grailsChange {
    change {
      // set origins
      sql.executeUpdate
	"UPDATE BEER SET ORIGIN = 'GERMANY'
        WHERE STYLE LIKE 'GERMAN_%'"
      sql.executeUpdate
	"UPDATE BEER SET ORIGIN = 'BRITAIN'
        WHERE STYLE LIKE 'BRITISH_%'"
      sql.executeUpdate
	"UPDATE BEER SET ORIGIN = 'USA'
        WHERE STYLE LIKE 'AMERICAN_%'"

      // set types
      sql.executeUpdate
	"UPDATE BEER SET TYPE = 'ALE'
        WHERE STYLE LIKE '%_ALE'"
      sql.executeUpdate
	"UPDATE BEER SET TYPE = 'LAGER'
        WHERE STYLE LIKE '%_LAGER'"
    }
  }
}</pre>
<h2>Conclusion</h2>
<p>The Database Migrations plugin is a powerful tool for managing database changes in a Grails project. It requires some structure to integrate into a project but the benefits of tracking database changes alongside your code far outweigh the extra effort. Sparing and careful use of GORM methods inside your changesets will minimize potential issues down the road.</p>
]]></content:encoded>
			<wfw:commentRss>http://refactr.com/blog/2012/01/grails-database-migration-gotchas/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Refactr Gets Serious About Growth in 2012</title>
		<link>http://refactr.com/blog/2012/01/welcome-matt/</link>
		<comments>http://refactr.com/blog/2012/01/welcome-matt/#comments</comments>
		<pubDate>Tue, 24 Jan 2012 11:42:06 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[growth]]></category>

		<guid isPermaLink="false">http://refactr.com/blog/?p=742</guid>
		<description><![CDATA[For several years after we started Refactr, in 2006, we resisted the idea of growth. We saw what growing did to companies for which we had worked and it seemed that growth caused a degradation of culture and loss of &#8230; <a href="http://refactr.com/blog/2012/01/welcome-matt/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>For several years after we started Refactr, in 2006, we resisted the idea of growth. We saw what growing did to companies for which we had worked and it seemed that growth caused a degradation of culture and loss of focus. We obviously didn&#8217;t want that to happen at Refactr and so we decided to remain small. Today, we&#8217;re still pretty small (there are eleven of us now) but we are committed to growing.</p>
<p>Too often in past years have we been approached with a cool project opportunity, only to have to turn it down because we were all too busy. We hate for that to happen and are planning to hire and build more teams of smart software designers and developers this year. We are confident that the culture we have built can withstand growth, especially considering how carefully we recruit and hire.</p>
<p><a href="http://refactr.com/team/matt/"><img class="aligncenter size-full wp-image-743" title="matt-blog-feature" src="http://refactr.com/blog/wp-content/uploads/2012/01/matt-blog-feature.png" alt="" width="575" height="292" style="margin: -20px 0;" /></a></p>
<p>We understand with growth and added capacity comes the responsibility to make sure we stay busy. We can&#8217;t rely on the good fortune we have had to date &#8211; work just coming our way. So it is with pride and pleasure that Refactr welcomes <a href="http://refactr.com/team/matt/">Matt Bjornson</a> to our team as President. Matt comes to us from Object Partners (OPI) where he was a key person that helped OPI grow to what it is today. Matt was an early advocate of the Grails and Rails frameworks, aided in the sales and marketing efforts, and generally kicked some ass. We are excited to have his help in this new chapter of Refactr’s history as we grow into our reputation as a leading software agency in Minneapolis. We&#8217;re looking to grow while maintaining our core values of cross-functional, small, self-managed teams helping our clients innovate faster than they thought possible. <a href="/team/you/">Want to join us?</a></p>
]]></content:encoded>
			<wfw:commentRss>http://refactr.com/blog/2012/01/welcome-matt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why You Should Work at Refactr</title>
		<link>http://refactr.com/blog/2011/10/why-you-should-work-at-refactr/</link>
		<comments>http://refactr.com/blog/2011/10/why-you-should-work-at-refactr/#comments</comments>
		<pubDate>Tue, 18 Oct 2011 22:18:44 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[MIleMarker]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[about us]]></category>
		<category><![CDATA[consulting]]></category>
		<category><![CDATA[hiring]]></category>
		<category><![CDATA[Refactr]]></category>
		<category><![CDATA[teams]]></category>

		<guid isPermaLink="false">http://refactr.com/blog/?p=620</guid>
		<description><![CDATA[Where we choose to spend our days developing software can have a big impact on our lives. If we aren&#8217;t happy and fulfilled in the work part of our life, those other parts need to be that much better to &#8230; <a href="http://refactr.com/blog/2011/10/why-you-should-work-at-refactr/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Where we choose to spend our days developing software can have a big impact on our lives. If we aren&#8217;t happy and fulfilled in the work part of our life, those other parts need to be that much better to make up for it. We want to make sure Refactr is a place where everyone enjoys working and is excited to be. Our team will tell you it is working so far. Here are some of the ways we look to ensure that continues.</p>
<h3>We work on relevant and interesting projects as teams.</h3>
<p>Our ideal project is 2-4 cross-functional application developers on an interesting project for 3-5 months at a time. Our developers (a term that includes designers and front-end developers as well as the more traditional definition) self-manage their work and most client interactions throughout the course of a project – from definition, through weekly reviews, to completion. We don&#8217;t do staff augmentation. We help companies get things done quickly, at a high quality level, as a team.</p>
<p>Our low overhead, smaller size, and impressive stature in the tech community affords us the opportunity to learn about many projects and accept the most interesting ones that are a great fit for how we want to work. We&#8217;re not right for every project and we’re not afraid to say so. Refactr is not interested in taking J2EE or .NET project work. We may, on occasion make a case for a more nimble technology in those cases but we’re not zealots, either. Some projects and some companies are just better served using technologies that we don’t.</p>
<p>For the record, rapidly developing Groovy/Grails, Ruby/Rails, and Mobile (Web/iPhone/Android) applications is what we excel at and what we are interested in taking on.</p>
<h3>We are collecting the smartest people we know.</h3>
<p>If you get invited to interview with us, you should feel pretty good about our impression of you. We only want to work with the smartest people we find. Regardless of your experience, we are interested in working on projects with curious, passionate, thoughtful, and communicative people. It goes back to that fulfilling work thing – if we are going to hang out and be pals we want to be sure you’re interesting and that you’ll stay interested in your coworkers.</p>
<p>We look for varied backgrounds, experiences, and interests. We&#8217;ve got a pair of rocket scientists, a few robotics experts, several artists and musicians, a couple home brewers, and we&#8217;ve – collectively – been to every continent. Everyone here is passionate about something and curious and interested in learning about too many things to count.</p>
<h3>We have an open and collaborative culture.</h3>
<p>What&#8217;s more, we get all these smart, curious, passionate people and we put them all in one big room! There is constant collaboration and sharing, not to mention storytelling and joking, that occurs because we are all working together – despite being on different projects. Ideas are sought from, and implemented by, everyone. There are no formalities or barriers to communication – there are no offices and really no hierarchy. We’re all in this together to build cool things and have fun doing it.</p>
<h3>We stay relevant by researching new technologies and techniques.</h3>
<p>We invest in learning daily. Our developers are encouraged to buy books, spend time on technical sites and blogs, and attend events and conferences. While we don&#8217;t just use the latest shiny technology for the sake of it, we have heard about them and if it&#8217;s practical and worthwhile for our clients we’ll encourage its adoption.</p>
<h3>Getting things done is at the heart of our process</h3>
<p>You won&#8217;t find a lot of bureaucracy at Refactr. In fact, you won&#8217;t find many things that get in the way of getting things done. Our process helps to eliminate those things that tend to bog down and distract from that goal. We call it &#8220;little a&#8221; agile and it means that we&#8217;re pragmatic about the way we go about running projects and really the company as a whole. As things are discovered that work better, we implement them, or as things start to not be as efficient, we eliminate them. We hold a stand-up meeting every morning, we&#8217;ll pair program when it makes sense, we write user stories and have one or two week iterations, and we communicate closely with our clients and their stakeholders.</p>
<h3>All work and no play makes us something, something&#8230;</h3>
<p>We don&#8217;t just code all day, we also have fun together. Whether its DJ-ing in a Turntable.FM room or in the <a href="https://twitter.com/#!/dane_ray/media/slideshow?url=http%3A%2F%2Fyfrog.com%2Fgy24199144j">real world via our Sonos system</a>, taking the <a href="http://www.facebook.com/photo.php?fbid=10150661605540008&#038;set=a.10150661604440008.689011.56693610007&#038;type=1&#038;theater">Nice Ride bikes across the river</a> for <a href="http://www.facebook.com/photo.php?fbid=10150661605950008&#038;set=pu.56693610007&#038;type=1&#038;theater">lunch at a food truck</a>, creating something new together at our monthly hack day, <a href="https://twitter.com/#!/refactr/status/109094446628483072">eating corn dogs at the state fair</a>, <a href="http://refactr.com/blog/2011/03/letting-our-creative-juices-flow-with-nintendos-new-3ds/">creating popular 3DS experiments</a>, <a href="http://www.flickr.com/photos/alttext/4425315408/in/photostream/">renting a house in Mexico for a month</a>, heading out to a <a href="http://www.surlybrewing.com/brewery/tours.html">brewery tour</a> or <a href="http://www.dreadwoodhaunt.com/">haunted forest</a>, hitting up a happy hour, catching a movie or concert or any number of things we do &#8211; the point is, we do things together. And yes, we said renting a house in Mexico. Maybe the next one won&#8217;t be in Mexico but we have another trip in the works.</p>
<h3>We are a part of, and supporters of, the technology community.</h3>
<p>We believe local and distributed communities are only as strong as their members make them. We’re trying to do our part to ensure the communities that are important to us are successful. We provide space for many local user groups to meet each month. <a href="http://ruby.mn/">Ruby Users of Minnesota</a>, <a href="http://groovy.mn/">Groovy Users of Minnesota</a>, <a href="http://javascript.mn/">Minnesota JavaScript User Group</a>, <a href="http://clojure.mn/">Minnesota Clojure User Group</a>, <a href="http://www.meetup.com/Twin-Cities-Lean-Startup-Circle/">Lean Startup Circle</a>, and <a href="http://mobiletwincities.com/">Mobile Twin Cities</a> all currently meet each month in our office.</p>
<p>We organize, sponsor, or otherwise support a wide range of groups, events and conferences. <a href="http://tech.mn/news/2011/01/05/minnestar-ben-edwards-luke-francl/">MinneBar and MinneDemo</a> were co-founded by a Refactr founder and we&#8217;re all heavily involved with these leading tech events in the area. We have sponsored <a href="http://ignitempls.org/">Ignite Minneapolis</a>, <a href="http://www.gr8conf.org/">Gr8 in the US</a>, and <a href="http://www.nofluffjuststuff.com/">No Fluff Just Stuff</a> and have spoken at these and other local and national conferences.</p>
<h3>We&#8217;re at the epicenter of innovation in the Twin Cities.</h3>
<p>Not only do we support technology and community in a broad sense – we are really at the heart of technology innovation in the Twin Cities. We are <a href="http://www.tcbmag.com/industriestrends/features/130308p1.aspx">asked our</a> <a href="http://www.pageturnpro.com/Twin-Cities-Business/31179-Twin-Cities-Business-October-2011/index.html#68">opinions about innovation</a> by media types. We even built our <a href="http://getmilemarker.com">own product</a> to help us and others manage innovation. We are involved with many early stage companies (even some of our own creation) and we can offer unique and exciting opportunities to our consultants. We have a model in place that will allow us to create, grow, fund, or otherwise be involved with 2-3 such opportunities each year. These opportunities will be there when members of our team are interested in doing something new or just looking for a change of pace.</p>
<h3>We take care of our team.</h3>
<p>Though we don&#8217;t often sit around a campfire and sing Kumbaya, we do all care about each other. We know each other personally and we&#8217;re interested in each other&#8217;s lives and families.  Knowing that to be true makes a huge difference in how we feel about coming to work each day. </p>
<p>But it isn&#8217;t all touchy-feely stuff. We offer great benefits for a small company, we offer great benefits for a company of any size, actually. There’s the free medical benefit that allows you to choose how you spend the funds amongst a number programs, the 401(k) that is matched at 4% of gross pay, a phone stipend, top-of-the-line MacBook Pros, and the time off that you take as you need it. We encourage travel and vacations and don’t want an arbitrary number of days per year to deter people from life experiences. Did we mention the kegerator?</p>
<h3>We share success.</h3>
<p>Refactr is only as good as our team and the work we do. It makes sense to share success as it happens. These can be little things like celebrating releases or larger like sharing the profits of the company. </p>
<p>UPDATE: WE&#8221;RE HIRING.<br />
In case it wasn&#8217;t apparent, we&#8217;re looking for great developers; good communicators; interesting, curious, passionate people to develop mobile (iOS, Android, and mobile web) and web-based software with us using primarily Grails and sometimes Rails. Contact us for more info <a href="mailto: team@refactr.com">team@refactr.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://refactr.com/blog/2011/10/why-you-should-work-at-refactr/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Agile in Real Life</title>
		<link>http://refactr.com/blog/2011/08/agile-in-real-life/</link>
		<comments>http://refactr.com/blog/2011/08/agile-in-real-life/#comments</comments>
		<pubDate>Wed, 24 Aug 2011 15:21:05 +0000</pubDate>
		<dc:creator>Sara</dc:creator>
				<category><![CDATA[Agile Processes]]></category>

		<guid isPermaLink="false">http://refactr.com/blog/?p=625</guid>
		<description><![CDATA[At work, we use agile principles to improve the software development process. But I thought it would be interesting to take a look at how we are applying &#8216;agile&#8217; to our daily lives outside of work. Here are some of &#8230; <a href="http://refactr.com/blog/2011/08/agile-in-real-life/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>At work, we use <a href="http://agilemanifesto.org/principles.html" target="_blank">agile principles</a> to improve the software development process. But I thought it would be interesting to take a look at how we are applying &#8216;agile&#8217; to our daily lives outside of work. Here are some of my favorite responses from our designers and developers:</p>
<p>I tend to be too much of a perfectionist when it comes to home projects. This can be something as big as remodeling a room or as small as sweeping the deck. To avoid my perfectionism wasting time on the unnecessary, I like to apply the &#8220;simplest thing that could possibly work&#8221; principle. It really does help me to not spend more time than is necessary on things that don&#8217;t really need it.<br />
- Jesse O’Neil-Oine (Developer)</p>
<p>My wife and I share one car and fill the gaps with public transit and bike rides.<br />
- Hiromi Matsumoto (Designer)</p>
<p>To simplify my life, I sell, donate, or just throw away anything I haven&#8217;t used in the last year. I don&#8217;t own a lot of things, but what I do have, I use. I also don&#8217;t have to store closets full of stuff I don&#8217;t use.<br />
- Spencer Hartberg (Developer)</p>
<p>I write code (either for work or for side projects depending on upcoming deadlines) while riding the bus to and from work.<br />
- Steve Vlaminck (Developer)</p>
<p>Outside of work, one of my hobbies is brewing beer.  While brewing requires a certain minimum time commitment, I&#8217;ve found some simple ways to make that time and effort go further.  All my spent brewing grain gets turned into loaves of bread, dog treats, or compost for the garden, and any leftover beer gets turned into malt vinegar to give as gifts around the holidays.  This saves several trips to the store throughout the year.<br />
- Josh Reed (Developer)</p>
<p>This summer I have been minimizing the use and expense of driving my car to the grocery by visiting local farmers markets on my bike and supporting local farmers.<br />
- Dane Messall (Designer)</p>
<p>I used to carry a lot of keys &#8220;just in case&#8221; I needed them and I realized that I rarely use the key to my in-laws house. So now I typically carry just the keys I need on my key chain: one key for the car, one for the house. And I have a separate key chain for each car, rather than two keychains that each have keys for both cars. At the office, we have a finger scanner lock, so that I don&#8217;t have to carry a key to our suite door. Likewise, I downsized my wallet. I got a card carrier and now carry only my essential credit cards and I keep cash in a money clip, rather than a &#8220;<a href="http://www.google.com/search?client=safari&amp;rls=en&amp;q=costanza+wallet&amp;ie=UTF-8&amp;oe=UTF-8" target="_blank">Castanza wallet</a>&#8220;.<br />
- Scott Vlaminck (Developer)</p>
<p>I buy clothes in similar shades and tones so I can mix and match clothes without too much care. This works especially well when packing for a trip.<br />
- Ben Edwards (Designer)</p>
<p>Are you applying agile principles to your life outside of work? <a href="http://refactr.com/blog/2011/08/agile-in-real-life/#respond">Tell us how</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://refactr.com/blog/2011/08/agile-in-real-life/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Igniting Ideas through Online Communities</title>
		<link>http://refactr.com/blog/2011/07/igniting-ideas-through-online-communities/</link>
		<comments>http://refactr.com/blog/2011/07/igniting-ideas-through-online-communities/#comments</comments>
		<pubDate>Mon, 25 Jul 2011 16:36:19 +0000</pubDate>
		<dc:creator>bill</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[MIleMarker]]></category>
		<category><![CDATA[Products]]></category>

		<guid isPermaLink="false">http://refactr.com/blog/?p=605</guid>
		<description><![CDATA[A couple weeks ago, Sara and I were discussing our sponsorship of the latest Ignite Minneapolis event that was held in April. Many of you may recall that, along with our sponsorship, we designed and hosted an idea community called &#8230; <a href="http://refactr.com/blog/2011/07/igniting-ideas-through-online-communities/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A couple weeks ago, Sara and I were discussing our sponsorship of the latest <a href="http://ignitempls.org/" target="_blank">Ignite Minneapolis</a> event that was held in April. Many of you may recall that, along with our sponsorship, we designed and hosted an idea community called Igniting Ideas that challenged event-goers to share ideas for making events in the Twin Cities even better.</p>
<p>Due to timing of concept agreement with the Ignite staff, we only had a few days to create the community in order to give it time to have an impact on the event. Needless to say, we made it happen, and by the night of the event, the community received about a dozen ideas and had over 75 votes and many comments. Even after the event, the site still generates the occasional idea and votes continue to be cast on the ideas from the Ignite participants.</p>
<p>This got us thinking: If we could put together an idea community in a matter of days using <a href="http://getmilemarker.com/" target="_blank">MileMarker&#8217;s</a> IdeaCapture and IdeaShare widgets, our customers can, too! What impressed me the most (yes, even as a co-founder of MileMarker) was that after finalizing a design (which only took a couple of days), we had the community up and running in less than 48 hours. We knew this was possible using the tools within <a href="http://getmilemarker.com/" target="_blank">MileMarker</a>, but it really put us to the test, as we had an immovable deadline in front of us.</p>
<p>Of course, the moral of the story is less about the time it took and more about the ease of it. We talk with many customers who have great ideas about how to engage their audiences in generating ideas and helping to innovate on their products and services. Often, there seems to be either a technical roadblock or a financial one. Our goal, and what we&#8217;ve seen so far, is that it shouldn&#8217;t be difficult to stand up a basic community, and <a href="http://getmilemarker.com/" target="_blank">MileMarker</a> facilitates this with such ease.</p>
<p>If you haven&#8217;t seen the Igniting Ideas community, make sure to <a href="http://ignite.getmilemarker.com/" target="_blank">check it out</a>. We hope that you&#8217;re as excited by this kind of opportunity as we are.</p>
]]></content:encoded>
			<wfw:commentRss>http://refactr.com/blog/2011/07/igniting-ideas-through-online-communities/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why bother listening to your customers?</title>
		<link>http://refactr.com/blog/2011/06/why-bother-listening-to-your-customers/</link>
		<comments>http://refactr.com/blog/2011/06/why-bother-listening-to-your-customers/#comments</comments>
		<pubDate>Mon, 13 Jun 2011 15:46:14 +0000</pubDate>
		<dc:creator>Sara</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[MIleMarker]]></category>
		<category><![CDATA[Customer Feedback]]></category>

		<guid isPermaLink="false">http://refactr.com/blog/?p=485</guid>
		<description><![CDATA[It’s no secret – listening to customer feedback is critical to improving your business. Capturing both positive and negative feedback has business value. However, many companies don’t put customers at the center of their process and treat “feedback” like a &#8230; <a href="http://refactr.com/blog/2011/06/why-bother-listening-to-your-customers/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>It’s no secret – listening to customer feedback is critical to improving your business. Capturing both positive and negative feedback has business value. However, many companies don’t put customers at the center of their process and treat “feedback” like a buzz word. This forces me to ask: Why make customer feedback a priority?</p>
<p><strong style="color: #F90">Build Customer Loyalty:</strong></p>
<p>Many companies recognize their most loyal customers to be the most satisfied. But what about the customers who are dissatisfied? Is it possible to build loyalty among even the most dissatisfied of customers?</p>
<p>According to a study carried out by customer experience research company Technical Assistance Research Programs Inc., customers that complain or have constructive feedback, and then see the problem solved, are up to 8% more loyal than those who didn’t even have a problem in the first place. (Increasing Customer Satisfaction, U.S Consumer Information Center, Pueblo, CO, 1986)  But, what does this mean? Fixing customer satisfaction requires that we first listen to the problem.</p>
<p>It’s that simple: <strong>show your customers you care about them enough to hear what they have to say</strong>. There may not be a solution to building 100% customer loyalty, but listening to your customers is an excellent starting place.</p>
<p><strong style="color: #F90">Lower Research Costs:</strong></p>
<p>Take another look at customer feedback. Instead of only viewing it as “listening,” think of it as <strong>free market research for your next business roadmap</strong>.</p>
<p>A leader in product innovation management, <a href="http://www.acceptsoftware.com/" target="_blank">Accept Corporation</a> found that around 25% of all customer ideas and feedback turn into new products. Findings from this study also showed a lost opportunity when it came to companies failing to develop products based on features that customers want and will pay for. Remember, great ideas can come from your customers.</p>
<p>Many companies are growing because they are listening to their customers. Take e-commerce company <a href="http://www.volusion.com/" target="_blank">Volusion</a> – their customers gave free ideas for new products and product features. This led to more than 90% of new product ideas coming from customers, which increased company revenues. Use your customer’s ideas as input for your next product roadmap. Your clients will tell you what they want, you just have to <strong>be willing to listen</strong>.</p>
<p><strong style="color: #F90">Free Marketing:</strong></p>
<p>When you receive good customer service, you are more likely to recommend the company to your friends. Well, the result is the same when companies listen to and act on customers’ thoughts: a.k.a. word of mouth marketing.</p>
<p>You can – and should – use feedback as part of your marketing campaign. Here’s a tip: Every time you are recommended by a customer or get good feedback, you should ask to use it as a testimonial. If you receive constructive or negative feedback, act on it. Show your customers that you are listening to them and want to be better. People talk positively about the companies they have good experiences with, and listening to your customers creates good experiences. It’s simple, listen to your customers to keep them happy, and in return they will promote your business.</p>
<p><strong style="color: #F90">Start Listening:</strong></p>
<p>It isn’t expensive nor is it difficult to listen to your customers, however failing to do so can be costly. Whether you are using surveys, social media, or idea capturing and management apps like <a href="http://getmilemarker.com" target="_blank">MileMarker</a>, the key is simply <strong>make listening to your customers a priority</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://refactr.com/blog/2011/06/why-bother-listening-to-your-customers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A viable alternative to Google Maps: OpenStreetMap</title>
		<link>http://refactr.com/blog/2011/06/a-viable-alternative-to-google-maps-openstreetmap/</link>
		<comments>http://refactr.com/blog/2011/06/a-viable-alternative-to-google-maps-openstreetmap/#comments</comments>
		<pubDate>Thu, 09 Jun 2011 15:21:39 +0000</pubDate>
		<dc:creator>Spencer</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Misc]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://refactr.com/blog/?p=536</guid>
		<description><![CDATA[OpenStreetMap is a free, open source mapping platform that has emerged as a viable alternative to Google Maps. We’ve been working on a few side projects involving online maps, and have been impressed with the capabilities of OpenStreetMap. So we &#8230; <a href="http://refactr.com/blog/2011/06/a-viable-alternative-to-google-maps-openstreetmap/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>OpenStreetMap is a free, open source mapping platform that has emerged as a viable alternative to Google Maps. We’ve been working on a few side projects involving online maps, and have been impressed with the capabilities of OpenStreetMap. So we decided to share a bit about what we’ve learned.</p>
<p><strong>What is OpenStreetMap?</strong><br />
Most online maps get their data from copyrighted sources. For example, Google Maps gets a lot of their U.S. data from NAVTEQ. This means that any third-party app built on top of Google Maps is considered a derived work. Any information taken from their map, such as a location’s latitude and longitude is still under their copyright. This puts restrictions on how a third-party app can work. For a developer looking to charge money or build a completely open-source application free from restrictions, this presents a problem. The solution is OpenStreetMap, a user-generated map released under a Creative Commons license.</p>
<div id="attachment_543" class="wp-caption alignnone" style="width: 530px"><img class="size-full wp-image-543  " title="openstreetmap_mapview" src="http://refactr.com//blog/wp-content/uploads/2011/06/openstreetmap_mapview.png" alt="Standard Map View" width="520" height="365" /><p class="wp-caption-text">Standard Map View</p></div>
<p><strong>How does it work?</strong><br />
OpenStreetMap follows the Wikipedia model by letting users freely edit a user generated online map. Some existing map data is already in the public domain (like TIGER data) and has been imported into the map, but most map features are user created. After making an account, a user is free to add or delete anything from the map. Users import coordinates taken from handheld GPS units, or trace satellite photos to map out features. OpenStreetMap uses the powerful Potlatch flash program to make edits within a web browser.</p>
<div id="attachment_542" class="wp-caption alignnone" style="width: 515px"><img class="size-full wp-image-542  " title="openstreetmap_editmode" src="http://refactr.com/blog/wp-content/uploads/2011/06/openstreetmap_editmode.png" alt="In-browser edit mode" width="505" height="316" /><p class="wp-caption-text">In-browser edit mode</p></div>
<p>There are several projects that mimic Google Maps API functions to provide developers with the ability to embed maps and add interactive features. A popular one is OpenLayers, which implements an open source Javascript API. When combined, these two software projects allow developers to build totally open source geographic web applications on par with anything built with Google Maps API. Developers interested in building mapping applications should definitely check them out.</p>
<p><a href="http://www.openstreetmap.org/" target="_blank">http://www.openstreetmap.org/</a><br />
<a href="http://www.openlayers.org/" target="_blank">http://www.openlayers.org/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://refactr.com/blog/2011/06/a-viable-alternative-to-google-maps-openstreetmap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Refactr loves Thunder and Lightning</title>
		<link>http://refactr.com/blog/2011/06/refactr-loves-thunder-and-lightning/</link>
		<comments>http://refactr.com/blog/2011/06/refactr-loves-thunder-and-lightning/#comments</comments>
		<pubDate>Fri, 03 Jun 2011 16:34:27 +0000</pubDate>
		<dc:creator>Sara</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Products]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://refactr.com/blog/?p=505</guid>
		<description><![CDATA[Have you ever wondered how far away from you lightning strikes? Well here at Refactr, our team wanted to know the answer. Yeah, we know there is a way to calculate the distance, but who really wants to do that &#8230; <a href="http://refactr.com/blog/2011/06/refactr-loves-thunder-and-lightning/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Have you ever wondered how far away from you lightning strikes? Well here at Refactr, our team wanted to know the answer. Yeah, we know there is a way to calculate the distance, but who really wants to do that much &#8220;math&#8221; in their heads every time it storms? As developers, we thought: &#8220;There has to be an easier way. There should be an app for that.&#8221;</p>
<p>So we created FlashBang in 2009. The app is simple to use.  When you see lightning, hit the word &#8220;Flash&#8221; and then hit &#8220;Bang&#8221; when you hear it crack. FlashBang then calculates how far away the lightning is from you. Since it&#8217;s initial release, we&#8217;ve had tens of thousands of downloads &#8211; apparently people love storms just as much as we do.</p>
<p>Two weeks ago, we released our first update, and let&#8217;s just say people were excited to use the updated app. Within the first 2 weeks, we had over 400 new downloads and over 3,000 updates.</p>
<p>Here were some of the cool changes we made for FlashBang 1.1:</p>
<ul>
<li>We created a new user interface with high resolution graphics to support retina display.</li>
<li>There is also a better user experience for iPads. (That&#8217;s right, we designed new high resolution graphics that will fit the entire iPad screen)</li>
<li>In FlashBang 1.0 we let you switch from Kilometers to Miles by editing your preferences in the information page. With FlashBang 1.1, we made that easier. On the main page you can now switch between the two with one tap of your finger. Touch the word &#8216;Miles&#8217; and the distance will switch to &#8216;Kilometers&#8217; and vice versa.</li>
</ul>

<a href='' title='HomeScreen FlashBang'><img width="100" height="150" src="http://refactr.com/blog/wp-content/uploads/2011/06/HomeScreen-FlashBang.jpg" class="attachment-thumbnail" alt="HomeScreen FlashBang" title="HomeScreen FlashBang" /></a>
<a href='' title='mzl.ziqqjiwk.320x480-75'><img width="100" height="150" src="http://refactr.com/blog/wp-content/uploads/2011/06/mzl.ziqqjiwk.320x480-75.jpg" class="attachment-thumbnail" alt="mzl.ziqqjiwk.320x480-75" title="mzl.ziqqjiwk.320x480-75" /></a>
<a href='' title='mzl.kacamncu.320x480-75'><img width="100" height="150" src="http://refactr.com/blog/wp-content/uploads/2011/06/mzl.kacamncu.320x480-75.jpg" class="attachment-thumbnail" alt="mzl.kacamncu.320x480-75" title="mzl.kacamncu.320x480-75" /></a>

<p>Download FlashBang for the next storm: <a href="http://itunes.apple.com/us/app/flashbang/id307526346?mt=8" target="_self">FlashBang</a></p>
]]></content:encoded>
			<wfw:commentRss>http://refactr.com/blog/2011/06/refactr-loves-thunder-and-lightning/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Igniting Ideas: MileMarker Introduces Voting</title>
		<link>http://refactr.com/blog/2011/04/igniting-ideas-milemarker-introduces-voting/</link>
		<comments>http://refactr.com/blog/2011/04/igniting-ideas-milemarker-introduces-voting/#comments</comments>
		<pubDate>Wed, 20 Apr 2011 14:54:59 +0000</pubDate>
		<dc:creator>Sara</dc:creator>
				<category><![CDATA[community]]></category>
		<category><![CDATA[MIleMarker]]></category>
		<category><![CDATA[Products]]></category>
		<category><![CDATA[ignite]]></category>
		<category><![CDATA[minne✱]]></category>

		<guid isPermaLink="false">http://refactr.com/blog/?p=479</guid>
		<description><![CDATA[MileMarker is testing the power of capturing ideas with this year&#8217;s Ignite Minneapolis event. Thursday, April 21, 2011 Ignite will be hosting an evening filled with high-energy, 5-minute talks by people who, simply stated, have an idea. Sound like fun? &#8230; <a href="http://refactr.com/blog/2011/04/igniting-ideas-milemarker-introduces-voting/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://getmilemarker.com">MileMarker</a> is testing the power of capturing ideas with this year&#8217;s <a href="http://ignitempls.org/">Ignite Minneapolis event</a>. Thursday, April 21, 2011 Ignite will be hosting an evening filled with high-energy, 5-minute talks by people who, simply stated, have an idea. Sound like fun? Well let&#8217;s just say, the MileMarker team thinks this event is going to be awesome. So we decided to help out a little. Aside from sponsoring the event, we&#8217;ve developed an idea community for Ignite to capture ideas from attendees and the Twin Cities community. We&#8217;re calling it <a href="http://ignite.getmilemarker.com">Igniting Ideas</a>.</p>
<p>Here&#8217;s the goal. It&#8217;s only April and we know that many people have already attended 15 industry events ranging from <a href="http://minnestar.org">minne✱</a> to <a href="http://www.mima.org/">MIMA</a> to <a href="http://sxsw.com">SXSW</a>. And let&#8217;s be honest with ourselves, by the time we&#8217;re done attending these events, a break from the speeches, networking, and long days is often needed. So we&#8217;re taking it to the community to find out “How would you make events in the Twin Cities even better?” What gets you excited about attending event after event after event, and how can these events keep you coming back for more?</p>
<p>By using MileMarker&#8217;s IdeaCapture and IdeaShare widgets, we&#8217;ve create an online community that allows people to submit, comment and vote on ideas. Our team is also using the Igniting Ideas site to launch the start of our new voting features, and we&#8217;re excited to see what people have to say.</p>
<p>Be part of the community. <a href="http://ignite.getmilemarker.com">Check out Igniting Ideas</a> to submit and vote on your favorites.</p>
]]></content:encoded>
			<wfw:commentRss>http://refactr.com/blog/2011/04/igniting-ideas-milemarker-introduces-voting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Letting our creative juices flow with Nintendo&#8217;s new 3DS (with video)</title>
		<link>http://refactr.com/blog/2011/03/letting-our-creative-juices-flow-with-nintendos-new-3ds/</link>
		<comments>http://refactr.com/blog/2011/03/letting-our-creative-juices-flow-with-nintendos-new-3ds/#comments</comments>
		<pubDate>Wed, 30 Mar 2011 20:54:22 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[community]]></category>
		<category><![CDATA[3DS]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[Nintendo]]></category>

		<guid isPermaLink="false">http://refactr.com/blog/?p=424</guid>
		<description><![CDATA[Being a fan of new technology (and video games), I of course couldn&#8217;t resist the urge to buy Nintendo&#8217;s new 3DS. After playing with the Augmented Reality cards that come with the 3DS, I couldn&#8217;t help but wonder how exactly &#8230; <a href="http://refactr.com/blog/2011/03/letting-our-creative-juices-flow-with-nintendos-new-3ds/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Being a fan of new technology (and video games), I of course couldn&#8217;t resist the urge to buy Nintendo&#8217;s new 3DS. After playing with the Augmented Reality cards that come with the 3DS, I couldn&#8217;t help but wonder how exactly the device recognizes it&#8217;s looking at an AR card. If you&#8217;re not familiar with Nintendo&#8217;s Augmented Reality cards and how they work, check this out.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Knowing that the cards themselves can be reprinted to any size, or even viewed from an iPhone, I thought I would try to test the boundaries further by creating a gray-scale card. I was skeptical that the 3DS would recognize it, but it worked flawlessly.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">After some brainstorming in the Refactr office about what technique to try next, we decided to make a white board AR card. With some encouraging words from the guys who pay our salary (&#8220;No, that&#8217;s not a waste of time&#8211;that&#8217;s awesome!&#8221;) we got to work.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">We projected the gray scale image onto the white board, traced the boarders, and filled in the dark parts. Our first shading attempt was a little sloppy. The only way the 3DS would recognize it is if we projected white light onto the board to make the bright spots brighter.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">At this point it was pretty obvious that contrast is a major factor for the 3DS to recognize the card. After a night of partial defeat we came back ready to try again. We erased the shaded parts and more tediously filled them in darker.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Knowing this attempt was our last hope we took a deep breath and opened the 3DS.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">And then we just had some fun.</div>
<p>Being a fan of new technology (and video games), I of course couldn&#8217;t resist the urge to buy Nintendo&#8217;s new 3DS. After playing with the Augmented Reality cards that come with the 3DS, I couldn&#8217;t help but wonder how exactly the device recognizes it&#8217;s looking at an AR card. If you&#8217;re not familiar with Nintendo&#8217;s Augmented Reality cards and how they work, <a href="http://www.nintendo.com/3ds/built-in-software/#/4" target="_blank">check this out</a>.</p>
<p style="text-align: center;"><img class="size-full wp-image-425 aligncenter" title="Nintendo's AR Card" src="http://refactr.com/blog/wp-content/uploads/2011/03/q1-small.png" alt="Nintendo's AR Card" width="304" height="481" /></p>
<p>Knowing that the cards themselves can be reprinted to any size, or even viewed from an iPhone, I thought I would try to test the boundaries further by creating a gray-scale card. I was skeptical that the 3DS would recognize it, but it worked flawlessly.</p>
<p>After some brainstorming in the Refactr office about what technique to try next, we decided to make a white board AR card. With some encouraging words from the guys who pay our salary (&#8220;No, that&#8217;s not a waste of time&#8211;that&#8217;s awesome!&#8221;) we got to work.</p>
<p>We projected the gray scale image onto the white board, traced the borders, and filled in the dark parts. Our first shading attempt was a little sloppy. The only way the 3DS would recognize it is if we projected white light onto the board to make the bright spots brighter.</p>
<p><img class="alignnone size-full wp-image-456" title="post1" src="http://refactr.com/blog/wp-content/uploads/2011/03/post1.png" alt="post1" width="550" height="363" /></p>
<p>At this point it was pretty obvious that contrast is a major factor for the 3DS to recognize the card. After a night of partial defeat we came back ready to try again. We erased the shaded parts and more tediously filled them in darker.</p>
<p><img class="alignnone size-full wp-image-457" title="post2" src="http://refactr.com/blog/wp-content/uploads/2011/03/post2.png" alt="post2" width="550" height="363" /></p>
<p>Knowing this attempt was our last hope, we took a deep breath and opened the 3DS.</p>
<p><iframe title="YouTube video player" width="550" height="339" src="http://www.youtube.com/embed/OxfVuTQoGZU" frameborder="0" allowfullscreen></iframe></p>
<p>And then we just had some fun.</p>
<p><img class="alignnone size-full wp-image-470" title="post3b" src="http://refactr.com/blog/wp-content/uploads/2011/03/post3b.png" alt="post3b" width="550" height="333" /></p>
<p><strong>**Update**</strong></p>
<p>Followup Video:<br />
<iframe title="YouTube video player" width="549" height="339" src="http://www.youtube.com/embed/3i6K6rFDD40" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://refactr.com/blog/2011/03/letting-our-creative-juices-flow-with-nintendos-new-3ds/feed/</wfw:commentRss>
		<slash:comments>79</slash:comments>
		</item>
	</channel>
</rss>

