Intridea BlogFeed_icon

August 30, 2010

announcement launch

FlockFeeds Launches From Node Knockout

_placeholder_profile

by Intridea

This past weekend was the first Node Knockout, a 48-hour development competition utilizing Node.js. Always up for exploring new technologies, Intridea was represented at the competition by Michael Bleigh, Sean Soper, and Jerry Cheung. 48 hours later, FlockFeeds has launched!

FlockFeed Home

FlockFeeds is a simple tool that will turn your Twitter stream into a news feed. That means that you can simply add the FlockFeed to your RSS reader (such as Google Reader) and FlockFeeds will automatically fetch all of the links that your Twitter network posts, do its best to understand the content and parse out the important stuff, and put it into an easy-to-consume feed for you.

The application is powered by Node.js, Express.js, MongoDB, and Readability.js. Look for a more in-depth technical post in the near future detailing the participants' experiences developing in Node.

Not only did FlockFeeds launch, but we've decided to open up the source code to the public. Feel free to check out the code on GitHub. So give FlockFeeds a try, and don't forget to vote for it in the competition! Voting closes Friday, September 3.

Comment | 

August 24, 2010

heroku node npm javascript

Using NPM with Heroku Node.js

Mini

by Michael Bleigh

The Node Knockout is this weekend right now and I've been trying to teach myself Node and get ready in a variety of ways. One of the most important (and least clear) aspects of preparation was figuring out how to properly vendor the latest Node libraries for use in Heroku. I've got NPM up and running locally, but as of its latest release it has no built-in support for vendoring. Here's how I managed.

Updated Method

Since this post, the maintainers of NPM have released an updated version with a new command: bundle. Here's how to use it (make sure you have NPM >= 0.1.27 for this to work).

First, create a package.json file in your project's root directory, and populate it with dependencies like so:

{
  "name":"yourproject",
  "version":"0.0.1",
  "dependencies":{
    "express":"1.0.0rc2",
    "ejs":""
  }
}

If you don't need a specific version, just specify a blank string. Now that you've created a package.json, you need to run bundle:

npm bundle ./vendor

This will bundle the dependencies specified into the vendor directory of your project. Now you're almost done! The last step is to add the vendor directory to your load paths:

require.paths.unshift('./vendor')

That's it! You can now require the dependencies you've specified like you would if NPM were installed normally (i.e. without special functions or directory specifiers). Happy Node-ing!

Old Method

Warning: I am not an experienced Node developer and I may be doing this completely wrong. However, I am happy to publish this anyway with the hope that more learned Javascripters will correct my naive ways.

NPM's Command Options

NPM provides a few helpful command options that let you specify the directory of installation when you install a library. By using the --root and --binroot options you can use a folder inside your local project instead of the default NPM root. For example, in my project I created a vendor folder and then, to install Express, specified:

npm install express --binroot ./vendor --root ./vendor

Now while this seems like it might do exactly what we want, it's not quite perfect. Rather than install everything in vendor, it installs the important stuff in vendor/.npm/.cache. This isn't the end of the world but can make for some pretty ugly require statements.

The Require Blues

So now you've got your packages all nice and installed inside your project directory (probably a lot of support files that you don't need, as well, but the Node slugs on Heroku tend to be small anyway so no biggie). Now you need to include them in your application. To do this, I wrote a quick function, vrequire that adds the necessary load path and then requires the library all at once:

vrequire = function(lib) { 
  require.paths.unshift("vendor/.npm/" + lib + "/active/package/lib");
  return require(lib); 
}

Now if I call vrequire("express") it will load up from my vendored library. If I deploy my app to Heroku, it's able to find everything it needs and (cross your fingers) launch and work correctly!

Hopefully some people find this little guide useful, and I look forward to someone pointing me to the "real" way to do this stuff! If you want to poke around the exploratory code I've been creating to play with Node, you can find it on GitHub (but don't expect much!).

Comment | 

August 23, 2010

bundler ruby gems

Fixing Common Bundler Problems

Mini

by Jerry Cheung

When bundler first came out, I really wanted to like it. It promised a clean way to declare dependencies for your application in a single and definitive place, regardless of what kind of box your app was running on. Unfortunately, bundler has not lived up to the hype, and I've had plenty of headaches from bundler problems. Read on for a list of tips I've pulled together to save you some headache.

Ensure your local bundler is the same version as your server

Different versions of bundler may act differently:

bundle --version  # on your local machine and your server
sudo gem install bundler --version="0.9.26"

Explicitly specify gem versions

Did you know in HTTParty 0.4.5, there is no 'parsed_response' method on a response object? Well, neither did I when it worked fine on my local laptop (0.6.1), but not on the server (0.4.5)

gem "httparty"  # bad times if your system gem is out of date...
gem "httparty", "~> 0.6.1"  # better, but...
gem "httparty", "0.6.1"     # ...why not just specify the version everyone should use?

Check that you are actually using gems installed by bundler

Once in a while, bundler will report success on install, but you'll get the wrong gems loaded in your load path. Grep your load path to double check libraries you're having trouble with:

# in script/console
>> $:.grep /http/
=> ["/Users/jch/.bundle/ruby/1.8/gems/httparty-0.6.1/lib"]

Gemfile conditionals

