Sunday, December 4, 2011

iOS App Development with PhoneGap and Spine Mobile: iOS Example App

In my prior post, I made a simple modification to Alex MacCaw's mobile contacts example. Today I'll walk through the steps to wrap it with PhoneGap as an iOS application.

Detailed directions are available for setting up PhoneGap for iOS using Xcode. You'll also want to read Alex MacCaw's documentation on integrating Spine Mobile with PhoneGap. It's in the early stages of development so there is a bit of manual tweaking necessary.

Setup an Initial PhoneGap Project

Open a terminal and change to your spine mobile application directory. 

$ cd ~/Documents/spine.mobile.contacts
Create a subdirectory for your Xcode project. Alex suggests using ./build/ios within your spine project directory (e.g. ~/Documents/spine.mobile.contacts/build/ios).
Start Xcode and select the PhoneGap-based application template.



Enter your Product Name and Company Identifier. I chose MyContacts. Not very original, eh? 



Change the Scheme to iPhone 5.0 Simulator and run the application. You'll get a warning indicating the www folder is missing from your project and the iPhone Simulator will display an error message that index.html was not found.





Quit the iOS Simulator. Drag the www folder created in the project directory onto the project folder in Xcode. This will add a reference to it in your Xcode project. 




In the dialog box that pops up, make sure you check the Create folder references for any added folders option.




Run the project again and you'll get a default sample PhoneGap application with an alert in the iOS Simulator. It works!





Tweak your Spine Mobile Application for PhoneGap

You need to add phonegap.js to your spine mobile application. The current version is named phonegap-1.2.0.js. Make a new directory in the spine project directory called lib (~/Documents/spine.mobile.contacts/lib). Copy phonegap.js from the www directory (~/Documents/spine.mobile.contacts/build/ios/MyContacts/www) into the new lib directory. You also need to add phonegap.js to the libs section of the slug.json file.

{
  "dependencies": [
    "es5-shimify",
    "json2ify",
    "jqueryify",
    "gfx",
    "spine",
    "spine/lib/local",
    "spine/lib/ajax",
    "spine/lib/route",
    "spine/lib/tmpl",
    "spine/lib/manager",
    "spine.mobile"
  ],
  "libs": [
    "./lib/phonegap-1.2.0.js"
  ]
}

I also needed to modify the spine.mobile.contacts index.html page slightly. Change href="/application.css" and src="/application.js" to href="./application.css" and src="./application.js".

<!DOCTYPE html>
<html>
<head>
  <meta charset=utf-8>
  <title>App</title>
  <link rel="stylesheet" href="./application.css" type="text/css" charset="utf-8">
  <script src="./application.js" type="text/javascript" charset="utf-8"></script>
  <script type="text/javascript" charset="utf-8">
    var jQuery  = require("jqueryify");
    var exports = this;
    jQuery(function(){
      var App = require("index");
      exports.app = new App({el: $("body")});
    });
  </script>
  <meta name="viewport" content="width=device-width; initial-scale=1.0; minimum-scale=1; maximum-scale=1.0; user-scalable=0;"/>
  <meta name="apple-mobile-web-app-capable" content="yes" />
  <meta name="format-detection" content="telephone=no" />
</head>
<body>
</body>
</html>

Compile your application with hem from the spine project directory.$ hem build
At this point you could test your spine mobile application using a browser. Just run hem server and browse to http://localhost:9294/. You can even use your iPhone/iPod Touch if your computer firewall will allow it. Run a command like ifconfig or look in your network preferences for your ip address (e.g. http://192.168.1.112:9294).

$ hem server

You need to copy the contents of the spine mobile project public directory (~/Documents/spine.mobile.contacts/public) to the www directory in the Xcode project (~/Documents/spine.mobile.contacts/build/ios/MyContacts/www). You'll need to do this after each hem build. I added a step to the build phase to automate this. You could also add a command to build your spine mobile project before it's copied. For now, just copy application.css, application.js, cache.manifest, favicon.ico, and index.html manually. 

