2 Commits

Author SHA1 Message Date
itottogit
e3813c2cfa Merge dcc52806ef into 5bb5d8a48a 2025-03-08 15:38:07 +00:00
itottogit
dcc52806ef Update baking.tex
Evaporation happens at room temperature, too - therefore we cover doughs that rest before baking.
The inside of a loaf does not reach temps above 100 °C - unless you seriously overbake until you end up with a brick instead of a loaf.
2024-05-15 21:53:38 +02:00
10 changed files with 62 additions and 282 deletions

View File

@@ -65,16 +65,15 @@ jobs:
run: | run: |
cd /app/book cd /app/book
make -j -O bake make -j -O bake
- name: Copy book to downloads server - name: Release baked book to S3
uses: burnett01/rsync-deployments@7.0.2 uses: shallwefootball/s3-upload-action@master
with: with:
switches: "-avzr" aws_key_id: ${{ secrets.AWS_KEY_ID }}
remote_host: ${{ secrets.SSH_HOST }} aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY}}
remote_user: ${{ secrets.SSH_USERNAME }} aws_bucket: ${{ secrets.AWS_BUCKET_BOOK }}
remote_key: ${{ secrets.SSH_KEY }} source_dir: book/release
path: "book/release/*" destination_dir: release
remote_path: "~/downloads/the-sourdough-framework/" - name: Upload book Artifacts
- name: Upload book artifacts to GitHub
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
name: books name: books
@@ -82,17 +81,36 @@ jobs:
book/book_serif/book.log book/book_serif/book.log
book/book_serif/book.pdf book/book_serif/book.pdf
book/book-epub/book.epub book/book-epub/book.epub
- name: Copy website to downloads server - name: Release baked website to S3
uses: burnett01/rsync-deployments@7.0.2 uses: shallwefootball/s3-upload-action@master
with: with:
switches: "-avzr --delete" aws_key_id: ${{ secrets.AWS_KEY_ID }}
remote_host: ${{ secrets.SSH_HOST }} aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY}}
remote_user: ${{ secrets.SSH_USERNAME }} aws_bucket: ${{ secrets.AWS_BUCKET_WEBSITE }}
remote_key: ${{ secrets.SSH_KEY }} source_dir: website/static_website_html
path: "website/static_website_html/*" destination_dir: static_html_root
remote_path: "~/the-sourdough-framework/" - name: Upload website Artifacts
- name: Upload website artifacts to GitHub
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
name: website name: website
path: website/static_website_html path: website/static_website_html
invalidate-book-website-cache:
needs: release-book-website
runs-on: ubuntu-latest
steps:
- name: Invalidate Cloudfront book cache
uses: chetan/invalidate-cloudfront-action@v2
env:
DISTRIBUTION: ${{ secrets.CLOUDFRONT_DISTRIBUTION_BOOK }}
PATHS: "/*"
AWS_REGION: "us-east-1"
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- name: Invalidate Cloudfront website cache
uses: chetan/invalidate-cloudfront-action@v2
env:
DISTRIBUTION: ${{ secrets.CLOUDFRONT_DISTRIBUTION_WEBSITE }}
PATHS: "/*"
AWS_REGION: "us-east-1"
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

View File

@@ -41,7 +41,7 @@ jobs:
run: | run: |
cd /app/book cd /app/book
make -j -O serif ebook website make -j -O serif ebook website
- name: Upload book artifacts to GitHub - name: Upload book Artifacts
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
name: books name: books
@@ -49,7 +49,7 @@ jobs:
book/book_serif/book.log book/book_serif/book.log
book/book_serif/book.pdf book/book_serif/book.pdf
book/book-epub/book.epub book/book-epub/book.epub
- name: Upload website artifacts to GitHub - name: Upload website Artifacts
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
name: website name: website

View File

