Other people’s recipes: Martha Holmberg’s Risotto with Very Meaty Tomato Sauce

Yes! A cookbook author who understands how to do metric conversions!

Far too many cookbooks give metric conversions in volumetric units that no metric-using cook would ever use for measuring that sort of ingredient. It’s great to see at least one person understands that chopped onion belongs on a scale! (As a bonus, that also allows the cook to easily determine how much onion to chop in the first place.)

This is the first recipe I’ve attempted from Martha Holmberg’s cookbook Modern Sauces (Chronicle Books, 2012). Risotto with tomato sauce sounds like an odd thing, but when you use the proportions and serving sizes indicated, the result is quite tasty and not nearly as calorific as you might think. It’s also a lot of work, but the way the recipes in this cookbook build upon one another, it would be easy to spread the work out over three or four nights. As it was, I had to do it all in one day, and it took about four hours of work. The process starts with making a simple marinara sauce — and could end there, if that was what you wanted. Once the marinara is finished, the next step is to turn it into a meat sauce (the “Very Meaty Tomato Sauce” of the title), and again, the process could stop there; indeed, for most of the meat sauce, it does stop there, because the meat-sauce recipe makes eight cups of sauce, but only two cups are required to accompany the risotto — which is part of Holmberg’s point in the book, that these sauces are versatile and can all be used for more than one purpose. I probably won’t have much else to do with the meat sauce this week (I should get four meals out of the risotto), but I can freeze it and bring it out another time for a simple spaghetti dinner. Similarly, the basic marinara is used as a base for several other of Holmberg’s tomato sauces, and it can also be used directly on pasta or pizza, so there’s no waste.

(Incidentally, I consistently get Holmberg’s given name wrong, making her “Marie” rather than “Martha”. Perhaps that’s some heretofore hidden Scandinavian stereotype coming into play.)


The marinara sauce starts with a fairly standard mirepoix. I don’t think it’s called mirepoix in Italian. The recipe said I could grate the carrots, so I did, but I used the wrong grater (should have been the coarse holes) — not that I think it made a difference.

Half a cup of extra virgin olive oil looks like rather a lot when you measure it out. It’s a lot darker, too, when it’s not in a glass bottle.
Olive oil

The mirepoix is now in the pan with the olive oil, sweating away.
Mirepoix sweating

After sweating the mirepoix, canned crushed tomatoes (I used Muir Glen’s “fire roasted” style, because I like the flavor) and chopped basil complate the sauce. It has to reduce for about 20 minutes before it’s ready for the next step.
Marinara reducing

Putting a splatter guard on the pan helps to keep my rangetop from becoming even more of a mess than it already is. The fine mesh screen allows water vapor to escape while keeping larger oil (and tomato!) droplets inside the pan.
Splatter guard

The marinara sauce recipe makes about six cups, but all of it goes into the meat sauce. I had to get it out of the pan so I could rinse the pan off and start cooking the meat for the meat sauce. (No fan of unnecessary dish-washing am I, so the same plastic container will be used to hold the finished meat sauce as well, at least until I portion and freeze it.)
Finished marinara sauce

Very meaty tomato sauce

The recipe starts with mincing a quarter-pound of frozen pancetta in the food processor, after which it is cooked separately (along with more olive oil) to render its flavorful fat. In addition to the pancetta, the recipe calls for half a pound of ground beef and half a pound of mild Italian sausage to be cooked and crumbled — all, like the pancetta, to be cooked without browning. I got the pancetta at Formaggio along with the sausage (I used their fresh fennel sausage, which is certainly close enough to “mild Italian” for my taste), since I was already going there to buy chocolate, but given the nature of this dish I did not consider it worth buying a (more expensive) artisanal pancetta — I just stuck with the national brand Fra’mani.
Meat cooking

After cooking the meat, more herbs and the entire batch of marinara are added to the saucepan, along with some chicken broth, and cook for nearly an hour, with the last few minutes uncovered so the sauce can reduce to the desired consistency.
Meat sauce cooking

