Richard Barnes

Richard Barnes

Scientist. Developer. Tinkerer.

GitHub LinkedIn Stack Overflow Google Scholar ResearchGate Blog

I develop high-performance algorithms for investigating big data problems in society and the environment.

Skip to content
Tyramine content of foods

Caveat to this post. Only a few groups of people really need to think about tyramine: those on MAOI antidepressants and those on certain antibiotics including linezolid and furazolidone. Linezolid requires minimal caution if you have otherwise normal blood pressure, though please see below for sex differences.

Background

Tyramine results from bacteria eating protein. Specifically, tyrosine, an amino acid common to protein-rich foods, gets its carboxyl group snipped off by microbes, and the leftover is tyramine. Thus, the more bacterial protein breakdown a food has gone through, the higher its tyramine content will be. Fresh foods are safe while aged, fermented, cured, and spoiled foods all have higher levels.

When you ingest tyramine an enzyme called monoamine oxidase (MAO) destroys it in your gut before it reaches your blood stream. When MAOI antidepressants and antibiotics block that enzyme, tyramine gets into the blood stream inducing norepinephrine release. This causes blood pressure to spike high enough that it can cause a "hypertensive crisis".1

Antibiotics that can cause tyramine issues:

  • linezolid (Zyvox)2 — yes. A reversible, non-selective MAO inhibitor; a significant blood-pressure response appears at tyramine doses over 100 mg, so the label warns against tyramine-rich foods.
  • furazolidone (Furoxone)3 — yes, but cumulative. The MAO-inhibiting effect builds over days: roughly 5 days of dosing raises tyramine sensitivity about 2–3 fold.
  • tedizolid (Sivextro)4 — unlikely. A reversible MAO inhibitor in vitro but weak in practice: the tyramine dose needed to push systolic blood pressure up 30 mmHg fell only from 425 mg (placebo) to 325 mg, so it generally needs no dietary caution.

Danger zones:

  • 600 mg for a healthy person not on any MAOI5 — the EFSA no-observed-adverse-effect level (NOAEL); measurable pressor responses (a 30 mmHg systolic rise) can appear at lower doses in sensitive individuals (see the 200–800 mg PD30 range below), but are not classified as clinically adverse below this threshold
  • ~325 mg the median tyramine dose that provokes a pressor response on tedizolid (Sivextro) — several times more than any normal meal delivers, which is why it needs no dietary caution4
  • ~100 mg Linezolid's FDA labelling 2
  • 50 mg for someone on a newer (third-generation) MAOI5
  • 6 mg for someone on a classic irreversible MAOI like phenelzine or tranylcypromine5

For the classic MAOIs a dose–response framing is similar6: ~6 mg starts mild symptoms, 10–25 mg risks a severe reaction, and the average un-medicated person tolerates 200–800 mg before their blood pressure changes.

Also note: tyramine levels in food have decreased over time. Non-decarboxylating starter cultures and refrigeration mean today's supermarket cheddar, salami, and soy sauce carry a fraction of the tyramine of the mid-century samples that produced terrifying guidance in the past7.

Tapering

How quickly you can relax tyramine restrictions after stopping a drug depends on whether the MAO inhibition is reversible and how fast the drug clears.

Drug Inhibition type Washout period Basis
Classic MAOIs (phenelzine, tranylcypromine, isocarboxazid) Irreversible 14 days These drugs destroy MAO irreversibly — new enzyme must be synthesised regardless of how fast the drug clears (phenelzine t½ ~12 h8). Both phenelzine8 and tranylcypromine9 labels state that tyramine-rich foods must be avoided for 2 weeks after stopping
Moclobemide Reversible ≤48 hours Short half-life (~1–3 h); MAO activity recovers as the drug clears. Antal et al.10 — who studied both linezolid and moclobemide — found all subjects' tyramine sensitivity normalised within 2 days of stopping; actual recovery may be faster given the short half-life
Linezolid Reversible ≤48 hours t½ ~5 h2; Antal et al.10 found all subjects' tyramine sensitivity normalised within 2 days of stopping
Tedizolid Reversible (weak) No restriction Inhibition so weak that no dietary caution is recommended even during treatment
Furazolidone Cumulative ~7–14 days (estimated) MAO inhibition builds over ~5 days of dosing3; recovery duration is poorly characterised — at least 1–2 weeks of caution after stopping is prudent