Run the Xcode project again... Voila!

You now have a working iOS application. Future posts will include setting up icons, syncing data with a server, etc.










Thursday, November 24, 2011

King Arthur Banana Bread

Finally used up our stash of over-ripe frozen bananas. We eat a log of bananas. Ocassionaly, we don't finish them off before they are too ripe so we toss them in the freezer whole - peel and all. When you need them, take them out of the freezer and thaw. Or you can peel them while frozen and nuke to defrost. They're also great for making a smoothie while still frozen (sans peel of course).

Used a recipe from King Arthur Flour and their white whole wheat flour. The crumb is nice and the texture even. It's slightly dry for my taste. Probably should substitute some of the butter with applesauce, use egg substitute, and perhaps use a 50/50 mix of whole wheat and white flour.

Ingredients

1/2 cup unsalted butter, at cool room temperature
2/3 cup brown sugar, light or dark, firmly packed
1 teaspoon vanilla extract
1 teaspoon ground cinnamon
1/4 teaspoon ground nutmeg
1 teaspoon baking soda
1 teaspoon baking powder
1 teaspoon salt
1 1/2 cups mashed ripe bananas (about 3 medium or 2 large bananas)
3 tablespoons apricot jam or orange marmalade, optional but tasty
1/4 cup honey
2 large eggs
2 1/4 cups King Arthur Unbleached All-Purpose Flour
1/2 cup chopped walnuts, optional

Directions

Preheat the oven to 325°F. Lightly grease a 9" x 5" loaf pan.

In a large bowl, combine the butter, sugar, vanilla, cinnamon, nutmeg, baking soda, baking powder, and salt, beating till smooth.

Add the mashed bananas, jam, honey, and eggs, again beating until smooth.

Add the flour, then the walnuts, stirring just until smooth.

Spoon the batter into the prepared loaf pan, smoothing the top. Let it rest at room temperature for 10 minutes.

Bake the bread for 45 minutes, then gently lay a piece of aluminum foil across the top, to prevent over-browning.

Bake for an additional 25 minutes. Remove the bread from the oven; a long toothpick or cake tester inserted into the center should come out clean, with at most a few wet crumbs clinging to it. The tester shouldn't show any sign of uncooked batter. If it does, bake the bread an additional 5 minutes, or until it tests done.

Allow the bread to cool for 10 minutes in the pan. Remove it from the pan, and cool it completely on a rack.



Nutritional Info

Serving Size 1 slice (60g)
Servings Per Batch 18
Amount Per Serving

Calories 170 
Calories from Fat 50 

Total Fat 6g 
Saturated Fat 3.5g 
Trans Fat 0g 
Cholesterol 35mg
Sodium 230mg
Total Carbohydrate 27g
Dietary Fiber 1g
Sugars 14g
Protein 3g

Crock Pot Pulled Pork with BBQ Sauce

There are few foods as magical as pork. Steak is great and might just be the king of protein. But would any sane person seriously believe bacon is anything but meat candy. I've always wanted to make pulled pork but have never tried. I have no idea why not. It's almost as easy as frying bacon in the oven.


Ingredients

1 yellow onions, sliced thick
2 to 3 pounds pork butt or shoulder - really, you want as much as will fit in your crock pot
Salt and pepper
Garlic powder
Onion powder
4 Whole cloves
2 cans Verners - oh, you can use Canada Dry if you must, but I live in Michigan :-)
Your favorite barbeque sauce - I like Sticky Fingers Memphis Style
2 tablespoons Worcestershire Sauce
Buns, Sandwich Thins, or some kind of crusty bread

Directions

Rub the pork with equal quantities of salt, pepper, garlic powder, and onion powder. You can use your favorite dry rub. This was just what we had on hand.

Put half the onion slices on the bottom of the crock pot.

Dump the pork into the crock pot and layer the top with the remaining onion slices.

Pour enough Verners into the crock pot to cover. I had so much pork, I had to shift it around to make sure the Verners worked its way to the bottom. Toss in the whole cloves.