bundler allows you to specify groups so only gems you need in one environment are loaded:

# we don't call the group :test because we don't want them auto-required
group :test do
  gem 'database_cleaner', '~> 0.5.0'
  gem 'rspec'
  gem 'rspec-rails', '~> 1.3.2', :require => 'spec/rails'
end

All gems you specify in your Gemfile WILL be installed regardless of what RAILS_ENV you're currently on. There's a very deceptively named option called --without that does not work as you would expect:

# weird, but this will install gems in group test
bundle install --without=test

This can turn out to be a disaster if your linux production environment tries to install a OSX specific gem with native extensions that you use for development. An ugly fix in the meantime is to add conditionals that look for an environment variable:

if ['test', 'cucumber'].include?(ENV['RAILS_ENV'])
  group :test do
    # your gems
  end
end

Update your capistrano

Don't forget to bundle when you deploy:

after  "deploy:update_code", "deploy:bundle"
namespace :deploy do
  desc "Freeze dependencies"
  task :bundle, :roles => :app do
    run "cd #{release_path} && bundle install --relock --without=test"
  end
end

NameErrors and autoloading issues

For some gems, bundler will not autoload properly. If you start getting NameErrors or LoadErrors for a gem, read this issue. The fix is to skip the require in your Gemfile and manually do the require in your environment.rb:

# Gemfile
gem 'misbehaving_gem', :require_as => []

# environment.rb
Rails::Initializer.run do |config|
  # ...
  config.gem 'misbehaving_gem'
  # ...
end

Nuke .bundle

When all else fails, and you've pulled out what precious little hair you have left:

rm -rf RAILS_ROOT/.bundle      # removes gems for this project
rm -rf ~/.bundle               # removes cached gems for your current user
rm -rf RAILS_ROOT/Gemfile.lock # lets you do a fresh 'bundle install'

# do a fresh bundle install
bundle install

Other

Bundler is in its infancy, and it continues to get better with each release, so many of these issues might not exist in the near future. In the meantime, I hope this list will save you some time with bundler related headaches. Let me know in the comments if you've encountered other tips for resolving these problems.

Comment | 

August 18, 2010

facebook

Facebook Places: The Third Place is Here

Mini

by Jonathan Nelson

Today Facebook announced “Facebook Places” or “The Third Place,” a new feature that allows its 500MM users to check into a location just about anywhere.

Starting today, you can immediately tell people about your favorite spot with Facebook Places. You can share where you are and the friends you’re with in real time from your mobile device.

Facebook Places

Highlights

At each location, Places lets you see your friends and other Facebook members (even if they’re not your friends), who are nearby, a feature called “People Here Now.”

Friends

You can tag your friends when you check in to a place. You have to allow proxy check-ins to have them post to your profile, but they’ll still post on the Place page.

Facebook Places tagging friends

What does this mean for businesses?

  • Share where you are
  • See where your friends are
  • Find new places to go
  • Will be integrated into Facebook Pages
  • Reporting Places (Report, Abusive, Permanently closed, Duplicate)

Facebook Places reporting

Mobile Device Support

  • New Facebook iPhone app with Facebook Places support is coming tonight
  • Android, Blackberry and all other Facebook app enabled phones will be Places enabled in the coming months
  • Places should work fine on any modern mobile browser

Facebook Places for iPhone

Developers and API

  • Write & Search API are in private beta

Facebook Places development API

Places Partners

Gowalla and Facebook Places

  • Gowalla, Foursquare, Brightkite, Booyah, Yelp and more will integrate it instead of getting killed by the 500 pound gorilla
  • Foursquare is a “partner”, but has nothing to announce concerning integration. “This basically validates that we’re on to something with check-ins”, says Holger Luedorft from Foursquare. Foursquare says they’ll continue to work on their platform and they look forward to leveraging the Facebook Places API.
  • Yelp and Keith Lee from Booyah, made a new app in three weeks using the Places API, called InCrowd. It will be available for the iPhone within the next few weeks.

General Usage

  • Places will be U.S. only for now. Facebook will be rolling out slowly – starting tomorrow.

Reactions and Privacy

  • As expected, the ACLU has its hands all over Facebook Pages concerning privacy implications.
  • Default for check-ins is “friends-only.” You can remove any tag or check-in. You can opt out of being tagged in others’ check-ins.

Facebook Places privacy and security

Demo

Your thoughts

How do you think Places will be received by the rest of the world? Will you stop using Foursquare or GoWalla in favor of Facebook Places? Let us know in the comments.

Updates

Stay tuned, we’ll keep you posted with any new updates to Facebook Places right here.

Comment | 

Intridea at Lonestar Ruby Conference

Mini

by Renae Bair

For the third straight year in a row, senior-level Intrideans will be at the Lonestar Ruby Conference, on Thursday, August 26th, teaching students about Ruby. Students attending the Ruby Intrigue class will work with our Director of Mobile Development, Brendan Lim, our Director of Development, Adam Bair, and our Director of Research and Development, Pradeep Elankumaran.

In a small class setting, students will work on writing a web crawler, an Asteroids clone, and an SMS server. The instructors will also discuss coding practices and methodologies along the way. In keeping with tradition, we have three instructors to ensure a laid-back and collaborative atmosphere. Students will walk away with three different hand-crafted applications, an overwhelming feeling of accomplishment, and a spiffy t-shirt designed by our creative mastermind, David Potsiadlo.