Do you really need to worry about tyramine on linezolid

The FDA label warns against large amounts of tyramine-rich foods, based on controlled studies in which pressor responses appeared at oral tyramine doses above 100 mg. Three independent clinical studies suggest the practical risk from ordinary eating is substantially lower — though all three were conducted in healthy male volunteers with normal blood pressure. There is no tyramine–linezolid literature on patients with pre-existing hypertension, and none on women; see the sex differences section below.

A note on methods: the studies below define a pressor response as a ≥30 mmHg systolic rise — a threshold Cantarini et al.11 describe as "clinically inconsequential (increases in SBP of 30 mmHg occur during mild to moderate exercise)" — and they establish thresholds using overnight fasting and, in one case, intravenous tyramine, both of which substantially overstate real dietary exposure.

Antal et al. (J Clin Pharmacol 2001;41:552–562)10 gave healthy male volunteers oral tyramine challenges alongside linezolid or moclobemide, after an overnight fast (midnight until 2 hours after the final tyramine dose; meals not until 15:00). The smallest dose raising systolic BP ≥30 mmHg was 100 mg on linezolid versus 75 mg on moclobemide, with pressor sensitivity ratios of 3.48 versus 4.97. Their abstract concludes: "The MAOI activity of linezolid is similar to that of moclobemide, a drug used clinically without food restrictions. Restrictions to normal dietary intake of tyramine-containing foods are not warranted when taking linezolid."

Cantarini et al. (Br J Clin Pharmacol 2004;58(5):470–475)11, using intravenous tyramine in a within-subject crossover (n = 12), found TSF 1.8 (90% CI 1.6–2.0) for linezolid versus 2.1 (90% CI 1.8–2.4) for moclobemide — statistically indistinguishable, corroborating the equivalence. They also found a statistically significant effect of BMI on TYR30 (p = 0.002): each 1-unit increase in BMI produced a ~4.6% increase in the tyramine dose needed — projecting this linearly, a 10-unit BMI increase would correspond to roughly 57% more tyramine tolerated, though the true relationship could be nonlinear, could saturate, or could steepen at the extremes.

Rumore, Roth & Orfanos (Nutr Clin Pract 2010;25:265–269)12 found zero published case reports of a linezolid–tyramine reaction in hospital patients (only one outpatient case reported to the manufacturer, details unknown). They also noted that the Antal 100 mg threshold was established in fasted subjects; consuming tyramine with a meal reduces bioavailability by ~50%13, and in a study of moclobemide subjects, 2.8× higher oral doses were needed in fed versus fasted subjects to produce a pressor response14 — suggesting the effective dietary threshold is substantially higher than the fasting experimental figure. New York–Presbyterian Hospital (>2,300 beds) removed the tyramine-restriction requirement for linezolid patients in December 2009 and reported no problems. Their conclusion: "dietary restrictions of tyramine are not necessary for hospitalized patients on linezolid."

read more →
Kayaking Tomales Bay in search of bioluminescence

tl;dr There are a bunch of planning tools near the bottom of the post.

Tomales Bay is one of the best places in California to kayak through bioluminescent plankton, but you can only see it if three things align: it has to be dark enough (moon below the horizon), late enough (after full darkness), and the right season (late spring through fall when dinoflagellate populations peak). What follows is a trip report followed by some planning tools for your own trip.

Sunset over Tomales Bay from the east shore

The First Trip — September 23–24, 2022

We reserved Boat Site B at Point Reyes National Seashore Campground, a group site on the west shore of Tomales Bay at Marshall Beach, accessible only by water.

Map showing Marshall Beach campsite location on the west shore of Tomales Bay

The original plan was to park overnight at, and launch from, Miller Boat Launch on the east shore and paddle across to camp.