One batch of the meat sauce is about eight cups, which is far more than the two cups required for the risotto. (Good thing it can be frozen! It will get portioned out and frozen in individual packages.)
Two cups of meat sauce


The process of making the actual risotto is fairly boring and in any case hard to photograph as one is supposed to stir pretty much constantly. I used Carnaroli rice, because it was what I already had. Chopped onion is sweated in the pan with butter, then the rice is added and fried for a minute or so. The pan is deglazed with a half cup of white wine (thanks to the folks at the liquor store for stocking those tiny little single-serving bottles of wine, which make many recipes like this one accessible to non-drinkers), and then the laborious process of adding chicken stock, stirring, adding stock, stirring, and so on, begins. After twenty minutes of pouring and stirring, stirring and pouring, the risotto is finally done: creamy in texture but still slightly toothy when chewed. It’s thick enough to leave a clear spot behind in the pot when the spatula is dragged through.
Finished risotto

This recipe calls for the grated Parmigiano Reggiano (also from Formaggio, because what’s a cheese shop for, anyway?) but just puts it on top of the finished dish — it’s not stirred into the risotto, which was so surprising to me that I had to double- and triple-check to make sure it really said that. (I just checked it again, and that is absolutely how Holmberg wrote it.)

Finished dish

While the risotto is cooking, the meat sauce is being reduced. The recipe starts out with two cups of meat sauce, but I didn’t measure the volume after reduction, so I can only say that it cooks down to about 12 ounces avoirdupois. A quarter of the risotto (6½ ounces) is placed on the dish with a well hollowed out in the center for the reduced meat sauce (3 ounces), and the whole thing is topped with the grated Reggiano. I didn’t have the sort of wide, shallow bowl the recipe calls for, so I just used a plate. It seemed to work OK. Had I not spent the past four hours over the stove making this dish, I would have whipped up a quick serving of steamed spinach to accompany this dish. Here’s an overhead view of my plate:
Overhead view

And here’s the side view:
Plate up!

UPDATE 2014-07-30: I portioned out the rest of the meat sauce for freezing today and found that I had made 9 2/3 cups originally (about 19 servings); I’m assuming that it probably didn’t reduce quite enough during cooking. The numbers below have not been adjusted to reflect that.


It’s really not as bad as you might expect, provided you stick to the suggested serving sizes.

Complete recipe

Nutrition Facts
Serving size: 6½ oz risotto, 3 oz sauce, ½ oz Parmigiano Reggiano
Servings per container: 4
Amount per serving
Calories 508 Calories from fat 221
% Daily Value
Total Fat 25g 38%
 Saturated Fat 10g 49%
 Polyunsaturated Fat 2g
 Monounsaturated Fat 8g
Trans Fat 0g
Cholesterol 51mg 17%
Sodium 985mg 41%
Potassium 357mg 10%
Total Carbohydrate 49g 16%
 Dietary fiber 3g 13%
 Sugars 3g
Proteins 17g 34%
Vitamin A 27%
Vitamin C 21%
Calcium 17%
Iron 12%

Very meaty tomato sauce

This is for the sauce alone, and unreduced. I suspect it would make a great accompaniment for cheese-and-veggie ravioli (and will report back once I have had a chance to try), although obviously one would want to have fewer ravioli with this sauce than one would with a regular (much lower-fat) pasta sauce.

Nutrition Facts
Serving size: ½ cup
Servings per container: about 16
Amount per serving
Calories 211 Calories from fat 141
% Daily Value
Total Fat 16g 24%
 Saturated Fat 4g 21%
 Polyunsaturated Fat 2g
 Monounsaturated Fat 7g
Trans Fat 0g
Cholesterol 28mg 9%
Sodium 436mg 18%
Potassium 331mg 9%
Total Carbohydrate 10g 3%
 Dietary fiber 2g 9%
 Sugars 1g
