Deprecated: Assigning the return value of new by reference is deprecated in /home/weareintegrum/ on line 512

Deprecated: Assigning the return value of new by reference is deprecated in /home/weareintegrum/ on line 527

Deprecated: Assigning the return value of new by reference is deprecated in /home/weareintegrum/ on line 534

Deprecated: Assigning the return value of new by reference is deprecated in /home/weareintegrum/ on line 570

Deprecated: Assigning the return value of new by reference is deprecated in /home/weareintegrum/ on line 103

Deprecated: Assigning the return value of new by reference is deprecated in /home/weareintegrum/ on line 61

Deprecated: Assigning the return value of new by reference is deprecated in /home/weareintegrum/ on line 1109
We Are Integrum » Uncategorized

Archive for the ‘Uncategorized’ Category

Why Merb Becoming Rails 3 is a Good Thing

Tuesday, December 23rd, 2008

Originally posted at

Q: Rails or Merb?
A: Yes.

So, today’s big news is that Merb will be the new Rails. Wow! Who said you couldn’t get people’s attention during the holidays. This is really going to shake up the Ruby web community.

There has been a lot of reactions to the news, not all of it positive. This tweet jumped out at me. That is a totally understandable first reaction. What happened to the revolution? In my opinion this is the best possible outcome of the Merb revolution. It began life because of frustrations with the Rails core team and the direction that Rails in general was heading. The Merb team chose to go off and do things the way they think things should be done. Competition was created.

As the competition increased you started to see some of the better ideas in Merb start to be implemented in Rails. Competition is the best thing on earth to break a monoculture. It’s so easy to get wrapped up in our own little worlds and to keep doing things just because that’s the way we do things.

Now, the situation today is that Merb has convinced the Rails core team that they were onto something, and instead of leading us down the path of Ruby Web Framework Armageddon (which is not wholly bad, but at the very least creates a marketing problem) they decided to now join forces. Not a decision that was taken lightly, I imagine.

So what happens to competition, you say? It still exists, there are now many, many Ruby Web Frameworks, and many more will come, even in the wake of this announcement. There will always be people pushing the status quo, there will always be ambitious hackers out there creating new and exciting things. Those things will inevitably feedback into the dominant frameworks, if not, then the dominant frameworks will slowly die off, as they should.

So why is this a good thing again? Well because now the framework I love, the framework that has changed my development life, will now be even better! The infusion of the quality engineering that has been displayed by the Merb team is the best thing for Rails’ long term viability. Enterprise business *want* to jump on the Ruby bandwagon, they are just scared of Rails and it’s issues, real or perceived. Now, Rails will become the Enterprise solution they have been clamoring for, and that makes life great for all us Rails Development and Consulting shops out there!

Here’s to a great New Year for Ruby!!

Screencasting as client documentation

Thursday, December 11th, 2008

The problem started with a project that requires several processes to be running behind the scenes. Since each of these processes has its own installation/configuration/execution, the process to document everything was going to take forever. Enter a combination of Parallels, Ubuntu JeOS, and Screenflow.

Rather than place everything into a word document we started with a base virtual machine created from Ubuntu 8.04 JeOS and proceeded to install everything step by step with Screenflow recording the process.

Now instead of delivering a handful of documents that most likely won’t be read, we’re handing over a completely encapsulated development environment and the recorded process of how everything was put together. If they have any questions they should be able to refer back to the screencast and see how we did it themselves.

Integrum brings Merb training to Phoenix

Tuesday, December 9th, 2008

We here at Integrum are very proud to announce that we have partnered with some of the Merb Core team to bring the first Merb training class to Phoenix.

You can see the details on their site and sign up now. There has been a lot of talk about this class already, so we’re expecting the class to fill up quickly.

Training Badge

What Economic Downturn? We’re hiring!

Wednesday, November 26th, 2008

Seeking refuge from the Java salt mines?

Want to work for an awesome Ruby development shop?

Want to hang out with super smart people and solve tough business problems?

