<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en-US">
  <title>Intridea - Company Blog</title>
  <id>tag:www.intridea.com,2013:Get Clearer Code With Underscore.js's Chaining Syntax</id>
  
  <updated>2013-05-16T17:27:07Z</updated>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/intridea" /><feedburner:info uri="intridea" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry xml:base="http://www.intridea.com">
    <author>
      <name>Mike Tierney</name>
    </author>
    <id>tag:www.intridea.com,2013-05-16:643</id>
    <published>2013-05-16T00:00:00Z</published>
    <updated>2013-05-16T00:00:00Z</updated>
    <category term="tips" />
    <category term="javascript" />
    <category term="underscorejs" />
    <link rel="alternate" type="text/html" href="/blog/2013/5/16/get-clearer-code-with-underscore-js-chaining-syntax" />
    <title>Get Clearer Code With Underscore.js's Chaining Syntax</title>
    <content type="html">&lt;p&gt;Recently, I was looking for a way to do a task N times in JavaScript (like Ruby&amp;#39;s &lt;code&gt;N.times&lt;/code&gt; method), which I found (&lt;a href="http://underscorejs.org/#times"&gt;&lt;code&gt;_.times&lt;/code&gt;&lt;/a&gt;) in the &lt;a href="http://underscorejs.org"&gt;Underscore.js&lt;/a&gt; library. This discovery exposed me to an alternate way to call the Underscore methods, using its &lt;a href="http://underscorejs.org/#chaining"&gt;chaining&lt;/a&gt; syntax.&lt;/p&gt;

&lt;p&gt;If you do a lot of work with Backbone, this syntax will be familiar. In Backbone, you can call many of the Underscore methods on models and collections:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;bookCollection.each( function(model) {
  console.log( model.get(&amp;#39;name&amp;#39;) );
});
// &amp;gt;&amp;gt; &amp;#39;American Gods&amp;#39;
// &amp;gt;&amp;gt; &amp;#39;Anansai Boys&amp;#39;
// &amp;gt;&amp;gt; &amp;#39;Coraline&amp;#39;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;But what might not be obvious is that if you want to iterate over an object with Underscore, you can do the following:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;_([&amp;quot;American Gods&amp;quot;, &amp;quot;Anansi Boys&amp;quot;, &amp;quot;Coraline&amp;quot;]).each( function(book) {
  console.log(book);
});
// &amp;gt;&amp;gt; &amp;#39;American Gods&amp;#39;
// &amp;gt;&amp;gt; &amp;#39;Anansai Boys&amp;#39;
// &amp;gt;&amp;gt; &amp;#39;Coraline&amp;#39;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Which is the same as doing this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;_.each([&amp;quot;American Gods&amp;quot;, &amp;quot;Anansi Boys&amp;quot;, &amp;quot;Coraline&amp;quot;], function(book) {
  console.log(book);
}
// &amp;gt;&amp;gt; &amp;#39;American Gods&amp;#39;
// &amp;gt;&amp;gt; &amp;#39;Anansai Boys&amp;#39;
// &amp;gt;&amp;gt; &amp;#39;Coraline&amp;#39;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This becomes beneficial if you&amp;#39;re working on a Backbone project and have a non-Backbone object that you want to iterate over. Going from &lt;code&gt;collection.each(function(){})&lt;/code&gt; to &lt;code&gt;_.each(objs, function(){})&lt;/code&gt; can be jarring, while &lt;code&gt;_(objs).each(function(){})&lt;/code&gt; is less confusing due to its similiarity.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/intridea/~4/9k11JpI1Cj8" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://www.intridea.com">
    <author>
      <name>Marc Garrett</name>
    </author>
    <id>tag:www.intridea.com,2013-05-15:642</id>
    <published>2013-05-15T00:00:00Z</published>
    <updated>2013-05-15T00:00:00Z</updated>
    <category term="tutorial" />
    <category term="glass" />
    <link rel="alternate" type="text/html" href="/blog/2013/5/15/google-glass-hello-world" />
    <title>Google Glass Hello World</title>
    <content type="html">&lt;p&gt;You have to start somewhere. We&amp;#39;re excited to hear what co-founder Chris Selmer learns at &lt;a href="https://developers.google.com/events/io/"&gt;Google I/O&lt;/a&gt;, but until then let&amp;#39;s jump right in with a basic &amp;quot;Hello World&amp;quot; example.&lt;/p&gt;

&lt;p&gt;To deploy this example you&amp;#39;ll need access to the Mirror API Developer Preview. If you have access, go to the &lt;a href="https://developers.google.com/glass/quickstart/java"&gt;Google Glass Java Quick Start&lt;/a&gt; page and follow the instructions for configuring your environment. If you don&amp;#39;t have access we&amp;#39;ve included the output so you can follow along.&lt;/p&gt;

&lt;p&gt;Timeline items, aka &amp;quot;cards,&amp;quot; display information retrieved from a REST endpoint. A card is the basic unit of visual display for Glass; think of it like a simple web page. It&amp;#39;s easy to work with timeline items because they&amp;#39;re represented as a &lt;a href="https://developers.google.com/glass/v1/reference/timeline"&gt;JSON structure&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;To insert a new card, POST your JSON to the REST endpoint. You&amp;#39;ll need to take three simple steps: create the new timeline item, set the text, and execute the command. &amp;quot;Hello World&amp;quot; in Java looks like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;TimelineItem timelineItem = new TimelineItem();
timelineItem.setText(&amp;quot;Hello world&amp;quot;);
service.timeline().insert(timelineItem).execute();
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Which creates the following raw HTTP:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;POST /mirror/v1/timeline HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer {auth token}
Content-Type: application/json
Content-Length: 26

{ &amp;quot;text&amp;quot;: &amp;quot;Hello world&amp;quot; }
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Glass will add the card to your timeline, and your user will see &amp;quot;Hello World.&amp;quot;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://f.cl.ly/items/250w393U2d41372w111w/Google-Glass-Hello-World.png" alt="Google Glass Hello World display" title="Google Glass Hello World display"&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/intridea/~4/3_5JGndS0_o" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://www.intridea.com">
    <author>
      <name>Robert Dempsey</name>
    </author>
    <id>tag:www.intridea.com,2013-05-09:641</id>
    <published>2013-05-09T05:30:00Z</published>
    <updated>2013-05-09T05:30:00Z</updated>
    <category term="mobile" />
    <category term="ux" />
    <link rel="alternate" type="text/html" href="/blog/2013/5/9/design-for-mobile-to-sell-local" />
    <title>Design For Mobile To Sell Local</title>
    <content type="html">&lt;p&gt;When it comes to selling products on a local basis, mobile rules the day. Whenever I travel anywhere, the first thing I do is fire up the Yelp or Google Maps apps to find someplace to eat. Next I check out the websites of those places. If I like what I see, I&amp;#39;ve found my next meal; if not, I&amp;#39;m moving on to their competitors.&lt;/p&gt;

&lt;p&gt;And I&amp;#39;m not the only one...&lt;/p&gt;

&lt;p&gt;According to the latest research from The Nielsen Company, 45% of consumers use their mobile device &lt;strong&gt;first&lt;/strong&gt; when searching for local products and services. Ultimately, 53% of mobile users are making their purchases offline or in-store, and a whopping 74% of smartphone users complete their transactions offline.&lt;/p&gt;

&lt;p&gt;What does this mean for you?&lt;/p&gt;

&lt;p&gt;That means that your customers are searching for your products and services on their smartphones and tablets, and if they like what they see, they&amp;#39;re buying. If not, they&amp;#39;re &lt;strong&gt;heading to your competition&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;Mobile Is Not A Choice&lt;/h2&gt;

&lt;p&gt;Providing a superior mobile experience, be it in the form of a mobile-optimized site, or a &lt;a href="http://www.intridea.com/services/mobile"&gt;mobile application&lt;/a&gt;, is no longer a choice, it&amp;#39;s a necessity. And with mobile Internet use set to surpass desktop Internet use in 2014, this is a trend that is rolling over companies.&lt;/p&gt;

&lt;p&gt;And when I say &amp;quot;mobile-optimized site&amp;quot;, I&amp;#39;m not talking about merely taking your entire website and making it mobile. What you need to take into account is how your customers use the mobile Internet, what devices they&amp;#39;re using, what they expect when using those devices, and what information they need to move to a decision. This is where &lt;a href="http://www.intridea.com/services/design"&gt;user experience design&lt;/a&gt; comes in.&lt;/p&gt;

&lt;p&gt;To hammer this point home, we&amp;#39;ve taken the crucial findings of the research and turned into an infographic for you:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://farm8.staticflickr.com/7460/8721028858_9a0b3cf39b_k.jpg" alt="Local Buyers Are Mobile"&gt;&lt;/p&gt;

&lt;h2&gt;What Do You Think?&lt;/h2&gt;

&lt;p&gt;Is your experience the same as in the findings? When you&amp;#39;re searching locally for products or services, does your mobile experience determine whether or not you visit a store?&lt;/p&gt;

&lt;p&gt;Let&amp;#39;s talk about it in the comments below.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/intridea/~4/_sVf2U201Ug" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://www.intridea.com">
    <author>
      <name>Chris Selmer</name>
    </author>
    <id>tag:www.intridea.com,2013-05-08:640</id>
    <published>2013-05-08T10:00:00Z</published>
    <updated>2013-05-08T10:00:00Z</updated>
    <category term="announcements" />
    <category term="clients" />
    <link rel="alternate" type="text/html" href="/blog/2013/5/8/intridea-partner-myenergy-acquired-by-nest-labs" />
    <title>Intridea Partner MyEnergy Acquired By Nest Labs</title>
    <content type="html">&lt;p&gt;Less than five years ago, two young entrepreneurs named Ben Bixby and Greg O&amp;#39;Keeffe came to Intridea with an ambitious goal: launching a platform for helping homeowners track and reduce their energy consumption. It was a great idea, but we needed to work fast to have it done by their Earth Day launch target. Ben and Greg knew they were asking a lot, but their enthusiasm and desire to make a positive change in the world were contagious. It was an exciting and caffeine-fueled time.&lt;/p&gt;

&lt;p&gt;After months of hard work and close collaboration between the Intridea and &lt;a href="https://www.myenergy.com/"&gt;MyEnergy&lt;/a&gt; teams, we launched the beta version on Earth Day 2009.  It was just the beginning of great things for Ben and Greg. That’s why we’re just as excited today to congratulate MyEnergy on their latest success: their acquisition by &lt;a href="http://nest.com/"&gt;Nest Labs&lt;/a&gt;, home of the learning thermostat.&lt;/p&gt;

&lt;p&gt;When I look back, I always think of that beta version of the MyEnergy platform as a perfect example of rapid prototyping and agile design and development done right. Under a time crunch, both our teams had to work closely to build out the minimum viable product while also creating a robust system that wouldn’t fail under load. I’m really proud of the work we all did.&lt;/p&gt;

&lt;p&gt;After the successful beta launch and helping MyEnergy recruit and hire an internal engineering team, we&amp;#39;ve continued to stay close to them, offering engineering advice and the occasional extra hand when a big development push was needed. It’s been great following their growth and getting to partner with MyEnergy throughout the years.&lt;/p&gt;

&lt;p&gt;Here’s what Ben Bixby, CEO of MyEnergy, had to say back in 2009 about working with our team:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Intridea is a great partner for any startup looking to get off the ground quickly.  The Intridea team worked closely with us to build our beta solution on a highly accelerated schedule and then helped us construct an internal development team to continue on from there.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Nest Labs, with their vision of changing the way people think about energy use, is the perfect home for MyEnergy. The simple design and usability of the Nest thermostat shows that Nest values good design and quality engineering.  MyEnergy and Nest Labs:  the perfect pairing.&lt;/p&gt;

