Project of the Month, August 2005

By Community Team

Gourmet Recipe Manager Logo

Project Leader:

Name: Thomas HinkleThomas Hinkle
Age: 26
Occupation or experience: Educator
Education: A.B. in Comparative Lit, M.A.T. in the Teaching of English, both from Brown University
Location: Boxboro, MA

Key Developers:

Roland Duhaime – Windows porting, Roland worked closely with me to get the Windows release up and running.

Richard Ferguson – Richard made a lot of great UI suggestions for how Gourmet could look and feel a lot better. He did a rewrite of our unit converter dialog as a proof-of-concept. Consequently, I did a lot of work tweaking dialogs with his improvements in mind.

R.S. Born submitted some patches helping me get MealMaster export right.

Translators: All the translators, whose numbers have increased greatly thanks to Mark Shuttleworth’s lovely Rosetta tool that I’ve started using to manage translations.

Quote about SourceForge.net?

SourceForge.net lets anyone start a real project. I’m a Spanish teacher with no training in programming. No one in their right mind would have hired me to write code a year ago, but SourceForge.net lets me have the space to practice and get a community of users and good bug reporters helping me build software. Without SourceForge, I could never have made myprogramming hobby real, I could never have felt like my work was actually going into the world. With SourceForge, Gourmet is a real application. It’s made it into a few of distributions, and it’s been downloaded thousands of times.

Why did you place the project on SourceForge.net?

It was a no-brainer. SourceForge.net is where I go to look for existing projects, so it was a logical place to host my project. You made it incredibly easy to get started, and you were wonderfully helpful when I was first figuring out how to use CVS and whatnot. The bug-tracker, the ego-gratifying statistics, the mailing-list — it’s all become essential to my project. It’s what’s made Gourmet a real open source project and not just a random Web site with a random piece of software on it.

The number one benefit of using SourceForge.net is:

Instant community.

Description of project:
Gourmet is a recipe manager designed for the GNOME desktop but functional on any platform with GTK, including Windows. Gourmet make it easy to search for recipes, generate shopping lists, and import recipes from other sources, such as MealMaster archives or Web pages. Gourmet’s shopping list generator includes features such as tracking ingredients users already have and sorting their list into categories.

Trove info:

  • Operating system: *nix and Windows, Hardware doesn’t matter too much
  • License: GPL
  • Programming language: Python (PyGTK for the GUI part, metakit for the database part — thanks go to the PyGTK mailing list and excellent documentation.)

Why and how did you get started?

I wanted a nice way to automatically generate shopping lists for grocery shopping. I’d written a basic manager in Emacs Lisp, but it wasn’t doing a good job and I didn’t imagine it could be useful to anyone but myself. I decided to try to make a recipe manager that would be useful for anyone. I did a quick survey of available recipe software and found most of it didn’t suit my needs for one reason or another — annoyinginterfaces, setups that made it hard to type in ingredients, and so on. I came up with a goal of greating a GNOME HIG-compliant recipe manager. It was mostly a challenge to myself — I’d been programming Python as a hobby for a while and wanted to start a real project to see if I could do it.

What is the software’s intended audience?

Anyone who cooks. I actually use Gourmet mostly as a shopping list generator, because I prefer reading my recipes from books and other things that won’t fail if they get gooey in the kitchen. But I think there are people who get most of their recipes from the computer, and then do most of their cooking. A lot of old MealMaster users like Gourmet.

How many people do you believe are using your software?

We’ve had tens of thousands of downloads, so I’ll guess at least 1,000 people use it, but I don’t really know.

What are a couple of notable examples of how people are using yoursoftware?

I’ve had requests from chefs who wanted to customize Gourmet in various ways for restaurant use. Every so often I get a complaint from someone who says they tried to import 10,000 recipes and Gourmet didn’t behave well.

What gave you an indication that your project was becoming successful?

Getting bug reports. That, and when SourceForge.net’s statistics showed me Gourmet’s popularity had exploded. I really had no idea how popular it had become.

What has been your biggest surprise?

See above. Actually, my biggest surprise is getting POTM.

What has been your biggest challenge?

I still haven’t included support for nutritional information. Getting over that hump is a big challenge for various reasons, mostly UI related. I’m aiming for Gourmet 1.0 to support nutritional information elegantly — calculating the basics without the need for user intervention and letting users quickly enter new information as they see fit.

The other thing that’s a pain is importing recipes. There’s no real standard format for exchanging recipes, or rather, the formats everybody uses are not really standardized and are broken in ways that make importing accurately a problem. It’s the kind of area that makes every bug fix create three more bugs. My goal is to break as few imports as possible, which is not a very inspiring goal.

Why do you think your project has been so well-received?

I think my focus on usability has been a big help. I’ve also been responsive to bug reports, and I try to always encourage reporters to report more bugs. Of course, it’s annoying finding out your software isn’t perfect, but it helps bring a community alive. I got some UI help early on from Richard Ferguson, a contributor. His ideas helped transform the recipe card interface into something much more attractive and usable.