Want to be at the epicenter of startup culture in Phoenix?

If you answered “Yes” to any of these then integrum is the place for you! Check out our jobs page. We are looking for people of all experience levels.

Come experience the freedom and fast pace of small, Agile teams working with Ruby on Rails and Merb.

Five Runs RAMP Partnership

Thursday, November 13th, 2008
Integrum is proud to announce that we are now a RAMP Partner with Five Runs. We have been using Tune Up to optimize our Ruby on Rails and Merb applications. Five Runs commitment to Open Source and support of Merb separate them from their competition. We look forward to sharing more of our experience with optimizing our applications in the near future.

“When frameworks go bad” or “Why I left Java for Rails”

Wednesday, November 12th, 2008

Several years ago I ran across a discussion on The Joel on Software Discussion Group about the ridiculous state of web frameworks as told via the metaphor of a guy needing a simple hammer. Rather than walking away with a hammer, which is all he really needs, he walks away with a “general-purpose tool-building factory factory factory” to construct his one little hammer.

Why I hate frameworks

I sent this out to the others here at Integrum and Jim Jeffers responded with:

Aren’t these frameworks he’s referring to just a set of suggested design patterns to apply to your project? I don’t really view them as factories. I’m not sure I understand because the framework isn’t really a factory in my view. The application is the factory. So either way you are building this ‘factory’ so to speak. I guess I don’t understand can you explain his point better?

So I wanted to expand upon the original ideas and why I believe Ruby on Rails is the preferred agile platform.

I believe the frameworks he’s referring to are largely the product of the Java community over the last several years, say since ~2000. The first proper Java web framework was Struts, which, for the time did a pretty good job of simplifying web development. The problem was every Java developer who ever dealt with struts thought, “hey! I could do this better,” and proceeded to write their own framework on top of other peoples’ frameworks.

In this case I believe the argument is against having a web framework that tries to be everything to everyone. Using design patterns is very much the appropriate answer; I use them all the time. The problem is when they are reused and rebuilt into everything from the ground up. If you look under the hood of most Java frameworks they are a cascading nightmare of factories, abstract factories, abstract factory singleton flyweights, and on top of all that they have to be genericized [sic] to plug into any conceivable web app and be fully configurable because that’s a “best practice”.

Rails is in a sense the opposite of this conglomerate. By re-writing the idea of a web framework from the ground up in a highly opinionated way using a language that lends itself to very powerful semantics they got away from the “best practices” the capital-E-Enterprise community set forward. Rails, at least to the best of my knowledge, isn’t cluttered with these terrible, incomprehensible overly generic object factories, mostly because the choices were made sensibly for you. The single ORM tool choice of ActiveRecord is a shining example. Better yet, think of it this way: the JBoss Seam framework in Java (last time I checked) was a ~102MB download not counting the JDK (70MB) required to execute it nor the JBoss application server (95MB) required to power it- now consider the Ruby interpreter + Rails and all dependencies are less than 15MB.

Why do we need 200MB + of software to write a hello world app? Why should developers need to write and maintain thousands of lines of XML to plug overly-generic objects together just to make them work AT ALL? Short answer: we shouldn’t because we have smarter options available. Just because it’s the way we’ve always done it doesn’t make it right. I want to make even clearer the fact that the Java developers who designed these systems are not ignorant or needlessly complicating things- they are truly attempting to create the most simplistic and flexible system possible. They just have bad tools in a cumbersome language.

For an example here is the Java Spring reference manual. The tag line of the company that managers Spring is “Weapons for the war on complexity” … this is one of the SIMPLER options, and Yes, you do actually need to know most of this document to create a real-world web app with Spring:
Spring 2.5.x Manual

For a second example, here’s the Quick Start guide to the JBoss application server:
JBoss Application Server quick start

Hopefully that helped contextualize that article. Or at least gave you a laugh that you don’t have to deal with enterprise dogmatism like this and just type “mongrel_rails start” when you want to get going.