Proteins 9g 18%
Vitamin A 23%
Vitamin C 18%
Calcium 5%
Iron 10%
Posted in Food | Tagged , , , , , , | Leave a comment

Chocolate tasting results for week 2

We held our second weekly chocolate tasting today, with much better attendance. Whereas last week, when we were doing 70% chocolates and most people preferred a “reference” 85% chocolate, this week was 85% chocolates and a plurality preferred a “reference” 71% chocolate. Oops. This week’s unintentional winner was Vivani Dark Chocolate (71%), but restricting consideration to just the on-theme products, Alter Eco Dark Blackout (a single-origin chocolate made from Ecuadoran beans) and Vivani Dark Chocolate (both 85%) tied. Full results are on the CSAIL Tasters wiki.

Aside | Posted on by | Tagged , , | Leave a comment

Other people’s recipes: Joanne Chang’s Bittersweet chocolate sorbet

I wasn’t originally going to post about this, since there isn’t really much to see, but I do have one picture of this luscious chocolate dessert from Flour:
Bittersweet Chocolate Sorbet

It came out a little bit icier than intended, I think because I didn’t let the syrup caramelize quite enough. (Which leaves me wondering if maybe adding a pinch of citric acid to help invert the sugar would have changed the texture at all.) Despite this, it’s absolutely delicious, and you don’t miss the dairy products at all, so it’s great for sharing with that special vegan in your life. I used Valrhona Dutch-process cocoa powder and TCHO 66% dark chocolate discs for the flavorings in this recipe.

Image | Posted on by | Tagged , , | 1 Comment

Chocolate tasting results for week 1

I posted the results for week 1 of the chocolate tasting on our wiki. My summary:

One of the “ringers”, the Theo Pure 85% Dark, was the overall winner, with two first-place votes and two second-place votes. Opinions on the Equal Exchange 71% were fairly divided, with some testers rating it highly, but others (and your moderator) finding sour, off flavors. Among the actual on-theme products, the highest ratings went to the Theo Pure 70% Dark. Overall, tasters gave higher marks to the Jelina 72% than I did; I thought it was rather disappointing considering the price (the most expensive in this round at 5.8 cents per gram). Nobody much cared for either Valrhona, at least not in this form, as these bars are designed for baking applications and not for eating out of hand.

We used a simple single-blind tasting format: the participants were given numbered samples of each chocolate and asked for qualitative evaluations for each one, then an overall preference (one participant provided a complete ordering). All participants tasted the chocolates in the same order, which was randomized prior to the tasting. As the host and organizer, I had a complete listing and unblinded the tasters as a group after they had made their evaluations. The whole process (including prep work and cleanup for seven chocolate bars) took about an hour.

For the evaluation form, I used the following simple LaTeX document:

% Evaluation form for CSAIL chocolate tasting, by Garrett Wollman
\input fullpage.sty

  Your name: & \myrule \\
  Chocolate 1 comments: & \myrule \\
  & \myrule \\
  Chocolate 2 comments: & \myrule \\
  & \myrule \\
  Chocolate 3 comments: & \myrule \\
  & \myrule \\
  Chocolate 4 comments: & \myrule \\
  & \myrule \\
  Chocolate 5 comments: & \myrule \\
  & \myrule \\
  Chocolate 6 comments: & \myrule \\
  & \myrule \\
  Chocolate 7 comments: & \myrule \\
  & \myrule \\
  Overall preference: & \myrule \\
% To the extent possible under law, Garrett Wollman has waived all copyright
% and related or neighboring rights to Evaluation form. This work is published
% from:  United States.
% CC0
% This waiver applies only to this document and not to other content on
% bimajority.org.
Posted in Food | Tagged , , | Leave a comment

Yet more recipe pointers