Turn the crock pot to the lowest setting and cover. You want this to go low and slow. It needs to simmer at least 12 hours. We did ours overnight and didn't need to add liquid.

After 12 hours, remove the pork and onion slices and place them on a sheet pan so they cool quickly. Discard the liquid. Separate the fat and bones from the meat breaking the meat into chunks. I don't see how you can avoid breaking up the meat. At this point it's falling apart.

Return the meat and onions to the crock pot. Mix in Worcestershire Sauce and barbeque sauce. Turn the crock pot to the highest setting and reheat for an hour or use the microwave. We coudn't wait that long.

Pile the pulled pork on the bread and eat. What else are you going to do with it?

Migration from Posterous

I was blogging at Posterous but have decided to migrate here. Their recent change to mimic Google+ and Facebook is not really blog-worthy. 


So, all of the posts today are old ones I'm moving over by hand. Posterous doesn't make it easy to leave - no export tool.

King Arthur Amish Dinner Rolls

This is a tweaked version of the Amish Dinner Roll recipe from the King Arthur Flour Baker's Catalogue. 

You can find the original recipe here http://www.kingarthurflour.com/recipes/amish-dinner-rolls-recipe

Ingredients

2 eggs
1/3 cup sugar
1 1/2 teaspoons salt
6 tablespoons butter
1 cup mashed potatoes
2 1/2 teaspoons instant yeast
3/4 cup potato water (water used to boil potatoes)
4 1/2 cups unbleached all-purpose flour


Instructions
Combine all of the ingredients in the bowl of your Kitchen-aid mixer. Mix the dough with a dough hook, knead for 8 minutes. Resist the urge to add more flour, the dough will be very sticky.

Remove the dough from the mixer bowl to a floured surface. Knead the dough by hand for a couple of minutes. The dough should now be smooth and shiny.

Place the dough in a lightly greased bowl, turn to coat, and cover with plastic wrap sprayed with Pam to prevent sticking. Allow dough to rise until doubled in bulk, about 90 minutes.

Dump the dough onto a floured surface. Knead a few times to work out bubbles. With a stainless steel dough scraper, divide the dough into 16 equal pieces. The next part is a bit complicated to explain. You need to roll the dough into smooth balls.

Dust your hands with flour. Place a piece of dough on the half curled finger tips of both hands with your palms facing up. Gently stretch the dough into a mushroom cap by pressing your thumbs down the side of the dough ball whilst pressing your fingers up. Pinch the bottom of the dough together to form a ball. Rotate the dough ball half a turn to the right or left, keeping the pinched end down. Repeat a few times, dusting your hands as needed. You should find the top and sides of the dough ball get smoother with each turn. If this is a bit complicated, you can always roll the dough ball in your hands but the resulting ball won't be as smooth.

Lightly grease a pan. For pull-apart-rolls, place the dough balls about half an inch apart on the pan. This will give you rolls with a nice brown top and bottom, and nice white sides where they touch. For stand-alone-rolls, place the dough balls about 2 inches apart. Cover the rolls with plastic wrap sprayed with Pam, and allow to rise for 1 1/2 to 2 hours, until they are quite puffy. The pull-apart-rolls with be touching each other.

Preheat an oven to 350 degrees. Bake the rolls on the center rack, for 15 minutes or until golden brown. Carefully slide the rolls onto a cooling rack, and brush them with melted butter if desired.


Nutritional Information 
per serving (1 roll = 74g)
200 calories
6 grams fat
5 grams protein
28 grams complex carbohydrates
4 grams sugar
1 gram dietary fiber
41 milligrams cholesterol
223 milligrams sodium
117 milligrams potassium

Wednesday, November 23, 2011

Vegan Pumpkin and Cranberry Muffins Recipe - Modified


My first attempt at Isa Chandra Moskowitz's Vegan Pumpkin Muffin didn't fare well. They were undercooked and dense. I was pretty sure the cranberries added too much moisture to the basic recipe.