What are your thoughts? Maybe you too have crossed over from Java to Ruby on Rails and have opinions or horror stories. Feel free to share them, we’re looking forward to feedback!

Drag and Drop to ‘fixed’ position droppable

Tuesday, November 4th, 2008

Edit: Modified to work with IE 7.

In Rails 2.1 (Prototype we found an error when we created a fixed position Droppable region on a page that could scroll. In order to get around the problem we modified the prototype.js library’s cumulativeOffset at line 1988 to be:

cumulativeOffset: function(element) {
   var valueT = 0, valueL = 0;
   do {
     if(Element.getStyle(element, 'position') == 'fixed')
              valueT += Position.deltaY + element.offsetTop;
              valueL += Position.deltaX + element.offsetLeft;
              element = null;
          } else {
         valueT += element.offsetTop || 0;
         valueL += element.offsetLeft || 0;
         element = element.offsetParent;
   } while (element);
   return [valueL, valueT];

This seems to have fixed the problem for when the user scrolls, though we haven’t had a chance yet to exhaustively test this in the other browsers. The closest thing we could find was at but ultimately didn’t work as written for us.

I would love for someone more familiar with Prototype to explain the ramifications of this change.

Deployable infrastructure to the rescue

Thursday, August 28th, 2008

For the last two weeks Gangplank’s bandwidth has appeared saturated. Our network performance has hovered around zero…

Since we knew the problem originated in the network, we needed a capable network analysis tool. Unfortunately, most network tools require a painful amount of configuration, display ridiculously complex options, and generally come across as “user unfriendly.” Luckily for us, Tempe based JumpBox made a great solution available.

JumpBox offers an array of ready-to-be-deployed virtual machines to quickly augment infrastructural support software. For us, this happened in the form of a pre-built, up-and-running-in-no-time JumpBox equipped with an instance of Cacti. Not counting the download time, which went by fast anyway, Cacti began capturing SNMP data from the network inside of 10 minutes. 30 minutes later, which included figuring out how to use it, we discovered the source of our bandwidth problem and rectified it.

No installation headaches. No clobbering software on another machine. No dependencies to deal with. Just a single virtual appliance running in Parallels on an iMac.

The lesson of this story: Ready-to-use Virtual appliances greatly ease the introduction of new tools into the IT environment.

Get Your Twitter On!

Thursday, June 12th, 2008

At Integrum we find Twitter to be an indispensable tool for communicating with co-workers as well as friends and family. We use it on a daily basis to keep in touch with each other and the Phoenix community, and to fend off that heavy burden of productivity.

While attending SxSw in Austin, TX we had an idea to create a Twitter application we like to call Props & Drops, aka. TwitterProps. We threw it together in under 2 hours with no knowledge of the Twitter API. In a session on scalability with Blaine Cook, we heard that Twitter was running a Jabber server that few people were taking advantage of. Of course, we had to try it!

In a few more hours we added integration with Twitter’s Jabber interface. And now, so can you!

Introducing TwitterBot

It slices, it dices, it XMPPses! SRSLY.

TwitterBot will connect to Twitter’s XMPP service and has a nice set of callbacks to deal with the different types of messages that twitter sends your way. It handles Direct Messages, Tracks (when they’re actually turned on), and your normal every day messages. Build an automated twitter bot to impress your friends, to auto-respond to your mom, to clean your room, whatever you can imagine and so much more (or less depending on if Twitter is up that day)!

You can find it on RubyForge.

Integrum Gives Back

Tuesday, May 6th, 2008

Over the last year, Integrum has become highly involved in the Phoenix tech community. As we compiled a list of company goals for 2008, it became apparent that giving back to the community in a non-technical way was also very important to the members of our team. We’ve decided to make a step toward this goal by participating in the annual Big Brothers Big Sisters bowling event, Bowl for Kids Sake.

Big Brothers Big Sisters provides a mentorship program for kids from 6 to 18. If you’d like to donate, please visit our team page. We appreciate your support and thank you in advance for your generosity!