I’ve been a bit of a tear lately annotating cookbooks for recipes I might want to make. I’ve intentionally avoided doing this for the big “encyclopedic” cookbooks, like Joy, which are more for reference than for inspiration, but I’m about halfway through the big glossy theme cookbooks with lots of pictures. Here are some more:

Once again, hope this proves useful.

Aside | Posted on by | Tagged | Leave a comment

More updates to recipe pointers

I’ve gone through a few more cookbooks and taken note of things I might want to try:

Hope this proves useful to someone (other than me).

Aside | Posted on by | Tagged | Leave a comment

Chocolate tasting: week 1

This gallery contains 4 photos.

As I mentioned a few posts ago, I wanted to organize a chocolate tasting. We have a small group of chocolate-lovers in CSAIL, and next Tuesday will be our first of at least six weekly tasting sessions. During this time, … Continue reading

Gallery | Tagged , , | 2 Comments

Debugging a weird network problem (or: IPv6 privacy addresses, just say no)

All you folks who followed my blog for food porn are going to want to skip this one.

The past ten days have been pretty horrible for me at work, thanks to the combined effect of five different network issues. One particularly difficult one to track down has been affecting the very access switch that serves my own office, and that makes it particularly frustrating (especially when trying to fight other fires). The particular symptom that we observed was that traffic would slow down for a short period — about 15 seconds, just long enough to notice but not long enough to actually track down the source of the problem.

It was clear from looking at interface statistics that there was some sort of broadcast or multicast storm going on. Early on, one particular network drop looked suspicious: when the slowdown occurred, we could see that the switch port was receiving a high rate of traffic (hundreds or even thousands of packets per second) and that these were being replicated to all or nearly all the other ports on that switch. When other switches started to trigger the same sort of alerts in our monitoring system, I physically unplugged that drop and things appeared to get better — but I still had no idea why. And things only appeared to get better: there were still slowdowns; they just weren’t as severe (and thus as noticeable) as before.

The access layer in our network is composed of Juniper EX4200 switches, and thanks to Junos’s FreeBSD heritage, they have much better observability than most other switches. In particular, you can run start shell from the Junos command line and get a standard Unix shell (well, csh actually, which while non-standard is “standard enough” for most usual administrative tasks). There are some limitations: Juniper’s kernel will only execute signed binaries, for example, so you can’t install your own software on the switches (although Juniper offers an SDK for some platforms). But Junos includes a number of standard FreeBSD utilities, including netstat, tar, and (relevant for this discussion) top. So I was able to log in to the problem switch and monitor exactly what was going on CPU-wise. Here’s what a normal EX4200 looks like:

last pid: 26547;  load averages:  0.08,  0.12,  0.14   up 110+05:09:57 22:16:09
48 processes:  1 running, 47 sleeping
CPU states:  5.1% user,  0.0% nice,  4.6% system,  0.2% interrupt, 90.0% idle
Mem: 390M Active, 67M Inact, 47M Wired, 190M Cache, 110M Buf, 286M Free

 1374 root             2  44  -52 72584K 19100K select 237.3H  3.66% sfid
 1376 root             1   8    0 86884K 33716K nanslp 129.9H  1.12% pfem
 1373 root             1   4    0 68052K 11804K kqread  53.9H  0.00% chassism
 1424 root             1   4    0 10204K  6084K kqread  30.9H  0.00% mcsnoopd
 1393 root             1   4    0 23896K 15808K kqread 560:19  0.00% eswd
 1402 root             1  96    0 28968K 14992K select 420:57  0.00% mib2d
 1422 root             1   4    0 17320K  9716K kqread 273:08  0.00% lldpd
 1375 root             1   4  -20 14240K  8588K kqread 240:56  0.00% vccpd
 1401 root             1  96    0 22184K 16388K select 215:18  0.00% snmpd
 1426 root             1  96    0 12356K  6940K select 163:18  0.00% license-ch

