Rusty Klophaus

Alfredo, the Sommelier of Luggage

November 13, 2008 · No Comments

Recommendation: If you need luggage in the Northern Virginia area, talk to Alfredo Estrada, Luggage Selling Specialist at Bloomingdale’s in the Tyson’s Corner Center mall. (Call his department at 703-556-4641.)

He is a walking wikipedia of luggage.

For a salesman, he’s a little shy at first. He won’t immediately reveal his knowledge. It’s almost as if he is aware that he knows too much about the subject, so he holds back to prevent mutual embarrassment. But if you keep asking questions, he’ll open up, like he’s found a confidant, a fellow enthusiast.

When he really gets going, he speaks about each piece of luggage with a craftsman’s pride. Here is how the weight is distributed, this one has the longest handle, this is how they tweaked the zipper since the last model, and here is why.

Had he been born in a different time, he may have been a monk at a monestary, guarding the scrolls and tending the grounds. But modernization has robbed him of that, left him with an appreciation for quality and construction that he had to direct elsewhere.

You’ll leave with the ideal suitcase, trunk, or wheeled upright for you, of course, and he’ll work to get you the best deal that he can.

But that’s just a material thing in a material world. The real payoff is interacting with someone who knows the meaning of the word Quality, and who knows that there is no detail too small to appreciate.

→ No CommentsCategories: Blog Post
Tagged: ,

The Late Early Adopter

November 10, 2008 · No Comments

I’ve always considered myself an early adopter. Back in 2007, when I first heard about Jott.com, I was very excited. Jott promises to turn your cell phone into a transcription device– you call and speak, and Jott translates your message and emails it back to you, or passes it on to Twitter, Blogger, Sandy, etc.

I called and said something to the effect of “Hello my name is Rusty I am testing Jott”

Jott heard “Hello, Minneapolis test, engine got.”

I never went back.

Until today. On a whim, I decided to try Twittering through Jott. I called and said “testing Twitter through Jott if this works Jott is awesome”. And Jott heard “Testing Twitter through Jott. If this works, Jott is awesome.”

Not only did Jott translate perfectly, it punctuated perfectly, too.

So that’s why I call myself a Late Early Adopter. I tried Jott a long time ago. Back when it was a baby. Back before it could do anything useful. I gave it 5 minutes of my time, said, “all you do is drool”, and kicked it to the curb.

Now, millions of people who are far less interested in technology than I am are marching in the Jott parade. I was an early adopter, and somehow I’m last in the parade.

Related point: Francisco Tolmasky of 280 North touches on something similar in a talk he gave at WWDC 2008. He set up a computer for a friend’s Dad, including a desktop mail client. His friend’s Dad basically said, “What do I need this for? I keep all my data in the cloud.” (Though in less technical terms.) If there were a cloud parade, the old technophobe would be a few blocks ahead of Francisco

→ No CommentsCategories: Blog Post
Tagged: , , ,

Configuration vs. Convention

February 19, 2008 · No Comments

The Problem - Connecting to a Database
(or other external resource)

When a programming language needs to connect with a database, there is usually some friction as the programming language has to conform itself to speak the database’s language, or vice versa. This is commonly called an impedance mismatch. (This situation exists almost any time a program needs to talk to an external resource; databases are just the most common example.)

Before long someone builds a framework to bridge the gap and hide the gritty details. These frameworks come in a variety of shapes, sizes, and complexities: think .NET’s ADO.NET and LINQ, Ruby’s ActiveRecord, Hibernate, iBATIS, etc.

The Database Schema

Every framework needs to know some information about the database schema in order to work. The frameworks fall into two main camps: configuration-based frameworks, and convention-based frameworks.

To put things simply: Configuration-based frameworks read schema information from a configuration file. Convention-based frameworks rely on the developer to follow specific naming conventions within the software, and then the framework deduces the schema information from the naming conventions and directly from the database.

You can also think of the difference as “Explicit vs. Implicit Configuration”, or the “.NET/Java Way vs. the Ruby on Rails Way”.

General Differences

Generally, configuration-based frameworks are more commonly found in compiled languages; and convention-based frameworks in scripted languages. The reason is that most compiled languages are type-checked at build time, so the framework needs to know more information at that time. On the opposite side of the river, most scripted languages use implicit typing or duck typing, where the interpreter avoids making any decisions about a variable’s type until runtime, so the framework can get by with less information.

There are further differences regarding when the framework logic is generated, and how it is stored. Configuration-based frameworks generate logic from the schema at build time and store the logic in code as an API. The API is then consumed by the rest of the application.

Convention-based frameworks tend to generate logic dynamically at run time. The logic may be cached by the framework for future use, or discarded.

Since the convention-based framework only generates logic when it is needed, it can afford to support more features without making the code significantly bigger. Configuration-based frameworks, on the other hand, create and store all of the logic at build time, regardless of whether it is actually used. This leads to a tradeoff: each additional feature requires extra code that is multiplied by the number of different tables or columns. In other words, a convention-based approach can provide more features with less code, a configuration-based approach provides fewer features using more code.

Tradeoffs

There are many personal opinions as the which approach is better.

Proponents of configuration-based frameworks argue that:

  • The code is more understandable because everything is spelled out and written down.
  • A narrower API leads to cleaner code - everyone is forced to use the same tools to get the job done.
  • Configuration-based frameworks are easier to use on big teams; a senior developer can set up the framework, and a junior developer can consume the API without having to understand how it got there.
  • It is a Good Thing to be able to check configuration into source control.
  • Since the logic is generated at compile time, less has to happen at runtime. This improves performance and leads to statistically fewer runtime bugs.

Proponents of convention-based frameworks argue that:

  • The code is more readable because there is less to read.
  • A broader API leads to cleaner code - a developer generally has more options and can use the right tool for the job.
  • A developer who can’t understand the convention shouldn’t be on the project in the first place. Besides, less code means more agility and smaller teams.
  • For database frameworks, the code (or the database schema) is the configuration. Why do you need to store it in an additional place?

The Verdict?

So where do I come out? Like many topics in software, the answer is “it depends.”

I lean toward a convention-based framework (and scripted languages) for rapid prototyping and for quick projects and small teams. I think of this as the “microwave” approach: good for lightweight snacks, but you don’t want to plan a meal around it.

When I need a real powerful oven, I lean toward a configuration-based framework. I’ve found that big projects and big teams always benefit from having configuration nailed down in a file that everyone can reference.

For more articles on Configuration vs. Convention, search Google.

→ No CommentsCategories: Blog Post
Tagged: , ,