Miller Boat Launch on the east shore of Tomales Bay

Straight-line, the route is about 1.78 miles.

Kayak route of 1.78 miles along the east shore to the campsite

By timing the crossing for slack tide, though, we could have cut straight across the Bay — only about 4,500 feet — and then head southeast along the shore to the camp site. This would have minimized exposure to open water risks.

Direct crossing of Tomales Bay: 4,493 feet

But, in planning this, I chickened out a bit. The group included people with variable kayaking experience and high afternoon winds can lead to large waves on the Bay, so we instead launched from Chicken Ranch Beach to the south, and paddled 5.29 miles along the shore so that there'd be an easy way to bail if things went wrong. This choice brought us into Type II Fun territory.

Route from Inverness launch to campsite: 5.29 miles

Kayaks loaded and ready at the launch point

Launching from Miller Boat Launch in the late afternoon

Group paddling across Tomales Bay toward the campsite

I chose the date to maximize darkness. Moonset on September 23 was at 6:19 PM — well before sunset — leaving the whole evening dark. (The planner below includes all this information in an easy-to-use form.)

Moon position chart for September 23, 2022: moonset at 6:19 PM, 5.5% illumination

In addition, civil twilight ended at 7:39 PM, nautical twilight at 8:06 PM, and astronomical twilight at 8:33 PM.

Sun and twilight times for September 23–24, 2022

Winds pick up in the afternoons so launching before noon is recommended and, in fact, local outfitters won't rent kayaks after noon even though winds tend to drop off again later in the day. Given the tide and light, starting around 4:00 PM during slack tide should have given enough time to paddle and set up camp before dark.

However, due to folks' work schedules, we weren't able to get onto the water until 5:12 PM (a vanguard from our group acquired the kayaks). This meant meant fighting the incoming tide that started at 5:53 PM on the 23rd. But not just the tide! Also that wind. The result was a brutal, soaking paddle. We got to camp at 7:17 PM, so the trip took about two hours.

On the way out we didn't time it much better and got on the water at 11:25 AM to fight the outgoing tide on our way back. The winds were calm and the paddling was much easier than the day before. We took it slow and arrived at 1:18 PM, so the trip took about two hours.

NOAA tide chart for Tomales Bay, September 23–24, 2022

Most beaches on the west shore are tidally dependent and will disappear at tides above 5 ft. Since September 23 had a high tide of 5.28 ft at 11:11 PM, we needed to set up camp well above the waterline.

Campsite at Marshall Beach as dusk falls

Cold and wet, some members of the trip retreated to tents immediately to get warm and no one was up for venturing back out again into the dark. The fabled bioluminescence didn't show itself in the bay near our tents.

But the weekend wasn't a wash. Our visit corresponded with the annual campout of the Traditional Small Craft Association. They played folk music by their fire well into the night.

Sunrise over Tomales Bay from the beach

Morning view from inside the tent looking out at the bay

Campsite in the morning light with TSCA boats on the water

The next morning we went hiking up and around our mini-bay.

Morning hike along the trail above Marshall Beach

Wooded trail through the trees on the morning hike

It took a while, so we investigated climbing across the cliffs to get back to camp.

Rocky shoreline at low tide below the cliffs

But were spared that adventure by the TCSA coming over in one of their boats!

A TSCA sailboat launching from the cove

Crew aboard a TSCA sailboat

View from a TSCA sailboat looking back at the campsite

Heading out from camp for the return crossing

The Second Trip — October 6–7, 2023

I returned a year later with a friend to try again. Blue Waters normally rents sit-on-top kayaks, but as a former kayak guide I was able to get a lighter enclosed double. This time we used the Miller Boat Launch. The winds were, by luck, exceptionally calm when we got on the water at 3:30 PM. By 4:39 PM we'd successfully crossed to the opposite shore and were making our way along it and by 5:47 PM we had our tent set up at Tomales Beach (which is closer to Miller than Marshall Beach).

Red kayaks and gear at the launch point

Paddling across the open bay