@@ -37,24 +37,24 @@ At \qty{75}{\degreeCelsius} (\qty{167}{\degF}) the surface of your dough turns
holds together nicely but is still extensible. This gel is essential holds together nicely but is still extensible. This gel is essential
for oven spring as it retains the gas inside your dough. for oven spring as it retains the gas inside your dough.
At around \qty{100}{\degreeCelsius} (\qty{212}{\degF}) the water starts to evaporate out of your As the dough warms up in the oven, the water starts to evaporate out of your
dough. If this weren't the case, your dough would taste soggy and dough. If this weren't the case, your bread would come out soggy and
doughy. The higher hydration your dough has, the more water your bread doughy. The higher the hydration of your dough, the more water your bread
still contains after the bake, changing its consistency. As a result the still contains after the bake, changing its consistency. As a result the
crumb is going to taste a bit more moist. crumb will be somewhat moister.
Another often undervalued step is the evaporation of acids. Another often undervalued step is the evaporation of acids from the crust.
At~\qty{118}{\degreeCelsius} (\qty{244}{\degF}) the acetic acid in your dough At~\qty{118}{\degreeCelsius} (\qty{244}{\degF}) the acetic acid in your dough
starts to evaporate. starts to evaporate.
Shortly after at~\qty{122}{\degreeCelsius} (\qty{252}{\degF}) the lactic acid begins evaporating. Shortly after at~\qty{122}{\degreeCelsius} (\qty{252}{\degF}) the lactic acid begins evaporating.
This is crucial to understand and it opens the door to many interesting This is crucial to understand and it opens the door to many interesting
ways to influence your final bread's taste. As more and more water ways to influence your final bread's taste. As more and more water
begins to evaporate the acids in your dough become more concentrated. evaporates the acids in your dough become more concentrated.
There is less water but in relation you have more acids, therefore a shorter There is less water but in relation you have more acids, therefore a longer
bake will lead to a more tangy dough. The longer you bake the bread, bake will lead to a more tangy dough. The longer you bake the bread,
the more of the water evaporates, but also ultimately the acids will follow. the more of the water evaporates, but also ultimately the acids will follow.
The longer you bake, the less sour your bread is going to be. By controlling The longer you bake, the less sour your bread is going to be. By controlling
baking time you can influence which sourness level you would like to achieve. baking time you can somewhat influence which sourness level you would like to achieve. Since the inside of the bread will never go above \qty{100}{\degreeCelsius} (\qty{212}{\degF}), acids cannot evaporate from there.
It would be a very interesting experiment to bake a bread at different exact It would be a very interesting experiment to bake a bread at different exact
temperatures. How would a bread taste with only evaporated water but temperatures. How would a bread taste with only evaporated water but

View File

@@ -229,7 +229,7 @@ During World~War~II the first packaged dry yeast was developed. This would
ultimately allow bakeries and home bakers to make bread much faster and more ultimately allow bakeries and home bakers to make bread much faster and more
consistently. Thanks to pure yeast, building industrial bread making machines consistently. Thanks to pure yeast, building industrial bread making machines
was now possible. Provided you maintain the same temperature, same flour and was now possible. Provided you maintain the same temperature, same flour and
yeast strains fermentation became precisely reproducible. This ultimately led yeast strains fermentation became precisely reproducible. This ultimately lead
to the development of giga bakeries and flour blenders. The bakeries demanded to the development of giga bakeries and flour blenders. The bakeries demanded
the same flour from year to year to bake bread in their machines. For this the same flour from year to year to bake bread in their machines. For this
reason, none of the supermarket flour you buy today is single origin. It is reason, none of the supermarket flour you buy today is single origin. It is

View File