Where do you see your project going?Once nutritional support works, I see a whole new group of uses and users coming along. My goal is really to make nutritional support just work for as many users as possible — in English, at least, which is the language of the free USDA nutritional database.

What’s on your project wish list?

Nutritional information. This seems like a simpler problem than it is. I want Gourmet to handle nutritional information sensibly, which means not requiring hours of input from users (or from developers!). My goal will be to make sure Gourmet knows about most fundamental incredients (sugar, flour, butter), and to make it behave well when it has only some information (because most of the time you don’t care how many calories the unknown ingredients provide — for instance, garlic and jalapeños make a big difference to flavor, but matter little for a nutritional calculation). Still, consistently getting the program to see the connection between the user-input “3 Tomatoes, seeded and chopped roughly” and the USDA information for x grams of “TOMATOES, RIPE, RED, YEAR ROUND AVERAGE” will not be easy.

The other thing is to work on Web import. I’ve written a basic scraper architecture that lets me very easily add support for new recipe Web sites. What I’d love to develop is an attractive, simple architecture to let users create new scrapers for sites they use or, failing that, a nice generic way to let users select and import recipe information from any Web page, because I think that’s how lots of cooking and finding of new recipes happens (for geeks anyway).

I envision a Firefox plugin to send recipes to Gourmet as well. I’m also considering integrating Gourmet’s shopping list with an applet — possibly with a note-taking system like Tomboy — so that you can easily add items to your shopping list over the course of the week, regardless of your cooking needs, and then have them integrated with your recipe-based shopping list later.

What are you most proud of?

The UI of the pantry list, which is how Gourmet handles items you don’t want to buy when you generate a shopping list. This takes care of one of the major problems of generating shopping lists from recipes, which is that most of the time you can count on having, for instance, flour, so you don’t want it printed out on your shopping list, but you do want to be reminded that you need it, just in case. Gourmet’s UI shows you two lists side by side — your shopping list and your “already have” (pantry) list. You can drag and drop between the two lists to say you don’t need to buy an item on your shopping list or that you need to buy something usually in your pantry.

This UI was my wife’s idea and it’s miles better than anything I had thought up. It’s simple and easy to use. Because your choices persist between sessions, Gourmet learns what items you usually have. The nice thing about it is that it doesn’t require any extra steps in terms of interface — its all integrated into the way the shopping list is displayed.

How do you coordinate the project?

I do just about everything. I mail the devel list when I have a question I want input on. I’d love to get more help fixing bugs and whatnot. I do get the occasional patch and I have some good bug reporters, but mostly this has been a one-man show.

Do you work on the project full-time, or do you have another job?

I’m a Spanish teacher by day. For what it’s worth, I taught English literature when I started the project.

How much time would you say you spend, per week, on the project?

Anywhere from 2 to 40 hours, depending.

What is your development environment like?

GNU/Linux on every machine in the house. I do most of my development on a LAC Linux laptop running Ubuntu Hoary Hedgehog. The machine hasn’t been a dream, but it’s fast and it works. Every so often the laptop breaks and I end up back on one of two six-year-old machines (a beige G3 and aPentium II) which always helps remind me of performance issues with Gourmet.

Of course, Python’s a dream to work with because the interpreter’s always at hand. I use Emacs with python-mode. Gourmet’s GUI was build with Glade, which isn’t quite what it should be but has been useful. Luckily, Gazpacho is coming along and may well be useful for future PyGTK projects.

Milestones

  • 0.4 Gourmet went “spatial,” which was a big plus.
  • 0.7.x Roland Duhaime built the first Windows release. This was a major accomplishment — I knew building for Windows was theoretically possible but I wasn’t very interested in it at first. Roland made this happen and it expanded the userbase dramatically.
  • 0.8.4 or so, Gourmet got support for scraping Web pages, which saves me loads of time when I want to get a new recipe.

How can others contribute?

They can e-mail me if they want to get involved. There’s no task list yet because I haven’t had enough volunteers to make it necessary. Having more help on the Windows end would be great — I’ve just gotten a new volunteer to help with builds, but I could always use more help getting Windows working right. A simple task, for example, would be for someone to use the new PyGTK 2.6 features to make the button order right on Windows (windows button order is the opposite of GNOME).

We could use lots of simple stuff, from a nicer Web site to better icons (I drew all the “art” in Gourmet and believe me I’m no artist).

As far as code goes, patches are always nice. Adding a new import or export filter would probably be a good place to start contributing. It would be nice if we exported every format we import, which we don’t at present. It would also be nice if we imported RecipeML (I’ve put this off because of licensing issues, but I’m betting that in spite oftheir confusing license, no one will sue me if I support the format).

Finally, the database back end could use some love.