&lt;p&gt;Congratulations to both the MyEnergy and Nest teams -- we look forward to continued success!&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/intridea/~4/sBvIxpuwlCM" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://www.intridea.com">
    <author>
      <name>Robert Dempsey</name>
    </author>
    <id>tag:www.intridea.com,2013-05-07:639</id>
    <published>2013-05-07T14:05:00Z</published>
    <updated>2013-05-07T14:05:00Z</updated>
    <category term="conferences" />
    <link rel="alternate" type="text/html" href="/blog/2013/5/7/get-mobile-with-modevux-2013" />
    <title>Get Mobile With MoDevUX 2013</title>
    <content type="html">&lt;p&gt;Go ahead and reach in your pocket. What&amp;#39;s there? I&amp;#39;m willing to bet you&amp;#39;ve got a smartphone in your hand right now. And if I was even more of a betting man, I might wager that either you or someone at home also has a tablet of some sort.&lt;/p&gt;

&lt;p&gt;The rise of mobile has been well documented. In fact, if the trend continues, mobile Internet use will surpass desktop Internet use in 2014. That makes it imperative for every business - your business - to have a mobile strategy. And that means providing an experience for people using smartphones and tablet devices.&lt;/p&gt;

&lt;p&gt;But how to learn all this? Answer: &lt;a href="http://ux13.gomodev.com/"&gt;MoDevUX&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;MoDevUX is back with another excellent line-up of speakers, teachers, and hackathon judges for &lt;a href="http://ux13.gomodev.com/"&gt;MoDevUX 2013&lt;/a&gt;. Starting this Thursday and lasting 3 days, attendees will hear from industry thought leaders, peers and up and coming stars.&lt;/p&gt;

&lt;p&gt;We at Intridea are happy to sponsor MoDevUX for the second year in a row. Last year was awesome, and we&amp;#39;re sure this year will meet the same expectations.&lt;/p&gt;

&lt;p&gt;Here&amp;#39;s a quick video about the conference:&lt;/p&gt;

&lt;iframe width="640" height="360" src="http://www.youtube.com/embed/aOB33idvZ1Q?feature=player_embedded" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;

&lt;p&gt;Tickets are still available! Use code &amp;quot;GROUP5&amp;quot; for a 30% discount for five or more when you &lt;a href="https://modevux2013.busyconf.com/bookings/new"&gt;register today&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you&amp;#39;re attending come by the Intridea table and introduce yourself.&lt;/p&gt;

&lt;p&gt;I&amp;#39;ll see you there!&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/intridea/~4/F3uWRSuWolQ" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://www.intridea.com">
    <author>
      <name>Robert Dempsey</name>
    </author>
    <id>tag:www.intridea.com,2013-05-06:638</id>
    <published>2013-05-06T11:45:00Z</published>
    <updated>2013-05-06T11:45:00Z</updated>
    <category term="conferences" />
    <link rel="alternate" type="text/html" href="/blog/2013/5/6/day-of-fosterly-2013-a-great-success" />
    <title>Day of Fosterly 2013 A Great Success</title>
    <content type="html">&lt;p&gt;We were very happy to sponsor &lt;a href="http://www.dayoffosterly.com/"&gt;Day of Fosterly 2013&lt;/a&gt;, which happened this past weekend. More than 600 attendees showed up, and you could feel the energy in the Artisphere. Congrats to Adam Zuckerman and the entire foster.ly team that made the weekend a great success.&lt;/p&gt;

&lt;p&gt;A special shoutout to Dov and Brittany who helped get us everything we needed to make DOF2013 a success for Intridea as well.&lt;/p&gt;

&lt;p&gt;Here&amp;#39;s what went down...&lt;/p&gt;

&lt;h2&gt;Design, UX/UI &amp;amp; You&lt;/h2&gt;

&lt;p&gt;As part of a panel, our very own &lt;a href="http://www.intridea.com/about/team/jurgen-altziebler"&gt;Jurgen Altziebler&lt;/a&gt; weighed in on current design trends and what should really drive design - the customer.&lt;/p&gt;

&lt;p&gt;At the end of the day, everyone agreed that design is super important. Frankly I couldn&amp;#39;t agree more :)&lt;/p&gt;

&lt;p&gt;Here&amp;#39;s a pic of Jurgen not on the panel, but giving Google Glass a try.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://farm9.staticflickr.com/8269/8714696796_91cb5c82e3.jpg" alt="Jurgen sporting Google Glass" title="Jurgen sporting Google Glass"&gt;&lt;/p&gt;

&lt;p&gt;A big thanks to &lt;a href="https://twitter.com/nguyenist"&gt;Stephanie Nguyen&lt;/a&gt; for letting us all geek out with the glass.&lt;/p&gt;

&lt;h2&gt;Workshop: How To Develop A Responsive App Quickly With DivShot And Rails&lt;/h2&gt;

&lt;p&gt;&lt;img src="http://farm9.staticflickr.com/8115/8714696768_6984a39f10.jpg" alt="Tom and Brandon presenting" title="Tom and Brandon presenting"&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.intridea.com/about/team/tom-zeng"&gt;Tom Zeng&lt;/a&gt; and &lt;a href="http://www.intridea.com/about/team/brandon-hunter"&gt;Brandon Hunter&lt;/a&gt; led this well-attended workshop, where they showed attendees how to quickly and efficiently prototype a 3-page responsive app built on Rails.&lt;/p&gt;

&lt;p&gt;Check out their presentation:&lt;/p&gt;

&lt;iframe src="http://www.slideshare.net/slideshow/embed_code/20658254" width="476" height="400" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;

&lt;p&gt;If you haven&amp;#39;t tried Divshot yet, &lt;a href="http://www.divshot.com/?ref=intridea"&gt;sign up for the free beta&lt;/a&gt;. Build your UI using drag-and-drop, and then export to HTML and CSS.&lt;/p&gt;

&lt;h2&gt;Walt Mossberg Keynote Highlights&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://twitter.com/waltmossberg"&gt;Walt Mossberg&lt;/a&gt; is the author and creator of the weekly Personal Technology column in The Wall Street Journal, a column that&amp;#39;s appeared every week since 1991. He is also the co-creator and co-producer of the &amp;quot;D: All Things Digital&amp;quot; conference, as well as the executive editor of the &lt;a href="http://allthingsd.com/"&gt;All Things D website&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When Walt speaks, people listen, and listen they did - to his keynote. Here are the main lessons Walt gave us, paraphrased by me. Additional comments in italics.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Customer: focus on a single customer. &lt;em&gt;The way I like to put this is that it&amp;#39;s expensive to sell and market to everyone. Select a group of people to help, and focus on helping them.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Product: focus on your product and executing it; crappy products never win.&lt;/li&gt;
&lt;li&gt;Curate: choose what to put in, and even more importantly,leave out.&lt;/li&gt;
&lt;li&gt;User Experience: the business model is crucial, however the business model doesn&amp;#39;t drive the product; the product is driven by &lt;a href="http://www.intridea.com/services/design"&gt;user experience&lt;/a&gt;. &lt;strong&gt;If the experience isn&amp;#39;t good, you&amp;#39;re dead.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Mobile: mobile, mobile, mobile. If a site is not mobile-friendly, it won&amp;#39;t be a very rich experience for mobile users. Build for &lt;a href="http://www.intridea.com/services/mobile"&gt;mobile first&lt;/a&gt; - the world is becoming mobile centric, here in the U.S. and especially elsewhere in the world.&lt;/li&gt;
&lt;li&gt;Ignore Computer Theology: If you spend a minute of your time in a theological debate about apps versus the web, iOS vs. android, you&amp;#39;ve wasted it. Spend your time figuring out how to reach people. People don&amp;#39;t care what your app was written in. _At Intridea, we &lt;a href="http://www.intridea.com/services/development"&gt;develop web applications&lt;/a&gt; in Ruby on Rails, along with other technologies including Node.js, BackBone.js, and &lt;a href="http://www.intridea.com/services/mobile"&gt;mobile applications&lt;/a&gt; for both iOS and Android. So when it comes to web apps, we&amp;#39;re a bit biased :)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;See You Next Year!&lt;/h2&gt;

&lt;p&gt;If you missed &lt;a href="http://www.dayoffosterly.com/"&gt;DOF2013&lt;/a&gt;, be sure to catch us next year at Day of Foster.ly 2014. I&amp;#39;m sure it will be excellent and well worth your time.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://farm9.staticflickr.com/8257/8713575211_40e4d65302.jpg" alt="Intrideans at DOF2013 from left to right: Jurgen, Tom, Marc, Brandon, Rob" title="Intrideans at DOF2013 from left to right: Jurgen, Tom, Marc, Brandon, Rob"&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/intridea/~4/2jtKMB-WgWs" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://www.intridea.com">
    <author>
      <name>Robert Dempsey</name>
    </author>
    <id>tag:www.intridea.com,2013-05-02:637</id>
    <published>2013-05-02T09:30:00Z</published>
    <updated>2013-05-02T09:30:00Z</updated>
    <category term="conferences" />
    <link rel="alternate" type="text/html" href="/blog/2013/5/2/day-of-fosterly-2013" />
    <title>Join Us For A Day Of Entrepreneurship And Learning At Day of Foster.ly</title>
    <content type="html">&lt;p&gt;Starting at 10 AM on Saturday, May 4th (2013), hundreds of entrepreneurs will gather at Artisphere for more than eight hours of panels, workshops, chats, demos, expo, job fair and more at &lt;a href="http://www.dayoffosterly.com/" title="Day of Foster.ly 2013"&gt;Day of Foster.ly 2013&lt;/a&gt;. If you&amp;#39;re interested in starting, growing, or exiting a company, this conference is for you. And if that&amp;#39;s not enough to pique your interest, the keynote will be delivered by legendary tech journalist Walt Mossberg.&lt;/p&gt;

&lt;h2&gt;Join Intridea at Day of Foster.ly&lt;/h2&gt;

&lt;p&gt;We&amp;#39;re happy to announce that three Intrideans will be presenting at DOF.&lt;/p&gt;

&lt;p&gt;From 10:15am - 11:00am, &lt;a href="http://www.intridea.com/about/team/jurgen-altziebler" title="Jürgen Altziebler"&gt;Jürgen Altziebler&lt;/a&gt;, our Managing Director of UX, will be on the UX/IU panel. And from 2:15pm - 3pm,  &lt;a href="http://www.intridea.com/about/team/brandon-hunter" title="Brandon Hunter"&gt;Brandon Hunter&lt;/a&gt;, one of our excellent UX/UI designers and &lt;a href="http://www.intridea.com/about/team/tom-zeng" title="Tom Zeng"&gt;Tom Zeng&lt;/a&gt;, our Director of Engineering, will be conducting a 45-minute workshop: How To Develop A Responsive App Quickly With DivShot And Rails.&lt;/p&gt;

&lt;p&gt;Also, I&amp;#39;ll be manning our table, so be sure to stop by and say hello.&lt;/p&gt;

&lt;p&gt;See you on Saturday!&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/intridea/~4/hy7Y2f01REI" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://www.intridea.com">
    <author>
      <name>Marc Garrett</name>
    </author>
    <id>tag:www.intridea.com,2013-04-16:636</id>
    <published>2013-04-16T00:00:00Z</published>
    <updated>2013-04-16T00:00:00Z</updated>
    <category term="jtbd" />
    <link rel="alternate" type="text/html" href="/blog/2013/4/16/switch-workshop-progress-making-forces" />
    <title>Switch Workshop: Progress Making Forces</title>
    <content type="html">&lt;p&gt;Thanks to &lt;a href="http://37signals.com"&gt;37signals&lt;/a&gt; and the &lt;a href="http://www.therewiredgroup.com/"&gt;Re-Wired Group&lt;/a&gt; for hosting the Switch Workshop in Chicago last week. Jason, Bob, and Chris introduced us to the Jobs-to-be-Done framework and explored what makes us buy the products and services we buy.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://f.cl.ly/items/0j413F3m013D2r3O1q1U/DSC04891.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Buyers always switch from one product to another. For example, Facebook users didn&amp;#8217;t engage in new social behavior; they simply switched from using the phone and email to using Facebook.&lt;/p&gt;
