Merge branch 'main' into 225-ebook-situation

This commit is contained in:
Ced
2023-09-15 09:50:43 +01:00
13 changed files with 209 additions and 156 deletions

View File

@@ -71,15 +71,13 @@ The below versions are automatically built on every push to the `main` branch.
* [Download compiled .pdf version](https://www.the-bread-code.io/book.pdf) * [Download compiled .pdf version](https://www.the-bread-code.io/book.pdf)
* [Download compiled .epub version](https://www.the-bread-code.io/book.epub) * [Download compiled .epub version](https://www.the-bread-code.io/book.epub)
* [Download compiled .mobi version](https://www.the-bread-code.io/book.mobi)
* [Download compiled .azw3 version](https://www.the-bread-code.io/book.azw3)
There's an additional enhanced accessibility version using a sans serif font: There's an additional enhanced accessibility version using a sans serif font:
* [Download compiled .pdf version](https://www.the-bread-code.io/book-sans-serif.pdf) * [Download compiled .pdf version](https://www.the-bread-code.io/book-sans-serif.pdf)
* [Download compiled .epub version](https://www.the-bread-code.io/book-sans-serif.epub)
* [Download compiled .mobi version](https://www.the-bread-code.io/book-sans-serif.mobi) **The ebook files in .mobi and .azw3 have been retired, please let us know if
* [Download compiled .azw3 version](https://www.the-bread-code.io/book-sans-serif.azw3) you were using them.**
## Online HTML version (WIP) ## Online HTML version (WIP)
@@ -133,4 +131,4 @@ International License][cc-by-sa].
[cc-by-sa]: http://creativecommons.org/licenses/by-sa/4.0/ [cc-by-sa]: http://creativecommons.org/licenses/by-sa/4.0/
[cc-by-sa-image]: https://licensebuttons.net/l/by-sa/4.0/88x31.png [cc-by-sa-image]: https://licensebuttons.net/l/by-sa/4.0/88x31.png
[cc-by-sa-shield]: https://img.shields.io/badge/License-CC%20BY--SA%204.0-lightgrey.svg [cc-by-sa-shield]: https://img.shields.io/badge/License-CC%20BY--SA%204.0-lightgrey.svg

View File

@@ -1 +0,0 @@
book.mk4

View File

@@ -21,11 +21,10 @@ Flatbread is probably the simplest sourdough bread to make.
To make a flatbread no oven is required; all you need is a stove. To make a flatbread no oven is required; all you need is a stove.
\begin{figure}[!htb] \begin{figure}[!htb]
\includegraphics[width=\textwidth]{sourdough-stove} \includegraphics[width=\textwidth]{flat-breads-selection}
\caption[Einkorn done on open fire]{An einkorn flatbread made directly over \caption[Flatbread selection with different flours]{An assorted selection of
fire. This is part of a video where I~was trying to reproduce sourdough different flatbreads made with sourdough. From left to right:
recipes of our ancestors. I~called the recipe ``cave bread''. Some Wheat tortilla, rye, spelt and corn.}%
viewers pointed out that probably not all our ancestors lived in caves.}
\end{figure} \end{figure}
This type of bread is super simple to make as you can skip This type of bread is super simple to make as you can skip
@@ -156,9 +155,9 @@ with great taste and consistency.
There is a fully dedicated recipe and tutorial There is a fully dedicated recipe and tutorial
for this type of bread in the~''\nameref{chapter:wheat-sourdough}''~chapter. for this type of bread in the~''\nameref{chapter:wheat-sourdough}''~chapter.
j
\section{Simple flatbread recipe}% \section{Flatbread framework}%
\label{section:flat-bread-recipe} \label{section:flat-bread-framework}
If you are just getting started, making a flatbread is the If you are just getting started, making a flatbread is the
easiest way to start making great bread at home. With just a easiest way to start making great bread at home. With just a
@@ -168,7 +167,7 @@ any flour, including gluten-free options.
\begin{flowchart}[!htb] \begin{flowchart}[!htb]
\begin{center} \begin{center}
\input{figures/fig-process-flat-bread.tex} \input{figures/fig-process-flat-bread.tex}
\caption[Flat bread process]{The process of making a flatbread is very \caption[The process to make a sourdough flatbread]{The process of making a flatbread is very
simple, requiring very little effort. This type of bread is especially simple, requiring very little effort. This type of bread is especially
handy for busy bakers.}% handy for busy bakers.}%
\label{fig:flat-bread-process} \label{fig:flat-bread-process}
@@ -337,3 +336,62 @@ batch of bread or pancakes for the next day. If you want to bake a few days late
a little bit of water and flour and store this mixture in your fridge a little bit of water and flour and store this mixture in your fridge
for as long as you like\footnote{The starter will stay good for months. If you expect to for as long as you like\footnote{The starter will stay good for months. If you expect to
leave it longer, consider drying a little bit of your sourdough starter.}. leave it longer, consider drying a little bit of your sourdough starter.}.
\section{Simple flatbread recipe}%
\label{section:flat-bread-recipe}
By following the steps outlined in this section.
you'll be introduced to a versatile bread that's perfect for a myriad of
culinary applications. Whether you're scooping up a savory dip,
wrapping a flavorful filling, or simply savoring a piece with a drizzle
of olive oil, these flatbreads are sure to impress.
\textbf{Ingredients:}
\begin{enumerate}
\item 400 grams flour (wheat, rye, corn, whatever you have at hand)
\item 320 grams water, preferably at room temperature
\item 80 grams active sourdough starter
\item 8 grams salt
\end{enumerate}
\textbf{Instructions:}
\begin{enumerate}
\item \textbf{Prepare the Dough:} In a large mixing bowl, combine the flour and water.
Mix until you have a shaggy dough with no dry spots.
\item Add the sourdough starter and salt to the mixture. Incorporate them thoroughly
until you achieve a smooth and homogenized dough.
\item \textbf{Fermentation:} Cover the bowl with a lid or plastic wrap. Allow the dough
to rest and ferment until it has increased by at least 50\% in size.
Depending on the temperature and activity of your starter,
this can take anywhere from 4 to 24 hours.
\item \textbf{Cooking Preparation:} Once the dough has risen, heat a pan over medium heat.
Lightly oil the pan, ensuring to wipe away any excess oil with a paper towel.
\item \textbf{Shaping and Cooking:} With a ladle or your hands, scoop out a portion of
the dough and place it onto the hot pan, spreading it gently like a pancake.
\item Cover the pan with a lid. This traps the steam and ensures even cooking
from the top, allowing for easier flipping later.
\item After about 5 minutes, or when the bottom of the flatbread has a
golden-brown crust, carefully flip it using a spatula.
\item \textbf{Adjusting Cook Time:} If the flatbread appears too dark,
remember to reduce the cooking time slightly for the next one.
Conversely, if it's too pale, allow it to cook a bit longer before flipping.
\item Cook the flipped side for an additional 5 minutes or until it's also golden brown.
\item \textbf{Storing:} Once cooked, remove the flatbread from the pan and place it on a
kitchen towel. Wrapping the breads in the towel will help retain their
softness and prevent them from becoming overly crisp.
Repeat the cooking process for the remaining dough.
\item \textbf{Serving Suggestion:} Enjoy your sourdough flatbreads warm,
paired with your favorite dips, spreads, or as a side to any meal.
\end{enumerate}

View File

@@ -1,19 +1,40 @@
\begin{tikzpicture}[node distance = 3cm, auto] \begin{tikzpicture}[node distance = 3cm, auto]
\node [start] (init) {Make a starter}; \node [start] (init) {Make a starter};
\node [block, right of=init, node distance=3cm] (feed) {Feed your starter}; \node [decision, right of=init, node distance=3.5cm] (decision_start) {Starter last fed within 3~days?};
\path [line] (init) -- (feed); \node [block, right of=decision_start, text width=7em, node distance=4cm] (feed_no_branch)
\node [block, right of=feed, node distance=3cm] (wait_12_after_feed) {Wait\\ \qty{12}{\hour}}; {Feed starter twice:\par \qty{48}{\hour} before\par \qtyrange{6}{12}{\hour} before};
\path [line] (feed) -- (wait_12_after_feed); \node [block, below of=feed_no_branch, text width=7em, node distance=2.7cm] (feed_yes_branch)
\node [block, right of=wait_12_after_feed, node distance=3cm] (ready_question) {Perform readiness check}; {Feed starter \qtyrange{6}{12}{\hour} before making dough.};
\path [line] (wait_12_after_feed) -- (ready_question); \node [block, right of=feed_no_branch, text width=7em, node distance=4cm] (high_ratio)
\node [block, above of=feed, node distance=3cm] (wait_12) {Wait\\ \qty{12}{\hour}}; {Use a 1:10:10 ratio:\par \begin{tabular}{r@{}l}
\path [line] (wait_12) -- (feed); 10&~g starter,\\
\node [decision, right of=ready_question, node distance=3.2cm] (is_bubbly) {Bubbly? Size Increase?}; 100&~g flour, \\
\path [line] (ready_question) -- (is_bubbly); 100&~g water.\end{tabular}};
\path [line] (is_bubbly) -- node[anchor=east, above=2pt] {no} ++(2.2,0) |- (wait_12); \node [block, right of=feed_yes_branch, text width=7em, node distance=4cm] (low_ratio)
\node [decision, below of=is_bubbly, node distance=4.0cm] (check_smell) {Vinegary, or yogurt smell?}; {Use a 1:5:5 ratio:\par \begin{tabular}{r@{}l}
\path [line] (is_bubbly) -- node{yes} (check_smell); 10&~g starter,\\
\node [success, below of=wait_12_after_feed, node distance=4cm] (make_dough) {Make your dough}; 50&~g flour, \\
\path [line] (check_smell) -- node[anchor=west, above=2pt]{yes} (make_dough); 50&~g water.\end{tabular}};
\path [line] (check_smell) -- node[anchor=east, above=2pt] {no} ++(2.2,0) |- (wait_12); \node [decision, below of=high_ratio, node distance=6cm] (size_check)
{Bubbly? Increased in size?};
\node [decision, below of=decision_start, node distance=6cm] (smell_check)
{Vinegary or yogurty smell?};
\node [success, below of=init, node distance=6cm] (make_dough)
{Prepare dough};
\path [line] (init) -- (decision_start);
\path [line] (decision_start) -- node{no} (feed_no_branch);
\path [line] (decision_start) -- node[below=2pt]{yes} (feed_yes_branch.north west);
\path [line] (feed_yes_branch) -- (low_ratio);
\path [line] (feed_no_branch) -- (high_ratio);
\path [line] (high_ratio) -- node[anchor=east, above=2pt] {} ++(2.2,0) |-(size_check);
\path [line] (low_ratio) -- (size_check);
\path [line] (size_check) -- node{no} (feed_yes_branch.south east);
\path [line] (size_check) -- node{yes} (smell_check);
\path [line] (smell_check) -- node{no} (feed_yes_branch.south west);
\path [line] (smell_check) -- node{yes} (make_dough);
% braces
\draw[BC] (size_check.south) --
node[below=1em]{Check if starter is ready to be used}(smell_check.south);
\end{tikzpicture} \end{tikzpicture}

View File

@@ -1,30 +0,0 @@
\begin{tikzpicture}[node distance = 3cm, auto]
\node [decision_start] (init) {Starter last fed within 3 days?};
\node [block, right of=init, node distance=4cm] (feed_no_branch)
{Feed starter twice. \qty{48}{\hour} before and \qtyrange{6}{12}{\hour} before};
\node [block, below of=feed_no_branch, node distance=3cm] (feed_yes_branch)
{Feed starter once \qtyrange{6}{12}{\hour} before making dough};
\node [block, right of=feed_no_branch, node distance=6cm] (high_ratio)
{Use a 1:10:10 ratio. \qty{10}{\gram} starter, \qty{100}{\gram} flour, \qty{100}{\gram} water};
\node [block, right of=feed_yes_branch, node distance=3cm] (low_ratio)
{Use a 1:5:5 ratio. \qty{10}{\gram} starter, \qty{50}{\gram} flour, \qty{50}{\gram} water};
\node [block, below of=high_ratio, node distance=6cm] (check_starter)
{Check if starter is ready to be used};
\node [decision, below of=init, node distance=6cm] (size_check)
{Bubbly? Increased in size?};
\node [decision, below of=size_check, node distance=5cm] (smell_check)
{Vinegary or yogurty smell?};
\node [success, right of=smell_check, node distance=6cm] (make_dough)
{Prepare dough};
\path [line] (init) -- node{no} (feed_no_branch);
\path [line] (init) -- node{yes} (feed_yes_branch);
\path [line] (feed_yes_branch) -- (low_ratio);
\path [line] (feed_no_branch) -- (high_ratio);
\path [line] (high_ratio) -- (check_starter);
\path [line] (low_ratio) -- (check_starter);
\path [line] (check_starter) -- (size_check);
\path [line] (size_check) -- node{no} (feed_yes_branch);
\path [line] (size_check) -- node{yes} (smell_check);
\path [line] (smell_check) -- node{no} (feed_yes_branch);
\path [line] (smell_check) -- node{yes} (make_dough);
\end{tikzpicture}

View File

@@ -1,5 +1,5 @@
\tikzstyle{every picture}+=[font=\footnotesize\sffamily] \tikzstyle{every picture}+=[font=\footnotesize\sffamily]
\usetikzlibrary{shapes,arrows} \usetikzlibrary{shapes, arrows, decorations.pathreplacing,calligraphy, calligraphy}
\tikzstyle{decision} = [diamond, draw=codeblack, fill=codeblack, text=white, \tikzstyle{decision} = [diamond, draw=codeblack, fill=codeblack, text=white,
text width=4.5em, text badly centered, node distance=3cm, inner sep=0pt, text width=4.5em, text badly centered, node distance=3cm, inner sep=0pt,
line width=2mm] line width=2mm]
@@ -19,3 +19,7 @@
text width=5em, text centered, rounded corners, minimum height=4em, text width=5em, text centered, rounded corners, minimum height=4em,
line width=0.4mm] line width=0.4mm]
\tikzstyle{line} = [draw, -latex', thick, ->,>=to] \tikzstyle{line} = [draw, -latex', thick, ->,>=to]
\tikzstyle{BC} = [decorate, % Brace Calligraphic
decoration={calligraphic brace, amplitude=3mm, raise=1mm},
very thick, pen colour={black} ]

Binary file not shown.

After

Width:  |  Height:  |  Size: 586 KiB

View File

@@ -43,6 +43,10 @@ ruby_pkg := ../website/Gemfile ../website/Gemfile.lock
tgt_figures := $(patsubst %.tex, %.png,$(src_figures)) tgt_figures := $(patsubst %.tex, %.png,$(src_figures))
# Default target is not all becuse most of the time we just want a pdf...
# ebook take a long time to build.
.DEFAULT_GOAL := build_serif_pdf
# Default rules for pdf and ebooks, getting overwritten when built in a # Default rules for pdf and ebooks, getting overwritten when built in a
# sub-directory # sub-directory
%.pdf: %.tex %.pdf: %.tex
@@ -61,9 +65,6 @@ tgt_figures := $(patsubst %.tex, %.png,$(src_figures))
%.xbb: %.jpg %.xbb: %.jpg
ebb -x $< ebb -x $<
.PHONY: default
default: epub/book_sans_serif.epub
book_serif/book.pdf: $(src_all) book_serif/book.pdf: $(src_all)
$(LATEX) -output-directory=book_serif book.tex $(LATEX) -output-directory=book_serif book.tex
@@ -106,7 +107,6 @@ help:
@echo "build_ebook: builds only the ebook serif and accessible version" @echo "build_ebook: builds only the ebook serif and accessible version"
@echo "build_pdf: builds both serif and accessible pdf" @echo "build_pdf: builds both serif and accessible pdf"
@echo "" @echo ""
@echo "build_sans_serif_ebook: build accessible ebook only"
@echo "build_sans_serif_pdf: build accessible pdf only" @echo "build_sans_serif_pdf: build accessible pdf only"
@echo "" @echo ""
@echo "build_serif_ebook: build serif ebook only" @echo "build_serif_ebook: build serif ebook only"
@@ -115,7 +115,7 @@ help:
@echo "figures: build TikZ figures" @echo "figures: build TikZ figures"
@echo "" @echo ""
@echo "release_serif: build serif only version of pdf and ebooks" @echo "release_serif: build serif only version of pdf and ebooks"
@echo "release_sans_serif: build sans-serif/accessible version of pdf and ebooks" @echo "release_sans_serif: build sans-serif/accessible version of pdf"
@echo "" @echo ""
@echo "website: build the static website from LaTeX sources and post-process it" @echo "website: build the static website from LaTeX sources and post-process it"
@echo "html: build the static website from LaTeX sources _without_ post-processing" @echo "html: build the static website from LaTeX sources _without_ post-processing"
@@ -146,15 +146,11 @@ build_serif_pdf: book_serif/book.pdf
build_sans_serif_pdf: book_sans_serif/book_sans_serif.pdf build_sans_serif_pdf: book_sans_serif/book_sans_serif.pdf
.PHONY: build_ebook .PHONY: build_ebook
build_ebook: build_serif_ebook build_sans_serif_ebook build_ebook: build_serif_ebook
.PHONY: build_serif_ebook .PHONY: build_serif_ebook
build_serif_ebook: epub/book.epub epub/book.mobi epub/book.azw3 | make_release_dir build_serif_ebook: epub/book.epub epub/book.mobi epub/book.azw3 | make_release_dir
.PHONY: build_sans_serif_ebook
build_sans_serif_ebook: epub/book_sans_serif.epub epub/book_sans_serif.mobi \
epub/book_sans_serif.azw3 | make_release_dir
.PHONY: export_figures .PHONY: export_figures
# Requires that you have docker running on your computer. # Requires that you have docker running on your computer.
export_figures: build_pdf $(tgt_figures) export_figures: build_pdf $(tgt_figures)
@@ -190,7 +186,6 @@ clean_ebook_build:
-rm book*.4ct -rm book*.4ct
-rm book*.dvi -rm book*.dvi
-rm book.css -rm book.css
-rm book_sans_serif.css
-rm book*.idv -rm book*.idv
-rm book*.lg -rm book*.lg
-rm book*.ncx -rm book*.ncx
@@ -234,7 +229,6 @@ mrproper: clean
rm -rf book_serif/ rm -rf book_serif/
rm -rf book_sans_serif/ rm -rf book_sans_serif/
rm -rf book-epub/ rm -rf book-epub/
rm -rf book_sans_serif-epub/
rm -rf $(website_dir) rm -rf $(website_dir)
.PHONY: bake .PHONY: bake
@@ -252,11 +246,8 @@ release_serif: build_serif_pdf build_serif_ebook | make_release_dir
cp epub/book.azw3 release/TheBreadCode-The-Sourdough-Framework.azw3 cp epub/book.azw3 release/TheBreadCode-The-Sourdough-Framework.azw3
.PHONY: release_sans_serif .PHONY: release_sans_serif
release_sans_serif: build_sans_serif_pdf build_sans_serif_ebook | make_release_dir release_sans_serif: build_sans_serif_pdf | make_release_dir
cp book_sans_serif/book_sans_serif.pdf release/TheBreadCode-The-Sourdough-Framework-sans-serif.pdf cp book_sans_serif/book_sans_serif.pdf release/TheBreadCode-The-Sourdough-Framework-sans-serif.pdf
cp epub/book_sans_serif.mobi release/TheBreadCode-The-Sourdough-Framework-sans-serif.mobi
cp epub/book_sans_serif.epub release/TheBreadCode-The-Sourdough-Framework-sans-serif.epub
cp epub/book_sans_serif.azw3 release/TheBreadCode-The-Sourdough-Framework-sans-serif.azw3
# Website stuff # Website stuff
$(website_dir)/book.html: $(website_src) cover/cover-page.xbb $(website_dir)/book.html: $(website_src) cover/cover-page.xbb
@@ -285,7 +276,7 @@ website: html ../website/_bundle_install_done $(ruby_src)
quick: # run latex only once no biber, no references etc.. quick: # run latex only once no biber, no references etc..
$(LATEX) -e '$$max_repeat=1' -output-directory=book_serif book.tex $(LATEX) -e '$$max_repeat=1' -output-directory=book_serif book.tex
quick_ebook: # run latex only once no biber, no references etc.. quick_ebook: cover/cover-page.xbb # run latex only once no biber, refe etc..
$(EBOOK) --mode draft -f epub book.tex $(EBOOK) --mode draft -f epub book.tex
show_tools_version: # Show version of tools used on the build machine show_tools_version: # Show version of tools used on the build machine

View File

@@ -1,13 +1,15 @@
\chapter{Making a sourdough starter}%
\label{chapter:sourdough-starter}
\begin{quoting} \begin{quoting}
In this chapter you will learn how to make your In this chapter you will learn how to make your
own sourdough starter. 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 how 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 to determine You will learn to understand the signs indicating
your starter's readiness. Furthermore you will your starter's readiness, as well as
also learn how to prepare your starter for long-term storage. how to prepare your starter for long-term storage.
\end{quoting} \end{quoting}
\section{Baker's math}% \section{Baker's math}%
@@ -21,7 +23,7 @@ for bakers, the quantity of each ingredient
is calculated as a percentage based on how much flour you have. is calculated as a percentage based on how much flour you have.
Let me demonstrate this with a small example from Let me demonstrate this with a small example from
a pizzeria. In the morning you check and you realize you a pizzeria. In the morning you check and you realize you
have around \qty{1}{\kg} of flour. have around \qty{1}{\kg} of flour.
Your default recipe calls for around \qty{600}{\gram} of water. Your default recipe calls for around \qty{600}{\gram} of water.
That would be a typical pizza dough, not too dry but That would be a typical pizza dough, not too dry but
also not too wet. Then you would be using around \qty{20}{\gram} also not too wet. Then you would be using around \qty{20}{\gram}
@@ -30,7 +32,7 @@ pizza dough recipe. In Napoli modern pizzerias would use fresh or dry yeast.
However traditionally pizza has always been made with sourdough.}. However traditionally pizza has always been made with sourdough.}.
The next day you suddenly have \qty{1.4}{\kg} of flour The next day you suddenly have \qty{1.4}{\kg} of flour
at hand and thus can make more pizza dough. What do you do? at hand and thus can make more pizza dough. What do you do?
Do you multiply all the ingredients by 1.4? Yes you could, Do you multiply all the ingredients by \num{1.4}? Yes you could,
but there is an easier way. This is where baker's math but there is an easier way. This is where baker's math
comes in handy. Let's look at the default recipe with baker's comes in handy. Let's look at the default recipe with baker's
math and then adjust it for the \qty{1.4}{\kg} flour quantity. math and then adjust it for the \qty{1.4}{\kg} flour quantity.
@@ -45,8 +47,8 @@ math and then adjust it for the \qty{1.4}{\kg} flour quantity.
Note how each of the ingredients is calculated as a percentage Note how each of the ingredients is calculated as a percentage
based on the flour. The \qty{100}{\percent} is the baseline and represents the absolute based on the flour. The \qty{100}{\percent} is the baseline and represents the absolute
amount of flour that you have at hand. In this case that's \qty{1000}{\gram} amount of flour that you have at hand. In this case that's
(\qty{1}{\kg}). \qty{1000}{\gram}~(\qty{1}{\kg}).
Now let's go back to our example and adjust the flour, as we have Now let's go back to our example and adjust the flour, as we have
more flour available the next day. As mentioned the next day more flour available the next day. As mentioned the next day
@@ -70,7 +72,6 @@ For the second day, that is \qty{840}{\gram}. Proceed to do the same
thing for all the other ingredients and you will know thing for all the other ingredients and you will know
your recipe. your recipe.
Let's say you would want to use \qty{50}{\kg} of flour Let's say you would want to use \qty{50}{\kg} of flour
the next day. What would you do? You would simply proceed the next day. What would you do? You would simply proceed
to calculate the percentages one more time. I~like this to calculate the percentages one more time. I~like this
@@ -91,12 +92,13 @@ are completely lost when trying to scale it up.
\label{fig:sourdough-starter} \label{fig:sourdough-starter}
\end{figure} \end{figure}
Making a sourdough starter is very easy. All you need Making a sourdough starter is very easy, all you need
is a little bit of patience. The flour you should is a little bit of patience. It is in fact so easy that it can be summarized
use to setup your starter is ideally a whole flour. in a simple flowchart~\ref{fig:sourdough-starter-process} The flour you should
You could use whole-wheat, whole rye, whole spelt or use to bootstrap your starter is ideally a whole flour.
You could use whole-wheat, whole-rye, whole-spelt or
any other flour you have. In fact gluten free flours such any other flour you have. In fact gluten free flours such
as rice or corn would also work. Don't worry, you can as rice or corn would also work. Don't worry, you can always
change the flour later. Use whatever whole flour you change the flour later. Use whatever whole flour you
already have at hand. already have at hand.
@@ -104,11 +106,11 @@ Your flour is contaminated with millions of microbes. As explained
before in the chapter about wild yeast and bacteria, these before in the chapter about wild yeast and bacteria, these
microbes live on the surface of the plant. That's why microbes live on the surface of the plant. That's why
a whole flour works better because you have more natural a whole flour works better because you have more natural
contamination of the microbes you are trying to cultivate contamination from the microbes you are trying to cultivate
in your starter. More of them live on the hull compared to the in your starter. More of them live on the hull compared to the
endophytes living in the grain. endophytes living in the grain.
Start by measuring approximately \qty{50}{\gram} each of flour and Start by measuring approximately \qty{50}{\gram} of both flour and
water. The measurements don't have to be exact; you can use water. The measurements don't have to be exact; you can use
less or more, or just eyeball the proportions. These less or more, or just eyeball the proportions. These
values are just shown as a reference. values are just shown as a reference.
@@ -120,12 +122,11 @@ 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}.
This means you're using equal parts flour and This means you're using equal amount of flour and
water. Stir everything together so that all the flour is water. Stir everything together so that all the flour is
properly hydrated. This step activates the microbial spores properly hydrated. This step activates the microbial spores
in your mixture, drawing them out of hibernation and in your mixture, drawing them out of hibernation and
reviving them. reviving them.
Finally, cover your mixture but make sure the covering is Finally, cover your mixture but make sure the covering is
not airtight. I~like to use a glass and place another not airtight. I~like to use a glass and place another
inverted one on top. The container shouldn't be airtight, inverted one on top. The container shouldn't be airtight,
@@ -134,25 +135,29 @@ you still want some gas exchange to be possible.
\begin{flowchart}[!htb] \begin{flowchart}[!htb]
\begin{center} \begin{center}
\input{figures/fig-starter-process.tex} \input{figures/fig-starter-process.tex}
\caption[Process for starter from scratch]{The process of making a sourdough \caption[The full sourdough starter process]{The process of making a sourdough
starter from scratch.}% starter from scratch.}%
\label{fig:sourdough-starter-process} \label{fig:sourdough-starter-process}
\end{center} \end{center}
\end{flowchart} \end{flowchart}
Now an epic battle begins. In one study scientists Now an epic battle begins. In one study~\cite{yeasts+biocontrol+agent}
have identified more than 150 different yeast species living scientists have identified more than \num{150}~different yeast species living
on a single leaf of a plant~\cite{yeasts+biocontrol+agent}. on a single leaf of a plant.
All of the different yeasts and bacteria are trying to get All of the different yeasts and bacteria are trying to get
the upper hand in this battle. Other pathogens such as mold the upper hand in this battle. Other pathogens such as mold
are also being activated as we added water. Only the strongest are also being activated as we added water. Only the strongest
most adaptable microorganisms will survive. By adding water to the most adaptable microorganisms will survive.
By adding water to the
flour the starches start to degrade. The seedling tries to flour the starches start to degrade. The seedling tries to
sprout but it no longer can. Essential for this process is the sprout but it no longer can. Essential for this process is the
amylase enzyme. The compact starch is broken down to more amylase enzyme. The compact starch is broken down to more
digestible sugars to fuel plant growth. Glucose is what the digestible sugars to fuel plant growth. Glucose is what the
plant needs in order to grow. The microorganisms that survive plant needs in order to grow. The microorganisms that survive
this frenzy are adapted to consuming glucose. Luckily for us this frenzy are adapted to consuming glucose.
Luckily for us
bakers, the yeast and bacteria know very well how to metabolize bakers, the yeast and bacteria know very well how to metabolize
glucose. This is what they have been fed in the wild by the plants. glucose. This is what they have been fed in the wild by the plants.
By forming patches on the leaf and protecting the plant from By forming patches on the leaf and protecting the plant from
@@ -161,7 +166,9 @@ Each of the microbes tries to defeat the other by consuming the
food fastest, producing agents to inhibit food uptake by others or by producing food fastest, producing agents to inhibit food uptake by others or by producing
bactericides and/or fungicides. This early stage of the starter bactericides and/or fungicides. This early stage of the starter
is very interesting as more research could possibly reveal is very interesting as more research could possibly reveal
new fungicides or antibiotics. Depending on where your flour new fungicides or antibiotics.
Depending on where your flour
is from, the starting microbes of your starter might be different is from, the starting microbes of your starter might be different
than the ones from another starter. Some people have also reported than the ones from another starter. Some people have also reported
how the microbes from your hand or air can influence your starter's how the microbes from your hand or air can influence your starter's
@@ -170,12 +177,14 @@ hand's microbes might be good at fermenting your sweat, but
probably not so good at metabolizing glucose. The contamination probably not so good at metabolizing glucose. The contamination
of your hands or air might play a minor role in the initial epic of your hands or air might play a minor role in the initial epic
battle. But only the fittest microbes fitting the sourdough's battle. But only the fittest microbes fitting the sourdough's
niche are going to survive. This means the microorganisms that know niche are going to survive.
This means the microorganisms knowing
how to convert maltose or glucose will have the upper hand. Or the how to convert maltose or glucose will have the upper hand. Or the
microbes that ferment the waste of the other microbes. Ethanol created microbes fermenting the waste of the other microbes. Ethanol created
by the yeast is metabolized by the bacteria in your sourdough. That's by the yeast is metabolized by the bacteria in your sourdough. That's
why a sourdough has no alcohol. I~can confirm the role of aerial why a sourdough has no alcohol. I~can confirm the role of aerial
contamination to a certain extent. When setting up a new sourdough contamination to a certain extent, when setting up a new sourdough
starter the whole process is quite quick for me. After a few starter the whole process is quite quick for me. After a few
days my new starter seems to be quite alive already. This might days my new starter seems to be quite alive already. This might
be due to previous contamination of flour fermenting microbes in be due to previous contamination of flour fermenting microbes in
@@ -195,48 +204,54 @@ my kitchen.
\label{fig:sourdough-starter-microbial-war} \label{fig:sourdough-starter-microbial-war}
\end{figure} \end{figure}
Wait for around 24~hours and observe what happens to your starter. Wait for around 24~hours and observe what happens to your starter.
You might see some early signs of fermentation already. Use your nose You might see some early signs of fermentation already. Use your nose
to smell the dough. Look for bubbles in the dough. Your dough to smell the dough. Look for bubbles in the dough. Your dough
might already have increased in size a little bit. Whatever might already have increased in size a little bit. Whatever
you see and notice is a sign of the first battle. Some microbes you see and notice is a sign of the first battle.
Some microbes
have already been outperformed. Others have won the first battle. have already been outperformed. Others have won the first battle.
After around 24~hours most of the starch has been broken down After around 24~hours most of the starch has been broken down
and your microbes are hungry for additional sugars. With a spoon and your microbes are hungry for additional sugars. With a spoon
take around \qty{10}{\gram} from the previous day's mixture and place take around \qty{10}{\gram} from the previous day's mixture and place
it in a new container. Again --- you could also simply eye ball it in a new container. Again --- you could also simply eye ball
all the quantities. It does not matter that much. Mix the 10 all the quantities. It does not matter that much. Mix the \qty{10}{\gram}
grams from the previous day with another \qty{50}{\gram} of flour from the previous day with another \qty{50}{\gram} of flour
and \qty{50}{\gram} of water. Note the ratio of 1:5. I~very often use and \qty{50}{\gram} of water.
1 part of old culture with 5 parts of flour and 5 parts of water.
Note the ratio of 1:5. I~very often use
1~part of old culture with 5~parts of flour and 5~parts of water.
This is also very often the same ratio I~use when making a dough. This is also very often the same ratio I~use when making a dough.
A dough is nothing else than a sourdough starter with slightly different A dough is nothing else than a giant sourdough starter with slightly different
properties. I'd always be using around \qtyrange{100}{200}{\gram} of starter properties. I'd always be using around \qtyrange{100}{200}{\gram} of starter
for around \qty{1000}{\gram} of flour (baker's math: \qtyrange{10}{20}{\percent}). for around \qty{1000}{\gram} of flour (baker's math: \qtyrange{10}{20}{\percent}).
Homogenize your new mixture again with a spoon. Then cover Homogenize your new mixture again with a spoon. Then cover
the mix again with a glass or a lid. If you notice the top of the mix again with a glass or a lid. If you notice the top of
your mixture dries out a lot consider using another cover. The your mixture dries out a lot consider using another cover. The
dried-out parts will be composted by more adapted microbes such as dried-out parts will be composted by more adapted microbes such as
mold. In many user reports, I~saw mold being able to damage mold. In many user reports, I~saw mold being able to damage
the starter when the starter itself dried out a lot. You will the starter when the starter itself dried out a lot.
You will
still have some mixture left from your first day. As this contains still have some mixture left from your first day. As this contains
possibly dangerous pathogens that have been activated we will discard possibly dangerous pathogens that have been activated make sure you discard
this mixture. Once your sourdough starter is mature never this mixture. Once your sourdough starter is mature you never need to
discard it. It's long-fermented flour that is an excellent addon discard it. It's long-fermented flour that is an excellent addon
used to make crackers, pancakes and or delicious hearty sandwich used to make crackers, pancakes or delicious hearty sandwich
bread. I~also frequently dry it and use it as a rolling agent bread\ldots I~also frequently dry it and use it as a rolling agent
for pizzas that I~am making. for pizzas that I~am making.
You should hopefully again see some bubbles, the starter increasing You should hopefully again see some bubbles, the starter increasing
in size and/or the starter changing its smell. Some people give in size and/or the starter changing its smell. Some people give
up after the second or third day. That is because the signs might no longer up after the second or third day, because the signs might no longer
be as dominant as they were on day one. The reason for this lies in only a few be as dominant as they were on day one. The reason for this lies in only a few
select microbes starting to take over the whole sourdough starter. The most select microbes starting to take over the whole sourdough starter. The most
adaptable ones are going to win. They are very small in quantity and will adaptable ones are going to win, they are very small in quantity and will
grow in population with each subsequent feeding. Even if you see no signs grow in population with each subsequent feeding. Even if you see no signs
of activity directly, don't worry. There is activity in of activity directly, do not worry, there is activity in
your starter on a microscopic level. your starter at a microscopic level.
24~hours later again we will repeat the same thing again until 24~hours later again we will repeat the same thing again until
we see that our sourdough starter is active. More on that in the we see that our sourdough starter is active. More on that in the
@@ -245,7 +260,7 @@ next section of this book.
\section{Determining starter readiness} \section{Determining starter readiness}
For some people the whole process of setting up a starter takes For some people the whole process of setting up a starter takes
only 4 days. For others it can take 7 days, for some even 20 days. only 4~days. For others it can take 7~days, for some even 20~days.
This depends on several factors including how good your wild microbes This depends on several factors including how good your wild microbes
are at fermenting flour. Generally speaking, with each feeding are at fermenting flour. Generally speaking, with each feeding
your starter becomes more adapted to its environment. Your your starter becomes more adapted to its environment. Your
@@ -259,7 +274,7 @@ starters.
\begin{flowchart}[!htb] \begin{flowchart}[!htb]
\begin{center} \begin{center}
\input{figures/fig-starter-readiness.tex} \input{figures/fig-starter-readiness.tex}
\caption[Sourdough readiness flow chart]{A flow chart showing you how to \caption[Determining sourdough starter readiness]{A flow chart showing you how to
determine if your sourdough starter is ready to be used. For checking determine if your sourdough starter is ready to be used. For checking
readiness look at a size increase and take note of your starter's smell. readiness look at a size increase and take note of your starter's smell.
Both are important indicators to check for readiness.}% Both are important indicators to check for readiness.}%
@@ -267,10 +282,11 @@ starters.
\end{center} \end{center}
\end{flowchart} \end{flowchart}
The key signs to look at are bubbles that you see in your starter The key sign to look at is bubbles that you see in your starter
jar. This is a sign that the yeast is metabolizing your jar. This is a sign that the yeast is metabolizing your
dough and creates \ch{CO2}. The \ch{CO2} is trapped in your dough dough and creates \ch{CO2}. The \ch{CO2} is trapped in your dough
matrix and then visualized on the edges of the container. matrix and then visualized on the edges of the container.
Also note the size increase of your dough. The amount the dough increases Also note the size increase of your dough. The amount the dough increases
in size is irrelevant. Some bakers claim it doubles, triples or quadruples. in size is irrelevant. Some bakers claim it doubles, triples or quadruples.
The amount of size increase depends on your microbes, but also on The amount of size increase depends on your microbes, but also on
@@ -282,11 +298,13 @@ wheat microbes might be better at breaking down gluten compared
to rye microbes. That's one of the reasons why I~decided to change to rye microbes. That's one of the reasons why I~decided to change
the flour of my sourdough starter quite often. I~had hoped to create the flour of my sourdough starter quite often. I~had hoped to create
an all-around starter that can ferment all sorts of different an all-around starter that can ferment all sorts of different
flour\footnote{Whether this is working I~can't scientifically say. flour\footnote{Whether this is working, I~can't scientifically say.
Typically the microbes that have once taken place are very strong Typically the microbes that have once taken place are very strong
and won't allow other microbes to enter. My starter has initially and won't allow other microbes to enter. My starter has initially
been made with rye flour. So chances are that the majority of been made with rye flour. So chances are that the majority of
my microorganisms are from a rye source.}. Your nose is also my microorganisms are from a rye source.}.
Your nose is also
a great tool to determine starter readiness. Depending on a great tool to determine starter readiness. Depending on
your starter's microbiome you should notice either the smell your starter's microbiome you should notice either the smell
of lactic acid or acetic acid. Lactic acid has dairy yogurty notes. of lactic acid or acetic acid. Lactic acid has dairy yogurty notes.
@@ -298,25 +316,26 @@ to determine starter readiness.
In rare events your flour might be treated and prevent microbe growth. In rare events your flour might be treated and prevent microbe growth.
This can happen if the flour is not organic and a lot of biochemical This can happen if the flour is not organic and a lot of biochemical
agents have been used by the farmer. In that case simply try again agents have been used by the farmer. In that case simply try again
with different flour. 7 days is a good period of time to wait before with different flour. Ten~days is a good period of time to wait before
trying again. trying again.
Another methodology used by some bakers is the so called \emph{float test}. Another methodology used by some bakers is the so called \emph{float test}.
The idea is to take a piece of your sourdough starter and place it The idea is to take a piece of your sourdough starter and place it
on top of some water. If the dough is full with gas it will float on top of some water, if the dough is full with gas it will float
on top of the water. If it's not ready, it can't float and will on top of the water. If it's not ready, it can't float and will
sink to the bottom. This test does not work with every flour. sink to the bottom. This test does not work with every flour,
Rye flour for instance can't retain the gas as well as wheat flour rye flour for instance can't retain the gas as well as wheat flour
and thus in some cases will not float. That's why I~personally and thus in some cases will not float. That's why I~personally
don't use this test and can't recommend it. don't use this test and can't recommend it.
Once you see your starter is ready I~would recommend giving it Once you see your starter is ready I~would recommend giving it
one last feeding and then you are ready to make your dough in the one last feeding and then you are ready to make your dough in the
evening or the next day. For the instructions to make your evening or the next day. For the instructions on how to make your
first dough please refer to the next chapters in this book. first dough please refer to the next chapters (\ref{chapter:wheat-sourdough}
and~\ref{chapter:non-wheat-sourdough}) in this book.
If your first bread failed, chances are your fermentation hasn't If your first bread failed, chances are your fermentation hasn't
worked as expected. In many cases the source is your sourdough starter. Maybe worked as expected. In many cases the reason is your sourdough starter. Maybe
the balance of bacteria and yeast isn't optimal yet. In that case a good the balance of bacteria and yeast isn't optimal yet. In that case a good
solution is to keep feeding your starter once per day. With each feeding your solution is to keep feeding your starter once per day. With each feeding your
starter becomes better at fermenting flour. The microbes will adapt more and starter becomes better at fermenting flour. The microbes will adapt more and
@@ -393,8 +412,8 @@ sourdough starter into the right shape again.
The following are a couple of scenarios that will help you to conduct proper The following are a couple of scenarios that will help you to conduct proper
starter maintenance, depending on when you want to bake the next time. starter maintenance, depending on when you want to bake the next time.
\textbf{I~would like to bake again the next day:} \begin{description}
\item[I~would like to bake again the next day:]
Simply take whatever starter you have left and feed it again. If you depleted Simply take whatever starter you have left and feed it again. If you depleted
all your starter you can cut a piece of your dough. The dough itself is all your starter you can cut a piece of your dough. The dough itself is
nothing different than a gigantic starter. I~recommend a 1:5:5 ratio like nothing different than a gigantic starter. I~recommend a 1:5:5 ratio like
@@ -405,8 +424,7 @@ case I~would go for a 1:10:10 ratio. Sometimes I~don't have enough starter.
Then I~even use a ratio of 1:50:50 or 1:100:100. Depending on how much new Then I~even use a ratio of 1:50:50 or 1:100:100. Depending on how much new
flour you feed it takes longer for your starter to be ready again. flour you feed it takes longer for your starter to be ready again.
\textbf{I~would like to take a break and bake next week:} \item[I~would like to take a break and bake next week:]
Simply take your leftover starter and place it inside of your fridge. It will stay good Simply take your leftover starter and place it inside of your fridge. It will stay good
for a very long period. The only thing I~see happening is the surface for a very long period. The only thing I~see happening is the surface
drying out in the fridge. So I~recommend drowning the starter in a little bit drying out in the fridge. So I~recommend drowning the starter in a little bit
@@ -419,13 +437,12 @@ to make a lacto fermented hot sauce for instance.
The colder it is the longer you preserve a good balance of yeast and The colder it is the longer you preserve a good balance of yeast and
bacteria. Generally, the warmer it is the faster the fermentation process is, bacteria. Generally, the warmer it is the faster the fermentation process is,
and the colder it is the slower the whole process becomes. and the colder it is the slower the whole process becomes.
Below \qty{4}{\degreeCelsius} the starter fermentation almost completely stops. The Below~\qty{4}{\degreeCelsius} the starter fermentation almost completely stops. The
fermentation speed at low temperatures depends on the fermentation speed at low temperatures depends on the
strains of wild yeast and bacteria strains of wild yeast and bacteria
that you have cultivated. that you have cultivated.
\textbf{I~would like to take a several months break:} \item[I~would like to take a several months break:]
Drying your starter might be the best option to preserve it in this case. As Drying your starter might be the best option to preserve it in this case. As
you remove humidity and food your microbes will sporulate. As there is no you remove humidity and food your microbes will sporulate. As there is no
humidity the spores can resist other pathogens very well. A dried starter can humidity the spores can resist other pathogens very well. A dried starter can
@@ -435,7 +452,7 @@ Simply take your starter and mix it with flour. Try to crumble the starter as
much as possible. Add more flour continuously until you notice that there is no much as possible. Add more flour continuously until you notice that there is no
moisture left. Place the flour starter in a dry place in your house. Let it moisture left. Place the flour starter in a dry place in your house. Let it
dry out even more. If you have a dehydrator you can use this to speed up the dry out even more. If you have a dehydrator you can use this to speed up the
process. Set it to around \qty{30}{\degreeCelsius} and dry the starter for 12--20~hours. The next process. Set it to around~\qty{30}{\degreeCelsius} and dry the starter for 12--20~hours. The next
day your starter has dried out a bit. It is in a vulnerable state as there is still a bit day your starter has dried out a bit. It is in a vulnerable state as there is still a bit
of humidity left. Add some more flour to speed up the drying process. Repeat of humidity left. Add some more flour to speed up the drying process. Repeat
for another 2 days until you feel that there is no humidity left. This is for another 2 days until you feel that there is no humidity left. This is
@@ -445,10 +462,11 @@ the dried starter. Both options work perfectly fine. Your sporulated starter
is now waiting for your next feeding. If available you can add some silica is now waiting for your next feeding. If available you can add some silica
bags to the container to further absorb excess moisture. bags to the container to further absorb excess moisture.
Initially, it would take about 3 days for my starter to become alive again Initially, it would take about three~days for my starter to become alive again
after drying and reactivating it. If I~do the same thing now my starter is after drying and reactivating it. If I~do the same thing now my starter is
sometimes ready after a single feeding. It seems that the microbes adapt. The ones sometimes ready after a single feeding. It seems that the microbes adapt. The ones
that survive this shock become dominant subsequently. that survive this shock become dominant subsequently.
\end{description}
So in conclusion the maintenance mode you choose depends on when you want to bake next. So in conclusion the maintenance mode you choose depends on when you want to bake next.
The goal of each new feeding is to make sure your starter The goal of each new feeding is to make sure your starter

View File

@@ -3,7 +3,7 @@
\toprule \toprule
& \textbf{Flat breads} & \textbf{Pancakes} \\ \midrule & \textbf{Flat breads} & \textbf{Pancakes} \\ \midrule
\textbf{Flour} & 100g & 100g \\ \textbf{Flour} & 100g & 100g \\
\textbf{Water} & 100g (100\%) & 300g (300\%) \\ \textbf{Water} & up to 100g (100\%) & 300g (300\%) \\
\textbf{Sourdough starter} & 5--20g (5--20\%) & 5--20g (5--20\%) \\ \textbf{Sourdough starter} & 5--20g (5--20\%) & 5--20g (5--20\%) \\
\textbf{Salt} & 2g (2\%) & 2g (2\%) \\ \textbf{Salt} & 2g (2\%) & 2g (2\%) \\
\textbf{Bake when?} & Dough increased 50 percent in size & Bubbles visible on surface \\ \bottomrule \textbf{Bake when?} & Dough increased 50 percent in size & Bubbles visible on surface \\ \bottomrule

Binary file not shown.

Before

Width:  |  Height:  |  Size: 298 KiB

After

Width:  |  Height:  |  Size: 115 KiB

View File

@@ -100,7 +100,7 @@ main dough.
\begin{flowchart}[!htb] \begin{flowchart}[!htb]
\begin{center} \begin{center}
\input{figures/fig-wheat-sourdough-starter-process.tex} \input{figures/fig-starter-readiness.tex}
\caption[Process to prepare your starter before baking]{The process to check \caption[Process to prepare your starter before baking]{The process to check
your sourdough starter when making wheat-based doughs. In practice your sourdough starter when making wheat-based doughs. In practice
I~frequently use a stiff sourdough starter. The stiff starter features I~frequently use a stiff sourdough starter. The stiff starter features
@@ -1114,7 +1114,7 @@ batch. It is optional if you are making a single loaf.
\begin{flowchart}[!htb] \begin{flowchart}[!htb]
\begin{center} \begin{center}
\input{figures/fig-dividing-preshaping.tex} \input{figures/fig-dividing-preshaping.tex}
\caption[Dividing decision tree]{Dividing is only required when you are \caption[Is dividing your dough required check]{Dividing is only required when you are
making multiple loaves in a single dough batch.}% making multiple loaves in a single dough batch.}%
\label{fig:dividing-decision-tree} \label{fig:dividing-decision-tree}
\end{center} \end{center}
@@ -1229,7 +1229,7 @@ your environment.
\begin{flowchart}[!htb] \begin{flowchart}[!htb]
\begin{center} \begin{center}
\input{figures/fig-shaping-process.tex} \input{figures/fig-shaping-process.tex}
\caption[Shaping process]{A schematic visualization of the shaping process \caption[Sourdough shaping process]{A schematic visualization of the shaping process
including checks for an overfermented dough.}% including checks for an overfermented dough.}%
\label{fig:shaping-decision-tree} \label{fig:shaping-decision-tree}
\end{center} \end{center}
@@ -1454,7 +1454,7 @@ of retarding and flavor development.
\begin{flowchart}[!htb] \begin{flowchart}[!htb]
\begin{center} \begin{center}
\input{figures/fig-proofing-process.tex} \input{figures/fig-proofing-process.tex}
\caption[Proofing process]{A schematic overview of the different steps of \caption[Sourdough proofing process]{A schematic overview of the different steps of
the sourdough proofing process. The proofing technique to choose depends the sourdough proofing process. The proofing technique to choose depends
on your availability and schedule.}% on your availability and schedule.}%
\label{fig:proofing-process} \label{fig:proofing-process}

View File

@@ -493,12 +493,6 @@ class ModifyBuild
<p class="noindent"> <p class="noindent">
EPUB: <a href="https://www.the-bread-code.io/book.epub">https://www.the-bread-code.io/book.epub</a><br> EPUB: <a href="https://www.the-bread-code.io/book.epub">https://www.the-bread-code.io/book.epub</a><br>
EPUB (no serif): <a href="https://www.the-bread-code.io/book-sans-serif.epub">https://www.the-bread-code.io/book-sans-serif.epub</a>
</p>
<p class="noindent">
Kindle: <a href="https://www.the-bread-code.io/book.azw3">https://www.the-bread-code.io/book.azw3</a><br>
Kindle (no serif): <a href="https://www.the-bread-code.io/book-sans-serif.azw3">https://www.the-bread-code.io/book-sans-serif.azw3</a>
</p> </p>
<p class="noindent"> <p class="noindent">