Lonestar Ruby Conference is part of the Lonestar Ruby Foundation, which aims to educate the public about the Ruby Language. The conference, held in Austin, Texas, is in its fourth year and continues to boast a strong lineup of presenters and teachers. This year's lineup includes Blake Mizerany, the creator of Sinatra, Tom Preston-Wernor, co-founder of Github, Gregg Pollack, James Edward Gray II, and many other prominent members of our community.

Registration is still open for the conference and for the Ruby Intrigue class. If you're local to the area, or if you want to spend some time learning about Ruby in the "live music capital of the world", be sure to sign up today!

Comment | 

August 12, 2010

gem twitter open source

New Twitter Button Gem from Intridea

Mini

by Jonathan Nelson

This week Twitter launched the official “Tweet Button,” a button for website owners to count RT’s and let readers easily share content. Mashable was first to report on this shiny new button, but we’re the first to release a tweet-button gem for your next project.

Introducing tweet-button

A new Ruby on Rails gem/plugin to generate shiny new Twitter buttons.

image provided via Mashable.com

Usage

First, include the TweetButton module into your application helper. After that, using it is as simple as adding a single method call to your views:

<%= tweet_button %>

Bam. Done. You’ll have a sweet lookin’ Tweet button all up in your view.

Of course, you can customize it. The method takes a few options. Any default can be overridden universally.

:url - The URL to share; the default is the current URL.
:text - The text that will appear in the tweet; the default is "Check this out!"
:via - The attribution. Defaults to "tweetbutton", but you should change that.
:lang - Set the language for the tweet (no default).
:related - Related Twitter accounts (no default).
:count - The tweet count box position (values can be "none", "horizontal", or "vertical"; default is "vertical").

So, if you wanted to tweet about Hacker News, attribute it to Peter Cooper, and add some custom text, all from a tweet button with a horizontal counter, you’d do this:

<%= tweet_button(:via => "peterc", :url => "http://news.ycombinator.com", :text => "AWESOME.")

Simple enough, eh? Also, this method call will include the Twitter JavaScript into the page (it only does it once, even if you have multiple buttons on the page). To put this wherever you’d like (i.e., your header), then use the twitter_widgets_js_tag method. If you call this method, it will place the tag wherever you call it from (and only place it there; subsequent calls do nothing).

The gem also supports the custom Twitter share links. To generate one, use the custom_tweet_button (aliased to custom_tweet_link also) method:

<%= custom_tweet_button %>

This will generate a link that will link to the share page with the same default options as the standard Tweet Button generator. You can customize your custom link with text as the first argument, the same options as tweet_button (with the exception of the count parameter, which will be ignored) as the second, and HTML options as a third argument. For example:

<%= custom_tweet_button('Tweet it!', {:via => "myself"}, {:class => "tweet-sharey-thing"})

Setting universal defaults

You can set a new default for any option by setting default_tweet_button_options in your application helper. For example:

module ApplicationHelper
  include TweetButton

  TweetButton.default_tweet_button_options = {:via => "myself"}
end

Only the options you specify will be overridden; so if you only specify a new default +:via+ (which you should definitely do), then the other defaults will stay intact.

Coming Soon

Tweet Buttons can also live in an iframe, so we’ll probably be adding that very soon!

Plan on using this gem?

If you plan on using this gem, please let us know in the comments section! We’d love to check it out :-)

Roll the credits!

This awesome sauce gem was written by our very own hackstar Jeremy McAnally. You can follow his tweets here and his Github here.

Comment | 

August 3, 2010

mashable android

Mashable Now Available for Android

Mini

by Brendan Lim

Mashable is one of the world's largest blogs focused exclusively on Web 2.0 and Social Media news, with more than 15 million monthly pageviews. We were very excited to develop an application just for them, specific to the Android platform. Not too long ago, we announced that we developed their iPad application. Now, we're excited to announce that Mashable! for Android (mobile specific link) is available in the Android Marketplace.

The Android platform is such a great platform to develop for. There are unique challenges that make development more exciting, such as different hardware and software versions to support. What is most exciting is the end result: a clean and intuitive application that offers the best way for any Android user to read the latest news from Mashable.

Reading the latest news from Mashable is just one thing you can do with the application. With Mashable! for Android, you can also share what you're reading in several different ways. You can e-mail the article to a friend, share it on Twitter or Facebook, and you can also save it to Read Later on Instapaper. You can read comments for each article and even join the discussion by posting your own comments.

Mashable! for Android is now available for free in the Android Marketplace. Also, you can expect some exciting new features for Mashable! for Android soon. There are some great new features that are in the works. Intridea offers services for application development on all major mobile platforms, which include iPad, iPhone, Android, BlackBerry, and Palm webOS. If you need help with your mobile application feel free to contact us for a quote.

You can get the Mashable! for Android application by opening up your Barcode Scanner app, scanning the QR code to the right, then clicking on Install.
Comment | 

July 30, 2010

insider ping yu

Intridea Insider: Ping Yu

Mini

by Renae Bair

