OktAle / Novemberfest

So the beer has been brewed, and, as of this morning is bubbling away happily in the primary fermenter. It's not as heavy as I had planned, coming out at 1.042 Original Gravity, partly due to brewing 5 1/2 gallons, rather than 5, and also to poor mash efficiency. I think I let the mash cool off too much during sparging, and didn't rinse the sugars out as effectively as possible.

I pitched a 1 liter starter of the White Labs Duseldorf Alt yeast, and fermentation was active several hours later, and well going by the morning. I'll move it to the basement tonight, to keep it a bit cool.

OktAle Recipe

Here's the plan for today's brew. An Alt, brewed with an Maerzen grain bill and hopping, so it should be similar in style to a O'fest. I'm planning a single decoction mash, so I'll be pretty busy.

Oktober Ale
Recipe oktober ale Style Oktoberfest/Marzen
Brewer Steve Downey Batch 5.00 gal

Recipe Characteristics
Recipe Gravity 1.054 OG Estimated FG 1.013 FG
Recipe Bitterness 24 IBU Alcohol by Volume 5.4%
Recipe Color 13° SRM Alcohol by Weight 4.2%

Ingredients

Quantity Grain Use
7.00 lb Vienna Malt mashed
1.00 lb German Munich mashed
1.00 lb White Wheat mashed
1.00 lb CaraVienne mashed
0.25 lb Belgian Special "B" mashed

Quantity Hop Form Time
1.00 oz Hallertauer pellet 45 minutes
0.75 oz Hallertauer pellet 30 minutes
1.00 oz Liberty pellet 15 minutes

New Brew Planning

Yippe! I'm brewing this weekend (weather, wife, and kids permitting)

GR410

Malt - Vienna

7.00

1.30

9.10

GR405

Malt - German Munich

1.00

1.45

1.45

GR390

Malt - White Wheat

1.00

1.35

1.35

GR590

Malt - Caravienne

1.00

1.55

1.55

GR593

Malt - Special B

1.00

1.55

1.55

Hhal2

Hop (Pellets) - Hallertauer (2 oz)

1.00

3.00

3.00

Hlib2

Hop (Pellets) - Liberty (2 oz)

1.00

2.25

2.25

WLP036

White Labs Yeast (Dusseldorf Alt)

1.00

5.50

5.50

FIN20

Clarifiers - Irish Moss (1oz)

1.00

1.35

1.35


Just saw on http://www.morebeer.com/ that my order has shipped. The grain bill and hops is for an Oktoberfest style beer, but the yeast is an Alt. I don't have the facilities to lager an O'fest, so this is a compromise. With any luck I won't be too far out of style, though.

I plan to go easy on the Special B, as it's rather dark, probably about 1/4#, and about 1./2# of the Caravienne. The wheat is out of style, but it helps with head retention, and at 10% of the grain bill, shouldn't change the flavor profile appreciably.

I'm planning a single decoction mash, to get that malty O'fest flavor.

I'll probably start with the Liberty at 45 minutes, and the Hallertau at 30 and 15. Exact amounts depend on the %Alpha Acid on the hops, as I don't want this to be very bitter. Just enough to give it some backbone.

Downloads at OpenSolaris.org

Downloads at OpenSolaris.org

This is where it starts with OpenSolaris. I've got a spare Dell Optiplex gx110 that I try out new Linux distros on. Now it's going to be a test bed for OpenSolaris.

First step is downloading everything. Well, almost first step. Real first step was going out and buying a new sleeve of CD-R's , because I don't know where the last one went. Then,
Before you begin, you will need to read the Release Notes. Really. The whole thing.


So, I did that, too.

Now, I'm waiting for isos to come down, as well as Sun Studio 10. Overall, looks like about an hour and a half. Then burn and start install.

I'll probably get to the actual OpenSolaris parts tomorrow.

Technorati Tag:

A brief history of construction:



This starts in the first week of January, and runs through last week.

Living in a house that's under construction has been, ..., interesting. But we're starting to see the light at the end of the tunnel.

Putting together the animated GIF was pretty easy, too. I've been taking pictures from the same spot across the street from our house. I loaded each image into the Gimp as a separate layer. Then increased the transparency of that layer, so that I could line up the roof lines. I used the roof peak that's over the dining room, in the front of the house, as the key, since the main roof line changes during construction. Then, because they weren't all framed the same,I cropped it to the intersection of all of the frames. When you save a multi-layer image as a GIF file in the Gimp, it asks whether to save as an animated GIF, or to flatten the image.

Pretty easy, once I learned what the tools could do.

Thinking about Exception Safety in C++

Thanks to David Abrahams, we have a framework to discuss the relative exception safety of C++ components. Quick reiteration:
# The basic guarantee: that the invariants of the component are preserved, and no resources are leaked.
# The strong guarantee: that the operation has either completed successfully or thrown an exception, leaving the program state exactly as it was before the operation started.
# The no-throw guarantee: that the operation will not throw an exception.

A corner case, that came up recently in discussion about shared_ptr, is how to describe the situation where the invariants of the component are preserved, the state of the component is what it was before, but the state of the program is not exactly as it was before the operation started.

shared_ptr potentially can throw an exception during construction. If it does, the pointer that it is constructed on is deleted (or the deleter called). This is important, as it prevents any resource leak. But it does mean that there is a change in the state of the program. Whatever the pointer is pointing to is gone. Does this mean that shared_ptr only provides the basic guarantee?

That would be unsatsifying.

The only way out of it that I see is that any attempt to observe the changed state would involve undefined behavior. And it would be the same undefined behavior, at that point in the code, if the operation did succeed.

Concrete, simple, case:

Widget * w = new Widget; // 1
// ... some more code
shared_ptr sp_w = shared_ptr(w); // 2
// ... yet more code.
w->widgetOp(); // 3


How could we arrive at 3 if an exception was thrown at 2? Only if 2 was inside a try block of some kind, which implies at least one block scope level difference between //1 and //2.

Which means that when that scope was exited, sp_w would have gone out of scope and been deleted, so that any reference to w at //3 would be invalid.

It seems to me that the program state in the strong guarantee must be one that is marked as being the beginning of a transaction by opening a try block. That this is necessary, although not sufficient for transactional behavior. Of course to accomplish this, each component must revert its state to the initial conditions, no component can know enough to revert the state of the entire program.