A small adjustment (1/2 the soy milk) and an ingredient substitution (substitute 1/2 of the oil with apple sauce) gave better results. I think baking them longer helped too. 

Here's the modified recipe.

Vegan Pumpkin and Cranberry Muffin

Ingredients

1 3/4 cups King Arthur all-purpose flour
1 1/4 cups sugar
1 tablespoon baking powder
1/4 teaspoon salt
1 teaspoon ground cinnamon
1/2 teaspoon ground or freshly grated nutmeg
1/2 teaspoon ground ginger
1/4 teaspoon ground allspice
1/8 teaspoon ground cloves
1 cup pureed pumpkin (not pie mix)
1/4 cup soy milk (reduced from original recipe's 1/2 cup)
1/4 cup vegetable oil (
reduced from original recipe's 1/2 cup)
1/4 cup natural apple sauce (to reduce original recipe's vegetable oil)
1 cup whole fresh cranberries
2 tablespoons maple syrup (original recipe is molasses)

Directions

Preheat oven to 400°F. Use paper muffin liners or lightly grease a twelve-muffin tin.

Roughly chop the cranberries. I like larger chunks of cranberry in the muffin. 

Sift together flour, sugar, baking powder, salt, and spices. In a separate bowl, whisk together pumpkin, soy milk, oil, apple sauce, chopped cranberries, and maple syrup. Mix together the wet and dry ingredients.

Evenly fill the muffin cups. Mine ended up about three-fourths full. Bake for 25 to 28 minutes, until a toothpick or knife inserted in the center comes out clean.

Nutritional Information


Per Muffin
Calories 193.6
Total Fat 2.9 g
Saturated Fat 1.8 g
Polyunsaturated Fat 0.1 g
Monounsaturated Fat 0.1 g
Cholesterol 0.0 mg
Sodium 175.8 mg
Potassium 93.4 mg
Total Carbohydrate 41.2 g
Dietary Fiber 1.8 g
Sugars 24.2 g
Protein 2.4 g

Tuesday, November 22, 2011

iOS App Development with PhoneGap and Spine Mobile: Example App



Alex MacCaw, the creator of Spine and author of O'Reilly's JavaScript Web Applications, has a simple example of a mobile contact application. We'll set this application up, add a little functionality, and eventually wrap it in PhoneGap as a iOS app for the iPhone.

There's an explanation on spinejs.com you can follow for a thorough explanation of the application. 


Let's get it setup and running locally.
  1. Download the app from github.com. My copy is under ~/Documents/spine.mobile.contacts/.
  2. Open a terminal and change to the spine.mobile.contacts directory.
    $ cd ~/Documents/spine.mobile.contacts
  3. Install the local npm modules
    $ npm install .
  4. Start the hem server
    $ hem server
  5. Browse to the application at http://localhost:9294/
You should now see this...


Go ahead and add a few contacts. HTML5 local storage is used to persist the data.

Now, let's add a way to delete contacts. Open contacts.coffee located in the ~/Documents/spine.mobile.contacts/app/controllers/ directory with a text editor. We want to add a delete button to the ContactsShow class. ContactsShow is the controller for the panel that displays an individual contact when you click on a contact in the list view.

The changes are pretty simple.

class ContactsShow extends Panel
  className: 'contacts showView'

  constructor: ->
    super

    Contact.bind 'change', @render

    @active @change

    @addButton('Back', @back)
  
    # Delete button placed to the right with a callback 
    # to a delete function
    @addButton('Delete', @delete).addClass('right')

  render: =>
    return unless @item
    @html require('views/contacts/show')(@item)

  change: (params) ->
    @item = Contact.find(params.id)
    @render()

  # Delete callback function
  # Confirm the delete, then navigate back to the list view
  # If they change their mind, stay here
  delete: (params) ->
    if confirm('Are you sure?')
      @item.destroy() 
      @navigate('/contacts', trans: 'left')

  back: ->
    @navigate('/contacts', trans: 'left')

Save your changes. There's no need to restart the hem server. Just reload the site in the browser, hem dynamically picks up the changes with each request.

Click on a contact, the item view displays with the delete button on the top right.

Click the delete button. You should see a confirmation dialog...
Click cancel and you'll see the item view. Click ok, the contact is deleted and the list view is redisplayed.

In my next blog post I'll finish wrapping the app in PhoneGap.


Sunday, November 20, 2011

Vegan Pumpkin Muffins

Lydia has been quietly and occasionally requesting I make some vegan muffins. She had some at a marching band function a few months ago and just loved them.


She couldn't tell me what kind they were exactly - just that they were "white and cake-y". She said they were in a book called "Vegan Cupcakes Take Over the World" by Isa Chandra Moskowitz. I haven't picked up a copy of the book yet, and haven't found the white cake recipe anywhere online, but her Post Punk Kitchen website has a vegan pumpkin muffin recipe that sounded good.


You can find the recipe at http://www.theppk.com/2009/11/the-best-pumpkin-muffins/.


I tried making two batches. The first is the basic recipe. It turned out moist and looks pretty good. Sean had a hard time waiting for them to cool before devouring one. Lydia had more restraint, and thought they were a bit heavy but tasted good.



The second batch included chopped fresh cranberries. Unfortunately, I think I added too many. I should have also reduced the amount of soy milk to compensate for the added moisture. They are a bit dense and undercooked in the center. However, the added cranberries make them explode with flavor!



I love the cranberries in these so much I'm going to give it another go Wednesday while I'm waiting for my potato rolls to rise. I'll post a modified recipe when I get them right.



iOS App Development with PhoneGap and Spine Mobile: Setup

You need to setup your development environment. 


Since I'm targeting iOS I'm obviously using a Mac with OSX Lion and Xcode 4.2. You can find help with installing Xcode at developer.apple.com. Done? Good.



Here's a summary of the setup. The various web sites have more details.

Install Homebrew
If you're familiar with Linux's apt-get you'll love Homebrew. Simplifies installation and update of the Unix-y bits and bytes for OS X. Homebrew installs to the user's local space so sudo isn't required.

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"

Install node.js via brew

$ brew install node

Install npm
For some reason, npm has been removed from brew. Use curl to download and install it.

$ curl http://npmjs.org/install.sh | sh
Install Spine, Spine.app, and Hem via npm


$ npm install -g spine spine.app hem


iOS App Development with PhoneGap and Spine Mobile: Introduction

A friend of mine recently asked me if I knew how to write iOS applications. She has an idea for an app (don't we all). Well, iOS development is something I've wanted to do since I picked up an iPod Touch a couple of years ago, I just haven't made the time to do it. 

I recently started learning Node.js and the Spine MVC framework for HTML5 web application development. The last website I worked on was several years ago (ASP.Net 1.1) and I want to try something that's not in the Microsoft stack. I've done PHP in the past but didn't really want to try it again. Javascript is hot and CoffeeScript has a lot of bleeding-edge attention right now. Maybe I can get ahead of the curve.

Spine also has a mobile framework that supports HTML5 web sites targeting mobile devices. I finally got a on of the simple demo apps working this week. Pretty darn easy once the sample app and the current Spine framework were in sync. 

Once I got that working I noticed a doc describing integration between Spine and PhoneGap. PhoneGap wraps your HTML5/JavaScript app into a mobile device native application with access to the device API. You can also deploy the application to multiple platforms. It's also open source. Sounds winning to me.

In future posts I will describe how to develop an iOS native application using PhoneGap, Spine Mobile, and CoffeeScript. Since the frameworks are constantly changing, I intend to keep an up to date working copy.


Sunday, September 18, 2011

King Arthur Banana Bread


Finally used up our stash of over-ripe frozen bananas. We eat a log of bananas. Occasionally, we don't finish them off before they are too ripe so we toss them in the freezer whole - peel and all. When you need them, take them out of the freezer and thaw. Or you can peel them while frozen and nuke to defrost. They're also great for making a smoothie while still frozen (sans peel of course).


Used a recipe from King Arthur Flour and their white whole wheat flour. The crumb is nice and the texture even. It's slightly dry for my taste. Probably should substitute some of the butter with applesauce, use egg substitute, and perhaps use a 50/50 mix of whole wheat and white flour.

Ingredients:
1/2 cup unsalted butter, at cool room temperature
2/3 cup brown sugar, light or dark, firmly packed
1 teaspoon vanilla extract
1 teaspoon ground cinnamon
1/4 teaspoon ground nutmeg
1 teaspoon baking soda
1 teaspoon baking powder
1 teaspoon salt
1 1/2 cups mashed ripe bananas (about 3 medium or 2 large bananas)
3 tablespoons apricot jam or orange marmalade, optional but tasty
1/4 cup honey
2 large eggs
2 1/4 cups King Arthur Unbleached All-Purpose Flour
1/2 cup chopped walnuts, optional

Directions:
Preheat the oven to 325°F. Lightly grease a 9" x 5" loaf pan.

In a large bowl, combine the butter, sugar, vanilla, cinnamon, nutmeg, baking soda, baking powder, and salt, beating till smooth.

Add the mashed bananas, jam, honey, and eggs, again beating until smooth.

Add the flour, then the walnuts, stirring just until smooth.

Spoon the batter into the prepared loaf pan, smoothing the top. Let it rest at room temperature for 10 minutes.

Bake the bread for 45 minutes, then gently lay a piece of aluminum foil across the top, to prevent over-browning.

Bake for an additional 25 minutes. Remove the bread from the oven; a long toothpick or cake tester inserted into the center should come out clean, with at most a few wet crumbs clinging to it. The tester shouldn't show any sign of uncooked batter. If it does, bake the bread an additional 5 minutes, or until it tests done.

Allow the bread to cool for 10 minutes in the pan. Remove it from the pan, and cool it completely on a rack.


Nutritional Info:
Serving Size 1 slice (60g)
Servings Per Batch 18
Amount Per Serving
Calories 170
Calories from Fat 50
Total Fat 6g
Saturated Fat 3.5g
Trans Fat 0g
Cholesterol 35mg
Sodium 230mg
Total Carbohydrate 27g
Dietary Fiber 1g
Sugars 14g
Protein 3g

Ganbatte Kudasai!


Sensei taught me a phrase tonight that really struck me -- Ganbatte kudasai!
As with most things, I "Googled" it as soon as I got home. A common translation is "Please keep up your good work.", "Good luck!", or "Please do your best." The closest phrase I found near to Sensei's use of it was "Please do the best to reach your goal." Note the emphasis on "your."
Unfortunately, as with many translations, a lot of the cultural context is lost. The Google Oracle tells me Ganbatte kudasai is the polite form of Ganbare! Ganbare is more like a kick in the pants from your father. Ganbatte kudasai can be said to your seniors.
Sensei gave us a meaning that fit the context of the class tonight - "Please exhaust yourself." Often he points out that the place where you advance in karate (or really anything) is the point where you think you can do no more, and you push yourself to do whatever it is just one more time. Just one more pushup. Mou ichido!
I needed to hear this tonight. I "gave up" on Sanchin when I knew I could do more. Yes, my knee hurt, but did it really hurt that much? Perhaps I needed to hear Ganbare! Mou ichido!
Oshiete kurete arigatou gozaimashita! 

Monday, August 8, 2011

Last Campfire Pizza of 2011

The first week of August is our traditional long camping trip of the year. My daughter always requests a camping trip for her birthday, and gets to pick some of the meals. She always has campfire salmon packets and pizza.

I've been working on making pizza for a number of years now and have tried with varying success to make it camping. Getting a hot enough fire isn't a problem. Controlling the temperature can be a challenge.

I've tried grilling the crust directly on the grill, but I've never cared for the results. Using a cast iron pan works pretty well, but the size of the pie is limited. Then there is the problem of getting enough heat to the top of the pie. Most grilled pizza recipes call for precooked items that are placed on the crust after  flipping it over. Meh, not my style.

Last year, I folded a cardboard hood with aluminum foil taped to it to hold in and reflect the heat from the campfire. It worked, but was awkward to maneuver. There's also the chance of a hood fueled bon-fire. I tried freecycling a Weber dome grill cover thinking someone might toss out a rusted grill with a usable cover but heard nothing. 


This year, while shopping for a large metal bowl ($30 ouch!), I walked past some disposable aluminum roasting pans for $2. They can be reshaped into a lightweight dome - perfect.


Be prepared for equipment failure!
You'll also want some basic equipment: pizza peel, grilling spatula, tongs, pizza baking stone, pizza cutter, corn meal, disposable table top cover, etc. 












You'll need some dough...
We're trying to make healthy meals and have come up with a whole wheat pizza dough we like. I've been playing around with the ratio of whole and white flour, trying to get the right gluten stretch to give me that crispy bottom crust and chewy bite.

I use King Arthur Flour (kingarthurflour.com). They have some great high quality flour that delivers consistently good results. I use a ratio of 66% King Arthur Bread Flour and 33% King Arthur Premium 100% Whole Wheat Flour. I've tried 100% Whole Wheat and a 50/50 mix. Both will work, but there isn't sufficient gluten to stretch a thin crust.


I use baker's percentages and weight measurements. There just isn't a better way to get it right. I'll provide volume measurements but they won't be as accurate. To measure flour by volume just scoop up some flour with your measuring cup, tap the side a couple of times, and scrape it level.

Dough Ingredients
%gramsvolumeingredient
66%3573 cupsKing Arthur Bread Flour
33%1781 1/2 cupsKing Arthur 100% Whole Wheat Flour
59%3161 1/3 cupsWater
2%112 1/4 tspYeast
1.75%92 tspSugar
1.25%71 1/3 tspSalt
3.5%194 tspOlive Oil

Directions 
Spread your disposable table top cover on a picnic table and secure with clips. If you don't want to live dangerously, I suggest working under a canopy. Birds tend to locate the most inconvenient locations when you're camping. Mix the ingredients in a large bowl. Toss some flour on the table and start kneading the dough. 


When you're done kneading the dough, put a couple of tablespoons of olive oil in the bowl, and toss your dough ball around the bowl so it's covered by the oil. Cover and set aside to rise for at least two hours. I like to let it go for at least six or as long as twelve hours. 


If you're feeling ambitious, skip kneading the dough and let it rise for twenty-four hours. Shape into a ball, stick it in a large zip-loc bag and toss it in your cooler for a day or two. Take it out of the cooler, put it back in a bowl with a bit of olive oil, and let it come back up to "room" temperature before making pizza. You'll get a nice crisp crust with a bit of tang. The long first rise develops the gluten without kneading the dough. The second rise adds the tang.


Cut the dough into single pizza pie portions and shape into balls. The recipe above should give you enough for four pies. If you have picky eaters, divide into eight and make small individual pizzas. A warning, you'll spend a lot of time making eight pizzas.


While you're waiting for your fire to burn down, roll out your dough and toss. There are plenty of guides online for doing this. Just be careful not to drop the dough or hit the canopy. Watch for crawling insects and keep your dough covered. You can toss the next pie as the prior bakes or toss all of them and let them rise a bit while you dress and bake each.


Toppings, it's pizza not bread... 
Don't go heavy on the sauce, cheese, and toppings. Your campfire "oven" isn't going to have sufficient top heat to finish a heavy pie. Think light. Some of the best pizza you can make is nothing but a bit of olive oil smeared on top of the dough, rubbed with a couple of tomatoes, a few slices of fresh mozzarella, and fresh basil. Pizza sauce, cheese, and few meats are fine. Just go easy and pre-cook the meat.

I like pizza sauce, whole milk mozzarella cheese, basil, with some olive oil sprinkled on top.

My son loves meat. He usually goes for pizza sauce, mozzarella, turkey pepperoni, ham, precooked bacon, and precooked turkey sausage. Just save some bacon and sausage from breakfast in the cooler. Cut it up and you've got toppings.

My daughter likes just cheese so I stay away from dry mozzarella. Use whole milk mozzarella or make fresh mozzarella just before you make pizza. We'll save that one for another blog post.

My wife loves Hawaiian pizza. Pineapple, onion, precooked bacon, sometimes green pepper. You want to go easy on the wet toppings. You can use canned pineapple. Just make sure you pat it dry use it sparingly.

Baking pizza over a campfire... 
Build an intense fire
I try to build up as many coals as quickly as possible. This gives me a hot and consistant heat source. When you start baking, you don't want tall flames licking your pizza stone. In fact, if you can get a nice large bed of hot coals you don't need flames at all. Hold your hand over the coals about the height of the grill. If you can't stand it for more than a couple of seconds you're ready.

Reflect the heat upward
The campground we frequent uses heavy metal truck break drums for their fire pits. It allows them to move the fire pit around is guess. They are pretty shallow and make a great chimney for the heat from the fire. You could use bricks, rocks, or metal shields to do the same. After all, any heat not directed up toward your pie is either going into the ground or sideways toward you.

Use an adjustable height grill 
It's also makes it easier to work around while baking. I have a grill that rides a metal spike that goes into the ground. One of those tripod mounted ones would work, but I think the swinging would bother me. You can get one like mine from campfiregrill.com for about $40. Well worth the cost.

Reflect the heat downward
Unless you want a crispy bottom and soggy top you're going to need heat redirected to the top of your pie. A clay lined brick refractory layer would be great but just isn't an option while camping. Ok, there are portable brick pizza ovens on a trailer. Unless you want to cater an event while camping I don't recommend it. Anyway, the best option I've found is a lightweight disposable aluminium roasting pan reshaped into a dome. It doesn't retain heat but does a decent job of reflecting it.

Adjust your grill
Adjust the height of your grill to a foot or two over the fire where you cannot hold your hand over the fire more than a second or two. Put your pizza stone or iron pan on the grill and cover with your aluminum dome. You'll want to give your stone a good twenty to thirty minutes to get hot - the longer, the better. Get it too hot and your pie will burn before you can get the top done. Too cool, and your pie will never finish. As your coals cool down, you can adjust your grill lower and/or toss another stick or two of wood on the fire. Experience is your guide here.

Build your pie and bake
Build your pie on a pizza peel sprinkled with corn meal. See the ingredients section above for advice. Remove the dome with tongs and slide your pie onto the pizza stone. Replace the dome over the pie.

You'll want to peek at your pie fairly often to make sure it isn't baking too quickly or slowly on the bottom. I use a grilling spatula instead of the pizza peel to do this. It allows you to tilt the hood without removing it. You want to keep that dome on there as much as possible. Getting the crust done is easy using this technique, the top isn't as easy. It usually takes about eight minutes to bake. If it's baking too quickly, adjust the hight of the grill a few inches higher. If too slowly, adjust the height down or, if you cannot go lower, toss more wood on the fire. If you're making just a couple of pies, you'll probably not need to adjust at all.

If your pie is browning on the bottom a minute after getting it on the stone and adjusting the grill higher isn't working, your pizza stone is probably too hot and you're in danger of burning the pie. If it's not too late, you can try holding your pie off the stone with the grilling spatula. They usually have a decent bend between the handle and the spatula which makes it easy to balance the pie over the pizza stone surface while keeping it under the dome.

When the bottom has finished and the cheese has melted, use the grilling spatula to transfer the pie to your pizza peel. I don't recommend using the peal to pick it up. It tends to push the pizza off the stone.

Let it rest for a minute, slice, and enjoy!

Once, I had a pie stick half way off the pizza peel. The darn thing just wouldn't come off. Probably not enough corn meal or it wasn't spread evenly. Just tip it over and make a calzone. Eats the same and your son who insists on getting the first pizza will forgive you.