It's a typical love story. Boy becomes a developer. Boy meets Java. Boy spends years with Java in what he believes to be a righteous and dignified relationship. He hears whispers of a better language from far away lands, and her name is Ruby. Of course, the loyal and virtuous developer dismisses the rumors as unscrupulous stories, and he clings tightly to his superior languages and the comfort they bring him. But like all truly good languages, Ruby finds her way to the developer's heart, and she makes herself at home.

This week in the Intridea Insider, meet Ping Yu, Director of Asian Operations at Intridea, former Java and C++ developer, and veteran Ruby and Ruby on Rails evangelist.

Ping received a Master's degree in Computer Science from the University of Maryland, and another Master's degree in Electrical Engineering from The Catholic University of America. He spent his undergraduate time studying Computer Science from a prestigious university in China, where he grew up. "A lot of my friends were applying to graduate schools in the United States. I wasn't sure what to expect, but I decided to go along with it and apply too." After finishing his degree programs in the states, he joined a Maryland fiber optical company during its startup phase, doing Java, C++ and a lot of J2EE. After surviving a tough round of layoffs, he moved to a network security company, hacking linux kernel.

When Ping started college in China, he dreamed of being an architect, but a degree in Architecture was not in the cards: "You know, in China things are different. You have to get into the hottest field, and the hottest field isn't necessarily the one you like." Although Ping was exceptionally talented in programming and did well in his CS program, he always felt like he had to force himself to program.

His experience at graduate school in the states was more positive and helped to shape his love for programming; when he met Dave Naffis and Pradeep Elankumaran of Intridea years later, he was enticed to learn Ruby. "Dave and Pradeep loved Ruby. But when I picked up Ruby for the first time I did not like it, since I was so used to Java and C++. Ruby was too tricky for me, especially Rails." His first encounter with Ruby wasn't love at first sight, but the fling continued. "But once I understood the language and the problems it was trying to solve, I was in love. Now I can never go back to Java or C++. The languages put too much useless burden on the programmer. They are not as fun to work with as Ruby."

Ping came on board with Intridea during our infancy. He was employee #4, and has been part of the vision and culture of our company from the beginning. He has helped to grow Intridea from a group of four guys working at their dining room tables, to a company of 40+ Ruby and Rails developers and designers that span continents and multiple time zones. His work as Director of Asian Operations aims to bridge our Asian team of Rubyists with our centralized team in the states. "I believe in helping to extend Intridea into China. There is so much talent in China, it feels like a natural thing to do. Intridea has a culture of quality, and I want to bring that to these developers. They love Ruby, and they have so much energy."

Although Ping spent several years living in the MD/DC area, he now lives with his lovely wife, Maggie, in Minneapolis. He met Maggie in grad school, and she later went on to Georgetown Law School before becoming an attorney and accepting a job in Minnesota. They share their home with their beloved golden doodle, Jojo (a golden retriever and poodle mix). He prefers the warmth of the DC area to the numbing temperatures and tempestuous winters of Minneapolis, and mentions that he hopes to move back in the next few years.

Ping doesn't feel any loss over his break-up with Java or C++. A lot of his friends are still using Java and C++ though, so I asked if he gets into language wars with them, and he answered with distinct clarity: "There is no need to argue. They know Ruby is better." Joining Intridea and learning Ruby sparked his passion for programming, and he is confident in the decisions he has made. "The the thing that matters is whether you choose life or life chooses you. I am glad I chose Intridea."

This post is part of a weekly series, called "Intridea Insider"

Comment | 

Talkin' About Upgrading to Rails 3

Mini

by Michael Bleigh

This year at OSCON I had the pleasure of giving a talk entitled Upgrading to Rails 3. The talk served as a high level overview of the new features of Rails 3 that are both a boon for developers and something to watch out for when trying to upgrade your Rails 2.3 applications. I followed it up with a livecoding session in which I took a to-do application (built mostly by Intridea’s own Jeremy McAnally) from Rails 2.3 to Rails 3 in the space of just over 10 minutes.

The slides and video are available at the end of the post, and if you’re interested in really diving in-depth into the Rails 3 upgrade process, I highly recommend Jeremy McAnally’s Rails Upgrade Handbook as an indispensable tool. With the release of Rails 3 looming ever nearer, the timing couldn’t be better for you to dive in and learn what it will take to get your applications running on the next generation of Rails!

The above slides are fairly self-sufficient and give a high level overview of some of the changes Rails 3 brings and some of the tools and tricks to look for while upgrading. Below you’ll find the screencast I recorded livecoding (apologies for the “shouting” tone of voice, conference-voice doesn’t translate perfectly to screencast-voice) a transition from Rails 2.3 to Rails 3 on stage during the last 15 minutes of my talk.

Comment | 

A To-Go Plate of Ruby Midwest

Mini

by Michael Bleigh

This past weekend Rubyists from all over descended upon Kansas City (my hometown and new place of residence) for the Ruby Midwest conference. Headlined with keynotes from Chris Wanstrath (of GitHub fame) and Yehuda Katz (of Merb and now Rails fame), more than 150 Rubyists attended the single-track conference at the UMKC campus. Intridea was represented by four members, one talk, and by sponsoring a Kansas City Barbecue dinner for the first night of the conference.

Photo courtesy of peterpunk777’s Flickr stream of the event.

