<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Culinary on brege.org</title>
    <link>https://brege.org/categories/culinary/</link>
    <description>Recent content in Culinary on brege.org</description>
    <generator>Hugo</generator>
    <language>en</language>
    <copyright>Copyright (c) 2016-2026 Wyatt Brege</copyright>
    <lastBuildDate>Sun, 12 Apr 2026 21:45:09 -0400</lastBuildDate>
    <atom:link href="https://brege.org/categories/culinary/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>How much of one single food do you need to eat in a day to satisfy protein demands?</title>
      <link>https://brege.org/post/protein-calculator/</link>
      <pubDate>Thu, 17 Apr 2025 16:54:44 -0400</pubDate>
      <guid>https://brege.org/post/protein-calculator/</guid>
      <description>A live protein calculator prototype for common high protein food sources.</description>
      <content:encoded><![CDATA[<p>I have now celebrated one year of resistance training. One of the benefits of consistent, hard exercise is that it naturally steers you toward a healthier, more informed diet—and makes it easier to keep the undesirable effects of indulgence at bay, if you try.</p>
<p>Most anyone in the gym has heard the adage to eat &ldquo;1g of protein per pound of (goal) bodyweight per day.&rdquo; Research has shown this figure isn&rsquo;t accurate; it&rsquo;s more like 60–70% of that (and that&rsquo;s at <strong>peak</strong> resistance training intensity) for ideal muscle mass gains <sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> <sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> <sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> <sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup> <sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup>. For example, if you weigh 175 lbs, this guideline states you should eat somewhere between</p>
<p>$$
\begin{aligned}
\frac{\textrm{protein}}{\textrm{day}}
&amp;= \left[0.35,0.75\right]
\cdot \left( \text{g} / \text{lbs} / \text{day} \right)
\cdot 175 \textrm{lbs}  \\
&amp;= ~ \left[60, 140\right] \textrm{g/day}
\end{aligned}
$$</p>
<p>where we have used the shorthand</p>
<p>$$
\text{g} / \text{lbs} / \text{day}
\coloneqq \frac{\text{protein (g)}}{\text{bodyweight (lbs)} \cdot \text{day}}
$$</p>
<p>But for nearly everyone landing on these pages, the goal is fat loss. Higher protein (and fiber) intake will help you feel fuller for longer and can help people new to fitness and diet control their cravings.</p>
<p>Following the guidelines is also made more tedious by the near-constant arithmetic at the grocery store. While it&rsquo;s good to check the labels to learn what&rsquo;s actually in your food, keeping a running total and hitting your target each day becomes a challenge. You wind up relying on apps, breaking meals into chunks: &ldquo;10 grams here, 25g scoop there&hellip; how much protein is in a palm-sized chunk of chicken breast again??&rdquo; And then there’s the protein in bread, grains, bars. It’s nearly impossible to balance all that against metabolic calories if you’re even <em>trying</em> a little.</p>
<h2 id="compositional-thinking-strategy">Compositional Thinking Strategy</h2>
<p><em>Here&rsquo;s my take:</em> <strong>Ratio counting.</strong> As a chef, there&rsquo;s a reason the imperial, fractional system works: ratio. It&rsquo;s easier for me to think about doubling, tripling, or halving depending on what I&rsquo;m buying and who I&rsquo;m cooking for. Our days are divided into twelves and therefore 2&rsquo;s, 3&rsquo;s, and 4&rsquo;s. Naturally, our meals are spaced that way too. The value of our <code>base10</code> system cannot be overstated, but I have a difficult time what eating or preparing 10% less of a meal or recipe means vs doing a quarter or half.</p>
<p>For the 175 lbs individual, the ranges of protein consumption needed are pinned by three characteristic quantities:</p>
<ul>
<li>$\textbf{MAX} = $ 100% efficiency in protein synthesis $\approx 1.6 \text{g} / \text{kg} / \text{day}$</li>
<li><strong>0.75</strong> $\coloneqq 0.75 \times \text{MAX} \approx 1.2 \text{g} / \text{kg} / \text{day}$</li>
<li>$\textbf{RDA} \coloneqq 0.5 \times \text{MAX} \approx 0.8 \text{g} / \text{kg} / \text{day}$</li>
</ul>
<p>where $\text{RDA}$ is the <strong>Recommended Daily Allowance</strong>, and $\text{MAX}$ is the <strong>Maximum Efficient Intake</strong>. The &ldquo;$0.75 \times \text{MAX} \approx 1.2 \text{lbs}$&rdquo; is roughly the target for most people who weigh 175 lbs (80 kg), on average. <sup id="fnref1:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
<details> <summary><b>Tap here to see the ranges for this weight...</b></summary> 
<br/>
For reference, the ranges of protein consumption needed for the the 175 lbs individual are:
<p>$$
\text{&lt;65yo + RE:} \quad \left[ 0.8,\ 1.6 \right] \ \text{g} / \text{kg} / \text{day}
$$</p>
<p>$$
\text{⩾65yo + RE:} \quad \left[ 1.1,\ 1.4 \right] \ \text{g} / \text{kg} / \text{day}
$$</p>
<p>where $\text{RE}$ means &ldquo;Resistance Exercise&rdquo;, or, in pounds:</p>
<p>$$
\text{&lt;65yo + RE:} \quad \left[ 0.35,\ 0.75 \right] \ \text{g} / \text{lbs} / \text{day}
$$</p>
<p>$$
\text{⩾65yo + RE:} \quad \left[ 0.55,\ 0.65 \right] \ \text{g} / \text{lbs} / \text{day}.
$$</p>
</details>
<h2 id="implementation-the-protein-efficiency-calculator">Implementation: The Protein Efficiency Calculator</h2>
<p>The table below answers a simple question: how much of one single food do you need to eat to hit your daily protein target? Input your weight, toggle metric or imperial, and adjust units per row—grams, ounces, scoops, each. It’ll show you the amount needed to hit benchmarks in the range of $\text{RDA}$ to the $(\text{MAX})$ intake.  Based on resistance training status and the latest research, a sliding scale in this range will allow you to estimate your required protein demands.</p>
<p><strong>Quantity:</strong> the number of units in the <strong>Unit/Size</strong> column you need to eat to acheive the chosen protein target, per day, for your input weight.</p>
<p>Adjusting the <strong>Protein target</strong> slider can be thought of as a direct conversion of protein to training intensity, from sedentary/$\text{RDA}$ all the way to the $\text{MAX}$ intensity threshold.</p>

<link rel="stylesheet" href="/css/calculator.css">

<div id="calculator">

  <div class="calculator">
    <label for="weight-input" class="form-label"><b>Body Weight:</b></label>
    <div class="input-group">
      <input type="number" id="weight-input" value="175" class="form-control weight-input" />
      <div class="unit-toggle">
        <label><input type="radio" name="unit" value="imperial" checked> lbs</label>
        <label><input type="radio" name="unit" value="metric"> kg</label>
      </div>
    </div>

    <label for="target-range" class="form-label mt-4"><b>Protein target:</b>
      <span id="target-label">0.8 g/lb (RDA) [140 g]</span>
    </label>
    <br>
    <input type="range" id="target-range" class="w-full mb-4" />
  </div>

  <table id="resultsTable">
    <thead>
      <tr>
        <th>Source</th>
        <th>Protein/Unit<br>(g/Unit)</th>
        <th id="target-column-label">Quantity <br> (Unit)</th>
        <th>Unit/Size</th>
        <th>Calories/day<br>(kcal)</th>
        <th>Cite</th>
      </tr>
    </thead>
    <tbody id="protein-tbody">
      
      <tr data-protein="84" data-calories="840">
        <td>Eggs, whole</td>
        <td class="protein-per-unit">84</td>
        <td class="col-target"></td>
        <td>
          <select class="unit-select">
            
            
              <option value="7" data-calories="70" >
                each
              </option>
            
              <option value="0.14" data-calories="1.4" >
                grams
              </option>
            
              <option value="84" data-calories="840" selected>
                dozen
              </option>
            
          </select>
        </td>
        <td class="calories-per-unit">840</td>
        <td class="citation">
          <a href="https://fdc.nal.usda.gov/food-details/1663084/nutrients" target="_blank" rel="noopener">[1]</a>
        </td>
      </tr>
      
      <tr data-protein="105" data-calories="735">
        <td>Chicken Breast, Raw</td>
        <td class="protein-per-unit">105</td>
        <td class="col-target"></td>
        <td>
          <select class="unit-select">
            
            
              <option value="105" data-calories="735" selected>
                pounds
              </option>
            
              <option value="6.6" data-calories="46" >
                ounces
              </option>
            
              <option value="0.25" data-calories="1.7" >
                grams
              </option>
            
              <option value="230" data-calories="1700" >
                kilograms
              </option>
            
          </select>
        </td>
        <td class="calories-per-unit">735</td>
        <td class="citation">
          <a href="https://fdc.nal.usda.gov/food-details/577951/nutrients" target="_blank" rel="noopener">[2]</a>
        </td>
      </tr>
      
      <tr data-protein="105" data-calories="975">
        <td>Beef, Ground (85/15)</td>
        <td class="protein-per-unit">105</td>
        <td class="col-target"></td>
        <td>
          <select class="unit-select">
            
            
              <option value="6.6" data-calories="61" >
                ounces
              </option>
            
              <option value="105" data-calories="975" selected>
                pounds
              </option>
            
              <option value="0.23" data-calories="2.2" >
                grams
              </option>
            
              <option value="232" data-calories="2150" >
                kilograms
              </option>
            
          </select>
        </td>
        <td class="calories-per-unit">975</td>
        <td class="citation">
          <a href="https://fdc.nal.usda.gov/food-details/2312134/nutrients" target="_blank" rel="noopener">[3]</a>
        </td>
      </tr>
      
      <tr data-protein="88" data-calories="600">
        <td>Greek Yogurt (2%)</td>
        <td class="protein-per-unit">88</td>
        <td class="col-target"></td>
        <td>
          <select class="unit-select">
            
            
              <option value="22" data-calories="150" >
                cups
              </option>
            
              <option value="2.7" data-calories="18" >
                ounces
              </option>
            
              <option value="0.1" data-calories="0.68" >
                grams
              </option>
            
              <option value="88" data-calories="600" selected>
                32oz tub
              </option>
            
          </select>
        </td>
        <td class="calories-per-unit">600</td>
        <td class="citation">
          <a href="https://fdc.nal.usda.gov/food-details/360742/nutrients" target="_blank" rel="noopener">[4]</a>
        </td>
      </tr>
      
      <tr data-protein="72" data-calories="600">
        <td>Cottage Cheese (2%)</td>
        <td class="protein-per-unit">72</td>
        <td class="col-target"></td>
        <td>
          <select class="unit-select">
            
            
              <option value="3.11" data-calories="23" >
                ounces
              </option>
            
              <option value="0.11" data-calories="0.81" >
                grams
              </option>
            
              <option value="24" data-calories="200" >
                cups
              </option>
            
              <option value="72" data-calories="600" selected>
                24oz tub
              </option>
            
          </select>
        </td>
        <td class="calories-per-unit">600</td>
        <td class="citation">
          <a href="https://fdc.nal.usda.gov/food-details/2658102/nutrients" target="_blank" rel="noopener">[5]</a>
        </td>
      </tr>
      
      <tr data-protein="23" data-calories="850">
        <td>Tree Nuts (Avg)</td>
        <td class="protein-per-unit">23</td>
        <td class="col-target"></td>
        <td>
          <select class="unit-select">
            
            
              <option value="4.6" data-calories="170" >
                ounces
              </option>
            
              <option value="0.165" data-calories="6.1" >
                grams
              </option>
            
              <option value="23" data-calories="850" selected>
                cups
              </option>
            
          </select>
        </td>
        <td class="calories-per-unit">850</td>
        <td class="citation">
          <a href="https://fdc.nal.usda.gov/food-details/2653755/nutrients" target="_blank" rel="noopener">[6]</a>
        </td>
      </tr>
      
      <tr data-protein="6" data-calories="100">
        <td>Peas, Frozen</td>
        <td class="protein-per-unit">6</td>
        <td class="col-target"></td>
        <td>
          <select class="unit-select">
            
            
              <option value="1.3" data-calories="22" >
                ounces
              </option>
            
              <option value="0.045" data-calories="0.78" >
                grams
              </option>
            
              <option value="6" data-calories="100" selected>
                cups
              </option>
            
          </select>
        </td>
        <td class="calories-per-unit">100</td>
        <td class="citation">
          <a href="https://fdc.nal.usda.gov/food-details/2427531/nutrients" target="_blank" rel="noopener">[7]</a>
        </td>
      </tr>
      
      <tr data-protein="30" data-calories="480">
        <td>Chili (Est.)</td>
        <td class="protein-per-unit">30</td>
        <td class="col-target"></td>
        <td>
          <select class="unit-select">
            
            
              <option value="15" data-calories="240" >
                cups
              </option>
            
              <option value="1.9" data-calories="28" >
                ounces
              </option>
            
              <option value="0.07" data-calories="1" >
                grams
              </option>
            
              <option value="70" data-calories="1000" >
                kilograms
              </option>
            
              <option value="30" data-calories="480" selected>
                bowls
              </option>
            
          </select>
        </td>
        <td class="calories-per-unit">480</td>
        <td class="citation">
          <a href="https://fdc.nal.usda.gov/food-details/2671587/nutrients" target="_blank" rel="noopener">[8]</a>
        </td>
      </tr>
      
      <tr data-protein="100" data-calories="1100">
        <td>Salmon, raw</td>
        <td class="protein-per-unit">100</td>
        <td class="col-target"></td>
        <td>
          <select class="unit-select">
            
            
              <option value="6.23" data-calories="65" >
                ounces
              </option>
            
              <option value="0.22" data-calories="2.3" >
                grams
              </option>
            
              <option value="100" data-calories="1100" selected>
                pounds
              </option>
            
              <option value="220" data-calories="2300" >
                kilograms
              </option>
            
          </select>
        </td>
        <td class="calories-per-unit">1100</td>
        <td class="citation">
          <a href="https://fdc.nal.usda.gov/food-details/2684441/nutrients" target="_blank" rel="noopener">[9]</a>
        </td>
      </tr>
      
      <tr data-protein="104" data-calories="760">
        <td>Pork Chop, Boneless</td>
        <td class="protein-per-unit">104</td>
        <td class="col-target"></td>
        <td>
          <select class="unit-select">
            
            
              <option value="6.2" data-calories="48" >
                ounces
              </option>
            
              <option value="0.22" data-calories="1.7" >
                grams
              </option>
            
              <option value="104" data-calories="760" selected>
                pounds
              </option>
            
              <option value="220" data-calories="1680" >
                kilograms
              </option>
            
          </select>
        </td>
        <td class="calories-per-unit">760</td>
        <td class="citation">
          <a href="https://fdc.nal.usda.gov/food-details/2646168/nutrients" target="_blank" rel="noopener">[10]</a>
        </td>
      </tr>
      
      <tr data-protein="25" data-calories="130">
        <td>Whey Protein Powder</td>
        <td class="protein-per-unit">25</td>
        <td class="col-target"></td>
        <td>
          <select class="unit-select">
            
            
              <option value="0.71" data-calories="3.5" >
                grams
              </option>
            
              <option value="25" data-calories="130" selected>
                scoops
              </option>
            
          </select>
        </td>
        <td class="calories-per-unit">130</td>
        <td class="citation">
          <a href="https://www.costco.com/kirkland-signature-whey-protein%2c-creamy-chocolate%2c-5.4lbs.product.4000287218.html" target="_blank" rel="noopener">[11]</a>
        </td>
      </tr>
      
      <tr data-protein="21" data-calories="150">
        <td>Vegan Protein Powder</td>
        <td class="protein-per-unit">21</td>
        <td class="col-target"></td>
        <td>
          <select class="unit-select">
            
            
              <option value="21" data-calories="150" selected>
                scoops
              </option>
            
              <option value="0.8" data-calories="5.7" >
                grams
              </option>
            
          </select>
        </td>
        <td class="calories-per-unit">150</td>
        <td class="citation">
          <a href="https://orgain.com/products/organic-protein-plant-based-protein-powder-vanilla-bean" target="_blank" rel="noopener">[12]</a>
        </td>
      </tr>
      
    </tbody>
  </table>
</div>

<script>
  let currentUnit = 'imperial';
  let userWeightKg = 175 / 2.205;
  let currentTarget = 1.2;

  function updateProteinNeeds(weightKg) {
    userWeightKg = weightKg;
    updateTableValues();
  }

  function updateTableValues() {
    document.querySelectorAll("tbody#protein-tbody tr").forEach(row => updateSingleRow(row));
  }

  function updateSingleRow(row) {
    const proteinPerUnit = parseFloat(row.dataset.protein);
    const caloriesPerUnit = parseFloat(row.dataset.calories);
    if (isNaN(proteinPerUnit) || proteinPerUnit === 0) return;

    const targetGrams = userWeightKg * currentTarget;
    const quantity = targetGrams / proteinPerUnit;
    const calories = quantity * caloriesPerUnit;

    row.querySelector(".col-target").textContent = quantity.toFixed(2);
    row.querySelector(".calories-per-unit").textContent = isNaN(calories) ? '-' : Math.round(calories);
  }

  function updateTargetRangeAttributes() {
    const range = document.querySelector("#target-range");
    if (currentUnit === 'metric') {
      range.min = 0.8;
      range.max = 1.7;
      range.step = 0.05;
      range.value = currentTarget;
    } else {
      range.min = (0.8 / 2.205).toFixed(3);
      range.max = (1.7 / 2.205).toFixed(3);
      range.step = (0.05 / 2.205).toFixed(3);
      range.value = (currentTarget / 2.205).toFixed(3);
    }
  }

  function updateTargetLabel() {
    const unitSuffix = currentUnit === "metric" ? "g/kg" : "g/lb";
    const displayTarget = currentUnit === "metric" ? currentTarget : currentTarget / 2.205;
    const label = document.querySelector("#target-label");

    const targetGrams = userWeightKg * currentTarget;
    const gramsRounded = Math.round(targetGrams);

    let baseText = `${displayTarget.toFixed(2)} ${unitSuffix}`;
    if (currentTarget <= 0.85) {
      baseText += " (RDA)";
    } else if (currentTarget >= 1.6) {
      baseText += " (MAX)";
    }

    label.textContent = `${baseText} [${gramsRounded} g]`;
  }

  document.querySelector("#weight-input").addEventListener("input", function () {
    const val = parseFloat(this.value);
    if (!isNaN(val)) {
      const weightInKg = currentUnit === "metric" ? val : val / 2.205;
      updateProteinNeeds(weightInKg);
    }
  });

  document.querySelectorAll("input[name='unit']").forEach(radio => {
    radio.addEventListener("change", function () {
      currentUnit = this.value;
      const val = parseFloat(document.querySelector("#weight-input").value);
      const weightInKg = currentUnit === "metric" ? val : val / 2.205;
      updateProteinNeeds(weightInKg);
      updateTargetRangeAttributes();
      updateTargetLabel();
    });
  });

  document.querySelector("#target-range").addEventListener("input", function () {
    currentTarget = currentUnit === 'metric' ? parseFloat(this.value) : parseFloat(this.value) * 2.205;
    updateTargetLabel();
    updateTableValues();
  });

  document.querySelectorAll("tbody#protein-tbody tr").forEach(row => {
    const unitSelect = row.querySelector(".unit-select");
    unitSelect.addEventListener("change", function () {
      const protein = parseFloat(this.value);
      const calories = parseFloat(this.selectedOptions[0].dataset.calories);
      row.dataset.protein = protein;
      row.dataset.calories = calories;
      row.querySelector(".protein-per-unit").textContent = protein.toFixed(2);
      updateSingleRow(row);
    });
  });

  updateTargetRangeAttributes();
  updateProteinNeeds(userWeightKg);
  updateTargetLabel();
</script>

<p>I&rsquo;ve also included the <strong>daily Calories</strong> you&rsquo;d likewise take on per food item.  You&rsquo;ll note that high carbohydrate (peas, chili) and especially high fat content (mixed nuts) greatly diminish the remaining calorie budget in the day.  Conversely, protein powders, including the vegan kind, substantially lower the overall caloric footprint.</p>
<h2 id="the-protein-efficiency-matrix">The Protein Efficiency Matrix</h2>
<p>While the above tool scales protein needs to an individual&rsquo;s body composition, it’s also worth viewing high-protein foods in a way that’s independent of bodyweight. The protein-to-calorie efficiency of a food source is a fixed property — it doesn’t change based on who’s eating it.</p>
<p>With that in mind, the <strong>Protein Efficiency Matrix</strong> below expresses the relative caloric density of each food source. It compares the efficiency of each against the others in the table.</p>
<style>
  .nowrap {
    white-space: nowrap;
  }
  .font-bold {
    font-weight: bold;
  }
  #protein-matrix .td-right {
    width: 3rem;
    min-width: 3rem;
    padding-left: 0.4rem;
    padding-right: 0.4rem;
  }
  #protein-matrix .matrix-col-header {
    position: relative;
    height: 10.5rem;
    width: 3rem;
    min-width: 3rem;
    max-width: 3rem;
    padding: 0;
    vertical-align: bottom;
    overflow: visible;
  }
  #protein-matrix .matrix-col-header > span {
    position: absolute;
    left: 0.35rem;
    bottom: 0.35rem;
    display: block;
    white-space: nowrap;
    line-height: 1;
    font-size: 0.92em;
    transform: rotate(-45deg);
    transform-origin: left bottom;
  }
  @media (max-width: 800px) {
    #protein-matrix .td-right {
      width: auto;
      min-width: auto;
    }
    #protein-matrix .matrix-col-header {
      height: auto;
      width: auto;
      min-width: auto;
      max-width: none;
      padding: 0.5rem 0.4rem;
    }
    #protein-matrix .matrix-col-header > span {
      position: static;
      display: inline;
      white-space: normal;
      line-height: inherit;
      transform: none;
      transform-origin: initial;
    }
  }