Paddling past a rocky headland on the west shore

Dinner cooking on camp stove at the beach as the sun sets over the bay

After dark, we got back on the water and kayaked from Tomales Beach up to White Gulch Beach - which is in a deep bay directly west of Hog Island. We found bioluminescence the whole way, and it was incredible. Every paddle stroke lit up the waters and disturbed kelp shot lightning bolts away from us.

Night paddle through bioluminescent water

read more →
Lactose content of dairy products

Caveat to this post. There are several different ways to be dairy sensitive and lactose intolerance is only one of them. If you're eating dairy products that are supposed to be lactose-free and still having reactions a parsimonious explanation is that the lactose is not actually the problem. I'll discuss this in a future post.

Background

Lactose tolerance is common globally. Roughly two-thirds of the world's adults stop producing lactase past childhood, and what counts as a tolerable dose varies between people. The NIH puts the typical daily threshold at about 12 g of lactose — roughly one cup of milk — without symptoms or with only mild ones1. Below that, most people are fine; above it, dose and individual sensitivity start to matter.

The lactose content of dairy products spans nearly five orders of magnitude. A wedge of aged Cheddar has almost no lactose while a spoonful of Brunost (Norwegian whey cheese) has more than half its mass in lactose. The reason: lactose is water-soluble and lives in the whey, not the curd. Anything that drains whey (cheesemaking, Greek-style yogurt straining) removes lactose and anything that ferments whey (aging, live yogurt cultures) converts it to lactic acid. Anything that concentrates whey (Brunost, ricotta, dry milk solids) also concentrates lactose.

The tables

The table below is my personal reference. I've normalized all values to grams of lactose per 100 g of product, so they're directly comparable. Each value is footnoted. Where US and non-US values differ I've tried to go with the US value since I spend most of my time in the US.

For mental conversion: 100 g is about 1 cup of milk, about 3.5 oz of cheese, or roughly 7 tablespoons of butter.

The Safe? column estimates whether a lactose-intolerant adult can comfortably consume a typical US serving (1 cup milk/yogurt, 1 oz cheese, 1 tbsp butter, 2 tbsp cream, ½ cup ice cream, ½ cup cottage cheese / ricotta) with a 3× margin of safety. Since most people, myself included, eat more than one serving at a meal, a food is really only safe if ~3 servings still fit under the ~12 g/day NIDDK threshold1:

  • Yes — < 1 g per typical serving. Three servings are still well under the 12g threshold. This is safe for nearly all lactose-intolerant adults.
  • Maybe — 1–4 g per typical serving. One serving is fine for most people; 3 servings approach or hit the threshold.
  • No — > 4 g per typical serving. Three servings clearly exceed the threshold; even one serving may cause symptoms in sensitive individuals.

Milks

Product Lactose (g/100g) Safe? Notes
Whole cow milk (3.25% fat) 4.812 No ≈ 12 g per 244 g cup1 — one cup alone hits threshold
Reduced-fat (2%) cow milk 4.692 No
Lowfat (1%) cow milk 4.862 No
Skim cow milk 5.052 No Removing fat slightly raises lactose-by-mass
Buttermilk, lowfat (cultured) 4.03 No Despite the name, US buttermilk is fermented lowfat milk
Goat milk 4.272 No
Sheep milk 4.44 No
Lactose-free milk (Lactaid-style) <0.14 Yes Lactase enzyme has hydrolyzed the lactose into glucose + galactose
Evaporated whole milk ~105 Maybe Used in small amounts (2 tbsp ≈ 3 g); a ½ cup recipe portion is "No"
Sweetened condensed milk ~125 Maybe A 2 tbsp drizzle is fine; ¼ cup in a recipe is not

Yogurts and fermented milks