&lt;p&gt;In a nutshell, the #&lt;span class="caps"&gt;JTBD&lt;/span&gt; framework focuses on four &amp;#8220;progress making&amp;#8221; forces. I&amp;#8217;ll use Michael Bleigh&amp;#8217;s recently funded &lt;a href="http://www.divshot.com/"&gt;Divshot&lt;/a&gt; as an example.&lt;/p&gt;
&lt;p&gt;Two forces drive change:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Push of situation&lt;/strong&gt;. &amp;#8220;We need a better solution. Static wireframes aren&amp;#8217;t getting it done.&amp;#8221;&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Magnetism of the new solution&lt;/strong&gt;. &amp;#8220;Divshot has drag-and-drop, and exports to &lt;span class="caps"&gt;HTML&lt;/span&gt; &amp;amp; &lt;span class="caps"&gt;CSS&lt;/span&gt;? Awesome!&amp;#8221; This force is incredibly motivating for engineers.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Two countervailing forces block change:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Anxiety of the new solution&lt;/strong&gt;. &amp;#8220;If I move to this platform will it do all the things I need? Will it be around next year?&amp;#8221;&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Habit of the present&lt;/strong&gt;. &amp;#8220;I may not love Balsamiq for wireframes, but I already know it.&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Divshot has a low barrier to entry and the people who purchase it are also the people likely to actually use it (designers and engineers). If it turns out you don&amp;#8217;t enjoy building your UI in the browser you can always go back to your previous tool. Thus, the &amp;#8220;anxiety of the new solution&amp;#8221; isn&amp;#8217;t a big impediment to adoption. For bigger purchases such as custom enterprise software&amp;#8212;especially when the purchasing manager and the user are not the same person&amp;#8212;overcoming a manager&amp;#8217;s anxiety of the new solution can be the greatest challenge to seeing your software adopted.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve only scratched the surface of what we learned in the workshop. Next week I&amp;#8217;ll blog about fundamental timelines and interview techniques that will fit perfectly with your existing user interview process. &lt;a href="https://twitter.com/jasonfried"&gt;Jason Fried&lt;/a&gt;, &lt;a href="https://twitter.com/bmoesta"&gt;Bob Moesta&lt;/a&gt;, and &lt;a href="https://twitter.com/chriscbs"&gt;Chris Spiek&lt;/a&gt; are exceptional hosts and teachers. If you have a chance to attend a Switch workshop, it&amp;#8217;s worth your time.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/intridea/~4/BbqtiDCnae4" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://www.intridea.com">
    <author>
      <name>Anthony Nyström</name>
    </author>
    <id>tag:www.intridea.com,2013-04-12:635</id>
    <published>2013-04-12T15:15:00Z</published>
    <updated>2013-04-12T15:15:00Z</updated>
    <category term="data" />
    <category term="surfiki" />
    <category term="NLP" />
    <link rel="alternate" type="text/html" href="/blog/2013/4/12/dc-council-data-set-and-the-new-surfiki-developers-api" />
    <title>DC Council Data Set and the NEW Surfiki Developers API</title>
    <content type="html">&lt;p&gt;As I regularly do; look around for new datasets that I can explore and process with &lt;a href="http://www.surfiki.com"&gt;Surfiki&lt;/a&gt;, I came across the following:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://macwright.org/2013/04/04/the-open-code.html"&gt;The Open Code - Digital Copy of DC&amp;#39;s Laws&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As the author &lt;a href="http://macwright.org"&gt;Tom MacWright&lt;/a&gt; mentions on his site:&lt;/p&gt;

&lt;p&gt;&amp;quot;I couldn’t be happier to write that the project to bring &lt;a href="http://dc.gov/DC/"&gt;DC’s&lt;/a&gt; laws into the digital era and put them in everyone’s hands made a big breakthrough: today you can download an unofficial copy of the Code (current through December 11, 2012) from the &lt;a href="http://dccouncil.us/UnofficialDCCode"&gt;DC Council’s&lt;/a&gt; website. Not only that, but the licensing for this copy is officially CC0, a Creative Commons license that aims to be a globally-effective Public Domain designation.&amp;quot;&lt;/p&gt;

&lt;p&gt;That sounds like a GREAT invitation :) From my reading his post, it seems that this was difficult to acquire. He mentions many people, communications and time all working together to make this available to the public. He goes on to mention:&lt;/p&gt;

&lt;p&gt;&amp;quot;What else is there to build? A great smartphone interface. Topic-specific bookmarks. Text analysis. Great, instant search. Mirrored archives to everywhere. Printable copies for DIY and for print-on-demand services. And lots more.&lt;/p&gt;

&lt;p&gt;We’re not waiting till then to start though: &lt;a href="https://github.com/openlawdc/dc-decoded"&gt;dc-decoded&lt;/a&gt; is a project I started today to finish the long-awaited task of bringing &lt;a href="http://dc.gov/DC/"&gt;DC’s&lt;/a&gt; laws into The State Decoded. The openlawdc organization on GitHub is dedicated to working on these problems, and it’s open: you can and should get access if you want to contribute.&amp;quot;&lt;/p&gt;

&lt;p&gt;As &lt;a href="http://www.intridea.com"&gt;Intridea&lt;/a&gt; is a &lt;a href="http://dc.gov/DC/"&gt;DC&lt;/a&gt; based firm, it made perfect sense for us to run this data through our own Data Intelligence Processing Engine; &lt;a href="http://www.surfiki.com"&gt;Surfiki&lt;/a&gt;. As well, it is a perfect opportunity to introduce the &lt;a href="http://developer.surfiki.com/"&gt;Surfiki Developers API&lt;/a&gt;. For which,  we are making publicly available as of RIGHT NOW :) However, we are manually approving users and apps as we move forward. This, to assist us in future scaling and better insight in to the bandwidth required for concurrent and frequent developer operations. I encourage anyone and everyone to create an account. Eventually, all requests will be granted, and will be upon a first come first serve basis.&lt;/p&gt;

&lt;p&gt;I think it is best that I first explain how we processed the data from &lt;a href="http://macwright.org/2013/04/04/the-open-code.html"&gt;The Open Code - Digital Copy of DC&amp;#39;s Laws&lt;/a&gt;. Followed by a general introduction in to &lt;a href="http://www.surfiki.com"&gt;Surfiki&lt;/a&gt; and the &lt;a href="http://developer.surfiki.com/"&gt;Surfiki Developers API&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The initial distribution of &lt;a href="http://macwright.org/2013/04/04/the-open-code.html"&gt;The Open Code - Digital Copy of DC&amp;#39;s Laws&lt;/a&gt; was in &lt;a href="http://office.microsoft.com/en-us/word/"&gt;Microsoft Word&lt;/a&gt; Documents. This may have been updated to a more &amp;quot;ingestion&amp;quot; friendly format by now, although I am not sure. The total number of documents was 51, ranging in size from, 317K to 140MB. You may think, &amp;quot;Hey, that&amp;#39;s NOT a lot of data&amp;quot;... Sure, that&amp;#39;s true, however I don&amp;#39;t think it matters much for this project. From what I gather, it was important to just get the data out there and available, regardless of size. As well, &lt;a href="http://www.surfiki.com"&gt;Surfiki&lt;/a&gt; doesn&amp;#39;t throw fits due to small data or big data anyway.&lt;/p&gt;

&lt;p&gt;First order of business was converting these &lt;a href="http://office.microsoft.com/en-us/word/"&gt;Microsoft Word&lt;/a&gt; documents to text. While &lt;a href="http://www.surfiki.com"&gt;Surfiki&lt;/a&gt; can indeed read through &lt;a href="http://office.microsoft.com/en-us/word/"&gt;Microsoft Word&lt;/a&gt; documents, it generally takes a little longer. Therefore, any preprocessing is a good thing to do. Here is a small &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt; script that will convert the documents.&lt;/p&gt;

&lt;pre&gt;&lt;code class="python"&gt;
#!/usr/bin/env python 
# -*- coding: utf-8 -*-

import glob, re, os
f = glob.glob('docs/*.doc') + glob.glob('docs/*.DOC')

outDir = 'textdocs'
if not os.path.exists(outDir):
    os.makedirs(outDir)
for i in f:
    os.system("catdoc -w '%s' &gt; '%s'" %
              (i, outDir + '/' + re.sub(r'.*/([^.]+)\.doc', r'\1.txt', i,
                                   flags=re.IGNORECASE)))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;With that completed we now have them as text files. I decided to take a peak in to the text files and noticed that there are a lot of &amp;quot;END OF DOCUMENT&amp;quot; lines. For this I assume is representative of singular documents within the larger contextual document. (I know, I know… Genius assumption :))&lt;/p&gt;

&lt;p&gt;This &amp;quot;END OF DOCUMENT&amp;quot; looks like the following:&lt;/p&gt;

&lt;pre&gt;&lt;code class="text"&gt;
For legislative history of D.C. Law 4-171, see Historical and Statutory Notes following § 3-501.

DC CODE § 3-502

                Current through December 11, 2012                               

END OF DOCUMENT
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And from my initial count script, there are about 19K lines that read: &amp;quot;END OF DOCUMENT&amp;quot;. Therefore, I want to split these up in to individual files. The reason for this is 
I want &lt;a href="http://www.surfiki.com"&gt;Surfiki&lt;/a&gt; to process these as specific documents for search and trending purposes. Therefore, with the following &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt; script, I split them in to individual documents. As well, I cleaned out the &amp;#39;§&amp;#39; character. Note: &lt;a href="http://www.surfiki.com"&gt;Surfiki&lt;/a&gt; uses both structured storage and unstructured storage for all data. The reason behind this is both business purposes as well as redundancy. Business purposes, structured storage allows us to connect with common enterprise offerings, such as &lt;a href="http://www.microsoft.com/en-us/sqlserver/default.aspx"&gt;SQL Server&lt;/a&gt;, &lt;a href="http://www.oracle.com/index.html"&gt;Oracle&lt;/a&gt; , etc., for data consumption and propagation. As for redundancy, since for a temporal period we persist all data concurrently between the two mediums, where process may abase, we can recover within seconds and workflow can resume unimpeded.&lt;/p&gt;

&lt;p&gt;Note: docnames.txt is just a static list of the initial text documents converted from &lt;a href="http://office.microsoft.com/en-us/word/"&gt;Microsoft Word&lt;/a&gt; documents. I chose that method rather than walking the path.&lt;/p&gt;

&lt;pre&gt;&lt;code class="python"&gt;
#!/usr/bin/env python 
# -*- coding: utf8 -*-

def replace_all(text, dic):
    for i, j in dic.iteritems():
        text = text.replace(i, j)
    return text