The OMGWTFBBQ ran smoothly overall and gave more than 120 of the attendees a chance to taste some of the best of Kansas City Barbecue from Jack Stack. In addition to some belt-loosening food, we held some lightning talks that included a particularly memorable talk by Jeremy Evans about “Singleton Classes of Singleton Classes.”

My talk focused on the emerging standards for automatic web app interoperation via the OStatus protocol (and through it the PubSubHubbub, Webfinger, Salmon, and ActivityStreams protocols). While the talk was high level, hopefully I sparked some interest in the attendees in learning more about these standards and possibly implementing them in their own applications in the near future.

We had a great time at the event and, judging from Intridea’s TweetSentiments Analysis, a lot of other people had a great time too.

Comment | 

July 16, 2010

insider raymond law

Intridea Insider: Raymond Law

Mini

by Renae Bair

He is a moderately reformed NBA fanatic and at one point knew the names of players on every NBA team. He is a serious coder, and spent six years working on battlefield simulations. You don't want to challenge him to any duels involving Physics. Or code quality. This week, meet our Senior Software Engineer, Raymond Law.

Ray taught himself Ruby and Ruby on Rails, but not before spending years programming in Pascal, C, and C++ and teaching himself PHP. His first language was Pascal, which he learned in high school while living in Hong Kong in the early 1990's. "I started programming in Pascal back in school in Hong Kong in 1992 because it was the language used in the public exams. And since I had a functional programming background, it was easy for me to switch from Pascal to C first, and then to C++."

Ray's family left Hong Kong to come to the United States when he was still in high school. He remembers struggling with leaving his life and his friends behind in Hong Kong; "I was just very sad to leave so much behind. I was on the right path to get in to a university in Hong Kong, so I didn't understand why my parents wanted to move." He later appreciated that his parents wanted to move for the potential of a better life for their family; and since he had a really good English instructor in Hong Kong, he already had a good foundation to start his new life in the states.

Armed with a love for both physics and computers, he entered college at Virginia Tech with the intention of majoring in Physics. "I liked Physics because I had a very good instructor in Hong Kong. I would tell people that the harder the exams were, the happier I was; I like the challenges of tests and applying my knowledge." He started out his first semester by taking an advanced level Physics class; "I got a bad grade on the first exam, but then I worked incredibly hard to get the highest grade on the final exam." He talks proudly about achieving that goal; "My professor personally told me: 'This is the stack of exam papers sorted by scores, and yours is on top.' I will never forget that moment."

Despite his enjoyment in studying Physics, Ray later changed his major to Computer Engineering and minored in Computer Science and Mathematics and finished college in only 3 1/2 years. He explains the difference between Computer Engineering and Computer Science: "Engineering is about finding solutions to problems. CS is more focused on theoretical ideas and algorithms." He has found his background in Engineering to be incredibly useful in real world situations. "Currently, I'm working on migrating a large amount of assets from a server-based file system to Amazon S3. It's a very involved integration but I love it because I'm solving a real problem. My engineering skills are very useful in this situation." He believes in taking small steps when he's programming, and he is extremely methodical; "Change one variable at a time and look at the results. Then you can have meaningful comparisons. As programmers, a lot of times we are inclined to implement the whole solution and hope that it works. But it rarely works that way."

For similar reasons, Ray believes strongly in testing and behavior-driven-development. However, he approaches testing with flexibility, based on the needs and requests of the end clients. "Realistically, some clients don't understand the value of testing and it can be hard to convince them of the advantages. I try to explain to clients that if we are allowed the time to write good tests, it will result in better quality code and it will help them down the road."

Ray really understands the dynamic of the client relationship. He talked with me about the importance of understanding where a client is coming from and noted that oftentimes the client knows what they want, but they don't have the technical knowledge to understand the process that must be taken to bring about their desired results. "It's important to explain our technology decisions and talk them through how the code works if that is what they need. Clients hire us because they don't know how to do this themselves. It's the same reason that I hire someone to do my landscaping; it's not that I'm ignorant and couldn't learn to do it myself, but I am using the time I save to do other things that I am good at. So when I respond to clients, I try to be specific and encouraging so that they understand that we are here to help them, not laugh at them. I think that is an important understanding for us to have."

Perhaps it's Ray's gentle and understanding nature, combined with his explicitly genius talent for problem solving that makes him such a great developer. Whatever it is, we are fortunate to have him on our team. Ray enjoys working with us too: "I am just enjoying my life - I have a great family of my own, and a great job at Intridea where people value each other." Ray lives in Virgnia with his wife Vinly, whom he met his freshman year at Virginia Tech. Vinly majored in Architecture and found a great firm to work with after graduating. They have a baby girl, Chloe, whom they adore completely. Ray says, "Chloe is the best thing. Nothing compares to Chloe smiling at me."

