Spunding valves and Diacetyl

I just realized a few weeks back, that in more than a quarter century of brewing, current inventory of 9 taps, with room for more, I have never brewed a German Pilsner.

It hit 1.014 this morning, so it’s getting close
 
Do you have a favorite recipe stashed away here on Brewersfriend?
https://www.brewersfriend.com/homebrew/recipe/view/374598/german-pilsner

This is the Pils I just shipped to Kansas City for NHC finals. The recipe comments are not entirely accurate anymore since I have simplified the fermentation. I pitch 4 packs of 34/70 dry at @50-51F and pressure ferment it at 7.5psi.

I think you could reduce the pitch to two packs of yeast (22 grams) for 5 gallons and ferment at ambient pressure anywhere from 51 to 58F and it will turn out really nice.

The key to the beer is the nice match between malt and hops. Barke Pils and a combo of Tettnang and Hallertau. The water profile is really low in alkalinity. The sulfates are fairly high, but not crazy. It’s a really nice beer with a very smooth bitterness and a “German” flavor and aroma.
 
Say it ain't so! That has to be my all time favorite to brew and drink, when it turns out.
Hey, I remedied that oversight, it’s finishing up at about 1.013 right now and will probably settle in just a little lower. I did take a sample at 1.014 and don’t smell anything funky. The bad funky; like 2020’s funky, not the good, 1970’s funky.

I’m tentatively optimistic.
If it works out right I’ll have Dunkel, Schwarzbier, Pils, 2x Märzens. The former 2 on tap, the latter 2 in kegs, but Pils could find its way to a tap pretty quickly :)
 

Defer( function () { $(document).ready(function() { if ( ! document.cookie.match(/^(.*;)?\s*bf_adfpv_v1\s*=\s*[^;]+(.*)?$/) ) { var date = new Date(); var now = new Date(); date.setTime(date.getTime()+(10*365*24*60*60*1000)); var expires = "; expires="+date.toGMTString(); document.cookie = "bf_adfpv_v1="+now.toGMTString()+expires+"; path=/"; } else { // Initialize AdSense (adsbygoogle = window.adsbygoogle || []); // Affiliate ad override configuration from PHP var affiliateOverrides = {"top-leaderboard-ad":{"total_percentage":25,"options":[{"name":"House Ad","weight":1,"href":"\/homebrew\/signup","img":"\/homebrew\/images\/houseads_20211207\/take10_signup\/webp\/810X100.webp","width":810,"height":100}]},"inline-unit-ad":{"total_percentage":25,"options":[{"name":"House Ad","weight":1,"href":"\/homebrew\/signup","img":"\/homebrew\/images\/houseads_20211207\/take10_signup\/webp\/810X100.webp","width":810,"height":100}]},"sidebar-block-1-ad":{"total_percentage":25,"options":[{"name":"House Ad","weight":1,"href":"\/homebrew\/signup","img":"\/homebrew\/images\/houseads_20211207\/take10_signup\/webp\/300x250.webp","width":300,"height":250}]}}; // Process each potential ad override if (affiliateOverrides && Object.keys(affiliateOverrides).length > 0) { Object.keys(affiliateOverrides).forEach(function(adSlotId) { var override = affiliateOverrides[adSlotId]; var adElement = document.getElementById(adSlotId); // Check if ad exists and should be replaced based on total percentage if (adElement && override.options && override.options.length > 0 && (Math.random() * 100 < override.total_percentage)) { // Choose an option based on weights var option = chooseWeightedOption(override.options); // Build affiliate ad HTML var style = option.style || ''; if (option.width && option.height) { style += (style ? '; ' : '') + 'max-width:100%;'; } var attributes = ''; if (option.target) attributes += ' target="' + option.target + '"'; if (option.rel) attributes += ' rel="' + option.rel + '"'; var affiliateAdHtml = '
' + '' + '' + '
'; // Replace the AdSense container with affiliate ad $(adElement).closest('ins.adsbygoogle').replaceWith(affiliateAdHtml); } }); } // Helper function to select a weighted random option function chooseWeightedOption(options) { if (!options || options.length === 0) { // This case implies an issue with how options are passed or an empty configuration. // Returning undefined is safer than the original's options[0] which would error. return undefined; } var eligibleOptions = []; var totalPositiveWeight = 0; // First pass: Collect options with strictly positive weights and sum these weights. for (var i = 0; i < options.length; i++) { var option = options[i]; // Ensure weight is treated as a number; default undefined/non-numeric to 0. var weight = (typeof option.weight === 'number') ? option.weight : 0; if (weight > 0) { eligibleOptions.push(option); totalPositiveWeight += weight; } } if (totalPositiveWeight > 0) { // If there are options with positive weights, choose from them. var randomValue = Math.random() * totalPositiveWeight; var cumulativeWeight = 0; for (var j = 0; j < eligibleOptions.length; j++) { // eligibleOptions[j].weight is guaranteed to be > 0 here. cumulativeWeight += eligibleOptions[j].weight; if (randomValue <= cumulativeWeight) { return eligibleOptions[j]; } } // Fallback for rare floating-point precision issues or if randomValue is exactly totalPositiveWeight. // Returning the last eligible option is a robust choice here. return eligibleOptions[eligibleOptions.length - 1]; } else { // No options with positive weight were found. // This means all original options had weights <= 0 (e.g., all zeros or empty list of positive weights). // In this scenario, pick one randomly from the original 'options' list, // giving all of them an equal chance. return options[Math.floor(Math.random() * options.length)]; } } // Initialize all remaining AdSense ads $("ins.adsbygoogle").each(function() { $("(adsbygoogle = window.adsbygoogle || []).push({})").insertAfter($(this)); }); var js = document.createElement("script"); js.type = "text/javascript"; js.async = true; js.src = "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"; document.body.appendChild(js); } }); });
Back
Top