Skip to main content

Mobomo webinars-now on demand! | learn more.

We are very excited to announce the “Intridea Insider”, a new blog series that will profile a new Intridean every week. Check in every Thursday morning to get a detailed interview with a team member, and discover everything from their favorite gems and productivity apps to their favorite coffee spots and blogs.

This week’s featured Intridean is Joe Grossberg:

Like many geeks, Joe grew up liking dinosaurs and computers. It wasn’t until he met the web in 1994 though, that he had a real reason to favor one over the other. His love affair with the web started with a very simple menu option: View > Source. Being able to not only visit a website, but also see how it was put together and then tinker with it was a powerful opportunity. For Joe, this plus the combination of HTML being pretty simple to learn meant that, “Wouldn’t it be cool if I could ...” was replaced by “Look at all the cool stuff I can do ...”

Unlike many formally educated CS students who find themselves in software development positions, Joe took a roundabout path to his Senior Engineering position at Intridea. Joe was interested in programming since dabbling in LOGO and BASIC as a kid, but he studied Anthropology and Journalism in college, and after graduation he worked at an Advertising & PR firm. His software engineering future was instantiated in 1999 when he was able to transition to the New Media department at the firm to build websites. From there, Joe encountered endless opportunities to learn and use other technologies like CSS, JS, ColdFusion, Perl, PHP, ASP, JSP, Python, and of course, Ruby and Ruby on Rails. Before joining the Intridea team, Joe was working on one of the largest Rails applications to date, at Revolution Health in DC.

When asked if he ever feels he is at a disadvantage to formally educated web development professionals, he answers, “Well it's a question I've been asked before, and I say no, for two reasons:

  • I work with high-level languages and almost never find myself saying, ‘I wish I could do this in C’.
  • In my 11 years of experience, I’ve seen very little correlation between the education level and quality of a coder.

Being self-taught requires motivation, discipline and a love of learning and Joe certainly has all three. He reads all the time and has used bloggers as “substitute mentors” throughout the years. He looked to blogs like Joel on Software, “when it was still good” he says. “They gave me insight into what much more experienced and practiced developers were doing.” Nowadays he enjoys reading blogs like A Fresh Cup, because it gives him quick access to good information: “Mike Gunderloy does such a great job of tracking down and compiling links to cool stuff out there, saving me the trouble of doing so.”

As far as development tools are concerned, Joe is an emacs user through and through. Being able to learn all the emacs tricks from a senior developer he used to work with prompted him to adopt this as his editor of choice early on. “I’m old school,” Joe admits after explaining why he stuck with emacs even while many of his peers were swooning over TextMate. “Any editor being proprietary and tied to a single OS was a non-starter for me. And I figure emacs was here before I started programming; it'll be here after I retire.”

Joe spends a lot of time in script/console and cites the under-appreciated Wirble as a favorite gem. His .irbrc, along with other configuration files, are available on github. “One thing I like about hacking is the ability to customize the environment to meet my own needs.”

When I asked Joe what he loves most about Ruby, he began talking about the Ruby “ecosystem.” We talked about the passion for quality code that so many Rubyists seem to share and how that creates a unique ecosystem. “Ruby seems to have a greatly disproportionate number of people who really do 'give a shit'; their opinions can and do clash, but they have them and they care about them.” Joe identifies “The Pragmatic Programmer” as the book that inspired him to approach writing software as a craft. He says it gave him the realization “that it’s worth being great at software development, that things like quality matter, and that it’s worth investing in learning.”

Joe cites the DCRUG, an event he helps to organize, as an example of how diverse and remarkable the Ruby community is; “People come from everywhere to do presentations. They care so much about what they’re working on that they will travel to another city just to share it with other geeks.”