Ray works from his home office, and enjoys the flexibility that being part of a distributed team affords him. "I work very effectively at night. When you work in the office, there are many distractions. So I enjoy working from home so that I can arrange my schedule in order to do my best work at nighttime. I often work until 4 or 5 am." Before joining the Intridea team, Ray worked as a DOD contractor on battlefield simulation software for TARDEC, the U.S. Army's Tank and Automotive Research, Development and Engineering Center. He spent six years with the DCS Corporation before he met Dave, Senior Partner at Intridea. By this time, Ray had already taught himself PHP, Ruby and Rails and was using Rails for several personal projects, including a list application and a small app for locating local badminton playing locations. On learning Rails, he reflects, "Learning Rails was so intuitive to me because everything seemed to make perfect sense. Stuff like convention over configuration and MVC just made sense to me. I think Rails understands the pains of developers and tries to ease or eliminate the pains so we can focus on application logic."

Thinking back to his old life in Hong Kong, I ask Ray if he has any lingering regrets now about leaving his life behind and moving to the states: "Nobody knows what would have happened if I hadn't moved. So I am not looking backwards." In the end, it all worked out - a brilliant and lovely wife, adorable baby daughter, his parents and brother living nearby in Virginia, working for a company he believes in and programming in a language that he loves.

美好人生 "It's a wonderful life."

This post is part of a weekly series, called "Intridea Insider"

Comment | 

Car Finder 2.0 Now Available for iPhone

Mini

by Brendan Lim

If you have both a car and an iPhone, then you might be as excited as we are that Car Finder 2.0 is now available in the App Store! Car Finder 2.0 is chock-full of additional features and makes finding your car easier and more accurate than ever. One of the best new features of Car Finder 2.0 is Parking Meter Notification. When you mark the location of your car, you have the choice of setting a time for when your parking meter will expire and then be alerted when your parking meter is about to run out. Also, if you don't want to use the augmented reality view to find your car, there's now an option to just view your car on a regular map.



For those of you who haven't heard of Car Finder, it is a super smart mobile app that uses augmented reality to help you find where you parked your car. Car Finder has been featured in many publications such as, Gizmodo, Consumer Reports, Wired Magazine, Cult of Mac, and the The Unofficial Apple Weblog. Just last week, Consumer Reports named Car Finder one of the must have smart phone applications for smart drivers.



Car Finder relies on the GPS and compass in your iPhone to accurately mark the location of your vehicle. You can see the accuracy of your GPS signal in real time and you will be alerted when you are trying to set the location of your car when the accuracy is not optimal. We use augmented reality to overlay real-time information about where your car is parked while you look at the world around you with your iPhone.

Car Finder 2.0 is available now in the App Store for $0.99. Car Finder was built by the talented mobile dev team at Intridea. Intridea offers services for application development on all major mobile platforms, including iPhone, IPad, Android, BlackBerry, and webOS. If you need your mobile idea brought to life, contact us for a quote.

Comment | 

Stop The Hate: Obj-C Deserves Your Love

Mini

by Sean Soper

My first foray into Objective-C was, for lack of a better description, a sink-or-swim situation. I was working for a previous employer and our lead iPhone developer had just been laid off; my old boss was in my office the next day asking me how quickly I could "get up to speed". "You know Ruby", he said, "How difficult could it be?" It was time to get some books.

The first point I would like to raise is that Objective-C, while itself quite elegant (at least in comparison to its namesake), is fairly useless on the Mac platform without the Cocoa framework. And it is this framework that I think a lot of Rubyists get hung up on. The other big sticking point is manual memory management through the use of retain and release.

Cocoa's roots start all the way back in the 1980s with the NeXTSTEP operating system which tagged along with Steve Jobs when he was tapped to lead Apple again in 1996. This is why Cocoa's core classes, such as NSArray and NSString, all begin with 'NS'. The naming scheme is a holdover from that earlier OS and while those two extra characters may not seem like much hassle, to a Rubyist they represent an unnecessary burden of verbosity. In addition, Cocoa makes extensive use of the delegate pattern, something that is rarely seen or needed in Ruby and can make it difficult to trace an execution path for those unfamiliar with the concept. One of the limitations of Objective-C, the inability to create difficulty in creating a function with a variable length argument list, is commonly resolved through the use of the poorly named hash userInfo, which frequently appears in method definitions without any connotation as to its purpose. And lest we forget those wonderfully verbose method names, I think even the most die-hard and grizzled veteran of Objective-C would agree that NSString's stringByReplacingOccurrencesOfString, could have been better-named.

Rubyists are proud of that fact that they don't have to worry about memory management. The more knowledgeable Rubyists could tell you that the garbage collector, or GC, works by continually scanning objects in memory once a process has accumulated eight megabytes worth, checking to see if there are any pointers to those objects and then releasing them back to the OS if they do not. But most Rubyists would refuse to venture any farther down that dark path of memory management out of a simple need to retain their sanity. Indeed, for a good few weeks I struggled with this concept until my fellow iPhone student Paul Barry introduced me to a book that would change my outlook. Titled "Learn Objective-C on the Mac", it proved to be a treasure trove of information on object allocation. Specifically, chapter nine, which dealt with memory management, made it crystal clear what was going on underneath the hood when an object was created, and thus retained, and when it was released. The concept itself is simple: retaining an object increases its "retain count" by one; releasing it reduces that count; and when it reaches zero that space in memory is released back to the OS. Immediately the seemingly-random crashes my applications faced were decipherable and easily fixed while my hostility to Objective-C and the Cocoa framework melted away.