</style>

<div id="protein-matrix-container" class="mt-6">
  <div id="protein-matrix"></div>
</div>

<script>
  const proteinMatrixEl = document.querySelector("#protein-matrix");
  const tableBodyEl = document.querySelector("#protein-tbody");

  function getProteinDataRows() {
    return Array.from(tableBodyEl.querySelectorAll("tr")).map(row => {
      const source = row.querySelector("td:first-child").textContent.trim();
      const protein = parseFloat(row.dataset.protein);
      const calories = parseFloat(row.dataset.calories);
      return { source, protein, calories, calPer95g: (95 / protein) * calories };
    }).filter(x => !isNaN(x.calPer95g));
  }

  function getCellStyle(val, extraClass = "") {
    let color = "";
    let fontWeight = "";

    if (val <= 0.75) {
      color = "steelblue";
      fontWeight = "font-bold";
    } else if (val < 0.85) {
      color = "steelblue";
    } else if (val <= 1.15) {
      color = "seagreen";
    } else if (val < 2) {
      color = "lightcoral";
    } else {
      color = "lightcoral";
      fontWeight = "font-bold";
    }

    const classes = ["td-right"];
    if (extraClass) classes.push(extraClass);
    if (fontWeight) classes.push(fontWeight);

    return {
      className: classes.join(" "),
      style: `color: ${color};`
    };
  }

  function buildMatrix(data) {
    const n = data.length;
    const matrix = [];

    
    for (let i = 0; i < n; i++) {
      matrix[i] = [];
      for (let j = 0; j < n; j++) {
        matrix[i][j] = data[i].calPer95g / data[j].calPer95g;
      }
    }

    
    const rowAverages = matrix.map(row =>
      row.reduce((sum, val) => sum + val, 0) / n
    );

    const table = document.createElement("table");
    table.className = "table-style text-sm";

    
    const thead = document.createElement("thead");
    const headerRow = document.createElement("tr");

    headerRow.innerHTML = `
      <th class="th-left" aria-hidden="true"></th>
      <th class="th-top matrix-col-header"><span>Average</span></th>
      ${data.map(item => `<th class="th-top matrix-col-header"><span>${item.source}</span></th>`).join('')}
    `;
    thead.appendChild(headerRow);
    table.appendChild(thead);

    
    const tbody = document.createElement("tbody");
    for (let i = 0; i < n; i++) {
      const row = document.createElement("tr");

      const avg = rowAverages[i];
      const avgStyle = getCellStyle(avg, "bg-blue-50");

      row.innerHTML = `
        <th class="th-left nowrap">${data[i].source}</th>
        <td class="${avgStyle.className}" style="${avgStyle.style}">${avg.toFixed(2)}</td>
        ${matrix[i].map(val => {
          const cellStyle = getCellStyle(val);
          return `<td class="${cellStyle.className}" style="${cellStyle.style}">${val.toFixed(2)}</td>`;
        }).join('')}
      `;
      tbody.appendChild(row);
    }

    table.appendChild(tbody);
    return table;
  }

  function updateMatrixView() {
    const proteinData = getProteinDataRows();
    proteinMatrixEl.innerHTML = "";
    if (proteinData.length === 0) return;
    const matrixTable = buildMatrix(proteinData);
    proteinMatrixEl.appendChild(matrixTable);
  }

  const observer = new MutationObserver(updateMatrixView);
  observer.observe(tableBodyEl, { childList: true, subtree: true, attributes: true, attributeFilter: ['data-protein', 'data-calories'] });

  document.querySelector("#target-range").addEventListener("input", updateMatrixView);
  document.querySelector("#weight-input").addEventListener("input", updateMatrixView);
  document.querySelectorAll("input[name='unit']").forEach(el => el.addEventListener("change", updateMatrixView));

  updateMatrixView();