Product Lactose (g/100g) Safe? Notes
Plain whole-milk yogurt 4.73 No A 6 oz container has ~8 g; live cultures pre-digest some lactose but most remains
Plain low-fat yogurt 4.03 No ~6.8 g per 6 oz container
Greek yogurt (strained, plain) ~3.06 Maybe Straining removes ~70% of the lactose into the acid whey6
Greek yogurt (nonfat, strained) ≤0.76 Yes
Kefir, plain 4.03 Maybe High raw lactose, but live yeast/bacteria reduce symptoms in lactose-intolerant people by 54–71%7 — effective dose is much lower than the raw number suggests
Skyr 2.53 Maybe Strained, like Greek yogurt
Sour cream 2.03 Yes A 2 tbsp dollop has ~0.6 g
Crème fraîche ~2.44 Yes A 2 tbsp serving has ~0.7 g

Cream and butter

Product Lactose (g/100g) Safe? Notes
Butter, salted 0.68 Yes An entire stick (113 g) has ~0.1 g9; almost all the whey has been churned out
Butter oil 0.0038 Yes
Ghee 0.00298 Yes
Heavy / whipping cream 2.53 Yes A 2 tbsp serving has ~0.75 g; more fat, less aqueous phase, less lactose
Half-and-half ~4.05 Maybe A 2 tbsp coffee splash is fine (~1.2 g); 3 splashes approach the threshold

Fresh and unripened cheeses

Product Lactose (g/100g) Safe? Notes
Cottage cheese, low-fat 1.83 Maybe A ½ cup serving has ~2 g; 3 servings = 6 g
Cream cheese 3.63 Maybe Highest of any common cheese; a 1 oz schmear has ~1 g
Ricotta (whey-based) 2.753 Maybe Made from the whey drained off other cheeses; ½ cup has ~3.4 g
Mascarpone 3.03 Yes A 1 oz serving has ~0.84 g
Chèvre, fresh (goat) 0.93 Yes A 1 oz serving has ~0.25 g
Paneer 0.0023 Yes Acid-set; the whey carries off nearly all of it
Burrata ~1.53 Maybe A mozzarella shell wrapped around a stracciatella cream filling; lactose is dominated by the filling. ~1 g per typical 1 oz serving
Stracciatella (burrata cream filling) 1.83 Maybe Sold as a stand-alone topping; eaten by the spoonful
Cheese curds, fresh 3.03 Maybe Wisconsin specialty. Unaged and unpressed, so much of the lactose remains; a small handful (~30 g) has ~1 g
Queso fresco 2.310 Maybe Fresh, unaged Mexican cheese. Crumbled on tacos at typical portions (~30 g) gives <1 g

Soft-ripened and washed-rind cheeses

Product Lactose (g/100g) Safe? Notes
Brie <0.00243 Yes Mould ripening fully ferments residual lactose
Camembert <0.00243 Yes
Limburger <0.00243 Yes
Taleggio <0.0013 Yes

Pasta filata (stretched-curd) cheeses

Product Lactose (g/100g) Safe? Notes
Mozzarella, commercial low-moisture 0.743 Yes The kind on US pizza
Mozzarella di bufala 0.353 Yes
Bocconcini (mini fresh mozzarella) <0.0013 Yes Fresh; lower lactose than commercial mozzarella because there's less moisture to retain whey
String cheese 0.743 Yes Mechanically the same product as low-moisture mozzarella; one stick (~28 g) has ~0.2 g
Oaxaca (queso Oaxaca) <0.53 Yes Mexican pasta filata cheese; USDA reports ~0 carbohydrates per serving
Provolone, dolce or piccante <0.0013 Yes
read more →
Richard's Picks

My current and previous choices for the tools I use.

read more →
How to estimate a QR code redunduncy level?

An answer to this question on Stack Overflow.

Question

I'm not a specialist, but as far as I know, a bit of information in a QR-code is coded more than once, and it is defined as the redundancy level

How can I estimate a QR-code redundancy level ? Is where an mobile app or a website where I can test my QR-code redundancy level easily ? If not, is it an easy algorithm that I can implement ?

Redundancy is sorted in different categories according to this website, but I'd like to have the direct percentage value if possible

Answer

QR codes contain a couple of bits which indicate the error correction level, as depicted below (source):

QR code redundancy level bits

read more →

See all posts →