with open('docnames.txt') as f:
    set_count = 0
    for lines in f:
        filename = str(lines.rstrip())
        with open(filename, mode="r") as docfile:

            file_count = 0
            smallfile_prefix = "File_"
            smallfile = open(smallfile_prefix + str(file_count) + "_" + str(set_count) + '.txt', 'w')
            for line in docfile:
                reps = {'§':''}
                line = replace_all(line, reps)
                if line.startswith("END OF DOCUMENT"):
                    smallfile.close()
                    file_count += 1
                    smallfile = open(smallfile_prefix + str(file_count) + "_" + str(set_count) + '.txt', 'w')
                else:
                    smallfile.write(line)

            smallfile.close()
            set_count += 1
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;After the above processing (few seconds of time), I now have over 19K files, ranging from 600B to 600K, PERFECT! I am ready to push these to &lt;a href="http://www.surfiki.com"&gt;Surfiki&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It&amp;#39;s important to understand &lt;a href="http://www.surfiki.com"&gt;Surfiki&lt;/a&gt; works with all types of data as well as locations of data. Web data (Pages, Feeds, Posts, Comments, Facebook, Twitter , etc.) As well it works with static data locations, such as file systems, buckets , etc. Streams and Databases… In this case, we are working with static data; text documents in a cloud storage bucket. Without getting to detailed in to the mechanism that I push these files, on a basic level, they are pushed to the bucket where an agent is watching and once they start arriving the processing begins.&lt;/p&gt;

&lt;p&gt;Since this is textual information, the type of processing is important. In this case I want to use the standard set of NLP textual processing within &lt;a href="http://www.surfiki.com"&gt;Surfiki&lt;/a&gt;. Versus any customized algorithms, such as specific topic based classifiers, or statistical classifiers , etc. The following is what will be processed within &lt;a href="http://www.surfiki.com"&gt;Surfiki&lt;/a&gt; for this data.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sentiment - Positive, Negative and Neutral&lt;/li&gt;
&lt;li&gt;Perspective - Objective or Subjective&lt;/li&gt;
&lt;li&gt;Gunning Fog Index&lt;/li&gt;
&lt;li&gt;Reading Ease&lt;/li&gt;
&lt;li&gt;Lexical Density&lt;/li&gt;
&lt;li&gt;Counts including: words/sentence, syllables/sentence, syllables/word&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As well, we provide the following for all data.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keywords (Literal) - Literal extraction of keywords&lt;/li&gt;
&lt;li&gt;Keywords (Semantic) - Semantic conceptual generation of keywords&lt;/li&gt;
&lt;li&gt;Trends - n-grams - Uni, Bi and Tri&lt;/li&gt;
&lt;li&gt;Trends Aggregate - n-gram weighted distribution&lt;/li&gt;
&lt;li&gt;Graph - n-gram relationships/time (Available likely on Monday)&lt;/li&gt;
&lt;li&gt;Time - Insert and document time extraction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These will all be available in the &lt;a href="http://developer.surfiki.com/"&gt;Surfiki Developers API&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you go over to &lt;a href="http://developer.surfiki.com/"&gt;Surfiki Developers API&lt;/a&gt; and read through the documentation, you will find how simple it is to use. We are adding datasets on a regular basis so please check back often. As well, our near real-time Surface Web data is always available, as are previously processed data sets. If you have ideas or even data sets we should look at, please just let us know by submitting a comment on this post.&lt;/p&gt;

&lt;p&gt;If you want to contact us about using &lt;a href="http://www.surfiki.com"&gt;Surfiki&lt;/a&gt; within your organization, that would be great as well. We can put it behind your firewall, or operate it in the cloud. It is available for most architectural implementations.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.intridea.com/contact"&gt;Contact Intridea&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/intridea/~4/vfJHSlyAvUw" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://www.intridea.com">
    <author>
      <name>Anthony Nyström</name>
    </author>
    <id>tag:www.intridea.com,2013-04-04:634</id>
    <published>2013-04-04T13:55:00Z</published>
    <updated>2013-04-04T13:55:00Z</updated>
    <category term="Ethics" />
    <category term="Big Data" />
    <category term="Privacy" />
    <link rel="alternate" type="text/html" href="/blog/2013/4/4/ethics-of-big-data-a-review" />
    <title>Ethics of Big Data - A Review</title>
    <content type="html">&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Ethics"&gt;Ethics&lt;/a&gt;; heavy :) How fitting is this quote from &lt;a href="http://en.wikipedia.org/wiki/B._R._Ambedkar"&gt;Ambedkar&lt;/a&gt; - &amp;quot;History shows that where ethics and economics come in conflict, victory is always with economics. Vested interests have never been known to have willingly divested themselves unless there was sufficient force to compel them.&amp;quot; &lt;/p&gt;

&lt;p&gt;Certainly, when discussing &lt;a href="http://en.wikipedia.org/wiki/Big_data"&gt;Big Data&lt;/a&gt;... We are indeed speaking of economics; therefore fitting. This might also explain why the book is less than one hundred pages. ;) I can&amp;#39;t help but think this is &amp;quot;too soon&amp;quot;. Too soon to be discussing &lt;a href="http://en.wikipedia.org/wiki/Ethics"&gt;Ethics&lt;/a&gt; in &lt;a href="http://en.wikipedia.org/wiki/Big_data"&gt;Big Data&lt;/a&gt;. Without any real hard examples in the wild to illustrate the risks, we are only guessing as to outcomes. It&amp;#39;s difficult to establish what is &amp;quot;Ethical&amp;quot; until someone or something is hurt.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://shop.oreilly.com/product/0636920021872.do"&gt;Ethics of Big Data - Balancing Risk and Innovation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let&amp;#39;s assume this is a primer, a primer for a larger and more in depth consideration sometime in the future. With that assumption, this book is a decent &amp;quot;quick&amp;quot; read. The book lays out the framework for &lt;a href="http://en.wikipedia.org/wiki/Big_data"&gt;Big Data&lt;/a&gt; risks from the eyes of the business, and should serve quite well as a catalyst for discussion.&lt;/p&gt;

&lt;p&gt;As for &lt;a href="http://en.wikipedia.org/wiki/Ethics"&gt;Ethics&lt;/a&gt;, as stated above, I don&amp;#39;t have a good perspective as to the range. The range of risk potential, the establishment of normalcy and extremes. So I am left just as I started. I understand that Information &lt;a href="http://en.wikipedia.org/wiki/Ethics"&gt;Ethics&lt;/a&gt; is an important topic, yet, I am unsure what it means within a data social context, nor a personal data privacy context. The book doesn&amp;#39;t cover what I consider to be a real exploration of &lt;a href="http://en.wikipedia.org/wiki/Ethics"&gt;Ethics&lt;/a&gt;. Other than some rare tidbits, Example. &lt;a href="http://news.cnet.com/8301-13578_3-57559710-38/instagram-says-it-now-has-the-right-to-sell-your-photos/"&gt;Instagram in 2012 saying they own your photos&lt;/a&gt; and can do what they wish with them; we, the &lt;a href="http://en.wikipedia.org/wiki/Big_data"&gt;Big Data&lt;/a&gt; practitioners group and its consumers, lack causation upon this topic. It is important for you to realize that a large portion of &lt;a href="http://en.wikipedia.org/wiki/Ethics"&gt;Ethics&lt;/a&gt; have natural and innate constraints as defined by society. Therefore, there should only be a few, relatively speaking, areas where &lt;a href="http://en.wikipedia.org/wiki/Ethics"&gt;Ethics&lt;/a&gt;, or the question of &lt;a href="http://en.wikipedia.org/wiki/Ethics"&gt;Ethics&lt;/a&gt; is appropriate for data.&lt;/p&gt;

&lt;p&gt;A distinction the book doesn&amp;#39;t cover is that of innate privacy or personal privacy at all actually; very little. There is nothing un-ehtical or ethical in regards to innate privacy, as it exists with distinction by default. An example would be our &lt;a href="http://en.wikipedia.org/wiki/Electronic_medical_record"&gt;Medical Records&lt;/a&gt;. As our records are being continually digitized, it is certainly becoming &lt;a href="http://en.wikipedia.org/wiki/Big_data"&gt;Big Data&lt;/a&gt;. However, what&amp;#39;s innate about &lt;a href="http://en.wikipedia.org/wiki/Ethics"&gt;Ethics&lt;/a&gt; in this respect is EVERYONE feels their information is private. Therefore, there isn&amp;#39;t a need to address the &lt;a href="http://en.wikipedia.org/wiki/Ethics"&gt;Ethics&lt;/a&gt;. Let&amp;#39;s put aside conspiracy theory and potential for abuse as &lt;a href="http://en.wikipedia.org/wiki/Ethics"&gt;Ethics&lt;/a&gt; do not restrain those whom exploit in the first place. &lt;a href="http://en.wikipedia.org/wiki/Electronic_medical_record"&gt;Medical Records&lt;/a&gt; is only an example. There are, indeed many more. &lt;/p&gt;

&lt;p&gt;The question I want to ask is: What &lt;a href="http://en.wikipedia.org/wiki/Big_data"&gt;Big Data&lt;/a&gt; is actually subject to the standardization of &lt;a href="http://en.wikipedia.org/wiki/Ethics"&gt;Ethics&lt;/a&gt;? Which is contrary to the very definition of &lt;a href="http://en.wikipedia.org/wiki/Ethics"&gt;Ethics&lt;/a&gt;. &amp;quot;&lt;a href="http://en.wikipedia.org/wiki/Ethics"&gt;Ethics&lt;/a&gt; is the means in which we explore our personal &lt;a href="http://en.wikipedia.org/wiki/Morality"&gt;morality&lt;/a&gt;&amp;quot;. And I do mean, explore. As, our &lt;a href="http://en.wikipedia.org/wiki/Ethics"&gt;Ethics&lt;/a&gt; are subject to change, throughout history, &lt;a href="http://en.wikipedia.org/wiki/Ethics"&gt;Ethics&lt;/a&gt; is a moving target. Example. &lt;a href="http://en.wikipedia.org/wiki/Colosseum"&gt;Roman Colosseum; Man vs. Beast etc&lt;/a&gt;. The books title is superfluous, a better title might have been: Privacy Practices for &lt;a href="http://en.wikipedia.org/wiki/Big_data"&gt;Big Data&lt;/a&gt;, or: &lt;a href="http://en.wikipedia.org/wiki/Big_data"&gt;Big Data&lt;/a&gt;, Business and You...&lt;/p&gt;

&lt;p&gt;As you can see it is a passionate subject, as I find myself getting off track. That is a good example of what this book might illicit within yourself; questions of practice and judgement. &lt;/p&gt;

&lt;p&gt;Using the example of &lt;a href="http://news.cnet.com/8301-13578_3-57559710-38/instagram-says-it-now-has-the-right-to-sell-your-photos/"&gt;Instagram and their photo debacle&lt;/a&gt;, was it ethical for them to post this information in their Terms of Use? Yes; it certainly was, and they did. While you may not like their decision, they were ethical in my opinion. You have a choice to use their service or not, they were honest in their intent. You may argue that the decision by them to claim ownership of your photos is un-ehtical. Is it? Is it really? They are a service that you choose to use, they have terms that they define, and you, need to abide by them, when choosing to use their service. That certainly seems ethical to myself. I can hear a few of you saying that &lt;a href="http://en.wikipedia.org/wiki/Ethics"&gt;Ethics&lt;/a&gt; should apply even when choice exists. That maybe so for some, but I am unconvinced. I acknowledge that Instagram wouldn&amp;#39;t exist without users, and their decisions should be beneficial for themselves and for their users,  However, it remains your choice to use their service.&lt;/p&gt;

&lt;p&gt;Back to the book. If you want a Primer in regards to &lt;a href="http://en.wikipedia.org/wiki/Big_data"&gt;Big Data&lt;/a&gt; and some questions you should likely be asking yourself as a practitioner, this is a good start. I didn&amp;#39;t seek information on the author until after I read the book. In my mind I kept saying, hopefully this author is a philosophy major or I am going to be a little agitated. Indeed the author does have a degree in philosophy. I can keep my criticism to a minimum.&lt;/p&gt;