As Rubyists, we tend to value the simple over the complex and prefer not to sweat the small stuff. Yet on a whole we also desire learning new concepts and many of us can attest to that being the driving factor behind leaving a former language of choice behind. On occasion, such as with Objective-C and Cocoa, our preference for simplicity and our desire to learn collide, head-on. But rather than tweet about how ugly Cocoa looks or how memory management in Objective-C is beneath you, I challenge you to dive further. After all, Ruby itself is built on Objective-C's forebear, C, and no programmer has walked away worse for wear after peeking under the hood. Learning Objective-C not only opens up the world of iOS application development but also makes us better Rubyists.

Comment | 

Intridea Insider: David Potsiadlo

Mini

by Renae Bair

He can turn empty pixels into tasty bits of candy; with only a touch of his fingertips he transforms the mundane into the extraordinary. This week in the Intridea Insider, meet our prodigious web designer, David Potsiadlo.

"Pots", as we call him, is loved by all of us at Intridea for his artful and brilliant designs. His most famous work at Intridea was the redesign of Intridea.com that went live early this year. Aside from his stunningly simple and creative designs, what is most fascinating is his design process and sources of inspiration, which we talked about at length during our interview.

Pots draws inspiration from several sources, with an overall approach to design shaped by the writings of the author and comparative mythology scholar Joseph Campbell. "The goal with the Intridea redesign was to incorporate the spirit of the old site (the grass, trees, and sky), while simultaneously incorporating design elements from Michael's most recent design (the fuchsia, beige, etc)."

Pots then explains how this quote from Campbell, "we live today in a terminal moraine of myths and mythic symbols", inspired him during the preparatory stage of the design process. "What Campbell is saying is that we, in the modern world, are surrounded by the remnants of symbols and images by which people in the past used in their attempts to express the inexpressible. New mythic structures seemingly always grow out of old ones, and include symbols and that the previous ones had. This is often equally true with the forms of a visual design." Pots believes that a website can be the "visual spirit of a company." He reasons, "So, I thought it right – and perhaps more importantly, helpful – to honor the existing design (Michael’s) along with our original Intridea design." On our new site you'll see clouds, grass, hills and trees, along with some of the fuchsia and beige elements that Michael introduced in his previous design.

After collecting ideas on the inspiration board, he focuses in on a specific direction and design concept. "The next step is tricky, and I think where the magic hopefully happens. The idea is to look at the old and existing, and let it pull you in a way that 'takes you past it.' The idea is not to get stuck on existing visual design items used by others." He also has to ensure that the aesthetics he used were not stuck in the cliched past, "but rather, indicative of new trends and forward motion in design." Pots talks about Campbell's interpretation of a mythic symbol and relates mythic symbols to design elements: "His interpretation is that the symbol should be 'transparent to transcendence': In other words, it should allow us to take the symbol in, and allow ourselves to not get stuck on the symbol itself, but rather what the symbol points to." Ultimately, Pots fully acknowledges that the most important aspect of all of this is whether or not the final design speaks for itself and actually works. "In the end, if the final product doesn't do its job, then all this talk about inspiration and process doesn't really matter."

Although his process is alive with notions of mythological theory and visual philosophy, it can be summed up quite simply: "My process for all new sites starts like this: get a vague, abstract idea of the vision I want to achieve. Next, look for examples of sites using similar visuals. Next, I organize my inspiration into an Illustrator file. Collectively, the goal is to use these elements as a springboard to create something alive and new." Here is a look at the initial inspiration board he created for our current site design:

Pots was in the fortunate position of having a substantial amount of time to devote to this particular redesign project. He admits that in general, the constraint of time can often reduce the scale of each step in his process. "I think a big challenge as a growing designer is to realize that every site can't be the most-epic-process-ever-omg." And when he is under restrictive time constraints he finds that, "Ultimately, communicating with clients to rein in their design expectations" is important.

Pots’s creative talents revealed themselves at an early age. Long before he started with Intridea, he drew Teenage Mutant Ninja Turtles for his classmates' trapper keepers in the third grade. Always inspired by his older brother, whose drawings he loved, he started drawing when he was very young; "Sketchbooks were the medium of those days. Tons of blank pages." He had a habit of doing each new drawing on a random blank page in the sketchbook; "The idea of going through the pages in linear order was the opposite of my instincts. In a sense, this made finding a new blank page kinda tough when the book began to get full, but it was still the way I enjoyed doing it. I had to find the right blank page for my drawing at that particular moment." He loved drawing cartoonish war and battle scenes over ocean backgrounds, complete with battleships, attacking planes, helicopters, and submarines. Much of the drawings in his later years were inspired by the backstories for his favorite video games like Dragon Warrior, The Legend of Zelda, and Diablo.

In between drawing Teenage Mutant Ninja Turtles for his third grade classmates and working at Intridea, he grew up in suburban Maryland where he loved exploring the forests, playing video games, piano and ice hockey. Pots went to college at the University of Maryland where he started out as a Computer Science major. He had done some programming in high-school as an extension of his gaming hobby. "One useful side effect of all the PC gaming was getting comfortable with DOS. I quickly grew comfortable learning basic command line stuff." He had several PASCAL and C++ classes in high school. "As much as we coded, we also learned how to get around the computer lab’s security codes so we could play Quake 2 on the LAN." But he wasn’t in the Computer Science program very long; "After 3 months I firmly decided to quit that major; it was lifeless to me. Not in a judgmental sense, but rather on a personal level: at that time in my life, it too closely represented the path of non-discovery."