This is just a standard FreeBSD top command, from about the 7.0 era, so it accepts the S and H flags to show system processes and threads, respectively, but in this case that didn’t add any useful information. When things were hosed, yes, there was a process (mcsnoopd, the multicast snooping daemon) that was taking up a lot of CPU, but it was only getting 30% of the processor — the other 60% was being absorbed by “system” time and not attributable to any particular process or thread.

Seeing this, but being frustratingly unable to truly identify the source of the problem, I opened a JTAC case. The technician gave me a script to run, which totally failed to identify the problem. (JTAC’s debugging scripts are apparently spread around cargo-cult fashion, and the JTAC staff don’t actually understand what they do or have any idea how to debug them — in this case, the script I was given would never have found this issue because it was looking at the wrong place in the output of top -b — but it was impossible to explain this to the tech over email. The script itself was clearly a horrible hacked-together farrago of awk (twice) and grep and sed (twice) to do something which could have been easily done in a single line of awk script by someone who was actually competent.)

Eventually we had a phone call and for once the Juniper “secure meeting” functionality worked. (I keep an old Thinkpad running Windows in my office for this purpose, since “secure meeting” doesn’t usually work on any other platform.) I was able to convince the tech (after two days of waiting for this script to find something) that it wasn’t going to work, and he moved on to another debugging step — one that should have occurred to me, but when you’re under stress you often don’t think of the obvious. One of the other FreeBSD tools that Junos includes is tcpdump (there’s even an interface to it in the Junos command line), so you can actually take a packet capture directly on the switch, save it to the switch’s internal flash, and then scp it somewhere else for analysis. The one drawback with this is that it can only see the packets that hit the switch’s CPU — anything that’s switched in hardware doesn’t get seen by BPF — but that’s actually an advantage when you’re trying to identify something that’s clobbering the switch’s CPU.

We took a packet capture, and I uploaded it to JTAC so the tech could look at it while I was still on the phone, but there wasn’t anything that looked like it could possibly be the source of the problem. So we ended the call with the conclusion that I would continue to watch the switch and take a packet capture when the problem was actually happening. It didn’t take long — as it turned out, the problem condition was actually quite deterministic, and repeated every 125 seconds! So I had no trouble getting those captures, and after uploading them to JTAC I opened each one up in Wireshark and had a look for myself.

What immediately caught my attention was a long stream of IPv6 multicasts that overwhelmed all other traffic for about ten seconds — suspiciously similar to the 15-second period of the slowdown I had been watching in top. I saw that these were all IPv6 Multicast Listener Discovery packets, which are part of the ICMPv6 protocol and take the place of the IPv4 IGMP protocol — they are used by routers to identify which hosts are members of which multicast groups, so that only desired multicast traffic is forwarded down a network interface. I could see that the burst of multicasts was immediately preceded by an all-groups solicitation coming from one of our core switches, so that all seemed normal, and the solicitation itself actually said “please splay your responses over the next 10,000 milliseconds”, which explained why the burst lasted for almost exactly that length of time. The multicast groups being reported, in nearly all cases, were the so-called “solicited node” multicast groups, which are part of IPv6’s (mandatory) Neighbor Discovery Protocol — the way nodes on a network find out their neighbors’ layer-2 addresses, analogous to ARP in IPv4. If this was just normal behavior, why exactly was it causing such problems? Surely Juniper had plenty of customers who were using IPv6 in production networks, so they must have tested this software. And why was the mcsnoopd process involved for IPv6 traffic? I started reading up on tuning parameters for MLD, reasoning that maybe the defaults were just wrong for a network of our size.