&lt;p&gt;This book was provided free, for purpose of review from &lt;a href="http://oreilly.com/"&gt;O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/intridea/~4/oPmyIbT7_h0" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://www.intridea.com">
    <author>
      <name>Anthony Nyström</name>
    </author>
    <id>tag:www.intridea.com,2013-03-29:632</id>
    <published>2013-03-29T20:20:00Z</published>
    <updated>2013-03-29T20:20:00Z</updated>
    <category term="CV" />
    <category term="Python" />
    <link rel="alternate" type="text/html" href="/blog/2013/3/29/practical-computer-vision-with-simplecv-review" />
    <title>Practical Computer Vision with SimpleCV - Review</title>
    <content type="html">&lt;p&gt;Coming from having worked in CV for many years in varying degrees, as well, knowing some rather heavy weights working within it today, I was interested in this book from a review perspective. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://shop.oreilly.com/product/0636920024057.do"&gt;Practical Computer Vision with SimpleCV&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I found it encouraging that the author did dive right in with some high level informative definitions, common challenges and practical use case. Contrary to my encouragement is that it misses the mark with low level detail, theory and any real in depth explanation upon computer vision itself.&lt;/p&gt;

&lt;p&gt;For a beginner, this is a decent title. Be aware though, if you are a beginner, you will need to embrace a quick rhythm and progression throughout. While it may lack in providing &amp;quot;an education in theory&amp;quot;, it makes up for with &amp;quot;an education in application&amp;quot;.&lt;/p&gt;

&lt;p&gt;A few examples within the book did catch my attention such as the &lt;a href="http://en.wikipedia.org/wiki/Xbox"&gt;XBox&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Kinect"&gt;Kinect&lt;/a&gt; material, which is quite relevant with the buzz surrounding the tech and its accessibility. A bonus here is the escape from Microsoft tools that some may feel make the &lt;a href="http://en.wikipedia.org/wiki/Kinect"&gt;Kinect&lt;/a&gt; undesirable. The clear examples in &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt; should address concerns with its use for practical training and application outside the &lt;a href="http://www.msdn.com"&gt;Microsoft&amp;#39;s Developer Tools ecosystem.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I enjoyed Chapter 7 (Drawing on Images) as this is where I spent a lot of time in the past with imaging annotations for medical applications. The ability to work with layers, objects, lines, etc. The author did a good job with describing the canvas but lacked in the actual drawing sections. The lollipop example was rather crude and &lt;a href="http://simplecv.org/"&gt;SimpleCV&amp;#39;s&lt;/a&gt; support for drawing is demonstrably more robust.&lt;/p&gt;

&lt;p&gt;A lot of time was spent upon &lt;a href="http://en.wikipedia.org/wiki/Histogram"&gt;histograms&lt;/a&gt; which does make sense to me. I believe though, there was too much time spent on it. Which, will likely create some discontent with the quick progression I mentioned in a previous paragraph. I realize it is a vital concept/feature within CV and therefore the attention that was spent on it is good, however, not for this book.&lt;/p&gt;

&lt;p&gt;I was disappointed to find there was very little in the book regarding &lt;a href="http://en.wikipedia.org/wiki/SURF"&gt;SURF&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Scale-invariant_feature_transform"&gt;SIFT&lt;/a&gt;, used for feature detection. (Arguably the most prominent CV industry application) Arguments regarding which algorithm&amp;#39;s perform better or worse may have prevented their inclusion. As well, While &lt;a href="http://simplecv.org/"&gt;SimpleCV&lt;/a&gt; doesn&amp;#39;t have an implementation of &lt;a href="http://en.wikipedia.org/wiki/Scale-invariant_feature_transform"&gt;SIFT&lt;/a&gt;, it does for &lt;a href="http://en.wikipedia.org/wiki/SURF"&gt;SURF&lt;/a&gt;. In practice, within feature detection initiatives one of the two will typically be utilized. The following link is some open source &lt;a href="http://en.wikipedia.org/wiki/SURF"&gt;SURF&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Scale-invariant_feature_transform"&gt;SIFT&lt;/a&gt; with &lt;a href="http://en.wikipedia.org/wiki/OpenCV"&gt;OpenCV&lt;/a&gt; work I and a friend worked on a few years back. Specific to feature detection around brand logos. &lt;a href="https://github.com/AnthonyNystrom/mSquared"&gt;LINK&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Generally speaking, when you ask a beginner why they are interested in Computer Vision, most likely the answer will be something along the lines of: Facial Recognition and or Object Recognition. The author does provide examples and lesson within those more interesting facets. Therefore, it hits the mark for the intended reader.&lt;/p&gt;

&lt;p&gt;This book was provided free, for purpose of review from &lt;a href="http://oreilly.com/"&gt;O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/intridea/~4/3CCgj_cNXjM" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://www.intridea.com">
    <author>
      <name>Anthony Nyström</name>
    </author>
    <id>tag:www.intridea.com,2013-03-27:631</id>
    <published>2013-03-27T10:35:00Z</published>
    <updated>2013-03-27T10:35:00Z</updated>
    <category term="data" />
    <category term="Open Analytics" />
    <category term="NOW" />
    <link rel="alternate" type="text/html" href="/blog/2013/3/27/open-analytics-summit-review" />
    <title>Open Analytics Summit Review</title>
    <content type="html">&lt;p&gt;I always love traveling to DC. Meeting up with fellow Intrideans is incredibly motivating and satisfying. I had this chance yet again over the last couple days for an event; &lt;a href="http://www.openanalyticssummit.com/"&gt;Open Analytics Summit&lt;/a&gt;, whereby Intridea was a sponsor. As well, we had a speaking slot. A few other companies were sponsoring/speaking as well, such as &lt;a href="http://basho.com/"&gt;Basho&lt;/a&gt;, &lt;a href="http://www.elasticsearch.com/"&gt;Elasticsearch&lt;/a&gt; and &lt;a href="http://www.10gen.com/"&gt;10Gen&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.divvr.me/OADC-1x.jpg" alt="alt text"&gt;&lt;/p&gt;

&lt;p&gt;The morning started pretty slow, I am certain people were around the corner, just not sure which corner that was. It was an intimate setting, only a few tables for vendors/sponsors and a select group of practitioners. &lt;/p&gt;

&lt;p&gt;Presentations were longer than what I consider normal, 45-50 minutes. Topics were focused for the most part upon Open Source software which included: Applications, Architecture, Engineering, Methods and Systems used within Data Analytics. As a sponsor it was difficult to get away and listen to the presentations, certainly a few of them looked as though they would have been quite interesting to have attended.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.divvr.me/OADC-48.jpg" alt="alt text"&gt;&lt;/p&gt;

&lt;p&gt;My presentation titled: Data Science in the NOW - It Takes an ARMY of tools! Focused mainly upon the vast array of available Open Source DB&amp;#39;s, Indexing Engines, File Systems, Query Engines and Streaming Engines. As well, I spent a little time on the definition of &amp;quot;NOW&amp;quot; (within the context of data analytics), latency and our own human (physiological) limitations with perception. I made it a point to mention most that are available as well as their history, general feature set, strengths and weaknesses. I selected a few out of the myriad for special attention. Examples included: &lt;a href="http://storm-project.net/"&gt;Storm&lt;/a&gt;, &lt;a href="http://cassandra.apache.org/"&gt;Cassandra&lt;/a&gt;, &lt;a href="http://hbase.apache.org/"&gt;HBase&lt;/a&gt;, xQL&amp;#39;s, &lt;a href="http://hadoop.apache.org/"&gt;Hadoop&lt;/a&gt; and a few others. The presentation is available for anyone to view on &lt;a href="http://www.slideshare.net/intridea/intridea-ajnrttos-17776075"&gt;slide-share&lt;/a&gt;. Unfortunately without the notes attached it may seem a lot of the detail is missing. If you want to read through the notes that apply to each slide, please just let me know and I will send them to you.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.divvr.me/OADC-35.jpg" alt="alt text"&gt;&lt;/p&gt;

&lt;p&gt;My only gripe is the venue itself. While quaint, it had some real drawbacks. For example, power outlets in front of the vendor tables, rather than behind. A lounging area directly in front of the vendor tables whereby attendees backs were to us. Therefore making it rather difficult to engage in useful discussion. Finally the main presentation room is built upon tiers, much like you have experienced in large collegiate classrooms. However, the drawback was that attendee&amp;#39;s each were behind a small barrier that hid their hands. With long presentations I noticed a lot of arm/elbow movement indicating QWERTY abuse or &lt;a href="http://en.wikipedia.org/wiki/Thumb_war"&gt;thumb wrestling&lt;/a&gt; rather than focus upon the presenter.&lt;/p&gt;

&lt;p&gt;We met a few really cool people that we are already following up with. All in all it was a good event, glad we were part of it.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/intridea/~4/YIdE6Wc7Fas" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://www.intridea.com">
    <author>
      <name>Ben Markowitz</name>
    </author>
    <id>tag:www.intridea.com,2013-03-25:626</id>
    <published>2013-03-25T00:00:00Z</published>
    <updated>2013-03-25T00:00:00Z</updated>
    <link rel="alternate" type="text/html" href="/blog/2013/3/25/small-multiples-with-stately" />
    <title>Small Multiples with Stately and jQuery</title>
    <content type="html">&lt;p&gt;Small Multiplies are a type of data visualization popularized by &lt;a href="http://www.edwardtufte.com/"&gt;Edward Tufte&lt;/a&gt;, a pioneer in the field of data visualization and noted author in the field of information design. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.juiceanalytics.com/writing/better-know-visualization-small-multiples/"&gt;Small Multiples&lt;/a&gt; are a series of small similar visualizations shown together that allow for a quick visual comparison. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://intridea.github.com/stately/flu.html"&gt;&lt;img src="http://f.cl.ly/items/333c3b1F3m1R2V2Q3M3i/Image%202013.02.18%2011:13:32%20AM.png" alt="Flu Graph"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We recently came across this &lt;a href="http://www.washingtonpost.com/wp-srv/special/nation/us-weekly-flu-report/index.html"&gt;great time-lapse from the Washington Post&lt;/a&gt; tracking flu levels by week for the 2012-2013 flu season and thought the data would make an excellent candidate for a small multiples graph using our open source font Stately and jQuery. &lt;/p&gt;

&lt;p&gt;We start by adding the Stately assets to our project and adding the CSS and markup to the page. The data for the Washington Post time-lapse came from the CDC, so we grabbed the data and formatted it into some JSON for our needs. &lt;/p&gt;

