We do what we must, because we can.
Loosely Typed in Ohio

General Recent arrivals at Innova Lib

The paper library, not the code one.

  • The Product Managers's Handbook, Gorchels 2006
  • A good overview of competitive strategy, pricing, marketing, and sales. Reminded me of Porter, only not as pedantic. Whereas the book is intended for professional Product Managers, a reading by technologists would be useful if undertaken to gain a basic footing in thinking about markets and competition. Recommended for Chris and Jon.

  • As the Tables Turn, Doody and Rosen, 2007.
  • A colorful book written by Sue Doody, of Lindey's fame. Describes the history of German Village's best known restaurant, which after 25 years is a Columbus institution. Doody and family now operate one of the largest restaurant chains in America. Includes hilarious stories by some of Lindey's best customers, including my Neighbor, Mr. Fred Holdridge. Recommended for Keith, and Chris. And Eddie, who might actually spend more time at Columbus restaurants than I do.

  • Dreaming in Code, Rosenberg 2007
  • I've been surprised by the lack of internet chatter about this one. Written by Scott Rosenberg, the co-founder of Salon.com, this book describes three fruitless years at OSAF, Mitchell Kapor's startup, attempting to produce a Personal Information Management Product called Chandler. I was entertained by the book, but embarrassed at the stratospheric heights these Architecture Astronauts went to keep from actually writting any code. To save everyone trouble, I already pulled the sofware down and it barely works.

  • The Soul of a New Machine, Kidder 1981
  • This classic book won the Pulitzer Prize describing the construction of the first 32-bit Data General minicomputer. Recommended for everyone.

  • Visual Explanations, Tufte 1997
  • If you haven't read anything by Tufte, I recommend that you start immediately. The books are beautiful, the prose is elegant and witty, and you'll know more about presenting information than nearly everyone else. This completes Innova's collection of the Tufte cannon. Not actually a new arrival, I've been hoarding this one at my place. This is the one that describes The Smallest Effective Difference, and other concepts important for information design.

General Adequacy reminder

The Architecture of Mailinator is a fascinating read about scaling an SMTP server to 4.5 million emails a day. Which isn't all that interesting except this part:

…the complete set of hardware that mailinator uses is one little server. Just one. A very modest machine with an AMD 2Ghz Athlon processor, 1G of ram (although it really doesn't need that much), and a boring (IDE , low-performance) 80G hard drive. And honestly, its really not very busy at all.

The whole system design is built around being good enough.

The basic tenet is that I do not have to provide perfect service. In order to do that, my hardware requirements would be much higher. Now that would all be fine and dandy if people were paying for the service. I could then provide support and guarantees. But given its free I instead went for, in order, these two design decisions: 1) Design a system that values survival above all else even users (as of course, if its down, users aren't really getting much out of it) 2) Provide 99.99% uptime and accuracy for users.

Thinking about solving problems adaquately, rather than optimally provides a huge amount of freedom to focus on other things. This was a good reminder.

General,Open Source,phpSprockets sprocketMan has crossed the Atlantic


I've been checking the phpSprockets download count on Google Code like a fiend, and was pleased when I came back to Columbus today to see our lovable little mascot, ElegentyMcGracefull on German PHP blog phpblogger.net.

Eddie had Kent translate it earlier, but without the benefit of our German Lit scholar's services this evening, I used Google's translation service, which doesn't handle German leet-speak well.

Small HTML Fetzen, which draws itself across the complete code and simply only shits look. And with genuine object orientation has to also do nix. For such cases gibts phpsprockets HTML/XML the generator.

What means Sprocket…this library is perfect and elegant solution. For whole Templates large muck.

Eddie was assured the review was positive. Bröckchen for Bröckchen.

General FizzBuzz…For developers that need to know SQL.

The tech blogosphere was humming last week about FizzBuzz, a simple test to figure out if your candidate can write even a trivial program.

Write a program that prints the numbers from 1 to 100. But for multiples of three print “Fizz” instead of the number and for the multiples of five print “Buzz”. For numbers which are multiples of both three and five print “FizzBuzz”.

At Innova, we've always been into test-first hiring, but we've recently started asking candidates to write some code over the phone to avoid the disruption that on-site shadowing experiences can create for both candidates and Innova.

Like most shops, we spend a lot of time doing basic CRUD. Unlike most shops, we're using databases for lots of heavy data processing too. Our biggest databases have surpassed 1TB now. While we have a great DBA for handling the plumbing, we still need developers who know how to work with data. The thing about FizzBuzz, is that it is almost too easy. Yet there are an outrageous number of programmers who can't solve it properly.

I came up with another similar question last week, and with a few phone screens under our belt (three four to be exact), we've been shocked that none of our candidates could answer it, even with lots of hints. And we're trying to hire experienced developers (>>8 years).

Now, this question is harder than FizzBuzz to be sure, and because it is deceptively simple (versus being truly fall-off-a-log simple), it tends to make people who don't like to think very hard stick out like a sore thumb. Already, we've elliminated a few people who probably program mostly by coincidence. Here is the question:

I've been looking for a new TV set. To get the best price, I've been tracking TV sets at Best Buy for the past month to see how the prices fluctuate. To do this, I've been updating a table: T_Prices. The table contains:
  TVModel (VARCHAR)   DateUpdated (DATETIME)   Price (MONEY) 

Unfortunately, I haven't been very consistent updating my data. Sometimes I've only updated prices for a few TVs, without bothering to update the full set.

Write a set of queries that result in a unique list of TV Models and the most recent price associated with each TV Model. Each TV Model should only occur in the result set once, and every TV Model I've ever priced should be present in the result set. The dataset should look like this:
Sony x300$399.99
Samsung v100$599.99

So, if you can answer this question (ideally in your sleep), we'd love to hear from you.

Culture Innova Partners on Flickr

Ever wonder what we do around here, besides crank out awesome web applications and release open-source PHP libraries?  Take a look at the Innova Partners group on Flickr, or at our neat little Flickr badge on the sidebar.  You'll see all sorts of stuff, from pictures of our office before it was finished, to the places we eat, to the sleek pool table where I constantly meet my shameful defeat.  We update it whenever something neat happens, so check back often.

(Thanks to Verle's Blog for the tips on Flickr badge creation — would've spent a lot longer without her.) 

E-mail It
Socialized through Gregarious 42