</script>

<p>Your weight and training status don’t matter here — this table is the same for everyone, assuming equal daily protein intake. The first column shows a simple mean of each row’s relative efficiency compared to others — a rough estimate of how each food stacks up overall.
<strong>Smaller numbers are better.</strong>
High-fat items like salmon and nuts, and high-carb ones like peas and chili, form relative &ldquo;islands of inefficiency&rdquo; among high-protein sources.</p>
<p>You can even think of this matrix as a way to zone:
<span style="color: steelblue;">cutting</span> /
<span style="color: seagreen;">maintaining</span> /
<span style="color: lightcoral;">bulking</span>
cycles using
<span style="color: steelblue;">blues</span> /
<span style="color: seagreen;">greens</span> /
<span style="color: lightcoral;">reds</span>
as a visual cue for how your shopping list and pantry pars might shift depending on your current training status.</p>
<p>For example, Greek yogurt has over five times the protein density of tree nuts by volume. If you’re trying to control weight and meal prep, having this kind of visual measure might help you balance portions — say, between yogurt and nuts in your breakfast bowl.</p>
<p>Note also that the
<span style="color: lightcoral;">red, lower-in-protein efficiency</span>
items are still quite efficient. For example, gas station treats like trollies and doritos have relative efficiency values order(s) of magnitude higher.  Compared to greek yogurt, their protein efficiencies are astonomically bad
$\text{eff.}\left(\text{trollies}:\text{yogurt}\right)$
<span style="color: lightcoral;">
$\approx 32$
</span>
and
$\text{eff.}\left(\text{doritos}:\text{yogurt}\right)$
<span style="color: lightcoral;">
$\approx 13$.
</span>
<em>Abysmal.</em></p>
<h2 id="discussion">Discussion</h2>
<p>This lens is useful because it translates the quantities into <strong>grocery store</strong> units—like pack sizes. About a dozen eggs is one day; two pounds of beef and two pounds of chicken is about three days; a tub of cottage cheese (24oz) and a tub of Greek yogurt (1qt) is just under two days. Then 3–4 scoops of protein powder can help balance that week&rsquo;s diet.</p>
<p>There is also an upper limit to the amount of protein available on the planet. 70% of freshwater is already in use; 50% of global land space is already dedicated to agriculture. It’s a 60–40 split between plant- and animal-sourced proteins occupying this space—and both the global population and protein demand will increase by 20–25% in the next 25 years <sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup>.</p>
<p>From a purely resource standpoint, there will need to be a lab-grown protein synthesis renaissance. And it&rsquo;s this fact alone that makes the &ldquo;$1 \text{g} \ \text{protein} / \text{lbs} / \text{day}$&rdquo; myth not only overly generous, but also inconsiderate of the planet’s biological limits. One-third of that is the target if you aren’t lifting. Half to two-thirds is more realistic if you’re engaged in moderate to <em>heavy</em> resistance training.</p>
<h2 id="references">References</h2>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Nunes, E. A., Colenso-Semple, L., McKellar, S. R., et al. (2022). <em>Systematic review and meta-analysis of protein intake to support muscle mass and function in healthy adults</em>. <em>Journal of cachexia, sarcopenia and muscle</em>. <a href="https://pubmed.ncbi.nlm.nih.gov/35187864/">https://pubmed.ncbi.nlm.nih.gov/35187864/</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Schoenfeld, B. J., &amp; Aragon, A. A. (2021). <em>The effect of protein timing on muscle strength and hypertrophy: A systematic review and meta-analysis</em>. <em>Journal of the International Society of Sports Nutrition</em>. <a href="https://link.springer.com/content/pdf/10.1186/1550-2783-10-53.pdf">https://link.springer.com/content/pdf/10.1186/1550-2783-10-53.pdf</a>&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>Phillips, S. M. (2014). <em>A brief review of critical processes in exercise-induced muscular hypertrophy</em>. <em>Sports Medicine</em>. <a href="https://link.springer.com/article/10.1007/s40279-014-0152-3">https://link.springer.com/article/10.1007/s40279-014-0152-3</a>&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>Moore, D. R., Atherton, P. J., Rennie, M. J., &amp; Phillips, S. M. (2011). <em>Resistance exercise enhances mTOR and MAPK signalling in human muscle over that seen at rest after bolus protein ingestion</em>. <em>Acta physiologica</em>. <a href="https://onlinelibrary.wiley.com/doi/abs/10.1111/j.1748-1716.2010.02187.x">https://onlinelibrary.wiley.com/doi/abs/10.1111/j.1748-1716.2010.02187.x</a>&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p>Paddon-Jones, D., &amp; Rasmussen, B. B. (2009). <em>Dietary protein recommendations and the prevention of sarcopenia</em>. <em>Current opinion in clinical nutrition &amp; metabolic care</em>. <a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC2760315/pdf/nihms111079.pdf">https://pmc.ncbi.nlm.nih.gov/articles/PMC2760315/pdf/nihms111079.pdf</a>&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p>Smith, K., Watson, A. W., Lonnie, M., Peeters, W. M., Oonincx, D., Tsoutsoura, N., &hellip; &amp; Corfe, B. M. (2024). <em>Meeting the global protein supply requirements of a growing and ageing population</em>. <em>European journal of nutrition</em>. <a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC11329409/">https://pmc.ncbi.nlm.nih.gov/articles/PMC11329409/</a>&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Some Sweet Thoughts on Sugar</title>
      <link>https://brege.org/post/sugar/</link>
      <pubDate>Sat, 10 Jun 2023 16:35:51 -0400</pubDate>
      <guid>https://brege.org/post/sugar/</guid>
      <description>How I think about sugar and sweetness as a chef from the perspectives of
