Caleb Tennis's blog

A look at Rails' Code Generation and Java

Bill Venners of Artima recently posted a look at how Rails' code generation compares with Java, and talks about Bruce Tate's recent DeveloperWorks article on the comparisons between Hibernate and ActiveRecord.

Outsourcing viability, part 2

Last week, I talked about the viability of outsourcing as relating to contrasting pricing models.

One topic I discussed was the difference in price based on geography. I aluded to a worldwide scheme, but I got to thinking more about just the US, which I am most familiar with.

I currently reside in an area where the cost of life is low, relative to other parts of the country. If you look at my house payment vs. the house payment for someone living in a much more metropolitan area, they are paying considerably more.

Outsourcing: always viable?

I've been outsourcing a lot of programming work lately, because I have a lot of things I need to get done and not enough people to help me. We've got the money to do it, and I'm of the mindset that investing in our applications will not only make our own workers more productive, but give us some options for selling products which for many years we've only ever used internally.

Some of the work I've farmed out has been Ruby on Rails development, and the rest has been application development from a company where I was familiar with the developers through some of their open source projects.

The experience has been eye opening to me. I've shifted from lead developer on all of our important projects to project manager. That's another story in itself, and it's been a fascinating journey.

Design Patterns - Observer in Ruby

Last week, I wrote about the Singleton pattern in Ruby much like Rusty Divine did about Java/C#/.NET. Since his second entry was about the Observer pattern, I thought I'd write about its Ruby implementation.

Design Patterns - A Singleton in Ruby

Rusty Divine recently posted a look at the Singleton design pattern, with some Java and C# based examples.

I wanted to show that same pattern using Ruby:

Growing your projects

This is a very interesting time for me. When I started working for my current company 5 years ago (7 if you count college interning), we were a small shop with a lot of debt. We thrived on nothing because we had to. We had ambition, because we wanted to eat.

Now, we're thriving. We have grown to a good size and have lots of good business. Our work pays very well, especially for what we do. We've hit an inflection point.

The problem, if you will, is that I am the software guy. Not that others don't do software related things, but I'm definitely the man. My main product, that's been the culmination of what we've done in house now for years, is far and away the bread and butter of the company. All of it is used internally.

Now, we're facing the decision of perhaps starting to sell our software (and hardware) to outside customers. This presents a challenge, because a lot of it was written around how we do things.

The end of the year is always so strange...

There's always this mantra of wanting to spend up certain pools of dollars so as to not pay taxes on it. At the same time, some purchases need to wait until Jan 1 in order for the money to be there. Always fun times.

Things are quiet for me at the moment. I'm in maintenance mode until next week when most of the facility is gone and I can go through and perform some much needed up upgrades. As such, I don't have much to share.

The only nugget I can give you is this: O'Reilly just started a Ruby focused blog, and I'm a contributor. Point your browser over to and check it OUT.

MySQL 5.0 - A quick look

I've started seriously playing with MySQL 5.0 as an upgrade from the 4.0 that we've been using for a long time now at work. And I'm liking what I'm seeing.

Some people will claim that other databases have had features for years that are just now going into MySQL. I'll agree with that, though no other databases have had the same momentum and open source traction that MySQL has. The closest open source competitor, PostgreSQL, is more feature filled but still doesn't seem to have the following that MySQL has.

Let's look at a few of the new goodies.

Open Source Can Still be a bit Closed

It's no secret - I'm a huge fan of Ruby.

I had a user recently on the ruby-talk mailing list make it known that QtRuby was acting up for him with Debian. There was some discussion, but no resolution.

A few days ago, I had another Gentoo Developer tell me the same thing. So I investigated. And I found that QtRuby worked fine with Ruby <= 1.8.3, but broke with Ruby 1.8.4.

I dove in.

Business and Database Logic, Part 2

In a previous post on the subject, I touched on some thoughts I had based my application needs to keep data in a database over a period of time, without using updates and deletes.

After doing some pencil and paper design, and a lot of thought, I think I figured out the easiest way to implement this.

From a database standpoint, what we really have is a simple one-to-many relationship. For example:

Let’s say we define an employees table. I want to put as little information in here as possible, and yet I want the most amount of static information available in this table as well. For the purpose of this example, let’s just assume that the only thing static about an employee is their name.