&lt;p&gt;First, we use jQuery to grab the JSON file using the $.getJSON method inside our Document ready function. &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$(document).ready(function() { 

    $.getJSON(&amp;quot;data.json&amp;quot;, function(data){ 

    }); 

}); 
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The first bit of data we need are the weeks so we know how many graphs we need. The relevant JSON looks like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;quot;weeks&amp;quot;:[&amp;quot;10/13/2012&amp;quot;,&amp;quot;10/20/2012&amp;quot;,&amp;quot;10/27/2012&amp;quot;,&amp;quot;11/3/2012&amp;quot;,&amp;quot;11/10/2012&amp;quot;,&amp;quot;11/17/2012&amp;quot;,&amp;quot;11/24/2012&amp;quot;,&amp;quot;12/1/2012&amp;quot;,&amp;quot;12/8/2012&amp;quot;,&amp;quot;12/15/2012&amp;quot;,&amp;quot;12/22/2012&amp;quot;,&amp;quot;12/29/2012&amp;quot;,&amp;quot;1/5/2013&amp;quot;,&amp;quot;1/12/2013&amp;quot;,&amp;quot;1/19/2013&amp;quot;,&amp;quot;1/26/2013&amp;quot;,&amp;quot;2/2/2013&amp;quot;,&amp;quot;2/9/2013&amp;quot;]
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;With the jQuery $.each method, we can iterate over the each of the weeks and clone the map for each week week of data and also add a label. &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$.getJSON(&amp;quot;data.json&amp;quot;, function(data){  
    $.each(data.weeks, function(i){
        $(&amp;#39;#week&amp;#39;).clone().attr( &amp;#39;id&amp;#39;, &amp;#39;week_&amp;#39; + i ).appendTo(&amp;#39;#container&amp;#39;);
        $(&amp;quot;#week_&amp;quot;+i+&amp;quot; h2&amp;quot;).html(this); 
    });
});
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Each state has data for every week to show it&amp;#39;s flu level for that week, here is the JSON data for Alabama:  &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{&amp;quot;state&amp;quot;:&amp;quot;Alabama&amp;quot;,&amp;quot;values&amp;quot;:[&amp;quot;minimal&amp;quot;,&amp;quot;minimal&amp;quot;,&amp;quot;minimal&amp;quot;,&amp;quot;minimal&amp;quot;,&amp;quot;minimal&amp;quot;,&amp;quot;minimal&amp;quot;,&amp;quot;low&amp;quot;,&amp;quot;high&amp;quot;,&amp;quot;high&amp;quot;,&amp;quot;high&amp;quot;,&amp;quot;high&amp;quot;,&amp;quot;high&amp;quot;,&amp;quot;high&amp;quot;,&amp;quot;high&amp;quot;,&amp;quot;high&amp;quot;,&amp;quot;high&amp;quot;,&amp;quot;high&amp;quot;,&amp;quot;moderate&amp;quot;]},
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;We need to look at each state and all of its values, so we use nested $.each methods to look at every state and iterate over its values for every week and add classes for every value. &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$.each(data.states,function(i){
    $.each(data.states[i].values,function(x){
        $(&amp;quot;#week_&amp;quot;+x+&amp;quot; li[data-state=&amp;#39;&amp;quot;+data.states[i].state+&amp;quot;&amp;#39;]&amp;quot;).addClass(&amp;quot;&amp;quot;+this+&amp;quot;&amp;quot;);            
    });
}); 
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The final jQuery looks like this&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$(document).ready(function() {

$.getJSON(&amp;quot;data.json&amp;quot;, function(data){  
    $.each(data.weeks, function(i){
        $(&amp;#39;#week&amp;#39;).clone().attr( &amp;#39;id&amp;#39;, &amp;#39;week_&amp;#39; + i ).appendTo(&amp;#39;#container&amp;#39;);
        $(&amp;quot;#week_&amp;quot;+i+&amp;quot; h2&amp;quot;).html(this); 
    });

    $.each(data.states,function(i){
        $.each(data.states[i].values,function(x){
            $(&amp;quot;#week_&amp;quot;+x+&amp;quot; li[data-state=&amp;#39;&amp;quot;+data.states[i].state+&amp;quot;&amp;#39;]&amp;quot;).addClass(&amp;quot;&amp;quot;+this+&amp;quot;&amp;quot;);            
        });
    }); 
});

});
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You can you view the &lt;a href="http://intridea.github.com/stately/flu.html"&gt;live example on the Stately GitHub page&lt;/a&gt;.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/intridea/~4/QnlRBHC4KfM" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://www.intridea.com">
    <author>
      <name>Ian Yang</name>
    </author>
    <id>tag:www.intridea.com,2013-03-20:630</id>
    <published>2013-03-20T15:55:00Z</published>
    <updated>2013-03-20T15:55:00Z</updated>
    <category term="rails" />
    <category term="rack" />
    <link rel="alternate" type="text/html" href="/blog/2013/3/20/rails-assets-prefix-may-disable-your-session" />
    <title>Rails Assets Prefix May Disable your Session</title>
    <content type="html">&lt;p&gt;I recently worked in a Rails project with &lt;a href="https://twitter.com/sporkd"&gt;Peter (@sporkd)&lt;/a&gt;. The
project is intended to be used as a sub-site, and should be served under
sub-URI.  After google, we ended up by setting &lt;code&gt;config.assets.prefix&lt;/code&gt; and
wrapped all routes in &lt;code&gt;scope&lt;/code&gt;. The solution is simple and worked well. But
soon, some weird bugs were found, and Peter was successfully isolated the
problem to session (see demo
&lt;a href="https://github.com/sporkd/asset_prefix_test"&gt;sporkd/asset_prefix_test&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;After several hours debugging, I finally found out the cause. To make a long
story short, the routes configured in &lt;code&gt;routes.rb&lt;/code&gt; should not start with
&lt;code&gt;config.assets.prefix&lt;/code&gt;, otherwise session save is skipped. The demo
&lt;code&gt;sporkd/asset_prefix_test&lt;/code&gt; can be fixed by simply setting
&lt;code&gt;config.assets.prefix&lt;/code&gt; to &lt;code&gt;/one/assets&lt;/code&gt;. You also get a bonus by setting a
unique prefix for assets, since it is easy to add expiration header for assets
in web server.&lt;/p&gt;

&lt;p&gt;If you are curious why &lt;code&gt;config.assets.prefix&lt;/code&gt; can affect session and want to
know some internals about the &lt;strong&gt;X-Cascade&lt;/strong&gt; header in Rails, please read on.&lt;/p&gt;

&lt;!-- more --&gt;

&lt;h2&gt;X-Cascade Header in Rails&lt;/h2&gt;

&lt;p&gt;I never knew &lt;code&gt;X-Cascade&lt;/code&gt; header in Rails before. @soulcutter has a
&lt;a href="http://teambandb.typepad.com/soultech/2011/10/x-cascade-header-in-rails.html"&gt;post&lt;/a&gt; that described its usage.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The basic idea is this: if you return a response from a controller with the
X-Cascade header set to &amp;quot;pass&amp;quot;, it indicates that your controller thinks
something else should handle the request. So rails (or is it rack? in any
case...) will continue down your routes looking for the next rule that
matches the request.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Indeed, &lt;code&gt;X-Cascade&lt;/code&gt; is not only restricted in controller, if a mounted engine
sets this header, Rails also continues down the routes searching.&lt;/p&gt;

&lt;p&gt;It is a feature of Rails. Since 3.2, Rails has moved the routes logic to
&lt;a href="https://github.com/rails/journey"&gt;journey&lt;/a&gt;. The &lt;code&gt;X-Cascade&lt;/code&gt; trick can be found in
&lt;a href="https://github.com/rails/journey/blob/master/lib/journey/router.rb#L69"&gt;journey/router.rb#L69&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Pay attention that, the rack &lt;code&gt;env&lt;/code&gt; object is shared when request is passed
on. So if &lt;code&gt;env&lt;/code&gt; is changed by former route, the latter one is affected. This
is the root cause of the weird session issue, because session is controlled by
&lt;code&gt;env[&amp;#39;rack.session.options&amp;#39;]&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;Sprockets, who skips the session&lt;/h2&gt;

&lt;p&gt;Sprockets, the gem for rails assets pipeline, mounts itself on
&lt;code&gt;config.assets.prefix&lt;/code&gt; and &lt;a href="https://github.com/rails/rails/blob/3-2-stable/actionpack/lib/sprockets/bootstrap.rb#L27"&gt;prepends&lt;/a&gt;
the route to Rails. So if user accesses a page which path starts with
&lt;code&gt;config.assets.prefix&lt;/code&gt;, sprockets always processes the request first.&lt;/p&gt;

&lt;p&gt;Maybe for performance, sprockets disables session save by changing
&lt;code&gt;env[&amp;#39;rack.session.options&amp;#39;]&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;env[&amp;#39;rack.session.options&amp;#39;] ||= {}
env[&amp;#39;rack.session.options&amp;#39;][:defer] = true
env[&amp;#39;rack.session.options&amp;#39;][:skip] = true
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The options are changed even when asset is not found. If so, sprockets
returns 404 and sets the header &lt;code&gt;X-Cascade&lt;/code&gt;. Then Rails passes the request to
controller, and correct page is rendered as expected. However, since the
session is already disabled by sprockets, the changed session in controller is
never saved.&lt;/p&gt;

&lt;p&gt;Because &lt;code&gt;env&lt;/code&gt; is a shared resource between routes when &lt;code&gt;X-Cascade&lt;/code&gt; is set, it
should not be changed unless it has to. When asset is not found, sprockets
should just pass though without touching &lt;code&gt;env&lt;/code&gt;, so I submit a
&lt;a href="https://github.com/sstephenson/sprockets/pull/421"&gt;PR&lt;/a&gt; for it.&lt;/p&gt;

&lt;h2&gt;How we Debug&lt;/h2&gt;

&lt;p&gt;Peter and I worked in different time zones. He first found the session issue
because several features related to session did not work. He made the demo
&lt;code&gt;sporkd/asset_prefix_test&lt;/code&gt; to isolate the issue using minimum code at the end
of the day in his time zone and left me the message.&lt;/p&gt;

&lt;p&gt;When my day started, I got the message and started debugging on session based on
the demo in
&lt;a href="https://github.com/doitian/asset_prefix_test/compare/asset-prefix-one-deep"&gt;doitian/asset_prefix_test&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Because session store class is customizable, I inherited one from default
cookie store and added breakpoints using &lt;a href="https://github.com/pry/pry"&gt;pry&lt;/a&gt;. Soon I found out that
&lt;code&gt;options[:skip]&lt;/code&gt; was &lt;code&gt;true&lt;/code&gt;, but I had no idea where it was set to
&lt;code&gt;true&lt;/code&gt;. Then I did a grep (using &lt;a href="https://github.com/ggreer/the_silver_searcher"&gt;ag&lt;/a&gt;) in all gems, and fortunately, only
sprockets has set this option to &lt;code&gt;true&lt;/code&gt;. The remaining work was just figuring
out why sprockets is invoked before controller action.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/intridea/~4/gKvC3FPBc28" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://www.intridea.com">
    <author>
      <name>Marc Garrett</name>
    </author>
    <id>tag:www.intridea.com,2013-02-27:628</id>
    <published>2013-02-27T12:00:00Z</published>
    <updated>2013-02-27T12:00:00Z</updated>
    <category term="announcements" />
    <category term="open source" />
    <link rel="alternate" type="text/html" href="/blog/2013/2/27/rebin" />
    <title>Introducing REBIN</title>
    <content type="html">&lt;p&gt;While building &lt;a href="http://www.surfiki.com/" title="Surfiki"&gt;Surfiki&lt;/a&gt;, our real-time data intelligence engine, we realized that the logic contained in any number of natural language processing (NLP) and machine learning (ML) binaries is locked up on a server, with no access to the web. What if we could pass input parameters to a binary and express the output as JSON via a RESTful endpoint?&lt;/p&gt;

&lt;p&gt;Say hello to &lt;strong&gt;&lt;a href="http://intridea.github.com/REBIN/" title="REBIN"&gt;REBIN&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;REBIN was created to facilitate a simple method of exposing CLI applications–regardless of their language–to the web. Much of our current NLP and ML research is written in C and C++ because these languages offer the advantages of speed and scale.&lt;/p&gt;

&lt;p&gt;But REBIN isn’t limited to compiled executables: as long as you can flag a script with &lt;code&gt;+x&lt;/code&gt; you’re good to go! This means it’s easy to expose your R, Python, and Ruby libraries to an instant web service. With REBIN, we’ve included a visual dashboard where you can define your endpoints and executables. It’s trivial to create an endpoint:.think of REBIN as an instant web service for any binary or script.&lt;/p&gt;

&lt;p&gt;REBIN is built on &lt;a href="http://nodejs.org/" title="node.js"&gt;node.js&lt;/a&gt; and &lt;a href="http://redis.io/" title="redis"&gt;redis&lt;/a&gt; by &lt;a href="http://www.intridea.com/about/team/anthony-nystrom" title="Anthony Nyström"&gt;Anthony Nyström&lt;/a&gt; and &lt;a href="http://www.intridea.com/about/team/jeff-baier" title="Jeff Baier"&gt;Jeff Baier&lt;/a&gt;. Hit us up on &lt;a href="https://twitter.com/intridea" title="Twitter"&gt;Twitter&lt;/a&gt; if you have questions or ideas, and grab the source on &lt;a href="http://intridea.github.com/REBIN/" title="Github"&gt;GitHub&lt;/a&gt; right now! &lt;/p&gt;

&lt;p&gt;&lt;a href="http://strataconf.com/strata2013/?cmp=ba-strata-stsc13-exhibitor-banner-125-125"&gt;
&lt;img src="http://cdn.oreillystatic.com/conferences/strata/2013/exhibiting/125x125.gif" width="125" height="125"  border="0"  alt="Strata Conference 2013"  /&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/intridea/~4/dTPd-SBXM1o" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://www.intridea.com">
    <author>
      <name>Michael Bleigh</name>
    </author>
    <id>tag:www.intridea.com,2013-02-25:627</id>
    <published>2013-02-25T09:30:00Z</published>
    <updated>2013-02-25T09:30:00Z</updated>
    <link rel="alternate" type="text/html" href="/blog/2013/2/25/remote-teams-aren-t-a-perk-or-a-fad-they-re-the-future-of-work" />
    <title>Remote teams aren't a perk or a fad, they're the future of work</title>
    <content type="html">&lt;p&gt;With Yahoo&amp;#39;s recent &lt;a href="http://mashable.com/2013/02/24/yahoo-remote-workers/"&gt;decision to disallow any and all remote work&lt;/a&gt; the remote work debate has reached a new fever pitch. &lt;a href="http://37signals.com/svn/posts/3453-no-more-remote-work-at-yahoo"&gt;DHH weighed in with his thoughts&lt;/a&gt; mostly around trust and what signal you&amp;#39;re sending your employees. To me the more troubling idea isn&amp;#39;t about what signal you&amp;#39;re sending to your employees but what path you&amp;#39;re setting for your business. Remote work isn&amp;#39;t a fad, it&amp;#39;s a requirement for the future of productive creative work.&lt;/p&gt;

&lt;p&gt;The oft-used phrase &amp;quot;software is eating the world&amp;quot; to me boils down to a core concept: software and automation are gradually (and in some cases quickly) replacing all forms of non-creative endeavor. That means that over time the number of &amp;quot;ass in a chair&amp;quot; jobs will dwindle to zero. Office environments are great for these types of jobs because the primary measure of output is &lt;strong&gt;time&lt;/strong&gt;. Put more time in, get more work output. When that&amp;#39;s the case, the best scenario is to optimize for maximum time output; work as long as possible with as few of breaks as possible.&lt;/p&gt;

&lt;p&gt;In a creative environment output has only a passing correlation with time spent. Creative work depends on being able to work at the often unexpected moment of inspiration, not on a set schedule. Sitting in an office for most of the day is hardly a guarantee of productivity and in fact can oftentimes work counter to it; creative energies are drained by monotony.&lt;/p&gt;

&lt;p&gt;Setting a company culture of &amp;quot;never work from home&amp;quot; is exactly equivalent setting a company culture of &amp;quot;be less creative.&amp;quot; If a developer at Yahoo is struck by inspiration at 10pm while at home, she will have to decide whether she should head back into the office to get some work done or &amp;quot;maybe I&amp;#39;ll just work on it tomorrow.&amp;quot; If she has been required to sit at a desk for nine hours that day already, the latter becomes even more likely. Of course, the next day the inspired moment has passed and work output is at perhaps 10-20% of the productivity our theoretical Yahoo would have the previous night.&lt;/p&gt;

&lt;p&gt;Over the next ten years most successful companies will work hard to create a culture that &lt;em&gt;can&lt;/em&gt; run entirely without an office, &lt;em&gt;even if&lt;/em&gt; there is still a company headquarters and &lt;em&gt;even if&lt;/em&gt; that headquarters has a number of people working in it every day. Those companies that cling to a traditional mandatory-office model will find themselves increasingly unable to land creative talent and increasingly outmaneuvered by the creative, flexible businesses with a truly distributed culture.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Intridea is a long-time proponent of distributed teams. We collectively save &lt;a href="http://yourtime.intridea.com/"&gt;more than 9,000 hours a year&lt;/a&gt; in commute time and have built a creative team spanning three continents. Also, &lt;a href="http://www.intridea.com/jobs"&gt;we&amp;#39;re hiring&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/intridea/~4/uNkssDZ1zO8" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://www.intridea.com">
    <author>
      <name>Tom Zeng</name>
    </author>
    <id>tag:www.intridea.com,2013-02-19:620</id>
    <published>2013-02-19T09:00:00Z</published>
    <updated>2013-02-19T09:00:00Z</updated>
    <category term="rails" />
    <category term="coffeescript" />
    <category term="Backbone" />
    <link rel="alternate" type="text/html" href="/blog/2013/2/19/client-side-mvc-with-backbone-coffeescript-and-rails" />
    <title>Client Side MVC with Backbone, CoffeeScript, and Rails</title>
    <content type="html">&lt;p&gt;As a backend developer, I always felt it&amp;#39;s tedious and time consuming to build frontend UI interfaces, and coding
interactive behaviors in JavaScript, jQuery, HTML and CSS with Rails MVC has not been one of my favorite things - until recently.&lt;/p&gt;

&lt;p&gt;I do a lot of R&amp;amp;D prototypes, which requires building new apps quickly, and often times the apps have to look very good
in order to generate that &amp;#39;wow factor&amp;#39;.  I can always get the job done by tweaking the JavaScript, HTML, and CSS here and there,
but it just hasn&amp;#39;t been nearly as satisfying an experience on the frontend as I&amp;#39;ve had with Rails on the backend. There just hasn&amp;#39;t
been a single &lt;code&gt;omg&lt;/code&gt;, &lt;code&gt;wow&lt;/code&gt;, &lt;code&gt;I can&amp;#39;t believe it can be done so elegantly&lt;/code&gt; moment on the frontend. Also, the constant &lt;code&gt;context switching&lt;/code&gt; between JavaScript and Ruby only makes things worse.&lt;/p&gt;

&lt;p&gt;This dilemma got alleviated for me last year when I found Sencha Architect, it allowed me to build frontend UI using
the GUI editor very quickly and intuitively, and code JavaScript in small fragments in the IDE.  By far, Sencha
Architect has been the most productive tool for me in terms of building frontend UI.  But there&amp;#39;s still this &lt;code&gt;context switching&lt;/code&gt;
problem. I just love Ruby so much to want anything to do with JavaScript (when possible).&lt;/p&gt;

&lt;p&gt;Enter &lt;code&gt;Backbone.js&lt;/code&gt;, &lt;code&gt;CoffeeScript&lt;/code&gt;, and &lt;code&gt;Twitter Bootstrap&lt;/code&gt;. (thought I&amp;#39;d never want to use the &amp;#39;Enter ...&amp;#39; expression, it
always annoyed the heck out of me :))&lt;/p&gt;

&lt;p&gt;This trio has been the closest to &lt;code&gt;the Holy Grail of the frontend UI development&lt;/code&gt; for me so far.&lt;/p&gt;

&lt;p&gt;Firstly, Backbone now provides structure to the front end apps with MVC (call it MV* if you prefer), making it a lot easier
to develop and manage large scale client side MVC apps in the browser.  Compared to the traditional server side MVC apps,
the front end MVC single page apps are more responsive, and behave more like desktop apps.  Then there is CoffeeScript
with its similarly elegant syntax to Ruby that makes the context switching problem disappear, and more importantly, it enforces
JavaScript best practices transparently (feel free to toss the JavaScript best practices and Nina books you bought).&lt;/p&gt;

&lt;p&gt;Last but not least, Twitter Bootstrap with its beautifully (in the eyes of this beholder) crafted HTML/CSS components
makes building awesome looking web apps a whole lot simpler.&lt;/p&gt;

&lt;p&gt;For Rails developers, the backend MVC experience can be mostly carried over to the front end. For single page apps,
server side MVC is largely not needed, especially the &lt;code&gt;V&lt;/code&gt;iew part.  And Rails is mostly an API server, which is just fine.&lt;/p&gt;

&lt;p&gt;For behavior-driven development, there is Jasmine. When used with CoffeeScript, it&amp;#39;s almost the same as RSpec.  And I also like
Sinon.js for subbing and mocking server responses.&lt;/p&gt;

&lt;p&gt;For client side MVC, Backbone is certainly not the only game in town, we have more than a few choices. Below are the brief
summaries of some popular ones, feel free to check them out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Backbone.js&lt;/code&gt; - Simple, Easy, Popular, Flexible, Extensible&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ember.js&lt;/code&gt; - Data &amp;amp; View Bindings, Computed Fields, Rails like&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Angular.js&lt;/code&gt; - Minimal Boilerplates, View Binding and DOM Abstraction, Extensible Markups&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Spine.js&lt;/code&gt; - Simple, MVC, CoffeeScript, Rails like&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Sencha&lt;/code&gt; - Full Featured, Comprehensive UI Components, Powerful Class System&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All above are great choices for client side MVC along with some others. &lt;strong&gt;I like Backbone for its simplicity, especially
when coupled with CoffeeScript, it&amp;#39;s a joy to use.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you are interested in learning Backbone, here are some basics and also check out the resources listed below:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Model&lt;/code&gt; - business domain models, key/value properties, events, persistence, validation&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Collection&lt;/code&gt; - list of models, provides convenience methods for sort, find, filter, iterator, CRUD, event handling, and etc&lt;/li&gt;
&lt;li&gt;&lt;code&gt;View&lt;/code&gt; - Rendering templates, handle app &amp;amp; DOM events&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Router&lt;/code&gt; - map routes(url patterns) to handlers&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Template&lt;/code&gt; - UI pages that get compiled and rendered to the browser&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And Backbone&amp;#39;s MV* compared to traditional MVC in the context of Rails apps&lt;/p&gt;

&lt;table style="width:100%; border:#888 solid 1px collapse; background-color: #eee"&gt;
    &lt;tr&gt;
        &lt;th&gt;&lt;b&gt;Backbone&lt;/b&gt;&lt;/th&gt;
        &lt;th&gt;&lt;b&gt;MVC&lt;/b&gt;&lt;/th&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;Model&lt;/td&gt;
        &lt;td&gt;Model&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;View Template(eco)&lt;/td&gt;
        &lt;td&gt;View(erb)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;View + Router&lt;/td&gt;
        &lt;td&gt;Controller&lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;&lt;br&gt;
Simplicity is an advantage of Backbone, making it easy to learn, and flexible and easy to extend. But for large scale
apps, this simplicity comes with a price - a lot of boilerplate code.&lt;/p&gt;

&lt;p&gt;To alleviate the boilerplate code problem, and also address some common issues facing large scale apps (memory
management, complex layout, and etc), several higher level frameworks are available, below are three of them, feel
free to check them out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Backbone.Marionett&lt;/code&gt; &lt;a href="http://marionettejs.com/"&gt;http://marionettejs.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Chaplin.js&lt;/code&gt; &lt;a href="http://chaplinjs.org/"&gt;http://chaplinjs.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Thorax&lt;/code&gt; (by Walmart Labs) &lt;a href="http://walmartlabs.github.com/thorax/"&gt;http://walmartlabs.github.com/thorax&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And I recently did a presentation at the &lt;strong&gt;DC Ruby User Group&lt;/strong&gt; Jan 10, 2013 meetup on &lt;a href="http://www.meetup.com/dcruby/events/48261512"&gt;developing client side MVC apps using Backbone,
CoffeeScript, and Rails&lt;/a&gt;, the slides can be found here &lt;a href="http://www.slideshare.net/tomzeng/intridea-backbonerailsdcrug"&gt;http://www.slideshare.net/tomzeng/intridea-backbonerailsdcrug&lt;/a&gt;
The sample app mentioned in the slides is available on Github at &lt;a href="https://github.com/tomz/todo-backbone"&gt;https://github.com/tomz/todo-backbone&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Resources&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Backbone.js &lt;a href="http://backbonejs.org/"&gt;http://backbonejs.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;CoffeeScript &lt;a href="http://coffeescript.org/"&gt;http://coffeescript.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Backbone on Rails &lt;a href="https://github.com/meleyal/backbone-on-rails"&gt;https://github.com/meleyal/backbone-on-rails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Jasmine &lt;a href="http://pivotal.github.com/jasmine/"&gt;http://pivotal.github.com/jasmine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Twitter Bootstrap &lt;a href="http://twitter.github.com/bootstrap/"&gt;http://twitter.github.com/bootstrap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Sinon.JS &lt;a href="http://sinonjs.org/"&gt;http://sinonjs.org&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;img src="http://feeds.feedburner.com/~r/intridea/~4/yR45kCGf5JU" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://www.intridea.com">
    <author>
      <name>Mike Tierney</name>
    </author>
    <id>tag:www.intridea.com,2013-02-13:624</id>
    <published>2013-02-13T10:05:00Z</published>
    <updated>2013-02-13T10:05:00Z</updated>
    <category term="ruby" />
    <category term="tips" />
    <category term="development" />
    <link rel="alternate" type="text/html" href="/blog/2013/2/13/using-storable-and-faker-to-create-mock-collections" />
    <title>Using Storable and Faker to Create Mock Collections</title>
    <content type="html">&lt;p&gt;As part of my work, I often create prototypes of Rails applications. My preferred tool for doing this is &lt;a href="http://get-serve.com"&gt;Serve&lt;/a&gt;. But as excellent as it is, it&amp;#39;s a very thin application with no persistence layer. To be honest, I don&amp;#39;t really want a persistence layer at this stage. But there are times when I want to be able to iterate over collections of objects the same way that I would in a Rails environment. Creating an index view of subscribers is a great example.&lt;/p&gt;

&lt;p&gt;Now, I &lt;em&gt;could&lt;/em&gt; just draft this all as html:&lt;/p&gt;

&lt;script src="https://gist.github.com/miketierney/4740851.js"&gt;&lt;/script&gt;

&lt;p&gt;...but that&amp;#39;s &lt;strong&gt;time consuming.&lt;/strong&gt; Especially if you have more than a few. Sometimes you want to stress test a larger data set (to show pagination, for example, or to work out JavaScript performance on larger data sets) or just give a better match to real data.&lt;/p&gt;

&lt;p&gt;To accomplish this, I use the &lt;a href="https://github.com/delano/storable/"&gt;Storable&lt;/a&gt; and &lt;a href="http://faker.rubyforge.org/"&gt;Faker&lt;/a&gt; gems.&lt;/p&gt;

&lt;h2&gt;Enter Storable&lt;/h2&gt;

&lt;p&gt;Serve provides a &lt;code&gt;views/view_helpers.rb&lt;/code&gt; file, which is where I will store my ruby code. Since Storable can read YAML files (and because I do often use fixture data in real Rails apps), I use YAML as my data store.&lt;/p&gt;

&lt;p&gt;Let&amp;#39;s set up the data store first, using a &lt;code&gt;Subscriber&lt;/code&gt; model. You can go about this one of two ways:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;build your models by hand (the same way you would create fixtures for RSpec), or&lt;/li&gt;
&lt;li&gt;randomly generate a set number of models.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You should choose your approach based on what your end goal is; since I&amp;#39;m just trying to quickly populate a lot of data, I&amp;#39;ll go with some &lt;strong&gt;random generation&lt;/strong&gt;.&lt;/p&gt;

&lt;script src="https://gist.github.com/miketierney/4740879.js"&gt;&lt;/script&gt;

&lt;h2&gt;Enter Faker&lt;/h2&gt;

&lt;p&gt;The ERB loop uses the Faker gem to create a first and last name, which it then uses to create the object&amp;#39;s key and describe the object&amp;#39;s attributes. This setup will create 10 of these objects. I could even use this later to seed fixture data for tests; in that case, I&amp;#39;d define those objects manually.&lt;/p&gt;

&lt;p&gt;Now that we have the data store in place, let&amp;#39;s do something with it: &lt;strong&gt;create some ruby objects:&lt;/strong&gt;&lt;/p&gt;

&lt;script src="https://gist.github.com/miketierney/4740904.js"&gt;&lt;/script&gt;

&lt;p&gt;This creates a class that we can marshal our data in to, enabling us to create our collection. The &lt;code&gt;field&lt;/code&gt; definitions default to being Strings, but (as you can see with &lt;code&gt;:id&lt;/code&gt;) you can specify a type using Ruby&amp;#39;s hash syntax.&lt;/p&gt;

&lt;h2&gt;Massage that fake data!&lt;/h2&gt;

&lt;p&gt;I&amp;#39;ve also added a &lt;code&gt;full_name&lt;/code&gt; method to the class, since I know that I&amp;#39;ll want to display a Subscriber&amp;#39;s full name in the &amp;quot;first_name last_name&amp;quot; pattern. You can define any number of methods that you want here.&lt;/p&gt;

&lt;p&gt;Next is a &lt;code&gt;self.bootstrap&lt;/code&gt; method, which accepts a file path as a parameter. This reads in the specified YAML file, processing it through ERB (the &lt;code&gt;load&lt;/code&gt; command with the ERB wrapper can be replaced by &lt;code&gt;load_file&lt;/code&gt; if you&amp;#39;re just using straight YAML), and then creates a new Subscriber instance for each object defined in the YAML file.&lt;/p&gt;

&lt;p&gt;Finally, there&amp;#39;s the &lt;code&gt;self.all&lt;/code&gt; method, which similarly to the Active Record finder method of the same name, without the database call. It will search the active Ruby object space and return all of the objects of the Subscriber class.&lt;/p&gt;

&lt;script src="https://gist.github.com/miketierney/4740896.js"&gt;&lt;/script&gt;

&lt;p&gt;This implementation of #all is a bit crude, but it works.&lt;/p&gt;

&lt;h2&gt;Voila&lt;/h2&gt;

&lt;p&gt;With all of that taken care of now, we can finally get back to our view and do this:&lt;/p&gt;

&lt;script src="https://gist.github.com/miketierney/4740886.js"&gt;&lt;/script&gt;

&lt;p&gt;...which is much easier to maintain, especially if that bit of HTML code is rapidly changing. Storing the data in the YAML file (especially inside of a &lt;strong&gt;loop&lt;/strong&gt;),  means that adding/removing/modifying the object&amp;#39;s attributes is much easier to do as well, and with a lot less typing.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/intridea/~4/gObYPBHwpOs" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://www.intridea.com">
    <author>
      <name>Marc Garrett</name>
    </author>
    <id>tag:www.intridea.com,2013-02-12:625</id>
    <published>2013-02-12T00:00:00Z</published>
    <updated>2013-02-12T00:00:00Z</updated>
    <category term="distributed" />
    <category term="team" />
    <category term="maps" />
    <category term="tilemill" />
    <category term="health" />
    <link rel="alternate" type="text/html" href="/blog/2013/2/12/introducing-yourtime-intridea" />
    <title>Introducing Yourtime.Intridea</title>
    <content type="html">&lt;p&gt;The average commuter spends eight days every year just traveling to and from work. Not us: every Intridean works from home. This means we saved an aggregate of 9,380 hours last year for &lt;a href="http://yourtime.intridea.com"&gt;the things we love&lt;/a&gt; instead of sitting in a car or a bus.&lt;/p&gt;
&lt;p&gt;We wondered how our peers spend their time, so we asked. We didn&amp;#8217;t know what to expect: skateboarding, civil war re-enactment, extreme knitting?&lt;/p&gt;
&lt;p&gt;As it turns out, 40% of Intrideans mentioned spending more time with family:  Ben got to see his son take his first steps. Linus started playing the piano again&amp;#8212;after a fifteen year hiatus. Kathleen, Chris, Batman, Javie, Mike, Serign, and Tom all run. We&amp;#8217;ve shared our stories in a mini-site built using maps from  &lt;a href="http://mapbox.com/tilemill/"&gt;Tilemill&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In the coming weeks, we&amp;#8217;ll dig deeper into the numbers. Yourtime is the first part of a platform we&amp;#8217;re building to measure our lives, our health, and our carbon footprint. We&amp;#8217;ll share our experiences as we grow, and soon you&amp;#8217;ll be able to add your own company&amp;#8217;s team to the board.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://yourtime.intridea.com"&gt;Come see how we spend our time&lt;/a&gt;. And if you&amp;#8217;d like to recapture eight to ten days of your life every single year, come tell us how you&amp;#8217;d like to spend your time.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/intridea/~4/nd1Rd8qnE9A" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://www.intridea.com">
    <author>
      <name>Anthony Nyström</name>
    </author>
    <id>tag:www.intridea.com,2013-02-07:623</id>
    <published>2013-02-07T19:35:00Z</published>
    <updated>2013-02-07T19:35:00Z</updated>
    <category term="android" />
    <category term="x86" />
    <category term="Emulator" />
    <link rel="alternate" type="text/html" href="/blog/2013/2/7/speed-up-your-android-dev-with-x86" />
    <title>Speed up your Android dev with x86 </title>
    <content type="html">&lt;p&gt;A significant portion of my development time is simply wasted, and as they say “Time is Money.”&lt;/p&gt;

&lt;p&gt;My Android development environment is Eclipse; not unlike most developers. However, I also find that debugging for Android on an AVD device is excruciating. The majority of my frustration comes from its lack of performance. And even after searching the web for tips and tricks to make AVD more responsive, I’m still twiddling my thumbs while the emulator tries to keep up with my requests.&lt;/p&gt;

&lt;p&gt;If we could put men on the Moon and return them safely to Earth with little more than a TI-86 and duct tape, then surely there is a way to make my quad-core computer execute code with speed comparable to that of a mobile phone.&lt;/p&gt;

&lt;p&gt;That was then…&lt;/p&gt;

&lt;p&gt;After a lot of searching (because, you know, I had a lot of time between breakpoints), I pieced together information and resources from various places to come up with a better debugging emulator.&lt;/p&gt;

&lt;p&gt;The solution that I found is an Android-x86 based system running inside of an Oracle VM VirtualBox. However, the key to this is Intel’s Houdini binary translator (libhoudini.so), which allows nearly-native execution of ARM code.&lt;/p&gt;

&lt;p&gt;After downloading and testing many Android-x86 ISO’s, I found one that has fully integrated support for ARM right out of the box. Another key feature is that it’s not just a live image, but an installation disk as well. And as a bonus, it supports the Android market.&lt;/p&gt;

&lt;p&gt;While I haven’t had an issue with compatibility yet, it is important that all final testing be done on AVD or a physical device before delivery.&lt;/p&gt;

&lt;p&gt;The current version is based on Android 4.0.4 (Ice Cream Sandwich).&lt;/p&gt;

&lt;p&gt;This first post is quite simple and we decided to just provide the iso already setup and ready to go :) Next week, I&amp;#39;ll post how to do it from scratch!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://goo.gl/oZ4kO"&gt;http://goo.gl/oZ4kO&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/intridea/~4/Y9k5KZj0spg" height="1" width="1"/&gt;</content>
  </entry>
</feed>