Pots majored in American Studies which gave him the flexibility to focus on sociology and music. "Sociology allowed me to continue learning about different global situations and introduced me to my budding interest in tribal religion, which grew into a passion for comparative mythology." His music major allowed him to deepen his understanding of music theory after playing piano for ten years and augmented his passion for playing guitar, which he claims was his "unofficial major" in college.

After graduating, Pots worked waiting tables, playing gigs at local bars and coffee shops, and devoted a lot of free time to creative writing. It wasn’t long though before he realized he needed a "real" job, and he got hired with the Chesapeake Research Consortium. "That gig had me handling various tasks, including maintaining a website. Best of all, they had a training budget. I could buy books dedicated to HTML, CSS, Photoshop and Illustrator. This was heaven." He looked to sources on the web like Zen Garden for guidance as he taught himself the gentle art of of web design. As he learned Illustrator and Photoshop, he discovered ways to take characters from his creative writing and put them into visual form. His creative writing not only inspired his art, but it also motivated him to re-approach guitar from a new perspective: "I became interested in the possibilities of writing esoteric folk songs, instead of just playing what people in coffee shops wanted to hear."

After working at CRC for a few years, he started freelancing on the side. "I was taken by the web possibilities and how it could be translated into a career. I freelanced for about a year, and did everything you see here:

He spent a year doing freelance work before he ran into Chris Selmer, Senior Partner at Intridea while he was at a DC tech event. "I was hired shortly thereafter. It was a dream," he reflects.

It didn’t take anyone long to discover how talented Potsiadlo was. In addition to rolling out our new website design, he has been busy designing for several client projects, including EarthAid and HowAboutWe. He works from his home in Maryland where he lives with his wife, Shannon, and their baby girl, Norah. He enjoys working at his home office, but admits that he really loves working in coffeeshops too: "Sitting in chairs previously used by others doing their own respective work, drinking from mugs once used by others while doing likewise. The ambience of creativity in these settings is one of my favorite things. I think my favorite encapsulation of all this comes from this TED talk (author Elizabeth Gilbert, on creativity and genius.)"

Though he certainly loves music, he prefers to listen to podcasts while he works. "I think podcasts represent an awesome realm of creative use of the internet." His favorites include Leo LaPorte’s TWiT.tv network, the sports and pop-culture ramblings of Bill Simmons, and geeked-out movie conversations on The /Filmcast. When he's not having fun with his family or being creative with music, images or language, he enjoys doing work in his home's garden and watching sports on the TV.

Potsiadlo could be considered a Homo Universalis, a modern day Renaissance man. From his clever sketchings, to the intricate songs he plays on guitar and piano, to ice hockey, to his interests in global issues, to his love of comparative mythology, to creative writing, to the art that he creates for the web. It’s hard to believe so much talent can come from one human being. Then again, Pablo Picasso may have said it best when he reminds us that the artist is not just a set of eyes or ears, but a political being:

"What do you think an artist is? An imbecile who has only his eyes if he is a painter, or his ears if he is a musician, or a lyre at every level of his heart if he is a poet, or, if he is merely a boxer, only his muscle? On the contrary, he is at the same time a political being, constantly alert to the heartrending, burning, or happy events in the world, molding himself in their likeness."

This post is part of a weekly series, called "Intridea Insider"

Comment | 

June 24, 2010

oilreporter ipad mobile

Oil Reporter Now Available for iPad

Mini

by Brendan Lim

Last month Intridea released Oil Reporter, a mobile application for iPhone and Android devices. Oil Reporter is currently being used by NGO's and citizens on the ground to report affected areas of the spill, including the impact to wildlife, the presence of wetlands, and the amount of oil that is present. All of the data collected by Oil Reporter users is publicly available on our website at OilReporter.org.

Now we've gone one step further and created a new Oil Reporter application specifically for the iPad. Oil Reporter for iPad enables you to see the latest reports as soon as they come in. You can view a detailed mapping of all of the submitted reports along with an easy-to-read list. You can even drill down and view detailed information about each individual report.

The code has also been open sourced on GitHub, so feel free to help us add some great new features to this application that we can push out in later updates. Oil Reporter for iPad is available right now and is completely free. The crowdsourced data gets analyzed by groups that can point relief efforts at the distressed areas according to the urgent reports that are filed with Oil Reporter. Start using it today!

Comment | 

Words we've written view all blog posts »

Featured Article

Intridea at Lonestar Ruby Conference

by Renae Bair on August 18, 2010

For the third straight year in a row, senior-level developers from the Intridea team will be at the Lonestar Ruby Conference, on Thursday, August 26th, teaching students about Ruby. Students attending the Ruby Intrigue class will work with our Director of Mobile Development, Brendan Lim, our Director of Development, Adam Bair, and our Director of Research and Development, Pradeep Elankumaran. Continue reading »

Recent Blog Posts

FlockFeeds Launches From Node Knockout

by Intridea on August 30, 2010

Using NPM with Heroku Node.js

by Michael Bleigh on August 24, 2010

Fixing Common Bundler Problems

by Jerry Cheung on August 23, 2010