history, technique, and natural science.</description>
      <content:encoded><![CDATA[<p>Chefs work with a wide variety of different sugars and syrups.  A small bit of sweetness in a savory dish can bring balance just as well as salt or acid do to sweet dishes.  Sometimes this can be accomplished via onion, carrot or tomato in a rich sauce, or via tree fruits, berries or wine in an aromatic one.</p>
<p>Sweetness is a part of the flavor balancing equation.  Sugar is energy dense.  It stores well.  It is the second fastest &ldquo;macro&rdquo; metabolized by our bodies.  Like the fastest (alcohol), we associate its taste with peak ripeness since it expresses itself in fruit through juiciness which elicits immediate opportunity modes within our survival brain.</p>
<p>One can practice a great deal of creativity with simple table sugar and their stove top range alone.  In addition to practically any sweet confection, sugar is melted into water for simple syrup in cocktails, into <strong>caramels</strong> and all its derivative forms (<strong>butterscotch</strong>, <strong>toffee</strong>, <strong>gastriques</strong> <sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, etc.), and heated in puddings, pot de creme and creme anglaise.  All in all, understanding that sugar has a particular <em>behavior</em> when it melts carries over to practically every dessert sauce in existence.  Melting sugar to different temperatures and playing with ratios of milk fats and proteins explodes a whole catalog of dessert sauces.</p>
<p><strong>Molasses</strong> is the leftover byproduct from refining sugar from sugar cane, pomegranate, or beets, each of which imparts complex flavor profiles and adds many of its nutrients to the syrup.  Molasses is the brown in brown sugar.  Most barbecue sauces call for molasses and/or brown sugar.  I tend to not carry brown sugar in my kitchens because of its propensity to harden into an annoying brick&ndash;opting instead for molasses and white sugar always, which allows you to play with different types of molasseses and provides an easy to adjust <strong>bitterness</strong> knob.</p>
<p>You can also &ldquo;make&rdquo; brown sugar-adjacent substances by mixing honey, maple syrup or agave with granulated sugar (try it!).  In truth, I find there is little advantage keeping brown sugar on hand all together; its shelf life is an order of magnitude shorter than its two parent items, recipes often call for light or dark brown sugar ($\sim$ 1 or 2 Tbsp of molasses per cup of sugar, respectively), adding needless inventory.  Perhaps an issue is the variability of molasses spoonfuls, but then again brown sugar introduces <em>pack</em> as a new parameter.</p>
<p>Two especially irreplaceable sugar vehicles come in the form of <strong>honey</strong> and <strong>maple syrup</strong>, notably for breakfast items but just as essential for pastries, coffee drinks, and cocktails.  I use honey in every vinaigrette recipe.  Maple syrup has a high warming association not replaceable with spirits or bitters. Advocating for the use of maple, like honey, requires our agricultural industries to plant more trees and plow fewer fields, creating habitat for creatures that take flight.  As a sweetener, honey is better for tea and maple for coffee.  Flipped the other way, I find the flavor combination of coffee and honey just as odd as that of a vodka and coke! <sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></p>
<p>With all that said: consuming less sugar is probably a good idea.  Any modern diet requires an elimination of sugar.  I have made an effort in previous kitchens to un-crutch myself from its use, and to always explore its substitution via honey or maple or juice reductions where ever I can (this is a great way to make friends with bartenders too, by the way).  Corn syrup is mostly employed because it doesn&rsquo;t crystalize, opacify, or dye candies, but is largely unnecessary otherwise.  Now that its production is tied to the energy sector&ndash;which has made the price of an ear of corn skyrocket in the last twenty years&ndash;its use in cooking and baking is, in my opinion, best avoided altogether.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><strong>Gastriques</strong> are made by combining vinegars and caramels, and are a fantastic way to use up expiring fruit and deglazing a cooking pan (like a rondeau used to caramelize onions) that pairs with steak, pork, or producing a glazing crostini toppings.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>In <a href="https://en.wikipedia.org/wiki/Ecce_Homo_(book)"><em>Ecce Homo</em></a>, Nietzsche says he does not drink coffee because it spreads darkness, yet drinks tea but only in the morning (p. 21).  For some reason, I tend to remember that when choosing honey or maple for sauces and cocktails and it <em>sort of</em> becomes a pneumonic for me that honey goes in lighter mediums and maple syrup in darker ones.  Usually.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>The Flavor Network</title>
      <link>https://brege.org/post/the-flavor-network/</link>
      <pubDate>Wed, 04 Jan 2023 04:04:49 -0500</pubDate>
      <guid>https://brege.org/post/the-flavor-network/</guid>
      <description>This tool allows you to explore the flavor network, a social graph for flavor profiles. The network is based on the &lt;a href=&#34;https://karenandandrew.com/books/the-flavor-bible/&#34;&gt;&lt;em&gt;Flavor Bible&lt;/em&gt;&lt;/a&gt; and soon the companion book &lt;a href=&#34;https://karenandandrew.com/books/what-to-drink-with-what-you-eat/&#34;&gt;&lt;em&gt;What to Drink with What You Eat&lt;/em&gt;&lt;/a&gt;.</description>
      <content:encoded><![CDATA[




<link rel="stylesheet" href="/css/network.css">

<div id="network-title">
  <div id="recipe-link"></div>
</div>
<div id="network"
  data-nodes-path=/data/flavor/nodes.json 
  data-edges-path=/data/flavor/edges.json
  data-sim-path=/data/flavor/similarity.json
></div>
<div id="network-settings">
  <div id="physics-toggle">
    <label for="physics">
      dynamics
    </label>
    <input type="checkbox" id="physics" checked>
  </div>
  <div id="scroll-toggle">
    <label for="click-to-use">
      zoom lock
    </label>
    <input type="checkbox" id="click-to-use" checked>
  </div>
  <div id="lenses-dropdown">
    <label for="lenses" title="used to see flavor combinations by 'social circle' or 'besties'">
      lens:
    </label>
    <select id="lenses">
      <option value="similarity" title="'friends list' - see ingredients that have similar overall 'friendships' as my recipe items" selected>
        similarity
      </option>
      <option value="affinity" title="'besties' - see ingredients that are 'best friends' with my recipe items">
        affinity
      </option>
      <option value="hybrid" title="uses a mix of 'friendships' and 'besties' to see flavor combinations">
        hybrid
      </option>
    </select>
  </div>
</div>

<script src="https://visjs.github.io/vis-network/standalone/umd/vis-network.min.js"></script>
<script src="/js/flavor-network.js"></script>




<link rel="stylesheet" href="/css/search-bar.css">
<div id="searchbox">
  <div id="search-form" data-search-path=/data/flavor/nodes.json>
    <input id="search-input" autofocus placeholder="Search.." aria-label="search" type="search" autocomplete="off">
  </div>
  <div id="search-results-container" aria-label="search results"></div>
</div>
<script src="/js/search-plots.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fuse.js/3.4.6/fuse.min.js" ></script>


<p>This tool allows you to explore the flavor network, a social graph for flavor profiles.
The network is based on the
<a href="https://karenandandrew.com/books/the-flavor-bible/"><em>Flavor Bible</em></a> and soon the companion book
<a href="https://karenandandrew.com/books/what-to-drink-with-what-you-eat/"><em>What to Drink with What You Eat</em></a>.</p>
<p>Search for an ingredient you like, and the graph will refine to give you a web of ingredients that share highly similar flavor profiles.
Then, click on a new ingredient in the network to add it to your recipe above the search box (or to remove it).
Clicking on a recipe item or a node has the same effect.
Search is not sorted by the flavor metric, it is instead sorted <a href="https://fusejs.io/">lexically</a>.</p>
<p>In this way, you can start building out recipes, menu items and tastings from a consensus of flavor combinations.</p>
<h2 id="overview">Overview</h2>
<p>What you are seeing:</p>
<ul>
<li>the nodes with color are your recipe ingredients</li>
<li>the suggested ingredients are determined by <a href="https://en.wikipedia.org/wiki/Jaccard_index">Jaccard <strong>similarity</strong></a> (default) or by one of the other options in the &lsquo;<strong>lens</strong>&rsquo; dropdown</li>
<li>if you choose the <strong>hybrid</strong> option, the suggested ingredients are fiducially split between:
<ul>
<li>the most similar ingredients in the flavor metric (<strong>similarity</strong>)</li>
<li>the most similar ingredients by text ranking (<strong>affinity</strong>)</li>
</ul>
</li>
<li>the edges from one ingredient to another are weighted by a consensus of chef and expert opinion <sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></li>
<li>if your ingredient is missing, it was likely missing in the book (<em>quinoa</em>) or was pruned because its mentions were too sparse <sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></li>
</ul>
<p>If a node is present without an edge, it means that the ingredient has a very good similarity with your recipe, but wasn&rsquo;t mentioned (connected) in its book-entry literally.
Reconstructing &lsquo;ghost&rsquo; entries and connections by training a model with listed affinities is one of the ultimate goals of this project.</p>
<p>The amount of suggestions gradually decreases as you add more ingredients to your recipe.
This is for performance reasons, as with the physics simulation disabling itself at destabilization.
When that happens, maybe you discovered a flavor affinity.</p>
<p>I have included autogenerated links from your recipe basket to a few popular recipe resources above the network graph, including a database for cocktail mixing. <sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup></p>
<h2 id="why-and-how">Why and how</h2>
<p>Understanding why I chose this text for the dataset is probably already apparent to its readers, but the key thing to take away is that the authors did a fine job formatting something computer readable and human usable&ndash;a rare feat!
Most importantly, it is aggregated from <em>chefs</em>, from real humans in kitchens doing what works, what&rsquo;s delicious, and what&rsquo;s in season.
Recipe API&rsquo;s don&rsquo;t have this kind of granularity, many rely too heavily on user data to seed recommendations.
To my knowledge, this is the only dataset of this kind.</p>
<p>Technical tools only involve <a href="https://visjs.org/">vis.js</a> for visualization and <a href="https://www.crummy.com/software/BeautifulSoup/bs4/doc/">BeautifulSoup</a> for parsing.
The data is scraped from the <em>Flavor Bible</em>, and the similarity matrix is calculated using <a href="https://en.wikipedia.org/wiki/Jaccard_index">Jaccard similarity</a> for <a href="https://en.wikipedia.org/wiki/Pairwise_comparison">pairwise comparisons</a>.
I am working on cleaning up the initial data with some mix of modern techniques with some concoction of
<a href="https://www.nltk.org/">nltk</a>,
<a href="https://github.com/seatgeek/fuzzywuzzy">fuzzywuzzy</a>
and/or
<a href="https://huggingface.co/docs/transformers/model_doc/bert">Bert</a>.
The current form was done entirely with regexp/bs4 parsing.
The suggested nodes can be improved by using a weighted Jaccard probability distribution (<a href="https://arxiv.org/abs/1809.04052">arXiv</a>).
Source code for this part of the calculation (the text → dataset chain) is <a href="https://github.com/brege/flavor-project">available on GitHub</a>.</p>
<h2 id="inspiration">Inspiration</h2>
<p>In 2019, I was helping fellow chefs come up with new specials.
At this point in time, we were rolling about four-ten new specials as a team every week,
ranging from brunch, cocktails, lunch, football apps and our highly anticipated farm-to-fork pop-up dinners.
But sometimes you just get plain stuck.
A good trick, at least for creativity, is to set rules so you have some boundaries to push.
But if you are going to set rules, they should at least solve a few things:</p>
<ol>
<li>do something new</li>
<li>use something old</li>
<li>feature three things in season</li>
</ol>
<p>I hate having extra stuff around, but I love new stuff coming in, yet I don&rsquo;t like wasting things, but then I actually look forward to doing inventory.  Ah, Schrodinger&rsquo;s cook.</p>
<p>Specials:  we would work out new ideas together over the prep table.
Sometimes ideas required working things out on paper, usually butcher&rsquo;s,
and occoasionally crude graphs of our plate setups evolved.
These were sketches of sauce and protein layouts, heavy edges between ideas if their pairing &lsquo;sang&rsquo;, then as a guide hanging from the ticket rail on the night a feature debuted.</p>
<p>Karen and Andrew&rsquo;s book was gifted to me later that year, and it changed my game.
It finally put in words a mental ranking of flavor profiles based on ingredient query.
I had a good resource that gave answers, and especially new ideas, quickly.
And it was thorough enough to trust.</p>
<p>This method was so helpful, I started dreaming of a computer tool to help me sketch out this process. I remembered a reddit
<a href="https://www.reddit.com/r/datasets/comments/3bxlg7/i_have_every_publicly_available_reddit_comment/">post</a>
that
<a href="https://www.reddit.com/r/dataisbeautiful/comments/ae88pk/interactive_visualization_of_related_subreddits/">spurred others</a>
to lay out some of the underlying ideas here: overlapping communities :: compatible flavors.</p>
<h2 id="broader-thoughts">Broader thoughts</h2>
<p>I believe the impact of mathematical concepts to the broader culinary scope to be a major upgrade in our thoughtfulness about food.
To extend its application, in creativity and clarity, not abused in statistics to pressure a sale and disable the <em>creative mind</em>.
While I do see how a tool like this could provide immense practical application in the distribution world, my focus here is to empower chefs, bartenders, brewers, baristas, and sommeliers to create new things.</p>
<p>When it comes to tools available to chefs,
compared to musicians, writers, and artists,
chef&rsquo;s are unfortunately at a disadvantage creatively.
Yes, we have recipes, but those are instructions, and do little to help us build on <a href="https://ruhlman.com/ruhlmans-books/">ratio</a> or <a href="https://www.saltfatacidheat.com/">balance</a>.
What might be more helpful, I think, is a playground for putting new food ideas together.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>In the book, the weight of the pairing is given by the emphasis of the text:</p>
<ul>
<li>normal text means mentioned by at least one expert</li>
<li><strong>bold</strong> is recommended by many experts</li>
<li><strong>BOLD CAPS</strong> is highly recommended</li>
<li>*<strong>BOLD CAPS</strong> is the &ldquo;Holy Grail&rdquo; of pairings</li>
</ul>
<p>If the ingredient is not mentioned, it is given no weight (or edge) but it does not mean a flavor pairing doesn&rsquo;t exist.
This is part of the purpose of this tool! Lastly, there are a few dozen mentions of &ldquo;Avoid&rdquo;, and should be thought of as opposite charges.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>If you encounter a bug, please feel free to contact me by <a href="mailto:wyatt@brege.org">email</a>
or open an issue on
<a href="https://github.com/brege/flavor-project/issues">GitHub</a>!&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>When <em>What to Drink</em> has been parsed and merged with the network, the latter link in the recipe site list should become much more robust. How fun!&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>What is Pesto?</title>
      <link>https://brege.org/post/what-is-pesto/</link>
      <pubDate>Sun, 11 Dec 2022 16:56:56 -0500</pubDate>
      <guid>https://brege.org/post/what-is-pesto/</guid>
      <description>A minimum specification of Pesto, earstwhile its relation to other green
sauces, and my view of pesto as a classifcation schema and not a rigid
recipe.</description>
      <content:encoded><![CDATA[<p><strong>Pesto*</strong> is a cold-prep green sauce made with herbs and alliums suspended in oil.  Most pestos call for some form of nut or cheese.  In the general sense, chefs may specify &ldquo;loose pesto&rdquo; when there are neither cheese nor nuts in the sauce, or when the sauce has an abundance of oil.  In general, pesto is made from herbs in the mint family, almost always from basil. The <strong>*</strong> distinguishes a generalization to the traditional meaning of the word.</p>
<h2 id="classification">Classification</h2>
<p><strong>Basil pesto</strong> is the common pesto.  Its recipe typically calls for five key ingredients:
$$
\begin{aligned}
\textrm{basil pesto} = \textrm{basil} &amp;+ \textrm{extra virgin olive oil} + \textrm{garlic} \\
&amp;+ \textrm{parmesan cheese} + \textrm{pine nuts}
\end{aligned}
$$</p>
<p>Chimichurri includes a vinegar, usually red wine vinegar, which pesto does not, although pesto can suspend acid through citrus.  Chimichurri often uses rough chopped or ground herbs, almost always oregano and parsley, but some modern applications will puree chimichurri as one does with pesto.<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
<p>Pesto is also different from gremolata, which like chimi is also made with parsley, so you may refer to carrot-family herb sauces as either gremolatas or chimis, and mint-family herb sauces as pestos, and chefs will know what you mean, even if they don&rsquo;t quite agree with the abstractions.</p>
<p>A table is provided as a summary of these three sauce&rsquo;s distinctions.</p>
<table>
  <thead>
      <tr>
          <th></th>
          <th>Pesto</th>
          <th>Gremolata</th>
          <th>Chimichurri</th>
          <th><em>Spring Sauce</em></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Herb*</td>
          <td>Basil</td>
          <td>Parsley</td>
          <td>Parsley + Oregano</td>
          <td><em>Mint + Peas</em></td>
      </tr>
      <tr>
          <td>Oil</td>
          <td>Extra Virgin</td>
          <td>Extra Virgin</td>
          <td>Extra Virgin</td>
          <td><em>Walnut Oil</em></td>
      </tr>
      <tr>
          <td>Allium</td>
          <td>Garlic</td>
          <td>Garlic</td>
          <td>Garlic</td>
          <td><em>Green Onion</em></td>
      </tr>
      <tr>
          <td>Nut</td>
          <td>Pine nut</td>
          <td>-</td>
          <td>-</td>
          <td><em>Pistachio</em></td>
      </tr>
      <tr>
          <td>Acid</td>
          <td>-</td>
          <td>Citrus</td>
          <td>Red Wine Vinegar</td>
          <td><em>Pomelo</em></td>
      </tr>
      <tr>
          <td>Wow</td>
          <td>Parmesan</td>
          <td>n/a</td>
          <td>Chili Flakes</td>
          <td><em>Chevre</em></td>
      </tr>
  </tbody>
</table>
<blockquote>
<p>&ldquo;Green Sauces.  The author made spring sauce up, but it&rsquo;s very good on crostini.&rdquo;</p>
</blockquote>
<p>But there is a small catch, because some chefs may also say &lsquo;arugula pesto,&rsquo; which might have no mint-family herb mixed in.  This leafy sauce resembles pesto in process and appearence, and provides the effect of coating pastas in bright green colors, especially when suspended in stablized fat like reduced cream or mayonaisse.  A chef can employ arugula for its liquorice and peppercorn aspects, or baby spinach which adds tang (like nori) when cooked, but she will most likely apply it because of its food coloring properties (vibrancy).  Similarly, &lsquo;spring pea pesto&rsquo; is made with a puree of spring peas and mint, and on crostini is a fantastic crudité.</p>
<p>In this way, <strong>pesto*</strong> is generalized from its elements, describing a sauce of process and appearence while flexible in its flavor balancing rules.  This is pesto* as a <strong>category</strong>, not pesto as a set.  For all intents and purposes, chimis and gremolatas are pestos*.</p>
<h2 id="ingredients">Ingredients</h2>
<p>The key to most pestos is to use a motor driven device for pureeing the sauce.
The two best tools available and in common use both in commericial and residential kitchens are the <strong>vitamix</strong> or <strong>immersion blender</strong>.  Food processors and ninjas work just as well.</p>
<blockquote>
<p><strong>Hint:</strong> always add cheese last</p>
</blockquote>
<p>Puree everything besides cheese first.  You don&rsquo;t want to gum up your blender, so you can fold the proto-pesto with grated parmesan in a mixing bowl after pureeing the produce.  In restaurants, you can make a really fine proto-pesto (i.e., loose pesto) by pureeing the produce and oil for an extended period of time.  It is easier on the motor and on the blades.  You can be lazier picking your leaves on your basil or include more stems, because the cheese absent creates less friction.  <strong>Save the cheese for last.</strong></p>
<h3 id="greens">Greens</h3>
<p>Most herbs from either the carrot- or mint-families will work great, and many green tops of root vegetables (turnip, radish) are, while not interchangeable, usable and often complimentary in pestos.
Caution: while tarragon can be made into a pesto*, its deployment in cold-prep sauces is rare (marinades, green goddess dressing) and is typically utilized better in hot-prep sauces&ndash;especially béarnaise. Sage, rosemary, and lemon verbena require special practice.  Thyme is time.
Use edible garnishes. Keep away from the ornamental &ldquo;perfumes&rdquo;.</p>
<blockquote>
<p><strong>Recommend:</strong> basil, mint, parsley, oregano, marjoram, arugula<br>
<strong>Avoid:</strong> lavendar, tarragon, lemon verbena, rosemary</p>
</blockquote>

 
 
 <div id="mynetwork" data-nodes-path=data/nodes.json data-edges-path=data/edges.json></div>
 
 <script src="https://visjs.github.io/vis-network/standalone/umd/vis-network.min.js"></script>
 <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
 
 <script>
   
   const nodeStyles = {
     nodes: {
       color: {
         background: '#eaeaea'
       },
       shape: 'box',
       shapeProperties: {
 	      borderRadius: 3
       }
     }
   };
 
   function highlightNodes(matchingNodes) {
     
     matchingNodes.forEach(node => {
       $(`#${node.id}`).css('background-color', '#add8e6');
     });
   }
 
   
   const options = {
     width: "100%",
     height:   `${window.innerHeight * 0.6}px`,
   };
 
   
   const container = document.getElementById("mynetwork");
   const network = new vis.Network(container, {}, options);
 
   
   const nodesPath = $("#mynetwork").data("nodes-path");
   const edgesPath = $("#mynetwork").data("edges-path");
 
   
   $.getJSON(nodesPath, function(nodesData) {
     $.getJSON(edgesPath, function(edgesData) {
       
       const data = {
       	nodes: nodesData,
 	      edges: edgesData
       };
 
       
       network.setData(data);
       
       network.setOptions(nodeStyles);
 
       
       const nodes = data.nodes;
 
       network.on('select', function(params) {
         const matchingNodes = nodes.filter(node => selectedResults.includes(node.label));
           highlightNodes(matchingNodes);
       });
     });
   });
 
 </script>

<h3 id="cheese">Cheese</h3>
<p>Try to stick with a hard cheese that has longer room temperature stability.  Cheeses with hard interiors and developed rinds will impart the necessary fats and impactful aromas while also being more conservative in the funky bleu cheeses, chalky goat cheeses, or sour yet creamy compositions of farmer/cottage style cheeses&ndash;namely, ricotta, cotija or paneer. An old queso fresco that has been air dried in the fridge, however, is a mighty substitute to parmesan on a budget.</p>
<blockquote>
<p><strong>Recommend:</strong> parmesan, hard rind, feta, crumbly<br>
<strong>Avoid:</strong> soft, bleu</p>
</blockquote>
<h3 id="citrus">Citrus?</h3>
<p>Of course, pesto is also seasoned (sodiums, peppercorn) and lemon zest or lemon juice is an especially common addition.  Adding citrus tunes flavor, because it combats salinity (parmesan saltiness is not equal between products) and piquancy (garlic cloves grown in drought can be remarkably &lsquo;hot&rsquo;).  Because lemons are a hybrid of pomelo and citron, grapefruit juice is an equally applicable substitute.</p>
<blockquote>
<p><strong>Recommend:</strong> lemon zest, grapefruit juice, kombucha vinegars<br>
<strong>Avoid:</strong> orange, distilled vinegars</p>
</blockquote>
<h3 id="nuts">Nuts</h3>
<p>Pine nuts are the nut of choice in recipes from canonical sources.  People don&rsquo;t have pine  nuts in their house.  They do have other nuts leftover from baked good preperations.  In restaurants, pine nuts are toasted in hot ovens.  They are applied whole to pizzas and salads, so because they can live in a recipe and two auxillary dishes, they define themselves as roleplayers in menus and inventories.  However, pine nuts are expensive.  Because they are normally toasted, errant chefs may leave them in ovens for moments too long, destroying a product whose cost is equivalent to whole numbers of the average hourly wages.  This is not good for anyone.  I&rsquo;ve never done this before, I swear.</p>
<p>Instead, some nontropical tree nuts are immediate substitutes if you are concerned only with the context of pesto: <em>walnut,</em> <em>almond,</em> and <em>pistachio</em>.  This does not mean cashews are off limits, nor peanuts.  Consider  the role they play with basil and different oils in Thai cuisine.  But maybe we don&rsquo;t often think of peanut butter and parmesan together, so we avoid peanuts in pesto.  That doesn&rsquo;t mean you are violating international treaties by substituting deluxed mixed nuts from the grocery store in place of pine nuts.  Pine nuts are the most replaceable element of classical pesto.</p>
<blockquote>
<p><strong>Recommend:</strong> pine nut, walnut, almond, pistachio<br>
<strong>Avoid:</strong> peanut, cashew, macadamia, brazil, pecan</p>
</blockquote>
<h3 id="oils">Oils</h3>
<p>It is by no coincidence that extra virgin olive oil is the go to substrate (notice also olives and the alternative nuts previously mentioned grow adjacent to each other).  Its Mediterranean origin is the required consideration for almost all member dishes in its cuisine.  Some oils are better than others when olive oil is out: avocado, walnut, grapeseed.  Avoid soy and canola oils which are better suited for frying, and harm basil less in lite applications like salad (Italian) dressing.  Coconut oil can be used, but is not ideal because of its high melting point.  However, you can create a spreadable pesto by using coconut oil&ndash;if the proto-pesto wets are tempered into coconut oil carefully.  Coarser nuts in the spread make for a provocative but health-conscious party favor.</p>
<blockquote>
<p><strong>Recommend:</strong> extra virgin, walnut, avocado<br>
<strong>Avoid:</strong> canola, soy, peanut</p>
</blockquote>
<h3 id="alliums">Alliums</h3>
<p>Lastly, we generalized garlic to alliums above for good reason.  You can make garlic scape pesto, which uses the green tops grown above earth from the garlic bulb.  But, you can also use spring onions and/or shallot bulbs in place of garlic, which is especially more pleasant with lakefish and seafood.  Although, garlic <em>is</em> preferable to onion in the regime of shellfish and, notably, the mollusk.  You can also use radish bulbs, as well as radish or mustard greens in pesto, which simulates &ldquo;bite&rdquo;.  In place of garlic, this is a quite useful substitution when pestos are applied in dressings for leafy salads or pasta salads.</p>
<blockquote>
<p><strong>Recommend:</strong> fresh garlic, young onions, shallot, some pickled<br>
<strong>Avoid:</strong> large onions, leek, pearl onion, cooked garlic</p>
</blockquote>
<h2 id="recipe">Recipe</h2>
<p>I&rsquo;ve included a basic production recipe for <em>Basil Pesto</em> that creates a structurally &ldquo;loose&rdquo; pesto.  My application could be added to heavy mayo for basil aioli, brushed on bread for grilling, and thickened with reduced (50%) cream for penne pasta dishes (bechamel cheese sauces work there, too).
Cheese plays a more vital role when pesto is a topping where the goal is to gratinize, or in the presence of crackers.</p>
<div class="recipe border rounded is-embedded">
  <div class="content">
    <h2 id="basil-pesto">Basil Pesto</h2>
<p><strong>Chef:</strong> Wyatt Brege</p>
<p><strong>Yield:</strong> 1 Quart</p>
<h3 id="ingredients">Ingredients</h3>
<ul>
<li>2 Bunch Basil</li>
<li>8-10 clove Peeled Garlic</li>
<li>3 Cup Extra Virgin Olive Oil</li>
<li>1/4 Cup Seasonal Tree Nuts (shelled whole)</li>
<li>1/4 Cup Grated Parmesan</li>
<li>tt Salt and Black Pepper</li>
</ul>
<h3 id="directions">Directions</h3>
<p>In a medium sized mixing bowl, combine the ingredients (sans parmesan)
with the immersion blender.
Fold in the parmesan.
Store in 1 Quart deli container.</p>
<h3 id="notes">Notes</h3>
<p>It is important to use actual extra virgin olive oil and not pomace or
salad oil. The bite of the olive is a key flavor component of pesto.</p>

  </div>
</div>

<h2 id="what-is-sauce">What is sauce?</h2>
<p>When you play this game of generalizing sauces into irreducible primitives, you eventually question with good reason why the five mother sauces are the way that they are.</p>
<p>If postulated today, there would no doubt be endless criticism of its organization, lack of other fundamentally different sauces (gastriques?), exclusion of other world foods, and few would be convinced of any universality.
But Escoffier&rsquo;s postulate has historical importance defining the role of these hot-held sauces in a greater culinary scope. Less valuable now as theory, it is more so enforced as a performance lesson: a chef must learn how to make the mother sauces to be the best in her trade.</p>
<p>If you were to reduce every cold sauce into fundamentals (vinaigrette, aioli, coulis, etc), to what extent can you?
There is at least some argmunent: the preperation does require special work.
While the heated sauces have an additional thermal parameter (&lsquo;careful not to scald, to break..&rsquo;), the cold sauces spend energy kinetically: emulsify, puree, grind (&lsquo;careful not to overwhip, to break..&rsquo;).
In this sense, attention isn&rsquo;t voluntary, so it separates itself from chopping, fermenting, or stirring to mix, giving an argument of practicality some teeth in the need for order.  No, Ranch is not a mother cold sauce, but mayo does require special work and <em>is</em> an elemental part of Ranch.</p>
<p>In my mind, I do consider some categories of cold sauces as fundamental to the education of the garde (those mentioned, probably closer to seven in total).
So with liberty, let&rsquo;s for sake of argument hold salsas and pestos in different regard.  I cannot speak to the genre it belongs, but: if you have never tried blending tomatillo and basil together, you are missing out on one of life&rsquo;s best kept secrets.</p>
<div class="recipe border rounded is-embedded">
  <div class="content">
<h3 id="on-the-fly">On the fly</h3>
<ul>
<li>Arugula, Mint, Pea pesto $\approx$ pesto, sub herb</li>
<li>Gremolata $\sim$ pesto, sub herb, add citrus, minus cheese, minus nuts</li>
<li>Chimichurri $\sim$ gremolata, with vinegar, with chiles</li>
</ul>
  </div>
</div>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>I often wonder what foods may have begun as mistakes, or because other times someone just had to make do.  Chimi mixed with pesto, then subtended with more red wine vinegar, leads to something quite close to Italian dressing.  Maybe this was an accident once, or maybe a quick hack.  Turning salvage and hacking into a creation presents a trade uniquely as an art.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
  </channel>
</rss>