We had done a software update on all of our access switches during the spring. One of the new features added in Junos 12.1 (to which we had upgraded) was support for “MLD snooping”. This was the IPv6 analogue to “IGMP snooping”, which we did have configured. (In IGMP snooping, a layer-2 switch like ours listens to the layer-3 IGMP traffic, and even forges its own IGMP messages to make them look like they came from a router, to determine on a port-by-port basis which multicast groups are subscribed. Otherwise, it would have to flood all multicasts to all ports, which would take far more bandwidth and more interconnect resources on the switch, so even though it’s a “layering violation”, it’s a necessity in all but the smallest networks. MLD snooping does exactly the same thing, but for IPv6.) I thought that maybe not having MLD snooping configured was causing some sort of problem — perhaps the mcsnoopd process was taking an abnormal amount of CPU when faced with MLD packets that it didn’t know what to do with, or perhaps (since MLD packets themselves are also multicast) it was just doing the flooding in software rather than allowing the switch hardware to do it. In any event, I turned on MLD snooping for all VLANs on the switch, and the CPU spikes simply stopped. Coincidence? I’ll wait and see — but since more and more machines have IPv6 on by default, I’ll be deploying MLD snooping everywhere I can (regardless of whether it really helps my issue or not).

So I went home, and made dinner (well, actually, a bowl of macaroni and cheese). But I was still thinking about this issue at work. The JTAC technician sent me email, after I had left work, pointing to an issue on some HP machines running Windows with a bad NIC driver. We don’t have many HP machines, so I initially dismissed the idea, but since I could run Wireshark just as easily at home as in the office, I scp’ed the trace files from my workstation and had a look. Opening up one of the traces in Wireshark, I used Statistics => Endpoint list => Ethernet to find which Ethernet addresses had sent the most traffic, and one jumped out at me immediately: a Dell machine on my network had sent the second-most number of multicast or broadcast packets in this several-minute capture. It was second only to the core switch that was busily ARPing away for non-existent IPv4 addresses. (We have a lot of address space, and it’s all on the public Internet, so we get scanned pretty much continually.) I logged in to the switch, and located the port where it connected, and lo and behold, it was on the same port as I had originally suspected!

I used Wireshark’s filtering capability to get an idea of what the machine was, and what exactly it was doing sending all of those packets. That told me the identity of the machine — it was a Windows machine, and Windows loves to broadcast its identity to all and sundry — and more to the point, I saw that it was responsible for the vast majority of those multicast memberships: 350 different multicast groups in all, nearly all of which were “solicited node” groups for different IPv6 “privacy” addresses.
Screenshot of Wireshark while debugging IPv6 MLD storm

Now for a digression on IPv6 addressing. An IPv6 address is 128 bits long. That is enough addresses to give billions of addresses to every cell in the body of every human on earth. Of course, there’s no reason you’d do that, and a lot of the address space is “wasted” by giving it a structure that makes it practical to actually route IPv6 packets on a global scale. By convention, the top 64 bits of an IPv6 address identifies a specific network, and the bottom 64 bits are an “interface identifier”, which identifies the particular device attached to that network. Some bright light looked at this and said, oh, gee, all those users are used to dialup in the IPv4 Internet where they get a different address every time they turn their computer on, so we’d better find a way to emulate that in IPv6. Unfortunately, they did, and thus “privacy” addresses were born — where the device identifier (technically called an “interface ID” since it’s usually specific to the NIC) is just randomly generated, and changes every so often. That way, nobody will ever have to worry about some bad guy on the IPv6 Internet identifying them by their MAC address. (Duh, they’ll just use the “network” part of the IPv6 address instead!) Of course that will also ensure that nobody will ever have to care about making the IPv6 reverse DNS work properly, either, since nobody will use the same address from one day to the next.

Microsoft turned this “feature” on by default in recent versions of Windows. (Apple turned it on in Mac OS and iOS as well, but that’s a rant for another day.) Apparently the Windows implementation is more aggressive, or Windows applications are more likely to hold connections open, because there are lots of reports of Windows machines having hundreds of these “privacy” addresses simultaneously — and that’s what appears to be happening on our problem machine: every time the router sent out a “please tell me all your memberships in the next 10 seconds” message, the Windows box would reply with 30 MLD responses a second for ten seconds. That doesn’t seem like much, but now that I’ve started turning MLD snooping on, I can see that there are other VLANs in my network that look like they are having the same problem — so I have my work cut out for me. Luckily, there’s a really simple set of commands to completely disable “privacy” addresses on Windows machines (for whatever reason, Microsoft doesn’t provide a GUI for this), so now that I know what to look for, I can identify the problem machines and get their owners to fix them.