While Joe Grossberg sounds a lot like the quintessential Rubyist, there are some things you might be surprised to know. For example, Joe is not a testing fanatic. While he sees lots of value in testing, especially on large-scale projects with a multitude of developers, he says it’s all about the end-user. “Let’s be honest; it’s not like software was all broken and unusable before the testing/TDD/BDD meme became big.” He reasons that while testing “increases quality in multiple ways, the difference between 99% test coverage and 100% coverage is probably not what’s going to make-or-break your application.” He believes that tests are most valuable, however, when you’re working on someone else’s code; tests provide a safety net and “make legacy code less dastardly.”

Another interesting trait that distinguishes Joe from most programmers is that he is not a caffeine junkie! Instead of reaching for coffee when he gets tired and hits a lull he changes focus by going to the gym, reading blogs, or opening a book. In fact, the gym has played a big part in changing Joe’s life in the last couple of years. He has shed almost 90 lbs by diligently working out, cooking healthy meals at home (his site is the #1 result in Google if you search “how to make curry”) and getting fitness advice from sources like his favorite fitness blog, Mark’s Daily Apple.

Most Intrideans work from their home offices and are spread out across the country. But Joe lives in DC and actually prefers to work in our office. He likes having the ergonomic chair and a real desk setup with wireless keyboard and mouse, without the distractions of a coffee shop and the clean separation between work and home. He enjoys a casual, five block walk to the Intridea office; as he walks by the gridlocked traffic each day, he is reminded of how grateful he is that he’s been able to “opt out of that life.” Joe wants to work in the office, so he does. “But I also realize that’s not for everybody”, he explains. “To me, that’s one of the best parts of working at Intridea -- the flexibility. None of this 'one size fits all' nonsense like ‘everybody pair programs all the time’.”

Joe is an insanely talented developer as a result of his determination and love of learning. At Intridea, we are pretty happy that he chose computers over dinosaurs.

When Joe is not working at the Intridea office in DC, he spends time with his wife, Salem, whom he speaks of with the highest regard. “She’s my favorite person in the history of the world. She’s brilliantly smart and she loves learning.” Joe and Salem met on the internet and were the JDate Success Story of the month recently. They also have two adorable cats, Miju and Peeps.

Miju and Peeps

Categories
Author

Earlier this month Pradeep and I had the opportunity to fly to Montreal to speak at Confoo, a multi-disciplinary web technology conference that grew out of a PHP conference. One of the days had a Ruby track and I had the opportunity to present a talk entitled Persistence Smoothie: Blending SQL and NoSQL. While the sessions weren’t recorded, I’ve taken up the practice of screencasting my talks to be able to provide some semblance of a recording afterwards:

I had a great time at the conference and got to speak to some others who were using NoSQL systems in the real world. Montreal was a lot of fun (getting to eat foie gras at Pied de Cochon certainly didn’t hurt) and I’m looking forward to giving a refined version of the same talk at RubyNation 2010

Update: I forgot to include a link to the source code for the application demoed during the talk. Here it is on GitHub.

Categories
Author

This was my second time speaking and attending the MobileX conference. Last year there was one event that was held in Lexington, Ky. This year the MobileX Conference has hit the road with events in Columbus, Ohio, Chicago, Ill., Nashville, Tenn., and Lexington again. You can view their whole schedule at mobilexconference.org. The MobileX Conference in Nashville had a pretty good turnout and was well received by those who attended.

 

Noah Kagan, Founder of kickflip, Inc (makers of GetGambit.com), who also spent time as the CMO at Mint.com and was the original creator of Facebook Mobile, gave the opening keynote. Noah's talk was titled "Making Money in Mobile - It's not just the iPhone", which was very informative and entertaining. It definitely set the mood for the rest of the event.

The conference was broken out into three separate tracks, "Entrepreneur/Investor," "Technical," and "Mobile Music." There was also an "iPhone Beginner" course offered at the same time. My first talk was on the topic of "Building Native Apps Using Titanium Mobile".

I went over Appcelerator's Titanium Mobile platform and how you could build truly native applications for iPhone and Android just using JavaScript. I event went into detail about how we built certain elements of the iPhone version of Grub.it.

Sam Soffes from Tasteful Works had a talk titled "Reuse Your Code", which went over how to create static libraries and bundles for your iPhone or iPad application. Nick Holland from Mobile Assassins had a great talk titled "What I Wish I Knew Before I Started a Mobile Gaming Company".

IMG_5223 Jackson Miller, Brendan Lim, Sam Soffes at Mobile Panel

Another great thing about this conference was that there were panel sessions throughout the day. These panels allowed the audience to ask specific questions regarding a topic and get all of our opinions. I was fortunate enough to be on one panel with Jackson Miller and Sam Soffes about native applications versus the mobile web, which actually didn't get all that heated since we were mostly on the same side. We took questions from the moderator and answered questions from the audience and I felt like it ended up being pretty informative.

Sam Soffes - Reuse Your Code IMG_5216

Sadly, Michael Mettler from AdCru and former Product Manager at Admob, could not make it to the event. I was asked at the last minute to do the closing keynote that I did at last year's MobileX conference in his place. Instead of updating my talk from last year, I decided to do a whole new talk around the current state of mobile and why it is such a great time for us as developers, entrepreneurs, and investors to be in mobile right now. My closing keynote talk was titled "I'm Mobile, Who's Coming With Me", and I believe it went pretty well.

The MobileX Conference in Nashville was a great event. I had a great time and judging by the tweets I can tell that I wasn't the only one. The MobileX Conference in Lexington, KY kicks off on April 16, 2010 and I'll be there speaking again. If you're in the area and would love to hear about great things in mobile, I highly suggest that you attend.

Categories
Author

The seventh local Ruby event by the Shanghai On Rails community was held last weekend. Our senior engineer, Guoning Lv is the founder of the event and I was there speaking. Thanks to 5173, for providing the space, resources and support. Thanks to everyone who attended, friends both old and new. The passion and energy of the community members made the event a big success. The Chinese Ruby and Ruby on Rails community is growing!

All of the topics at the event were presented by Senior Engineers from professional Rails companies. The presentations were interesting and high-quality. The first topic was about JS2/JSAPI by Factual. JS2 language is a cross-browser object oriented approach to JavaScript which makes JavaScript development more fun and productive.

The second talk was titled “When ERP Fell In Love With Rails”, by Jason from Nanjing RoRedu. He shared his experience about how to manage projects, and teams in their ERP projects.

I gave my talk on NoSQL, titled NoSQL: Re-Think the World, which compared traditional RDBMs with the new storage approach of NoSQL. I also spoke about how to choose between the appropriate method for individual situations.

The final talk was Static Code Analysis For Ruby, given by Richard Huang from Ekohe. He shared his gem, rails_best_practices and talked about its implementation. This a great gem to use in refactoring projects and it is widely used by the open source community.

We had a great time at the event. Thanks again to 5173 for sponsoring the event!

Categories
Author

Did you know that you can use regular expressions in case statements in Ruby to check for a match? For instance, if I’m implementing some method_missing functionality and I want to check for bang or question methods, I might be tempted to do something like this:

def method_missing(name, *args)   name = name.to_s   if name.match(/!$/)     puts "Bang Method!"   elsif name.match(/?$/)     puts "Query Method?"   else     super   end end

But it’d be much cleaner if instead it looked like this:

def method_missing(name, *args)   case name.to_s     when /!$/       puts "Bang Method!"     when /?$/       puts "Query Method?"     else       super   end end

This is great, but now what if we want to call out a method for bang and question methods? Thankfully Ruby has us covered there as well:

def method_missing(name, *args)   case name.to_s     when /^(.*)!$/       bang_method($1)     when /^(.*)?$/       question_method($1)     else       super   end end

By using the $1 global variable we can access the last regular expression match performed by ruby. This is just one of those little details that makes working with Ruby such a joy.

Categories
Author

Recently I came across the need to refactor a web service. I knew I wanted to build a safety net of unit tests first — ones verifying that, given a specific HTTP request, I would get a specific JSON response. The snag: this application is written in PHP and my favorite testing framework is RSpec

Would I be able to use RSpec, I wondered, on a project that wasn't Rails, Merb or even Ruby at all?

I am happy to report that, yes: despite its embrace of the convention-over-configuration philosophy, RSpec is flexible enough to use for non-Ruby projects.

It is quick and easy to get some tests up-and-running completely outside the context of a Ruby-based web framework.

In fact, you only need two files to make it happen, as you can see in the proof-of-concept screenshot below:

terminal output, demonstrating RSpec

I've made these files available in a github repository, but I will walk you through them below.

The Rakefile is just four lines that include the spec task via a require statement and set the configuration options inline:

require 'spec/rake/spectask'  Spec::Rake::SpecTask.new do |t|    t.spec_opts = ['--colour', '--format=specdoc']  end

And the tests themselves? You just need to put them in one or more folders under spec/ and follow the naming convention of something_spec.rb. (You can override this, if desired.) In this case, I used very simple tests for demonstration purposes.

Then, all it takes is rake spec and, Voilà!, and you can run RSpec tests for a project that isn't based in Ruby!

Note: This was tested with ruby 1.8.7 and rspec 1.3.0; different versions may require some tweaking.

Categories
Author

The first ever RubyConf India took place in Bangalore, India at the Royal Orchid Hotel last weekend. Our Director of Research & Development, Pradeep Elankumaran, and I were there speaking. The event was put together by ThoughtWorks and was unlike any other tech conference we've ever attended. It wasn't the talks, the speakers, or the format -- it was the overall attitude of everybody who attended RubyConf India 2010 that made it very special to us. Everybody who attended were extremely passionate about learning and showed so much interest in all of the topics that were presented for the two days of the conference.

 

All of the topics presented at RubyConf India 2010 were interesting. Roy Singham, Founder and Chairman of ThoughtWorks, kicked off and closed the event. Ola Bini of ThoughtWorks gave a talk on "The Future of Programming Languages". Nick Sieger from Engine Yard was there to give his talk on "Rails 3 Through Choices". The highlight of the two-day event was when Yukihiro "Matz" Matsumoto, the father of Ruby, gave a talk via Skype about the future of Ruby. He also mentioned that work on Ruby 2.0 would start in August of this year. There were also talks by Nick Sieger, Arun Gupta, Aman King, Brian Guthrie, and many others. You can see the whole list of speakers and talks by going here.

 

Our very own Pradeep Elankumaran gave two talks. His first talk was titled "The Big Wave of Indian Startups - (Almost) Effortless Entrepreneurship", which sparked a large amount of audience participation and was one of the most interactive sessions of the weekend. His other talk was "Messaging Queueing in Ruby - An Overview", which went over different choices we could use to do queueing in Ruby. I gave my talk on MacRuby, titled "MacRuby to The Max", which went over MacRuby, HotCocoa and how it compared to Objective-C. I even did some live coding and created a quick and easy currency converter.

We had a great time at the first ever RubyConf India. We definitely want to thank ThoughtWorks for putting together a great conference that was extremely informative and enjoyable. You can bet that we'll be there again for RubyConf India 2011.

Categories
Author

It is well known that Intridea has maintained a distributed development team since our inception in 2007. In the three years since our inception we have grown from 2 founders to nearly 30 "employees":http://intridea.com/about and one thing has always remained the same: Intrideans are encouraged to live and work from the places we call “home.� This is a serendipitous opportunity, made possible by a combination of technology and gracious managers.

The Rails community saw a surge of companies that were either entirely virtual or at least offered their developers the opportunity to work from home. For some reason the landscape of the agile Rails shop has changed in the last couple of years. And in the wake of what appears to be a declining number of software companies with remote teams, I’d like to take some time to share our strategies for how we make it work so well.

There are three major components to having a successful team of distributed software engineers: talent, autonomy, and technology.

Talent: If you are going to have a team of engineers working from home you’ve got to know that they are incredibly good at what they do. Talented engineers write good code, which turns in to great products, which leads to happy clients, which results in success for the company. Finding the good talent starts with word of mouth and ends with a thorough interview process. You want to find driven and self-motivated people that will work well without a lot of management. When you do secure talented engineers, first give them the tools they need to succeed and then give them some space to rock out.

Autonomy: This is where autonomy comes in. Micromanaging can cripple even the best developers; so allow them enough room to be able to do what you hired them to do without a lot of interference. Talented engineers love what they do and they don’t need to be micromanaged in order to get their work done. Treat your team like adults, not like juveniles and they will reward you by exceeding your expectations. Giving them a reasonable amount of autonomy shows them that you have confidence in their abilities.

Technology: Remote development teams would not be possible without the help of technology. There are so many great applications that make remote communication and collaboration possible. At Intridea we make use of several applications that help us to work together:

* "Present.ly":http://presently.com/ is our most critical day to day application for communication. It is where we exchange general ideas, information, ask questions, and even joke from time to time. It’s the cohesive medium that brings all of us together in the same space each day. Present.ly is our virtual office. When we start work for the day, we hop in and make our presence known. When we step away throughout the day to get lunch, grab coffee or make dinner then we usually update Present.ly to let our colleagues know where we are. When we return from being away, we give a quick “back� to let everyone know our status.

* "Campfire":http://campfirenow.com/ is a well-known application that allows for quick and easy collaboration. It provides a virtual “room� for developers and clients to talk about the project they are working on. Potsiadlo describes Campfire as the application we use for “getting down to business.� It is an effective tool for direct collaboration on a project.

* Instant Messaging and Email is a basic, yet important tool that we use to ping each other directly for specific answers. Two developers can use IMs or email to hash out some details or go over a basic problem.

* Phone/"Skype":http://www.skype.com/ /"GoToMeeting":http://www.gotomeeting.com/fec/: Sometimes you just have to pick up the phone, whether it’s to speak with a client, talk through a problem with a fellow developer, or to get in some voice time with your co-workers. There are a lot of great applications for web-baed communication but sometimes you can’t beat the efficiency of voice.

* "Unfuddle":http://unfuddle.com/: Our ticketing and project management system is what enables us to get actual work done in a seamless manner. Tickets are created by breaking up tasks into small chunks and are color-coded according to their priority level. Unfuddle allows us to run crazy custom reports and create custom fields that are searchable and sortable. One of the coolest features of Unfuddle is the powerful commit messages that “now parses incoming commit messages and appropriately resolves, closes, reassigns or comments upon tickets within your project.� A project management system is critical for any development team; but a great system like Unfuddle is an absolute must for a remote team of engineers.

At Intridea we utilize all of these tools (and many others) to maintain a rock solid team of distributed engineers that can produce high quality code at an incredible speed. Although most of our engineers work remotely we find that having a central office is a valuable asset to the entire team. Our office in DC serves as a space for local Intrideans to gather regularly and a place for out of town Intrideans to meet up when they visit. The office is also a good space to use for project kickoffs and to coordinate our local engineers when they go on site for clients.

Intridea works hard to find great talent and to provide them with the freedom, autonomy, technology, and respect they need to excel. We hire experts and treat them as such. As a result, every Intridean gets to wake up in whatever part of the world they call home. For many of us, “home� happens to be near our main office in DC. But many of us prefer waking up in Maine, California, Kansas, Georgia, and even China. Being able to work from one’s preferred location creates happy developers. And happy developers are more likely to be loyal and to write beautiful code that helps to ensure the longterm success of your company.

Categories
Author

Every Friday at 4:00 pm, the Intridea team takes pause from the pressing tasks in which we are immersed. For an hour we set aside open tickets, bug fixes, running tests, reading code, and writing emails, except for the most urgent requests. From different parts of the country we pick up the phone and join one another in what we call, “Coffee Hour.”

While not everyone that joins in on the call is necessarily drinking a cup of coffee, the term “coffee hour” embodies the spirit of what happens during that hour. The format is not rigid and no one is mandated to be there. Team members jump in on the call as they can; often times Coffee Hour starts out with only a couple of people and then grows in size throughout the hour, especially if someone is engaging us with an interesting topic of discussion. Flip is usually the one to ping people in Presently throughout the week for topic ideas, and by Friday morning there are generally 2-3 talking points setup for that afternoon’s Coffee Hour.

One of the most popular Coffee Hour sessions was in February when Michael and Potsiadlo shared their techniques for logo creation. Michael created a logo on the fly and talked us through his process for creating it; he covered previewing fonts, how to do font selection for a logo, how to create shapes and modify them, and how to apply subtle effects to enhance an image.

Afterward, Potsiadlo showed us how he designs a logo; he starts off with an idea and branches off of that idea multiple times until the perfect design emerges. When he is finished, you can see the entire ancestry of his design in the same document.

During another Coffee Hour, Flip presented Oria, an open source key-value store that he wrote in Ruby. The following week, Pradeep presented on Apache Camel and Llama, his implementation of Camel in Ruby. The next week Michael presented on NoSQL, Redis, CouchDB, and Cassandra.

We didn’t have anything scheduled for last Friday’s Coffee Hour and only a few people were able to attend. Adam started talking about screen and then showed us how to use it on a remote box using SSH. This got Flip (a Textmate user) asking about Vim so Adam took the opportunity to explain the hype. Adam showed us screen splits, movements, how to navigate through a project, basic usage of ctags, gave a quick demo of the NERD_tree plugin, a demo of NERD_commenter, a demo of fugitive for git, a little rails.vim, block editing, explained tabs and buffers and their differences and gave a rundown of Vim configuration. He pointed us to Derek Wyatt’s site which has awesome tutorial videos on Vim.

While there are usually a couple of topics prepped in advance for the Coffee Hour it’s still a very loose format and people are free to bring up other topics or just use the time to talk about their week, a project they’ve been working on, get advice, or just listen in. It is a small but important bit of time set aside each week for us to gather in the virtual “break room” and talk shop. It is a weekly ritual that brings our voices to each other’s offices and reinforces the humanity of our working relationships while affording us the opportunity to share our knowledge and experience.

Categories
Author

Hashie, Intridea’s Hash Toolkit, is today with version 0.2.0 gaining a new member: the Clash.

A Clash is a “Chainable Lazy Hash” that allows you to construct a hash using method syntax. It is meant to be used in a similar way to the way that Rails 2.x’s named_scope or Arel’s query building work. Let’s start with an example:

require 'hashie/clash'  c = Hashie::Clash.new c.where(:abc => 'def').order(:created_at)  c == {:where => {:abc => 'def'}, :order => :created_at}

Pretty neat, right? But you can go beyond that. Clash also allows you to use bang method notation to create, dive into, and return from sub-hashes. Let me show you what I mean:

c = Hashie::Clash.new c.where!.abc('def').ghi(123)._end!.order(:created_at)  c == {:where => {:abc => 'def', :ghi => 123}, :order => :created_at}

By using a bang method, you automatically create a subhash that is then the subject of the chain, allowing you to create more keys on that subhash. Then, if you want to jump back up to the top-level hash, you simply call the _end! method to return up one level in the stack (thanks to jQuery for that particular inspiration).

While Clash is a very simple tool, we hope that it could eventually make its way into some of the new ORMs that are cropping up around NoSQL systems (such as MongoMapper) to provide the same kind of effortless chaining that has made ActiveRecord so easy to work with.

Categories
Author
Subscribe to