@@ -35,21 +35,21 @@ chapters = baking basics bread-types cover flour-types history intro mix-ins\
non-wheat-sourdough sourdough-starter storing-bread troubleshooting\ non-wheat-sourdough sourdough-starter storing-bread troubleshooting\
wheat-sourdough glossary wheat-sourdough glossary
# Actual book text and LaTeX code {{{
src_tex := $(foreach directory, $(chapters), $(wildcard $(directory)/*.tex))
src_tex += book.tex book_sans_serif.tex references.bib figures/vars.tex
src_tex += supporters.csv sourdough.sty colors.tex abbreviations.tex
src_tex += $(src_recipes)
# }}}
# Tables and TikZ flowcharts/plots/drawings... {{{ # Tables and TikZ flowcharts/plots/drawings... {{{
src_tables := $(wildcard tables/table-*.tex) src_tables := $(wildcard tables/table-*.tex)
src_figures := $(wildcard figures/fig-*.tex) figures/flowcharts_tikz.tex figures/vars.tex src_figures := $(wildcard figures/fig-*.tex) figures/flowcharts_tikz.tex
src_figures += $(wildcard plots/fig-*.tex) abbreviations.tex colors.tex src_figures += $(wildcard plots/fig-*.tex) abbreviations.tex colors.tex
src_recipes := $(wildcard recipes/*.tex) src_recipes := $(wildcard recipes/*.tex)
src_plots := $(wildcard plots/*.table) src_plots := $(wildcard plots/*.table)
# }}} # }}}
# Actual book text and LaTeX code {{{
src_tex := $(foreach directory, $(chapters), $(wildcard $(directory)/*.tex))
src_tex += book.tex book_sans_serif.tex colors.tex abbreviations.tex
src_tex += $(src_recipes) supporters.csv references.bib
src_tex += sourdough.sty
# }}}
tgt_figures := $(patsubst %.tex, %.png,$(src_figures)) tgt_figures := $(patsubst %.tex, %.png,$(src_figures))
# Photos {{{ # Photos {{{
@@ -76,7 +76,7 @@ low_res_images := $(filter-out %.png, $(low_res_images))
src_all := $(src_tex) $(src_figures) $(src_tables) $(images) $(src_plots) src_all := $(src_tex) $(src_figures) $(src_tables) $(images) $(src_plots)
# Format specific configuration files # Format specific configuration files
ebook_src := $(src_all) tex4ebook.cfg book.mk4 book-ebook.css nameref.4ht ebook_src := $(src_all) tex4ebook.cfg book.mk4 book-ebook.css
website_src := $(src_all) website.cfg style.css website_src := $(src_all) website.cfg style.css
website_dir := static_website_html website_dir := static_website_html

View File

@@ -1,238 +0,0 @@
% nameref.4ht (2024-06-15-13:36), generated from tex4ht-4ht.tex
% Copyright 2005-2009 Eitan M. Gurari
% Copyright 2009-2024 TeX Users Group
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either
% version 1.3c of this license or (at your option) any
% later version. The latest version of this license is in
% http://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions
% of LaTeX version 2005/12/01 or later.
%
% This work has the LPPL maintenance status "maintained".
%
% The Current Maintainer of this work
% is the TeX4ht Project <http://tug.org/tex4ht>.
%
% If you modify this program, changing the
% version identification would be appreciated.
\immediate\write-1{version 2024-06-15-13:36}
\let\NR:Type\relax
\let\ltx@label\label
\def\prf:label{{\ifx \NR:Title\:UnDef \a:newlabel{\@currentlabelname}\else \NR:Title\fi}%
{\ifx \NR:Type\relax \else \NR:Type .1\fi}{}}%
\append:defI\label{\let\NR:Title\undefined}
\let\NR:StartSec\:StartSec
\let\NR:no@sect\no@sect
\def\no@sect#1#2#3#4#5#6[#7]#8{\gdef\NR:Title{\a:newlabel{#7}}%
\gdef\NR:Type{#1}%
\NR:no@sect{#1}{#2}{#3}{#4}{#5}{#6}[{#7}]{#8}}
\def\:StartSec#1#2#3{%
\gdef\NR:Title{\a:newlabel{#3}}%
\gdef\NR:Type{#1}%
\NR:StartSec{#1}{#2}{#3}%
}
\def\:tempc#1#2#3#4#5#6[#7]#8{%
\gdef\NR:Title{\a:newlabel{#7}}%
\gdef\NR:Type{#1}%
\o:NR@sect:{#1}{#2}{#3}{#4}{#5}{#6}[{#7}]{#8}}
\HLet\NR@sect\:tempc
\def\:tempc#1#2#3#4#5{%
\gdef\NR:Title{\a:newlabel\ssect:ttl}%
\gdef\NR:Type{#1}%
\o:NR@ssect:{#1}{#2}{#3}{#4}{#5}%
}
\HLet\NR@ssect\:tempc
\def\:tempc[#1]#2{%
\gdef\NR:Title{\a:newlabel{#1}}%
\gdef\NR:Type{part}%
\o:no@part:[{#1}]{#2}}
% this definition clashes with asmart and amsproc classes, so we
% need to skip if these are active
\@ifundefined{opt@amsart.cls}{%
\@ifundefined{opt@amsproc.cls}{%
\HLet\no@part\:tempc
}{}}{}
\def\:tempc#1{%
\gdef\NR:Title{\a:newlabel{#1}}%
\gdef\NR:Type{part}%
\o:no@spart:{#1}}
\HLet\no@spart\:tempc
\def\:tempc[#1]#2{%
\gdef\NR:Title{\a:newlabel{#1}}%
\gdef\NR:Type{chapter}%
\o:NR@chapter:[{#1}]{#2}}
\HLet\NR@chapter\:tempc
\def\:tempc#1{%
\gdef\NR:Title{\a:newlabel\sch:ttl}%
\o:NR@schapter:{#1}%
\gdef\NR:Type{chapter}%
}
\HLet\NR@schapter\:tempc
\let\o:NR@@caption\@caption
\ifdefined\scr@makechapterhead
% fixes for Komascript
\def\:tempa[#1]#2{%
\gdef\NR:Title{\a:newlabel{#1}}%
\gdef\NR:Type{chapter}%
\o:@chapter:[#1]{#2}%
}
\HLet\@chapter\:tempa
\def\:tempa#1{%
\gdef\NR:Title{\a:newlabel{#1}}%
\gdef\NR:Type{chapter}%
\o:@schapter:{#1}%
}
\HLet\@schapter\:tempa
\fi
%
%
% Keith Andrews <kandrews@iicm.edu> reported that \@captype as
% \NR:Type threw an undefined control sequence error. I think
% \@currenvir is safe, there is nothing special about \@captype.
%
% use of \index and \label inside caption results in a fatal error
% we need to disable them in \NR:Title
% there can be more problematic commands, so we provide a configuration
% that can be used multiple times - the default value fixes known commands
% but a user can add more of them
\def\a:captioncommandsfix{}
\NewConfigure{CaptionCommandsFix}[1]{\concat:config\a:captioncommandsfix{#1}}
\Configure{CaptionCommandsFix}{
\let\index\:gobble%
\let\label\:gobble%
\let\\\relax% causes issues when \centering is active
}
\long\def\@caption#1[#2]{%
\gdef\NR:Type{\@currenvir}%
\begingroup%
\a:captioncommandsfix
\protected@xdef\NR:Title{\a:newlabel{#2}}%
\endgroup%
\o:NR@@caption{#1}[{#2}]%
}
\let\o:NRorg@opargbegintheorem\@opargbegintheorem
\def\@opargbegintheorem#1#2#3{%
\gdef\NR:Title{\a:newlabel{#3}}%
\gdef\NR:Type{\@currenvir}%
\NR@gettitle{#3}%
\defineautorefname{\@currenvir}{#1}%
\o:NRorg@opargbegintheorem{#1}{#2}{#3}%
}%
\let\o:NRorg@begintheorem\@begintheorem
\def\@begintheorem#1#2{%
\gdef\NR:Title{\a:newlabel{#1 #2}}%
\gdef\NR:Type{\@currenvir}%
\defineautorefname{\@currenvir}{#1}%
\NR@gettitle{}%
\o:NRorg@begintheorem{#1}{#2}%
}%
% I don't know if this was useful for anything
% but we cannot use it anymore
% \AtBeginDocument{%
\@ifpackageloaded{listings}{%
\def\:tempc#1{%
\gdef\NR:Title{\a:newlabel{listing}}%
\gdef\NR:Type{lstlisting}%
\o:NROrg@lst@MakeCaption:{#1}%
\gdef\@currentlabelname{listing}}
\HLet\NROrg@lst@MakeCaption\:tempc
}{}%
% bug [348]
\def\:tempams{%
\gdef\NR:Title{\a:newlabel{equation}}%
\gdef\NR:Type{equation}%
\gdef\@currentlabelname{equation}%
}
% https://tex.stackexchange.com/a/581856/2891
\@ifpackageloaded{caption}{
\pend:defIII\caption@beginex{%
\gdef\NR:Type{\@currenvir}%
% handle \label and \index in Caption's package
% version of \caption
\begingroup%
\a:captioncommandsfix
\protected@xdef\NR:Title{\a:newlabel{##2}}%
\endgroup%
}
}{}
\@ifpackageloaded{amsmath}{%
\Configure{@begin}{align}{\:tempams}
\Configure{@begin}{multline}{\:tempams}
\Configure{@begin}{equation}{\:tempams}
\Configure{@begin}{boxed}{\:tempams}
\Configure{@begin}{equations}{\:tempams}
\Configure{@begin}{equation}{\:tempams}
\Configure{@begin}{gather*}{\:tempams}
\Configure{@begin}{gather}{\:tempams}
\Configure{@begin}{genfrac}{\:tempams}
\Configure{@begin}{measure@}{\:tempams}
\Configure{@begin}{multline*}{\:tempams}
\Configure{@begin}{multline}{\:tempams}
\Configure{@begin}{overset}{\:tempams}
\Configure{@begin}{smallmatrix}{\:tempams}
\Configure{@begin}{split}{\:tempams}
\Configure{@begin}{subarray}{\:tempams}
\Configure{@begin}{substack}{\:tempams}
\Configure{@begin}{underset}{\:tempams}
\Configure{@begin}{xleftarrow}{\:tempams}
\Configure{@begin}{xrightarrow}{\:tempams}
}{
\Configure{@begin}{equation}{\:tempams}
}
\let\T:ref=\::ref
\def\::ref{\@ifstar{\protect\T@ref}{\protect\T@ref}}
\def\T@ref#1{%
\@safe@activestrue%
\let\::ref\T:ref%
\expandafter\@setref\csname r@#1\endcsname\@firstoffive{#1}%
\def\::ref{\@ifstar{\protect\T@ref}{\protect\T@ref}}%
\@safe@activesfalse%
}
\gdef\defineautorefname#1#2{%
\expandafter\gdef\csname #1autorefname\endcsname{#2}}
\defineautorefname{theorem}{Theorem}
\Configure{newlabel}
{\csname cur:th\endcsname \csname :currentlabel\endcsname}
{\string\csname\space :autoref\string\endcsname
{\NR:Type}#1}
\ifx \@currentlabelname\:UnDef
\let\@currentlabelname\empty
\fi
\pend:defIII\@setref{\edef\RefArg{##3}}
\append:defIII\@setref{\let\:autoref\:gobble}
\let\:autoref\:gobble
\Hinput{nameref}
\endinput

View File

@@ -4,7 +4,7 @@
In this chapter you will learn how to make your In this chapter you will learn how to make your
own sourdough starter, but before doing so you will own sourdough starter, but before doing so you will
quickly learn about baker's math. Don't worry, quickly learn about baker's math. Don't worry,
it's a very simple way to write a recipe which it's a very simple way how to write a recipe which
is cleaner and more scalable. Once you get the hang is cleaner and more scalable. Once you get the hang
of it you will want to write every recipe this way. of it you will want to write every recipe this way.
You will learn to understand the signs indicating You will learn to understand the signs indicating
@@ -125,7 +125,7 @@ values are just shown as a reference.
Don't use chlorinated water when setting up your starter. Don't use chlorinated water when setting up your starter.
Ideally, you should use bottled water. In certain regions Ideally, you should use bottled water. In certain regions
like Germany, tap water is perfectly fine. Chlorine is added like Germany, tap water is perfectly fine. Chlorine is added
to water as a disinfectant to kill microorganisms; you will to water as a disinfectant to kill microorganisms, you will
not be able to grow a starter with chlorinated water. not be able to grow a starter with chlorinated water.
In this process, the hydration of your starter is \qty{100}{\percent}. In this process, the hydration of your starter is \qty{100}{\percent}.

View File

@@ -300,7 +300,7 @@ Similar to baking too hot, when baking without enough steam, your dough's crust
forms too quickly. It's hard to spot the difference between the two mistakes. forms too quickly. It's hard to spot the difference between the two mistakes.
I~typically first ask about the temperature and then about the steaming technique I~typically first ask about the temperature and then about the steaming technique
to determine what might be wrong with the baking process. Too little steam can to determine what might be wrong with the baking process. Too little steam can
typically be spotted by having a thick crust all around your dough paired typically be spotted by having a thick crust around all around your dough paired
with large alveoli towards the edges. with large alveoli towards the edges.
The steam essentially prevents the Maillard reaction from happening too quickly The steam essentially prevents the Maillard reaction from happening too quickly

View File

@@ -1 +1 @@
3.3.8 3.3.7

View File

@@ -23,7 +23,7 @@ DEPENDENCIES
pry pry
RUBY VERSION RUBY VERSION
ruby 3.3.8 ruby 3.3.7p123
BUNDLED WITH BUNDLED WITH
2.4.12 2.4.12