Still, grrr.

Posted in Computing | Tagged , , , , , , ,

Other people’s recipes: Joanne Chang’s brioche au chocolat

Having made Joanne Chang’s brioche dough a couple of weekends ago, I was faced with the enviable task of deciding what to do with the second half-batch. Between her two cookbooks (Flour and Flour, too) she gives half a dozen different possibilities, all of which look tasty — plus of course there’s always the possibility of making another loaf of plain brioche. But I still had a third of the original loaf in the freezer (tsk, I know) so I didn’t want to make any more of that. So last weekend I decided to make brioche au chocolat (Flour, p. 78) — not quite as calorific as sticky buns (half the calories, in fact), but more interesting than the even less caloric sugar-and-spice buns. (The great thing is that the brioche dough is dead simple to make, so I could go back and do either of those things later if I wanted. Or I could step out on my own and try to duplicate the Iggy’s pepper brioche hamburger buns that I like so much.)

The process starts out by making a standard pastry cream (milk, eggs, sugar, flour, and vanilla). That mostly takes place over the stovetop and there are no interesting pictures. The custard is then squeezed through a fine-mesh sieve (I have no idea why, it was a lot of work and didn’t seem to do anything useful) and cooled in the refrigerator overnight while the frozen brioche dough thaws. I thought I didn’t get nearly the two cups the recipe is said to make; perhaps I overcooked the pastry cream. The next day, the brioche gets rolled out into a rectangle, and the pastry cream is spread all over:

Pastry cream on brioche

The brioche is rolled out to a 10″×20″ rectangle (or nearly so) and the entire batch of pastry cream is spread on top using an offset spatula.

I took some TCHO 66% dark chocolate discs and roughly chopped them to make the chocolat part of the brioche au chocolat. The chocolate was spread (not quite as evenly as I would have liked) over the pastry cream, and then the brioche was folded over to enclose the pastry. Apparently I didn’t do a very good job of rolling out the brioche dough, as it was clearly much thicker at one end than at the other, which left the finished product a bit uneven.

Ready to slice

After spreading the chocolate on top of the pastry cream, the rectangle is folded in half lengthwise and sliced into individual pastries using a bench scraper.

So, uh, as I mentioned before, I can’t cut anything straight without a guide. These are the ten individual brioches au chocolat sitting on the baking pan and ready to bench-proof. Since it was so warm in my kitchen I just covered them with a sheet of plastic wrap and let them proof where they sat.
Formed and ready to proof

After leaving the brioches to proof for a couple of hours, I gave them a quick egg wash and stuck them in the oven. The recipe said to bake for 35 to 45 minutes, but to my eyes (and by my probe thermometer) they were done after only 30 minutes — I suppose my oven is a bit on the hot side — and I took them out:

Finished brioches au chocolat

After only 30 minutes in the oven (five minutes less than the recipe called for), the brioches au chocolat were done.

Of course, I let them cool for half an hour — then ate the misshapen (and underfilled) one!

Brioche au chocolat (cross-section)

I wasn’t supposed to have two brioches at all, never mind so late in the day, but I couldn’t resist stacking a nice one up on a plate for the beauty shot. Look at all that chocolate!


Well, this is certainly not the healthiest thing you can eat — and I can’t imagine having it for breakfast even if I was the sort of person who eats breakfast. But they are tasty, and sweet, and chocolatey — certainly on par taste-wise and calorie-wise with many popular desserts. Just don’t have them at every meal!

