Friday, June 13, 2008

Artisan Bread in Five Minutes a Day

So I picked up this book in Borders the other day. Not because I thought it was likely to be brilliant (this is a no knead, low effort approach to bread baking that breaks every baking rule I have ever heard), but because in the unlikely event it actually did work as advertised it would be revolutionary.

Well, it's revolutionary.

If I had bought it from Amazon as I often do, I would have seen the glowing reviews and I might have been more eager to try the method (notice that the few negative reviews are obviously from people who didn't actually try it). But as it was it sat on my shelf until I found myself with a chunk of time to devote to it. Silly me, I didn't really need much of a chunk of time. You do need a couple of hours to prep the original dough (which goes in the fridge, to be used over and over), but most of the time is rising. Even the initial rising isn't critical, though, 2-5 hours. So just mix it up and go to the mall or something.

I have made just two loaves from the "master recipe", both simple small boules with slashes on the top and they were both great. I made them on both ends of doneness spectrum and they were both very good, although the more well done loaf had more character.

The only trick to this is that handling the very wet dough is quite tricky. I was not nearly liberal enough with the flour on the first loaf and ended up with a near terminal case of cooks club hand before I finally managed to shape a loaf. If you decide to try this method, a little visual aid might be helpful:



I used my kitchenaid with the dough hook, but from the video segment it appears that this was extreme overkill. I also used King Arthur bread flour, regardless of their advice. I will eventually try all purpose flour, I suppose, but my results were terrific, so I'm not really motivated to experiment.

The loaves were a bit misshapen, because I had some trouble releasing them from the peel. I think this was because I didn't use enough flour and the dough was wet enough to seep around the cornmeal. But they had visual character. :-)

I think the only real problem with this method is that it will tend to make flatish loaves because the dough is on the gooey side. But for breads where you can live with that I encourage you to give it a go.

The author who came up with the idea, by the way, is not a baker. He is a doctor who's career has dabbled in things like IT. Go figure.

David

Tuesday, June 10, 2008

Best. Hamburger. Ever.

I have had hamburgers on the brain lately. I just read Hamburger America, Bobby Flay's hamburger throw down was shown again, Cooks Illustrated had an article on the best hamburger, and Diners, Drive-Ins, and Dives has had a bunch of tasty looking burgers on it.

Based on all of these sources (and more) and my own personal preferences, I made a mental list of characteristics an ultimate burger needs to have. Then I cooked it up. It was by far the best burger that I have ever had.

1. The beef needs to be freshly ground. Most sources agree that fresh ground beef makes better burgers and I like my beef rare, so I am not going to trust ground beef from a mega-mart. I ground equal parts chuck steak and well marbled sirloin tips using the fine setting of my Kitchenaid grinder attachment. Some sources suggest grinding multiple times to evenly mix the fat, but I didn't want overly ground mush. Since I was using a mixer anyway, I mixed the beef up using the paddle after grinding.

2. Thick patty that is very pink in the middle. The first time I can remember thinking that hamburgers were really good food was the first time that I ate at Flaky Jake's. As far as I know Flaky Jake's is long dead, but it was a place kind of like Fuddrucker's, only better. You could watch them cut up and grind the meat and bake the buns while you were standing in line. That first Flaky Jake's burger was a nice thick rare patty and I have never had a burger that I thought was exceptional that didn't have that characteristic since.

3. Loosely packed patty. This was my first effort at loose packing, but all of the most reputable sources agree that it makes the burger better because it gives the juices a place to gather. After this burger, I'm sold. I guess my nice aluminum patty mold is junk now.

4. Appropriate meat to bun ratio. I had a burger the other day at Picadilly Pub which should have been decent, but was actually very disappointing. The burger was medium rare and good beef. The bun was nice. But the bun was too big for the patty and there weren't enough tomato slices to get tomato in every bite. My son's kid's meal burger was even worse - same bun, much smaller patty. Things have to be in proportion. I didn't want to bust my diet completely for my ideal burger, so I opted for small classic Pepperidge Farms buns. In an ideal world I would like a bun with a bit of a chew to the exterior crust, but not too much, with a fluffy interior. That's what I remember from Flaky Jake's, actually. But I think I would have to bake that myself. I made the patty about an 3/4ths inch thick and a bit bigger around than the bun.

5. Mustard. Yellow mustard. Lots. I kind of like Dairy Queen hamburgers - I always have. I have decided that the reason I prefer them is their liberal use of yellow mustard. It makes an otherwise ordinary uninteresting burger tangy and delicious.

6. No mayonnaise or ketchup. I have almost always put both on my burgers. But mayonnaise is really a remedy for a dry burger and ketchup is really a remedy for bad (or absent) tomatoes. I resolved not to need either.

7. A good crust on the meat. The Maillard reaction reigns supreme when it comes to developing flavors in food. Especially in meat. I think one of the reasons burgers work so well is that the ground beef exposes more surface area to crisp up. For this reason I eschewed my grill (in 94 degree weather!) in favor of cast iron. I have no regrets. Bobby says that seasoning helps the crust form. I did salt before crusting and fresh ground black pepper after.

8. Crisp iceberg lettuce. From the middle portion of the head (not the outside, not the center). It's all about the texture.

9. Ripe tomatoes. Enough slices to cover the patty.

10. Cheddar cheese. Sharp. American cheese has its place on cheeseburgers (and IMO nowhere else), but I prefer cheddar. The best pre-sliced sharp cheddar I have found comes from Cabot. I will of course repeat this experiment with blue cheese. Stilton burger anyone?

This burger turned out amazing. I was in a completely zen place while eating it. There was just me and the burger and the eating. Yum.

David

Monday, June 9, 2008

Fresh Mint Chocolate Chip Ice Cream

Our garden is in a state of extreme neglect. We bought the house partly because it had this wonderful 10'X20' raised bed garden and we had visions of farming wonderful produce. Unfortunately we only had a few real successes. There was the year of 10 varieties of basil (and hence fantastic chicken kaprow) and the year of endless fresh cucumber salad. But mostly the critters ate our veggies. We grew some mighty nice pumpkins, but I don't believe we ever managed to harvest one. It has been neglected for about 4 years now, a situation that isn't likely to change with a toddler in the house. There are trees growing in there with trunks two inches or more in diameter.

But there are still two "crops" that keep coming back. The catnip and the mint. We have a huge bumper crop of both at the moment.

The problem with mint is that I have never been able to figure out what to do with the stuff. I have made the occasional cup of mint tea and used it as a garnish a few times, but generally it just stays there and goes to seed (hence the bumper crop). I love mint, but I consume most of it in the form of Altoids and flavored desserts (generally made from an extract).

When I found this recipe, I was excited to have something to use up some of these weeds. Mint chocolate chip ice cream is my second favorite (after vanilla, of course). I have very fond memories of the Mint Truffle sundaes that I used to get with my dad at the now sadly defunct Bakers on Lake City Way in Seattle, so I expect I will have to try this with some kind of dark chocolate mint truffle in place of the chocolate at some point.

I have modified the recipe, because steeping the leaves in the milk, but removing them before making the custard makes a lot more sense to me. It avoids having to temper the yolks and it makes stirring and watching the custard much easier. It is clear that this method would work for lots of different infusions, so I will have to do some experimenting this summer.

This stuff is seriously good.

David

Fresh Mint Chocolate Chip Ice Cream

6 large egg yolks
3/4 cup sugar
2 cups whole milk
2 cups fresh mint leaves, clean, dry (salad spinner), and loosely packed (or more, put as much in as you can get submerged in the milk while helping with a spatula)
1 cup heavy cream
4 ounces semisweet chocolate, coarsely chopped

1. In heavy medium saucepan over moderately low heat, stir together milk, 1/4 cup sugar, and mint. Heat until steaming but not boiling, then remove from heat.

2. Allow the leaves to steep until cool enough to handle and not cook egg yolk. Remove the leaves, wringing them out well.

3. Whisk together egg yolks and 1/2 cup sugar and add them to the saucepan.

4. Place over low heat, and cook, stirring constantly, until mixture thickens enough to coat back of spoon (finger drawn across spoon will leave clear path), 5 to 6 minutes total (do not let boil or custard will curdle). Strain through fine-mesh sieve into large bowl. Whisk in heavy cream. Cover and chill until cold, at least 6 hours or overnight.

5. Process custard in ice cream maker, adding chopped chocolate during last minute of churning. Transfer to airtight container and freeze until hard, about 3 hours.

Saturday, June 7, 2008

Hacking GPS and Google Maps

OK, maybe not quite hacking. Still, this is a compendium of things that I have learned about my Garmin Nuvi 770, GPSes in general, and tools that work with them, especially Google Maps. Since half the people I know seem to have a new Nuvi, maybe someone will find some of this useful.

Extracting current data
The current favorites, routes, and so on are always available for export from a file called current.gpx. You could use this data to transfer favorites between units, or to convert favorites to custom POI, or to show your routes in Google Earth, or whatever. A very handy bit of data to be able to get to. As far as I can determine, this file is created exclusively for the purpose of having a generic way to export data so don't edit it. It is my guess that the generation of this file is what is happening when the progress bar is visible after plugging the Nuvi into a computer.

Data Transfer
Almost all of the data that is in the unit can be transferred to an SD card if you want. Including the built-in data. I've been told you can even transfer the maps if you rename them, but I haven't had the courage to try that. Moving data works great with added content, including MadMaps. And of course you can always just put it on the SD card in the first place for things like MP3 and Audible. This is useful because the Nuvi 770 doesn't come with a huge excess of memory.

You can also delete unused language files and other crap from the unit entirely.

Back everything up, of course, or you are an idiot.

Adding Routes
You can add gpx files to the gpx directory, then when you turn on the unit tell it to import the file. These will go into your routes.
Tools/My Data/Import Route from File

GPX file format and Garmin
Garmin has a bunch of extensions to the gpx standard that are worth knowing about. If you format your data this way you can get custom POIs with phone numbers that can be dialed, custom proximity alerts, and so on.

POI display
Custom POI, are never displayed in 3D map view on the Nuvi 770. To see custom POI, you have to be in a 2D view (like "track up") and you have to be zoomed in pretty close (300 ft). Built-in POI are only displayed in map browse view (that might not be the right term, but the view you get when you tap the map and it shows a flat 2D view that doesn't move). Favorites are always displayed, but there is a limit to how many you can have. My wife's StreetPilot has an option to always display icons for custom POI - I miss that option on my Nuvi. It is always fun to drive into Boston and see the approaching cloud of Starbucks.

Google Maps Routes to GPX (with turn by turn routing)
Use this simple javascript tool. This is extremely handy for creating custom routes since you can drag Google Maps routes around until they follow the roads you want. For scenic routes or motorcycle routes or the like, this is your friend.

Google Maps Result Points As Waypoints (favorites, not custom POI)
Use the Google Maps "Send To" function. This requires that you have the Garmin Communicator installed. There is a description of the whole procedure on the Garmin site and a video on YouTube.

Creating custom POI with Google Maps
One of the best ways to create custom POIs is with Google Maps using the My Maps functionality. Suppose that you have a hankering to try out some diners, so you go to Google Maps, center it on your home, and type "diner" into the search box. You pick interesting looking diners from the results, click on the flag on the map and click the "Save to My Maps" link. You might end up with something like this.

The Automated Method

You can automate a lot of the work with TakeItWithMe, which I only discovered after I figured out the whole process. Even using this tool, you may want to clean up some of the text, but it does a decent job.

The Manual Method (for the curious)

Notice that the My Maps page has a link to "View in Google Earth". This is a link to a KML file, but unfortunately it is an indirect KML file. Right-click on this and save a local copy. When you open it in a text editor you will see a line something like:
<link>
<href>http://maps.google.com/maps/ms?hl=en&amp;ie=UTF8&amp;oe=UTF8&amp;msa=0&amp;msid=102437472669334442804.00044ee9bbc7ace6c7aeb&amp;output=kml</href>
</link>
This is a link to the real KML file, but the link is XML encoded, so you have to clean it up by changing "&amp;" to "&" and so on. You can use the cleaned up URL to get the real KML file.

There are a number of tools that can convert that KML file into something useful. I convert it to a csv file so that I can do some clean up of the text. The combination of a spreadsheet (e.g. Excel) and a text editor that does regular expression search and replace (e.g. jEdit) will make quick work of whatever changes you need to make. Keep in mind that you usually have to swap longitude/latitude columns because the Garmin POILoader expects them in a specific order. In this exercise you are aiming for something that looks like:
-71.6122820,42.2680170,"South Street Diner","40 South St, Westborough, MA 01581 : (508) 870-0101"
-71.4331050,42.2753870,"Lloyd's Diner","184 Fountain St, Framingham, MA 01702 : (508) 879-8750"
-71.1579900,42.3710520,"Deluxe Town Diner","627 Mount Auburn St, Watertown, MA 02472 : (617) 926-8400"
-71.0761800,42.3370780,"Mike's City Diner","1714 Washington St, Boston, MA 02118 : (617) 267-9393"
-71.0576100,42.3496970,"Boston Diner Inc","178 Kneeland St, Boston, MA 02111 : (617) 350-0028"
-71.7924040,42.2603340,"Kenmore Diner","250 Franklin St, Worcester, MA 01604 : (508) 792-5125"
-71.2841490,41.9438210,"Morin's Diner","16 S Main St, Attleboro, MA 02703 : (508) 222-9875"
-71.4843220,41.9914170,"Patriots Diner","65 Founders Dr, Woonsocket, RI 02895 : (401) 765-6900"
-71.5169070,42.1428030,"Ted's Diner","64 Main St, Milford, MA 01757 : (508) 634-1467"
-71.1780010,42.2340240,"50'S Diner","5 Commercial Cir # 101, Dedham, MA 02026 : (781) 326-1955"
-71.0669330,42.3269120,"Victoria Diner","1024 Massachusetts Ave, Boston, MA 02118 : (617) 442-5965"
-71.2310410,42.3770640,"Wilson's Diner Inc","507 Main St, Waltham, MA 02452 : (781) 899-0760"
-71.1220090,42.3907700,"Andy's Diner","2030 Massachusetts Ave., Cambridge, MA 02140 : (617) 497-1444"
-71.8648150,42.1164820,"Carl's Oxford Diner","291 Main St, Oxford, MA 01540 : (508) 987-8770"
-71.4258650,41.8242380,"Haven Brothers Diner","72 Spruce St, Providence, RI 02903 : (401) 861-7777"
-70.9469680,41.8953630,"Dave's Diner","390 W Grove St, Middleboro, MA 02346 : (508) 923-4755"

Now just create a custom icon (if you want) and a custom alert tone (if you want) and load it up with your other custom POIs.

Hacking Sites Using Google API
There are lots of sites these days that are using bits of the Google Maps API. They often have a KML file at the heart of the map they are displaying and you can get at that by looking at the page source. Here is an example from roadfooddigest.com. If you look at the source for that page, you will see a reference to this xml (kml) file.

You can obviously directly use this KML file to create POI if you want to, following the manual method I just described.

But you can also do more cool stuff with Google Maps. Copy the URL for the KML file onto the clipboard, open up Google Maps, and paste the link into the search bar. Go ahead, I'll wait. Neat, huh? Believe it or not, this works with Google Maps Mobile on the blackberry as well.

You can also create a My Map based on KML data (create a new map, click the import link, and paste the KML URL or browse to the KML file).

David

Friday, June 6, 2008

Hamburger America POI

Here are the coordinates for the hamburger places mentioned in Hamburger America. This list is in no way a substitute for the book, which I recommend.

Any errors, especially geocoding errors, are mine. A couple of places required some research to get the coordinates (e.g. Meers Store) and I haven't been able to verify them all. In addition there are a few places that have multiple locations - in these cases the only location listed is the one from the book.

David

-80.117304,26.0184,Le Tub,"1100 North Ocean Drive, Hollywood, FL 33019 : 954-921-9425"
-95.025281,29.561779,Tookie's,"1202 Bayport Blvd., Seabrook, TX 77586 : 281-474-3444"
-95.383413,29.749837,Lankford Grocery,"88 Dennis Street, Houston, TX 77006 : 713-522-9555"
-95.430217,29.778471,Christian's Tailgate Bar and Grill,"7340 Washington Avenue, Houston, TX 77007 : 713-864-9744"
-90.061729,29.96443,Port of Call,"838 Esplanade Avenue, New Orleans, LA 70116 : 504-523-0120"
-90.153819,30.006054,Bozo's,"3117 21st Street, Metairie, LA 70002 : 504-831-8666"
-97.738046,30.266593,Casino El Camino,"517 East 6th Street, Austin, TX 78701 : 512-469-9330"
-97.750989,30.270245,Hut's Hamburgers,"807 West 6th Street, Austin, TX 78703 : 512-472-0693"
-97.742167,30.293632,Dirty Martin's Place,"2808 Guadalupe Street, Austin, TX 78705 : 512-477-3173"
-97.393206,32.737833,Kincaid's Hamburgers,"4901 Camp Bowie Blvd., Fort Worth, TX 76107 : 817-732-2881"
-117.251262,32.747164,Hodad's,"5010 Newport Ave, Ocean Beach, CA 92107 : 619-224-4623"
-117.134465,32.748599,Western Steakburger,"2730 University Ave., San Diego, CA 92104 : 619-296-7058"
-96.787063,32.849527,Burger House,"6913 Hillcrest Avenue, Dallas, TX 75205 : 214-361-0370"
-84.33487,33.747362,Ann's Snack Bar,"1615 Memorial Drive SE, Atlanta, GA 30317 : 404-687-9207"
-88.490908,33.98765,Bill's Hamburgers,"310 North Main Street, Amory, MS 38821 : 662-256-2085"
-118.427721,34.040607,The Apple Pan,"10801 W. Pico Blvd, Los Angeles, CA 90064 : 310-475-3585"
-118.420528,34.044164,Marty's,"10558 West Pico Blvd., Los Angeles, CA 90064 : 310-836-6944"
-118.370141,34.09079,Irv's Burger,"8289 Santa Monica Blvd., West Hollywood, CA 90046 : 323-650-2456"
-118.131526,34.136008,Pie 'N Burger,"913 E. California Blvd., Pasadena, CA 91106 : 626-795-1123"
-89.43399,34.767366,Philip's Grocery,"541 East Van Dorn Ave., Holly Springs, MS 38634 : 662-252-4671"
-96.673749,34.774694,Folger's Drive-Inn,"406 East Main St., Ada, OK 74820 : 580-332-9808"
-82.392948,34.864311,Northgate Soda Shop,"918 North Main Street, Greenville, SC 29609 : 864-235-6770"
-85.304754,35.033842,Zarzour's Cafe,"1627 Rossville Ave, Chattanooga, TN 37408 : 423-266-0424"
-97.93849,35.052286,J&W Grill,"501 West Choctaw Ave., Chickasha, OK 73018 : 405-224-9912"
-90.051677,35.139413,Dyer's Burgers,"205 Beale Street, Memphis, TN 38103 : 901-527-3937"
-80.791883,35.203914,South 21,"3101 East Independence Blvd., Charlotte, NC 28205 : 704-377-4509"
-96.91928,35.327615,Hamburger King,"322 E. Main St., Shawnee, OK 74801 : 405-878-0488"
-97.954975,35.531281,Sid's Diner (Onion Fried Burger),"300 South Choctaw, El Reno, OK 73036 : 405-262-7757"
-97.95256,35.531282,Johnnie's Grill,"301 South Rock Island, El Reno, OK 73036 : 405-262-4721"
-97.953848,35.531282,Robert's Grill (Onion Fried Burger),"300 South Bickford, El Reno, OK 73036 : 405-262-1262"
-105.898277,35.583718,Bobcat Bite (chile burger),"420 Old Las Vegas Highway, Santa Fe, NM 87505 : 505-983-5319"
-78.648083,35.780893,Char-Grill,"618 Hillsborough Street, Raleigh, NC 27603 : 919-821-7636"
-86.802406,36.130566,Brown's Diner,"2102 Blair Boulevard, Nashville, TN 37212 : 615-269-5509"
-86.807891,36.148084,Rotier's Restaurant,"2412 Elliston Place, Nashville, TN 37203 : 615-327-9892"
-80.607374,36.499644,Snappy Lunch,"125 North Main Street, Mount Airy, NC 27030 : 336-786-4931"
-79.938875,37.270595,Texas Tavern,"114 W. Church Avenue, Roanoke, VA 24011 : 540-342-4825"
-122.431725,37.728511,Joe's Cable Car Restaurant,"4320 Mission Street, San Francisco, CA 94112 : 415-334-6699"
-122.465006,38.501663,Taylor's Automatic Refresher,"933 Main Street, St. Helena, CA 94574 : 707-963-3486"
-121.490155,38.581195,Jim-Denny's,"816 12th Street, Sacramento, CA 95814 : 916-443-9655"
-97.610145,38.840949,Cozy Inn Hamburgers,"108 North 7th Street, Salina, KS 67401 : 785-825-2699"
-77.028716,38.917079,Ben's Chili Bowl,"1213 U Street NW, Washington, DC 20009 : 202-667-0909"
-94.585526,39.041996,Winstead's,"101 Emanuael Cleaver II Blvd, Kansas City, MO 6411 : 816-753-2244"
-95.706223,39.051415,Bobo's Drive In,"2300 SW 10th Ave, Topeka, KS 66604 : 785-234-4511"
-94.588804,39.088435,Town Topic,"2021 Broadway Street, Kansas City, MO 64108 : 816-842-2610"
-104.962421,39.437279,Bud's Bar,"5453 Manhart Street, Sedalia, CO 80135 : 303-688-9967"
-84.288718,39.641525,Hamburger Wagon,"12 East Central Ave., Miamisburg, OH 45342 : 937-847-2442"
-82.9912,39.939507,Thurman Cafe (Thurman Burger),"183 Thurman Ave., Columbus, OH 43206 : 614-443-1570"
-82.878537,40.018969,Gahana Grill,"82 Granville Street, Gahanna, OH 43230 : 614-476-9017"
-83.762365,40.108587,Crabill's Hamburgers (grease sliders),"727 Miami Street, Urbana, OH 43078 : 937-653-5133"
-74.739426,40.211125,Rossi's Bar & Grill,"501 Morris Ave., Trenton, NJ 08611 : 609-394-9089"
-79.950827,40.462668,Tessaro's,"4601 Liberty Avenue, Pittsburgh, PA 15224 : 412-682-6809"
-74.00378,40.738821,Corner Bistro,"331 West 4th Street, New York, NY 10014 : 212-242-9502"
-84.107005,40.740246,Kewpie,"111 North Elizabeth Street, Lima, OH 45801 : 419-228-1778"
-73.642911,40.757216,Hildebrandt's,"84 Hillside Avenue, Williston Park, NY 11596 : 516-741-0608"
-73.968323,40.759,P.J. Clarke's,"915 Third Avenue, New York, NY 10022 : 212-317-1616"
-111.899554,40.772049,Crown Burgers,"118 North 300 West, Salt Lake City, UT 84103 : 801-532-5300"
-83.650418,41.035527,Wilson's Sandwich Shop,"600 S. Main St., Findlay, OH 45840 : 419-422-5051"
-95.920771,41.159921,Stella's Hamburgers,"106 Galvin Road South, Bellevue, NE 68005 : 402-291-6088"
-72.931521,41.306944,Louis' Lunch (on toast),"263 Crown St., New Haven, CT 06510 : 203-562-5507"
-72.930283,41.310778,Yankee Doodle Coffee Shop,"258 Elm Street, New Haven, CT 06511 : 203-865-1074"
-72.783276,41.54681,Ted's Restaurant (Steamed),"1044 Broad St., Meriden, CT 06450 : 203-237-6660"
-73.37938,41.65486,Clamp's Hamburger Stand,"Route 202 (Near Marbledale, CT), New Milford, CT 06776 : No Phone"
-91.531414,41.663849,Hamburg Inn No. 2,"214 North Linn Street, Iowa City, IA 52245 : 319-337-5512"
-85.995655,41.66681,Hennies,"1743 West Lusher Ave, Elkhart, IN 46517 : 574-522-9101"
-87.675431,41.721229,Top Notch Beefburger Shop,"2116 West 95th Street, Chicago, IL : 773-445-7218"
-86.737016,41.797118,Redamak's,"616 East Buffalo Street, New Buffalo, MI 49117 : 269-469-4522"
-87.624188,41.890197,Billy Goat Tavern,"430 N. Lower Michigan, Chicago, IL 60611 : 312-222-1525"
-92.907829,42.047712,Taylors Maid-Rite (loosemeats),"106 South 3rd Ave, Marshalltown, IA 50158 : 641-753-9684"
-83.744138,42.27524,Krazy Jim's Blimpy Burger,"551 South Division Street, Ann Arbor, MI 48104 : 734-663-4590"
-83.267391,42.301089,Miller's Bar,"23700 Michigan Ave, Dearborn, MI 48124 : 313-565-2577"
-71.116211,42.372476,Mr. Bartley's Burger Cottage,"1246 Massachusetts Ave, Cambridge, MA 02138 : 617-354-6559"
-88.805679,43.005208,Peterson's Hamburger Stand and Ice Cream Parlor,"200 East Racine Street, Jefferson, WI 53549 : 920-674-3637"
-89.395782,43.072306,Dotty Dumpling's Dowry,"317 North Frances St., Madison, WI 53703 : 608-259-0000"
-89.390047,43.075022,The Plaza Tavern,"319 N. Henry Street, Madison, WI 97213 : 608-255-6592"
-70.759378,43.077309,Gilley's PM Lunch,"175 Fleet Street, Portsmouth, NH 03801 : 603-431-6343"
-87.917159,43.100851,Solly's Grille,"4629 North Port Washington Road, Milwaukee, WI 53212 : 414-332-8808"
-96.726134,43.545892,Hamburger Inn,"111 East 10th Street, Sioux Falls, SD 57104 : 605-332-5412"
-70.298066,43.744913,Harmon's Lunch,"144 Gray Road, Falmouth, ME 04105 : 207-797-9857"
-96.798754,44.30947,Nick's Hamburger Shop,"427 Main Avenue, Brookings, SD 57006 : 605-692-4324"
-93.247796,44.897823,The 5-8 Club,"5800 Cedar Ave South, Minneapolis, MN 55417 : 612-823-5858"
-93.247567,44.939343,Matt's Bar,"3500 Cedar Ave South, Minneapolis, MN 55407 : 612-722-7072"
-122.718188,45.41116,Giant Drive-In,"15840 Boones Ferry Road, Lake Oswego, OR 97035 : 503-636-0255"
-122.612326,45.548472,Stanchi's Tavern,"4915 NE Fremont Street, Portland, OR 97213 : 503-281-2322"
-122.916826,45.596321,Helvetia Tavern,"10275 NW Helvetia Rd., Hillsboro, OR 97124 : 503-647-5286"
-112.53808,45.990089,Matt's Place Drive-In,"2339 Placer St., Butte, MT 59701 : 406-782-8049"
-113.995355,46.871236,The Missoula Club,"139 West Main St., Missoula, MT 59802 : 406-728-3740"
-122.328069,47.661245,Dick's Drive-In,"111 N.E. 45th Street, Seattle, WA 98105 : 206-632-5125"
-72.484621,41.786098,Shady Glen (Bernice Original),"840 Middle Turnpike E, Manchester, CT 06040 : 860-649-4245"
-75.547549,39.795675,Charcoal Pit,"2600 Concord Pike, Wilmington, DE 19803 : 302-478-2165"
-77.001601,38.886625,Tune Inn,"331 Pennsylvania Ave SE, Washington, DC 20003 : 202-543-2725"
-116.784095,47.673756,Hudson's Hamburgers,"207 E Sherman Ave, Coeur D'Alene, ID 83814 : 208-664-5444"
-87.892954,39.190699,Moonshine Store,"6017 E 300th Rd, Annapolis, IL 62413 : 618-569-9200"
-72.601572,42.096449,White Hut,"280 Memorial Ave, West Springfield, MA 01089 : 413-736-9390"
-74.038528,40.889334,White Manna Hamburgers (sliders),"358 River St, Hackensack, NJ 07601 : 201-342-0914"
-106.869362,33.917736,Owl Bar & Cafe,"77 US Highway 380, San Antonio, NM 87832 : 505-835-9946"
-73.907224,40.745225,Donovan's Pub,"57-24 Roosevelt Ave., Queens, NY 11377 : 718-429-9339"
-98.581696,34.782228,The Meers Store & Restaurant (long horn beef),"Highway 115, Meers, OK 73501 : 580-429-8051"
-75.315698,39.897004,Charlie's Hamburgers,"336 Kedron Ave, Folsom, PA 19033 : 610-461-4228"
-122.872637,47.04592,Eastside Big Tom,"2023 4th Ave E, Olympia, WA 98506 : 360-357-4852"

Wednesday, May 28, 2008

The Dark Side of REST?

My organization is considering a move from a SOAP based SOA to a RESTful SOA. To be sure there are advantages and disadvantages to both, but I just encountered a problem with REST that I hadn't really pondered before.

I have used RESTful APIs before, but only to play with. I have messed with the Google Docs API using both REST (from Java and J2ME) and the Java libraries and done some other playing around. But I have never used a RESTful API in anger before. I have never really used one to solve a problem.

Well, I just did. And I found the experience unexpectedly enlightening.

The problem is a typical one for a geek like me. I recently got a book, Hamburger America, that has detailed reviews of 100 or so of the best hamburger places in America. Being a GPS owning geek and foodie I of course wanted to turn that into a custom POI file for my GPS so that I would always know when a truly great hamburger might be nearby.

I wanted to make sure I had a workable process before I spent a bunch of time typing in 100 addresses. So I grabbed the addresses of a bunch of highly rated burger places in the NE from the Phantom Gourmet and sent them to a couple of batch geocaching sites.

Alas, for whatever reason I got zilch. The stupid batch web geocaching apps don't do much in the way of user friendly error reporting. But they all use the Yahoo Maps API, so I figured I would simply write a little app myself if I thought it could be done in under 15 minutes.

10 minutes later I had a working Java Swing app that does batch conversions of addresses to latitude/longitude. That says a lot about the simplicity and power of REST, doesn't it? (It also says a lot about how easy it is to use Netbeans 6, but that's another post).

But the code I wrote was awful. Really horrid stuff. I hard coded everything that I shouldn't and I did the parsing without XML libraries using really basic String matching. It was easy and fast and it works great, but the tiniest change to the library and the whole thing will fall over.

Anyway, if you haven't guessed, the observation I made was this: it is extremely easy, to the point of being by far the path of least resistance, to write bad client code for a RESTful service. It is much easier to write bad code against a RESTful API than against a SOAP API (because the SOAP library, which is all but required, will do the heavy lifting for you).

We have our share of bad code lying about - we don't really need to be encouraging anyone to write more of the stuff. What can we do to prevent or discourage bad coding practices for RESTful APIs?

David

Sunday, May 18, 2008

Crepes, crepes, crepes

I got a new crepe pan on impulse when I was in the mall the other day and I am extremely pleased with it.

For some background let me start by saying that I have been doing a lot of cast iron cooking lately, making me appreciate the qualities of a properly seasoned iron pan. So when I saw a DeBuyer crepe pan I was predisposed to fall in love with it. It is thin enough to heat fairly fast, small enough to aid in portion control, thick enough and made of the right material to heat evenly, light enough to be easy to manage for swirling batter, and simple and sturdy enough to last generations if properly cared for.
Crepe pan photo
It is an extremely simple affair. A piece of punched out sheet steel with a handle spot welded to it.

I got it home and seasoned the crap out of it on the stove top. Before I ever used it I had it looking like something that has been around for decades. But boy does it ever work!

It outperforms the best non-stick cookware I have ever used. The crepes turn out perfectly time after time. The pan stays hot, so I can easily make crepe after crepe, factory style. I have never cooked a crepe before, but the first one I cooked was perfect, as was every single one since (so far at least).

The more I cook, the more I appreciate the simple tools that our grandparents used to cook with and the less I understand the fancy cookware that is so in vogue these days. You can't even buy a cast iron frying pan in a lot of otherwise well stocked kitchen supply stores. It is sad really.

My favorite crepe shop closed recently (across the street from MGH in Boston), but I think I will miss it a little less now. I will certainly have crepes more often.

David