Nutrition Facts
Serving size: 1 pastry
Servings per container: 10
Amount per serving
Calories 425 Calories from fat 183
% Daily Value
Total Fat 20g 31%
 Saturated Fat 12g 60%
 Monounsaturated Fat 1g
 Polyunsaturated Fat 0.5g
Trans Fat 0g
Cholesterol 187mg 62%
Sodium 298mg 12%
Potassium 91mg 3%
Total Carbohydrate 49g 16%
 Dietary fiber 1g 3%
 Sugars 20g
Proteins 10g 20%
Vitamin A 14%
Vitamin C 0%
Calcium 6%
Iron 15%
Posted in Food | Tagged , , , , | 1 Comment

Organizing a chocolate tasting

I’m thinking about organizing a chocolate tasting at work, and hoping other people out there will have done something similar. This is just intended for fun, but I still want to run a proper taste-test protocol, and actually determine the real collective preferences, if there are any. Of course all the raw data would be made public.

A few issues I’m thinking about:


The protocol will obviously depend on how many people are interested in participating and on whether I accept participant suggestions (or ask them to bring something — would require some care to make sure people didn’t all bring the same bar of Lindt they got at the mall store).

Obviously, the usual precautions (random order of tasting, identifying marks removed to the extent possible, portions controlled) should be taken. That means that I probably don’t get to include my own preferences, if I’m running the tasting. I’m not sure what the ideal number of samples per round would be, but I think it’s probably no more than six. I’m not sure whether there is an ideal number of tasters per round, or indeed whether the same tasters should do all rounds. Presumably I would need to hold back some of each sample for use in later rounds.

Some sort of palate-cleanser will need to be provided — seltzer is good enough for me, but not for many other people. Something with some fat (milk, maybe) or a non-polar solvent like rum may be good. I might just ask tasters to bring their own.


I’m thinking the tasters should provide both individual evaluations for each chocolate tasted, and an overall ranking of all of the chocolates in each round. The overall ranking in each round can be determined from the individual rankings, with ties broken on the basis of individual scores. How many moved on to the next round would depend on how many samples there were, and the number of rounds. (So with 24 chocolates and three rounds, that might be six quarter-finals of four chocolates each in the first round, with the top two moving on to two semi-finals of six each, and then the top three from each semi moving on to the finals.)

For the individual evaluations, I’m thinking a 1-5 scale (5 being the best) on aroma, texture, sweetness, bitterness, and flavor, plus freeform comments.


Obviously it is important to compare only, um, comparable chocolates against each other. The ones I’m most interested in doing would be high-end extra-dark eating chocolate, but given the variety of chocolates out there on the market, I can easily see doing any of these categories (but not all at once):

  • Unadulterated dark chocolate, at least 60% cacao (optionally, vanilla, lecithin) — might need to split this into 60–70% and over-70% as some people would likely find truly high-test chocolate unpalatable and give it poor ratings
  • Semisweet chocolate (anything brown with less than 60% cacao but no dairy ingredients)
  • Milk chocolate (for those who insist)
  • Chocolate with stuff in it:
    • Fruit
    • Mint
    • Nuts (whole, in pieces, or ground)
    • Spices (cassia, ginger, chile — any flavoring other than vanilla)
    • Anything else — bacon, caramel, potato chips, wafers, etc.

Some of these categories would be more difficult to organize than others, and obviously anything with animal flesh in it would need to be set aside for the vegetarians. I think I could do all of the “anything else” category from the Vosges catalogue alone, given how many different varieties they do.

If I do this, I’d be happy to include remote submissions of chocolate provided they meet the qualifications for whichever category I end up doing.


Obviously I would make all of the data available so other people could analyze it. I’m not a statistician myself and would probably write some simple scripts to help with data reduction, with all of the evaluations stored in a database. (Probably keyed by hand, though, unless someone can point out an existing Free Software application that would allow the users to enter their own evaluations on a mobile device.)


UPDATE: Moved further discussion to the “Tasters” web in CSAIL FosWiki.

Posted in Food | Tagged , ,