This is an automated email from the ASF dual-hosted git repository.

git-site-role pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/beam.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new fead510  Publishing website 2021/10/04 18:03:25 at commit 2a3d887
fead510 is described below

commit fead510df4a26d24cdbd06c10cb2af8c252bead6
Author: jenkins <bui...@apache.org>
AuthorDate: Mon Oct 4 18:03:26 2021 +0000

    Publishing website 2021/10/04 18:03:25 at commit 2a3d887
---
 website/generated-content/documentation/index.xml  | 150 ++++++++++++++++++---
 .../io/developing-io-python/index.html             |   4 +-
 .../patterns/cross-language/index.html             |   4 +-
 .../documentation/programming-guide/index.html     |  96 +++++++++----
 website/generated-content/get-started/index.xml    |   8 +-
 .../get-started/mobile-gaming-example/index.html   |   8 +-
 website/generated-content/sitemap.xml              |   2 +-
 7 files changed, 215 insertions(+), 57 deletions(-)

diff --git a/website/generated-content/documentation/index.xml 
b/website/generated-content/documentation/index.xml
index 56112c0..c4ca3be 100644
--- a/website/generated-content/documentation/index.xml
+++ b/website/generated-content/documentation/index.xml
@@ -978,7 +978,7 @@ to &lt;code>_CountingSource&lt;/code>. Then, create the 
wrapper &lt;code>PTransf
 &lt;/a>
 &lt;pre>&lt;code>class ReadFromCountingSource(PTransform):
 def __init__(self, count):
-super(ReadFromCountingSource, self).__init__()
+super().__init__()
 self._count = count
 def expand(self, pcoll):
 return pcoll | iobase.Read(_CountingSource(self._count))&lt;/code>&lt;/pre>
@@ -1003,7 +1003,7 @@ numbers = pipeline | &amp;#39;ProduceNumbers&amp;#39; 
&amp;gt;&amp;gt; ReadFromC
 &lt;pre>&lt;code>class WriteToKVSink(PTransform):
 def __init__(self, simplekv, url, final_table_name):
 self._simplekv = simplekv
-super(WriteToKVSink, self).__init__()
+super().__init__()
 self._url = url
 self._final_table_name = final_table_name
 def expand(self, pcoll):
@@ -5509,7 +5509,8 @@ the pipeline.&lt;/li>
 &lt;/ul>
 &lt;/span>
 &lt;p class="language-go">If your &lt;code>PCollection&lt;/code> uses any 
non-global windowing function, the Beam Go SDK
-behaves the same way as with global windowing.&lt;/p>
+behaves the same way as with global windowing. Windows that are empty in the 
input
+&lt;code>PCollection&lt;/code> will likewise be empty in the output 
collection.&lt;/p>
 &lt;h5 id="combining-values-in-a-keyed-pcollection">4.2.4.6. Combining values 
in a keyed PCollection&lt;/h5>
 &lt;p>After creating a keyed PCollection (for example, by using a 
&lt;code>GroupByKey&lt;/code>
 transform), a common pattern is to combine the collection of values associated
@@ -5724,7 +5725,7 @@ Non-idempotent functions are supported by Beam, but 
require additional
 thought to ensure correctness when there are external side effects.&lt;/p>
 &lt;span class="language-java language-py">
 &lt;blockquote>
-&lt;p>&lt;strong>Note:&lt;/strong> These requirements apply to subclasses of 
&lt;code>DoFn&lt;/code>&lt;/span> (a function object
+&lt;p>&lt;strong>Note:&lt;/strong> These requirements apply to subclasses of 
&lt;code>DoFn&lt;/code>(a function object
 used with the &lt;a href="#pardo">ParDo&lt;/a> transform), 
&lt;code>CombineFn&lt;/code> (a function object used
 with the &lt;a href="#combine">Combine&lt;/a> transform), and 
&lt;code>WindowFn&lt;/code> (a function object
 used with the &lt;a href="#windowing">Window&lt;/a> transform).&lt;/p>
@@ -5732,7 +5733,7 @@ used with the &lt;a href="#windowing">Window&lt;/a> 
transform).&lt;/p>
 &lt;/span>
 &lt;span class="language-go">
 &lt;blockquote>
-&lt;p>&lt;strong>Note:&lt;/strong> These requirements apply to 
&lt;code>DoFn&lt;/code>s&lt;/span> (a function object
+&lt;p>&lt;strong>Note:&lt;/strong> These requirements apply to 
&lt;code>DoFn&lt;/code>s (a function object
 used with the &lt;a href="#pardo">ParDo&lt;/a> transform), 
&lt;code>CombineFn&lt;/code>s (a function object used
 with the &lt;a href="#combine">Combine&lt;/a> transform), and 
&lt;code>WindowFn&lt;/code>s (a function object
 used with the &lt;a href="#windowing">Window&lt;/a> transform).&lt;/p>
@@ -8558,7 +8559,7 @@ window.&lt;/p>
 &lt;li>Sliding Time Windows&lt;/li>
 &lt;li>Per-Session Windows&lt;/li>
 &lt;li>Single Global Window&lt;/li>
-&lt;li>Calendar-based Windows (not supported by the Beam SDK for 
Python)&lt;/li>
+&lt;li>Calendar-based Windows (not supported by the Beam SDK for Python or 
Go)&lt;/li>
 &lt;/ul>
 &lt;p>You can also define your own &lt;code>WindowFn&lt;/code> if you have a 
more complex need.&lt;/p>
 &lt;p>Note that each element can logically belong to more than one window, 
depending
@@ -8648,6 +8649,16 @@ into fixed windows, each 60 seconds in length:&lt;/p>
 &lt;span class="n">items&lt;/span> &lt;span class="o">|&lt;/span> &lt;span 
class="s1">&amp;#39;window&amp;#39;&lt;/span> &lt;span 
class="o">&amp;gt;&amp;gt;&lt;/span> &lt;span class="n">beam&lt;/span>&lt;span 
class="o">.&lt;/span>&lt;span class="n">WindowInto&lt;/span>&lt;span 
class="p">(&lt;/span>&lt;span class="n">window&lt;/span>&lt;span 
class="o">.&lt;/span>&lt;span class="n">FixedWindows&lt;/span>&lt;span 
class="p">(&lt;/span>&lt;span class="mi">60&lt;/span>&lt;span class="p">)))&lt 
[...]
 &lt;/div>
 &lt;/div>
+&lt;div class='language-go snippet'>
+&lt;div class="notebook-skip code-snippet">
+&lt;a class="copy" type="button" data-bs-toggle="tooltip" 
data-bs-placement="bottom" title="Copy to clipboard">
+&lt;img src="/images/copy-icon.svg"/>
+&lt;/a>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-go" 
data-lang="go">&lt;span class="nx">fixedWindowedItems&lt;/span> &lt;span 
class="o">:=&lt;/span> &lt;span class="nx">beam&lt;/span>&lt;span 
class="p">.&lt;/span>&lt;span class="nf">WindowInto&lt;/span>&lt;span 
class="p">(&lt;/span>&lt;span class="nx">s&lt;/span>&lt;span 
class="p">,&lt;/span>
+&lt;span class="nx">window&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nf">NewFixedWindows&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="mi">60&lt;/span>&lt;span class="o">*&lt;/span>&lt;span 
class="nx">time&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nx">Second&lt;/span>&lt;span class="p">),&lt;/span>
+&lt;span class="nx">items&lt;/span>&lt;span 
class="p">)&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;/div>
 &lt;h4 id="using-sliding-time-windows">8.3.2. Sliding time windows&lt;/h4>
 &lt;p>The following example code shows how to apply &lt;code>Window&lt;/code> 
to divide a &lt;code>PCollection&lt;/code>
 into sliding time windows. Each window is 30 seconds in length, and a new 
window
@@ -8672,6 +8683,16 @@ begins every five seconds:&lt;/p>
 &lt;span class="n">items&lt;/span> &lt;span class="o">|&lt;/span> &lt;span 
class="s1">&amp;#39;window&amp;#39;&lt;/span> &lt;span 
class="o">&amp;gt;&amp;gt;&lt;/span> &lt;span class="n">beam&lt;/span>&lt;span 
class="o">.&lt;/span>&lt;span class="n">WindowInto&lt;/span>&lt;span 
class="p">(&lt;/span>&lt;span class="n">window&lt;/span>&lt;span 
class="o">.&lt;/span>&lt;span class="n">SlidingWindows&lt;/span>&lt;span 
class="p">(&lt;/span>&lt;span class="mi">30&lt;/span>&lt;span class="p">,&lt 
[...]
 &lt;/div>
 &lt;/div>
+&lt;div class='language-go snippet'>
+&lt;div class="notebook-skip code-snippet">
+&lt;a class="copy" type="button" data-bs-toggle="tooltip" 
data-bs-placement="bottom" title="Copy to clipboard">
+&lt;img src="/images/copy-icon.svg"/>
+&lt;/a>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-go" 
data-lang="go">&lt;span class="nx">slidingWindowedItems&lt;/span> &lt;span 
class="o">:=&lt;/span> &lt;span class="nx">beam&lt;/span>&lt;span 
class="p">.&lt;/span>&lt;span class="nf">WindowInto&lt;/span>&lt;span 
class="p">(&lt;/span>&lt;span class="nx">s&lt;/span>&lt;span 
class="p">,&lt;/span>
+&lt;span class="nx">window&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nf">NewSlidingWindows&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="mi">5&lt;/span>&lt;span class="o">*&lt;/span>&lt;span 
class="nx">time&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nx">Second&lt;/span>&lt;span class="p">,&lt;/span> &lt;span 
class="mi">30&lt;/span>&lt;span class="o">*&lt;/span>&lt;span 
class="nx">time&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nx">Second&lt;/ [...]
+&lt;span class="nx">items&lt;/span>&lt;span 
class="p">)&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;/div>
 &lt;h4 id="using-session-windows">8.3.3. Session windows&lt;/h4>
 &lt;p>The following example code shows how to apply &lt;code>Window&lt;/code> 
to divide a &lt;code>PCollection&lt;/code>
 into session windows, where each session must be separated by a time gap of at
@@ -8696,6 +8717,16 @@ least 10 minutes (600 seconds):&lt;/p>
 &lt;span class="n">items&lt;/span> &lt;span class="o">|&lt;/span> &lt;span 
class="s1">&amp;#39;window&amp;#39;&lt;/span> &lt;span 
class="o">&amp;gt;&amp;gt;&lt;/span> &lt;span class="n">beam&lt;/span>&lt;span 
class="o">.&lt;/span>&lt;span class="n">WindowInto&lt;/span>&lt;span 
class="p">(&lt;/span>&lt;span class="n">window&lt;/span>&lt;span 
class="o">.&lt;/span>&lt;span class="n">Sessions&lt;/span>&lt;span 
class="p">(&lt;/span>&lt;span class="mi">10&lt;/span> &lt;span 
class="o">*&lt;/spa [...]
 &lt;/div>
 &lt;/div>
+&lt;div class='language-go snippet'>
+&lt;div class="notebook-skip code-snippet">
+&lt;a class="copy" type="button" data-bs-toggle="tooltip" 
data-bs-placement="bottom" title="Copy to clipboard">
+&lt;img src="/images/copy-icon.svg"/>
+&lt;/a>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-go" 
data-lang="go">&lt;span class="nx">sessionWindowedItems&lt;/span> &lt;span 
class="o">:=&lt;/span> &lt;span class="nx">beam&lt;/span>&lt;span 
class="p">.&lt;/span>&lt;span class="nf">WindowInto&lt;/span>&lt;span 
class="p">(&lt;/span>&lt;span class="nx">s&lt;/span>&lt;span 
class="p">,&lt;/span>
+&lt;span class="nx">window&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nf">NewSessions&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="mi">600&lt;/span>&lt;span class="o">*&lt;/span>&lt;span 
class="nx">time&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nx">Second&lt;/span>&lt;span class="p">),&lt;/span>
+&lt;span class="nx">items&lt;/span>&lt;span 
class="p">)&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;/div>
 &lt;p>Note that the sessions are per-key — each key in the collection will 
have its
 own session groupings depending on the data distribution.&lt;/p>
 &lt;h4 id="using-single-global-window">8.3.4. Single global window&lt;/h4>
@@ -8722,6 +8753,16 @@ a single global window for a 
&lt;code>PCollection&lt;/code>:&lt;/p>
 &lt;span class="n">items&lt;/span> &lt;span class="o">|&lt;/span> &lt;span 
class="s1">&amp;#39;window&amp;#39;&lt;/span> &lt;span 
class="o">&amp;gt;&amp;gt;&lt;/span> &lt;span class="n">beam&lt;/span>&lt;span 
class="o">.&lt;/span>&lt;span class="n">WindowInto&lt;/span>&lt;span 
class="p">(&lt;/span>&lt;span class="n">window&lt;/span>&lt;span 
class="o">.&lt;/span>&lt;span class="n">GlobalWindows&lt;/span>&lt;span 
class="p">()))&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
 &lt;/div>
+&lt;div class='language-go snippet'>
+&lt;div class="notebook-skip code-snippet">
+&lt;a class="copy" type="button" data-bs-toggle="tooltip" 
data-bs-placement="bottom" title="Copy to clipboard">
+&lt;img src="/images/copy-icon.svg"/>
+&lt;/a>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-go" 
data-lang="go">&lt;span class="nx">globalWindowedItems&lt;/span> &lt;span 
class="o">:=&lt;/span> &lt;span class="nx">beam&lt;/span>&lt;span 
class="p">.&lt;/span>&lt;span class="nf">WindowInto&lt;/span>&lt;span 
class="p">(&lt;/span>&lt;span class="nx">s&lt;/span>&lt;span 
class="p">,&lt;/span>
+&lt;span class="nx">window&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nf">NewGlobalWindows&lt;/span>&lt;span class="p">(),&lt;/span>
+&lt;span class="nx">items&lt;/span>&lt;span 
class="p">)&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;/div>
 &lt;h3 id="watermarks-and-late-data">8.4. Watermarks and late data&lt;/h3>
 &lt;p>In any data processing system, there is a certain amount of lag between 
the time
 a data event occurs (the &amp;ldquo;event time&amp;rdquo;, determined by the 
timestamp on the data
@@ -8786,6 +8827,17 @@ the end of a window.&lt;/p>
 &lt;span class="n">allowed_lateness&lt;/span>&lt;span 
class="o">=&lt;/span>&lt;span class="n">Duration&lt;/span>&lt;span 
class="p">(&lt;/span>&lt;span class="n">seconds&lt;/span>&lt;span 
class="o">=&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span 
class="o">*&lt;/span>&lt;span class="mi">24&lt;/span>&lt;span 
class="o">*&lt;/span>&lt;span class="mi">60&lt;/span>&lt;span 
class="o">*&lt;/span>&lt;span class="mi">60&lt;/span>&lt;span 
class="p">))&lt;/span> &lt;span class="c1"># 2 days&lt;/sp [...]
 &lt;/div>
 &lt;/div>
+&lt;div class='language-go snippet'>
+&lt;div class="notebook-skip code-snippet">
+&lt;a class="copy" type="button" data-bs-toggle="tooltip" 
data-bs-placement="bottom" title="Copy to clipboard">
+&lt;img src="/images/copy-icon.svg"/>
+&lt;/a>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-go" 
data-lang="go">&lt;span class="nx">windowedItems&lt;/span> &lt;span 
class="o">:=&lt;/span> &lt;span class="nx">beam&lt;/span>&lt;span 
class="p">.&lt;/span>&lt;span class="nf">WindowInto&lt;/span>&lt;span 
class="p">(&lt;/span>&lt;span class="nx">s&lt;/span>&lt;span 
class="p">,&lt;/span>
+&lt;span class="nx">window&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nf">NewFixedWindows&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="mi">1&lt;/span>&lt;span class="o">*&lt;/span>&lt;span 
class="nx">time&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nx">Minute&lt;/span>&lt;span class="p">),&lt;/span> &lt;span 
class="nx">items&lt;/span>&lt;span class="p">,&lt;/span>
+&lt;span class="nx">beam&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nf">AllowedLateness&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="mi">2&lt;/span>&lt;span class="o">*&lt;/span>&lt;span 
class="mi">24&lt;/span>&lt;span class="o">*&lt;/span>&lt;span 
class="nx">time&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nx">Hour&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="c1">// 
2 days
+&lt;/span>&lt;span class="c1">&lt;/span>&lt;span 
class="p">)&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;/div>
 &lt;p>When you set &lt;code>.withAllowedLateness&lt;/code> on a 
&lt;code>PCollection&lt;/code>, that allowed lateness
 propagates forward to any subsequent &lt;code>PCollection&lt;/code> derived 
from the first
 &lt;code>PCollection&lt;/code> you applied allowed lateness to. If you want to 
change the allowed
@@ -8840,7 +8892,29 @@ with a &lt;code>DoFn&lt;/code> to attach the timestamps 
to each element in your
 &lt;span class="n">timestamped_items&lt;/span> &lt;span class="o">=&lt;/span> 
&lt;span class="n">items&lt;/span> &lt;span class="o">|&lt;/span> &lt;span 
class="s1">&amp;#39;timestamp&amp;#39;&lt;/span> &lt;span 
class="o">&amp;gt;&amp;gt;&lt;/span> &lt;span class="n">beam&lt;/span>&lt;span 
class="o">.&lt;/span>&lt;span class="n">ParDo&lt;/span>&lt;span 
class="p">(&lt;/span>&lt;span class="n">AddTimestampDoFn&lt;/span>&lt;span 
class="p">())&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
 &lt;/div>
+&lt;div class='language-go snippet'>
+&lt;div class="notebook-skip code-snippet">
+&lt;a class="copy" type="button" data-bs-toggle="tooltip" 
data-bs-placement="bottom" title="Copy to clipboard">
+&lt;img src="/images/copy-icon.svg"/>
+&lt;/a>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-go" 
data-lang="go">&lt;span class="c1">// AddTimestampDoFn extracts an event time 
from a LogEntry.
+&lt;/span>&lt;span class="c1">&lt;/span>&lt;span class="kd">func&lt;/span> 
&lt;span class="nf">AddTimestampDoFn&lt;/span>&lt;span 
class="p">(&lt;/span>&lt;span class="nx">element&lt;/span> &lt;span 
class="nx">LogEntry&lt;/span>&lt;span class="p">,&lt;/span> &lt;span 
class="nx">emit&lt;/span> &lt;span class="kd">func&lt;/span>&lt;span 
class="p">(&lt;/span>&lt;span class="nx">beam&lt;/span>&lt;span 
class="p">.&lt;/span>&lt;span class="nx">EventTime&lt;/span>&lt;span 
class="p">,&lt;/span> & [...]
+&lt;span class="nx">et&lt;/span> &lt;span class="o">:=&lt;/span> &lt;span 
class="nf">extractEventTime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="nx">element&lt;/span>&lt;span class="p">)&lt;/span>
+&lt;span class="c1">// Defining an emitter with beam.EventTime as the first 
parameter
+&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="c1">// allows the 
DoFn to set the event time for the emitted element.
+&lt;/span>&lt;span class="c1">&lt;/span> &lt;span 
class="nf">emit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="nx">mtime&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nf">FromTime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="nx">et&lt;/span>&lt;span class="p">),&lt;/span> &lt;span 
class="nx">element&lt;/span>&lt;span class="p">)&lt;/span>
+&lt;span class="p">}&lt;/span>
+&lt;span class="c1">// Use the DoFn with ParDo as normal.
+&lt;/span>&lt;span class="c1">&lt;/span>
+&lt;span class="nx">stampedLogs&lt;/span> &lt;span class="o">:=&lt;/span> 
&lt;span class="nx">beam&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nf">ParDo&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="nx">s&lt;/span>&lt;span class="p">,&lt;/span> &lt;span 
class="nx">AddTimestampDoFn&lt;/span>&lt;span class="p">,&lt;/span> &lt;span 
class="nx">unstampedLogs&lt;/span>&lt;span 
class="p">)&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;/div>
 &lt;h2 id="triggers">9. Triggers&lt;/h2>
+&lt;span class="language-go">
+&lt;blockquote>
+&lt;p>&lt;strong>Note:&lt;/strong> The Trigger API in the Beam SDK for Go is 
currently experimental and subject to change.&lt;/p>
+&lt;/blockquote>
+&lt;/span>
 &lt;p>When collecting and grouping data into windows, Beam uses 
&lt;strong>triggers&lt;/strong> to
 determine when to emit the aggregated results of each window (referred to as a
 &lt;em>pane&lt;/em>). If you use Beam&amp;rsquo;s default windowing 
configuration and &lt;a href="#default-trigger">default
@@ -8936,8 +9010,10 @@ firings:&lt;/p>
 &lt;a class="copy" type="button" data-bs-toggle="tooltip" 
data-bs-placement="bottom" title="Copy to clipboard">
 &lt;img src="/images/copy-icon.svg"/>
 &lt;/a>
-&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-go" 
data-lang="go">
-&lt;span class="nx">trigger&lt;/span> &lt;span class="o">:=&lt;/span> &lt;span 
class="nx">window&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nf">TriggerAfterEndOfWindow&lt;/span>&lt;span 
class="p">().&lt;/span>&lt;span class="nf">EarlyFiring&lt;/span>&lt;span 
class="p">(&lt;/span>&lt;span class="nx">window&lt;/span>&lt;span 
class="p">.&lt;/span>&lt;span 
class="nf">TriggerAfterProcessingTime&lt;/span>&lt;span 
class="p">(&lt;/span>&lt;span class="mi">60000&lt;/span>&lt;span clas [...]
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-go" 
data-lang="go">&lt;span class="nx">trigger&lt;/span> &lt;span 
class="o">:=&lt;/span> &lt;span class="nx">window&lt;/span>&lt;span 
class="p">.&lt;/span>&lt;span 
class="nf">TriggerAfterEndOfWindow&lt;/span>&lt;span class="p">().&lt;/span>
+&lt;span class="nf">EarlyFiring&lt;/span>&lt;span 
class="p">(&lt;/span>&lt;span class="nx">window&lt;/span>&lt;span 
class="p">.&lt;/span>&lt;span 
class="nf">TriggerAfterProcessingTime&lt;/span>&lt;span class="p">().&lt;/span>
+&lt;span class="nf">PlusDelay&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="mi">60&lt;/span> &lt;span class="o">*&lt;/span> &lt;span 
class="nx">time&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nx">Second&lt;/span>&lt;span class="p">)).&lt;/span>
+&lt;span class="nf">LateFiring&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="nx">window&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nf">TriggerRepeat&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="nx">window&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nf">TriggerAfterCount&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="mi">1&lt;/span>&lt;span 
class="p">)))&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;h4 id="default-trigger">9.1.1. Default trigger&lt;/h4>
@@ -8992,9 +9068,10 @@ trigger for a &lt;code>PCollection&lt;/code>, which 
emits results one minute aft
 element in that window has been processed. The 
&lt;code>accumulation_mode&lt;/code> parameter
 sets the window&amp;rsquo;s &lt;strong>accumulation mode&lt;/strong>.&lt;/p>
 &lt;p class="language-go">You set the trigger(s) for a 
&lt;code>PCollection&lt;/code> by passing in the 
&lt;code>beam.Trigger&lt;/code> parameter
-when you use the &lt;code>beam.WindowInto&lt;/code> transform. This code 
sample sets an Always
-trigger for a &lt;code>PCollection&lt;/code>, which emits results every time 
an element in that window has been processed. The 
&lt;code>beam.AccumulationMode&lt;/code> parameter
-sets the window&amp;rsquo;s &lt;strong>accumulation mode&lt;/strong>.&lt;/p>
+when you use the &lt;code>beam.WindowInto&lt;/code> transform. This code 
sample sets a time-based
+trigger for a &lt;code>PCollection&lt;/code>, which emits results one minute 
after the first
+element in that window has been processed.
+The &lt;code>beam.AccumulationMode&lt;/code> parameter sets the 
window&amp;rsquo;s &lt;strong>accumulation mode&lt;/strong>.&lt;/p>
 &lt;div class='language-java snippet'>
 &lt;div class="notebook-skip code-snippet">
 &lt;a class="copy" type="button" data-bs-toggle="tooltip" 
data-bs-placement="bottom" title="Copy to clipboard">
@@ -9023,10 +9100,13 @@ sets the window&amp;rsquo;s &lt;strong>accumulation 
mode&lt;/strong>.&lt;/p>
 &lt;a class="copy" type="button" data-bs-toggle="tooltip" 
data-bs-placement="bottom" title="Copy to clipboard">
 &lt;img src="/images/copy-icon.svg"/>
 &lt;/a>
-&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-go" 
data-lang="go">
-&lt;span class="nx">windowSize&lt;/span> &lt;span class="o">:=&lt;/span> 
&lt;span class="mi">10&lt;/span> &lt;span class="o">*&lt;/span> &lt;span 
class="nx">time&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nx">Second&lt;/span>
-&lt;span class="nx">trigger&lt;/span> &lt;span class="o">:=&lt;/span> &lt;span 
class="nx">window&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nf">TriggerAlways&lt;/span>&lt;span class="p">()&lt;/span>
-&lt;span class="nx">beam&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nf">WindowInto&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="nx">s&lt;/span>&lt;span class="p">,&lt;/span> &lt;span 
class="nx">window&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nf">NewFixedWindows&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="nx">windowSize&lt;/span>&lt;span class="p">),&lt;/span> &lt;span 
class="nx">pCollection&lt;/span>&lt;span class="p">,&lt;/span> &lt;span cl [...]
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-go" 
data-lang="go">&lt;span class="nx">windowedItems&lt;/span> &lt;span 
class="o">:=&lt;/span> &lt;span class="nx">beam&lt;/span>&lt;span 
class="p">.&lt;/span>&lt;span class="nf">WindowInto&lt;/span>&lt;span 
class="p">(&lt;/span>&lt;span class="nx">s&lt;/span>&lt;span 
class="p">,&lt;/span>
+&lt;span class="nx">window&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nf">NewFixedWindows&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="mi">1&lt;/span>&lt;span class="o">*&lt;/span>&lt;span 
class="nx">time&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nx">Minute&lt;/span>&lt;span class="p">),&lt;/span> &lt;span 
class="nx">pcollection&lt;/span>&lt;span class="p">,&lt;/span>
+&lt;span class="nx">beam&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nf">Trigger&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="nx">window&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nf">TriggerAfterProcessingTime&lt;/span>&lt;span class="p">().&lt;/span>
+&lt;span class="nf">PlusDelay&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="mi">1&lt;/span>&lt;span class="o">*&lt;/span>&lt;span 
class="nx">time&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nx">Minute&lt;/span>&lt;span class="p">)),&lt;/span>
+&lt;span class="nx">beam&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nf">AllowedLateness&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="mi">30&lt;/span>&lt;span class="o">*&lt;/span>&lt;span 
class="nx">time&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nx">Minute&lt;/span>&lt;span class="p">),&lt;/span>
+&lt;span class="nx">beam&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nf">PanesDiscard&lt;/span>&lt;span class="p">(),&lt;/span>
+&lt;span class="p">)&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;h4 id="window-accumulation-modes">9.4.1. Window accumulation modes&lt;/h4>
@@ -9079,8 +9159,10 @@ passes the end of the window, you can apply an 
&lt;em>allowed lateness&lt;/em> w
 your windowing configuration. This gives your trigger the opportunity to react
 to the late data. If allowed lateness is set, the default trigger will emit new
 results immediately whenever late data arrives.&lt;/p>
-&lt;p>You set the allowed lateness by using 
&lt;code>.withAllowedLateness()&lt;/code> when you set your
-windowing function:&lt;/p>
+&lt;p>You set the allowed lateness by using &lt;span 
class="language-java">&lt;code>.withAllowedLateness()&lt;/code>&lt;/span>
+&lt;span class="language-py">&lt;code>allowed_lateness&lt;/code>&lt;/span>
+&lt;span 
class="language-go">&lt;code>beam.AllowedLateness()&lt;/code>&lt;/span>
+when you set your windowing function:&lt;/p>
 &lt;div class='language-java snippet'>
 &lt;div class="notebook-skip code-snippet">
 &lt;a class="copy" type="button" data-bs-toggle="tooltip" 
data-bs-placement="bottom" title="Copy to clipboard">
@@ -9106,10 +9188,26 @@ windowing function:&lt;/p>
 &lt;span class="o">|&lt;/span> &lt;span 
class="o">...&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
 &lt;/div>
+&lt;div class='language-go snippet'>
+&lt;div class="notebook-skip code-snippet">
+&lt;a class="copy" type="button" data-bs-toggle="tooltip" 
data-bs-placement="bottom" title="Copy to clipboard">
+&lt;img src="/images/copy-icon.svg"/>
+&lt;/a>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-go" 
data-lang="go">&lt;span class="nx">allowedToBeLateItems&lt;/span> &lt;span 
class="o">:=&lt;/span> &lt;span class="nx">beam&lt;/span>&lt;span 
class="p">.&lt;/span>&lt;span class="nf">WindowInto&lt;/span>&lt;span 
class="p">(&lt;/span>&lt;span class="nx">s&lt;/span>&lt;span 
class="p">,&lt;/span>
+&lt;span class="nx">window&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nf">NewFixedWindows&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="mi">1&lt;/span>&lt;span class="o">*&lt;/span>&lt;span 
class="nx">time&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nx">Minute&lt;/span>&lt;span class="p">),&lt;/span> &lt;span 
class="nx">pcollection&lt;/span>&lt;span class="p">,&lt;/span>
+&lt;span class="nx">beam&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nf">Trigger&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="nx">window&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nf">TriggerAfterProcessingTime&lt;/span>&lt;span class="p">().&lt;/span>
+&lt;span class="nf">PlusDelay&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="mi">1&lt;/span>&lt;span class="o">*&lt;/span>&lt;span 
class="nx">time&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nx">Minute&lt;/span>&lt;span class="p">)),&lt;/span>
+&lt;span class="nx">beam&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nf">AllowedLateness&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="mi">30&lt;/span>&lt;span class="o">*&lt;/span>&lt;span 
class="nx">time&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nx">Minute&lt;/span>&lt;span class="p">),&lt;/span>
+&lt;span class="p">)&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;/div>
 &lt;p>This allowed lateness propagates to all &lt;code>PCollection&lt;/code>s 
derived as a result of
 applying transforms to the original &lt;code>PCollection&lt;/code>. If you 
want to change the
 allowed lateness later in your pipeline, you can apply
-&lt;code>Window.configure().withAllowedLateness()&lt;/code> again, 
explicitly.&lt;/p>
+&lt;span 
class="language-java">&lt;code>Window.configure().withAllowedLateness()&lt;/code>&lt;/span>
+&lt;span class="language-py">&lt;code>allowed_lateness&lt;/code>&lt;/span>
+&lt;span 
class="language-go">&lt;code>beam.AllowedLateness()&lt;/code>&lt;/span>
+again, explicitly.&lt;/p>
 &lt;h3 id="composite-triggers">9.5. Composite triggers&lt;/h3>
 &lt;p>You can combine multiple triggers to form &lt;strong>composite 
triggers&lt;/strong>, and can
 specify a trigger to emit results repeatedly, at most once, or under other
@@ -9193,6 +9291,20 @@ trigger stops executing&lt;/li>
 &lt;span class="n">accumulation_mode&lt;/span>&lt;span 
class="o">=&lt;/span>&lt;span class="n">AccumulationMode&lt;/span>&lt;span 
class="o">.&lt;/span>&lt;span class="n">DISCARDING&lt;/span>&lt;span 
class="p">)&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
 &lt;/div>
+&lt;div class='language-go snippet'>
+&lt;div class="notebook-skip code-snippet">
+&lt;a class="copy" type="button" data-bs-toggle="tooltip" 
data-bs-placement="bottom" title="Copy to clipboard">
+&lt;img src="/images/copy-icon.svg"/>
+&lt;/a>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-go" 
data-lang="go">&lt;span class="nx">compositeTriggerItems&lt;/span> &lt;span 
class="o">:=&lt;/span> &lt;span class="nx">beam&lt;/span>&lt;span 
class="p">.&lt;/span>&lt;span class="nf">WindowInto&lt;/span>&lt;span 
class="p">(&lt;/span>&lt;span class="nx">s&lt;/span>&lt;span 
class="p">,&lt;/span>
+&lt;span class="nx">window&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nf">NewFixedWindows&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="mi">1&lt;/span>&lt;span class="o">*&lt;/span>&lt;span 
class="nx">time&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nx">Minute&lt;/span>&lt;span class="p">),&lt;/span> &lt;span 
class="nx">pcollection&lt;/span>&lt;span class="p">,&lt;/span>
+&lt;span class="nx">beam&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nf">Trigger&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="nx">window&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nf">TriggerAfterEndOfWindow&lt;/span>&lt;span class="p">().&lt;/span>
+&lt;span class="nf">LateFiring&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="nx">window&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nf">TriggerAfterProcessingTime&lt;/span>&lt;span class="p">().&lt;/span>
+&lt;span class="nf">PlusDelay&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="mi">10&lt;/span>&lt;span class="o">*&lt;/span>&lt;span 
class="nx">time&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nx">Minute&lt;/span>&lt;span class="p">))),&lt;/span>
+&lt;span class="nx">beam&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nf">AllowedLateness&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="mi">2&lt;/span>&lt;span class="o">*&lt;/span>&lt;span 
class="mi">24&lt;/span>&lt;span class="o">*&lt;/span>&lt;span 
class="nx">time&lt;/span>&lt;span class="p">.&lt;/span>&lt;span 
class="nx">Hour&lt;/span>&lt;span class="p">),&lt;/span>
+&lt;span class="p">)&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;/div>
 &lt;h4 id="other-composite-triggers">9.5.3. Other composite triggers&lt;/h4>
 &lt;p>You can also build other sorts of composite triggers. The following 
example code
 shows a simple composite trigger that fires whenever the pane has at least 100
@@ -14000,7 +14112,7 @@ limitations under the License.
 &lt;span class="nd">@ptransform.PTransform.register_urn&lt;/span>&lt;span 
class="p">(&lt;/span>&lt;span class="n">URN&lt;/span>&lt;span 
class="p">,&lt;/span> &lt;span class="bp">None&lt;/span>&lt;span 
class="p">)&lt;/span>
 &lt;span class="k">class&lt;/span> &lt;span 
class="nc">PythonTransform&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="n">ptransform&lt;/span>&lt;span class="o">.&lt;/span>&lt;span 
class="n">PTransform&lt;/span>&lt;span class="p">):&lt;/span>
 &lt;span class="k">def&lt;/span> &lt;span 
class="fm">__init__&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="bp">self&lt;/span>&lt;span class="p">):&lt;/span>
-&lt;span class="nb">super&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="n">PythonTransform&lt;/span>&lt;span class="p">,&lt;/span> &lt;span 
class="bp">self&lt;/span>&lt;span class="p">)&lt;/span>&lt;span 
class="o">.&lt;/span>&lt;span class="fm">__init__&lt;/span>&lt;span 
class="p">()&lt;/span>
+&lt;span class="nb">super&lt;/span>&lt;span class="p">()&lt;/span>&lt;span 
class="o">.&lt;/span>&lt;span class="fm">__init__&lt;/span>&lt;span 
class="p">()&lt;/span>
 &lt;span class="k">def&lt;/span> &lt;span class="nf">expand&lt;/span>&lt;span 
class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span 
class="p">,&lt;/span> &lt;span class="n">pcoll&lt;/span>&lt;span 
class="p">):&lt;/span>
 &lt;span class="k">return&lt;/span> &lt;span class="p">(&lt;/span>&lt;span 
class="n">pcoll&lt;/span>
 &lt;span class="o">|&lt;/span> &lt;span class="s2">&amp;#34;Input 
preparation&amp;#34;&lt;/span>
diff --git 
a/website/generated-content/documentation/io/developing-io-python/index.html 
b/website/generated-content/documentation/io/developing-io-python/index.html
index bbd41ee..f95205c 100644
--- a/website/generated-content/documentation/io/developing-io-python/index.html
+++ b/website/generated-content/documentation/io/developing-io-python/index.html
@@ -126,7 +126,7 @@ that they are not exposed to end-users. For the source, 
rename <code>CountingSou
 to <code>_CountingSource</code>. Then, create the wrapper 
<code>PTransform</code>, called
 <code>ReadFromCountingSource</code>:</p><div class=snippet><div 
class="notebook-skip code-snippet without_switcher"><a class=copy type=button 
data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img 
src=/images/copy-icon.svg></a><pre><code>class 
ReadFromCountingSource(PTransform):
   def __init__(self, count):
-    super(ReadFromCountingSource, self).__init__()
+    super().__init__()
     self._count = count
 
   def expand(self, pcoll):
@@ -134,7 +134,7 @@ to <code>_CountingSource</code>. Then, create the wrapper 
<code>PTransform</code
   numbers = pipeline | &#39;ProduceNumbers&#39; &gt;&gt; 
ReadFromCountingSource(count)</code></pre></div></div><p>For the sink, rename 
<code>SimpleKVSink</code> to <code>_SimpleKVSink</code>. Then, create the 
wrapper <code>PTransform</code>, called <code>WriteToKVSink</code>:</p><div 
class=snippet><div class="notebook-skip code-snippet without_switcher"><a 
class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom 
title="Copy to clipboard"><img src=/images/copy-icon.svg></a>< [...]
   def __init__(self, simplekv, url, final_table_name):
     self._simplekv = simplekv
-    super(WriteToKVSink, self).__init__()
+    super().__init__()
     self._url = url
     self._final_table_name = final_table_name
 
diff --git 
a/website/generated-content/documentation/patterns/cross-language/index.html 
b/website/generated-content/documentation/patterns/cross-language/index.html
index ae8afd8..b171fdb 100644
--- a/website/generated-content/documentation/patterns/cross-language/index.html
+++ b/website/generated-content/documentation/patterns/cross-language/index.html
@@ -53,7 +53,7 @@ function 
openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfi
 <span class=nd>@ptransform.PTransform.register_urn</span><span 
class=p>(</span><span class=n>URN</span><span class=p>,</span> <span 
class=bp>None</span><span class=p>)</span>
 <span class=k>class</span> <span class=nc>PythonTransform</span><span 
class=p>(</span><span class=n>ptransform</span><span class=o>.</span><span 
class=n>PTransform</span><span class=p>):</span>
     <span class=k>def</span> <span class=fm>__init__</span><span 
class=p>(</span><span class=bp>self</span><span class=p>):</span>
-        <span class=nb>super</span><span class=p>(</span><span 
class=n>PythonTransform</span><span class=p>,</span> <span 
class=bp>self</span><span class=p>)</span><span class=o>.</span><span 
class=fm>__init__</span><span class=p>()</span>
+        <span class=nb>super</span><span class=p>()</span><span 
class=o>.</span><span class=fm>__init__</span><span class=p>()</span>
 
     <span class=k>def</span> <span class=nf>expand</span><span 
class=p>(</span><span class=bp>self</span><span class=p>,</span> <span 
class=n>pcoll</span><span class=p>):</span>
         <span class=k>return</span> <span class=p>(</span><span 
class=n>pcoll</span>
@@ -96,7 +96,7 @@ function 
openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfi
   <span class=n>logging</span><span class=o>.</span><span 
class=n>getLogger</span><span class=p>()</span><span class=o>.</span><span 
class=n>setLevel</span><span class=p>(</span><span class=n>logging</span><span 
class=o>.</span><span class=n>INFO</span><span class=p>)</span>
   <span class=n>main</span><span class=p>(</span><span class=n>sys</span><span 
class=o>.</span><span class=n>argv</span><span 
class=p>)</span></code></pre></div></div></div><h2 
id=how-to-run-the-cross-language-pipeline>How to run the cross-language 
pipeline?</h2><p>In this section, the steps to run a cross-language pipeline 
are set out:</p><ol><li><p>Start the <strong>expansion service</strong> with 
your Python transforms: <code>python expansion_service.py -p 
9097</code></p></li><li><p>S [...]
 <code>./gradlew :runners:spark:job-server:runShadow</code></li><li>Using the 
pre-build Docker container:
-<code>docker run -net=host 
apache/beam_spark_job_server</code></li></ul></li><li><p><strong>Run 
pipeline</strong>: <code>mvn exec:java -Dexec.mainClass=CrossLanguagePipeline \ 
-Pportable-runner \ -Dexec.args=" \ --runner=PortableRunner \ 
--jobEndpoint=localhost:8099 \ --useExternal=true \ 
--expansionServiceURL=localhost:9097 \ 
--experiments=beam_fn_api"</code></p></li></ol><div class=feedback><p 
class=update>Last updated on 2020/12/25</p><h3>Have you found everything you 
were looking for [...]
+<code>docker run -net=host 
apache/beam_spark_job_server</code></li></ul></li><li><p><strong>Run 
pipeline</strong>: <code>mvn exec:java -Dexec.mainClass=CrossLanguagePipeline \ 
-Pportable-runner \ -Dexec.args=" \ --runner=PortableRunner \ 
--jobEndpoint=localhost:8099 \ --useExternal=true \ 
--expansionServiceURL=localhost:9097 \ 
--experiments=beam_fn_api"</code></p></li></ol><div class=feedback><p 
class=update>Last updated on 2021/10/04</p><h3>Have you found everything you 
were looking for [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam 
logo, and the Apache feather logo are either registered trademarks or 
trademarks of The Apache Software Foundation. All other products or name brands 
are trademarks of their respective holders, including The Apache Software 
Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git 
a/website/generated-content/documentation/programming-guide/index.html 
b/website/generated-content/documentation/programming-guide/index.html
index 9cc9792..c092a4c 100644
--- a/website/generated-content/documentation/programming-guide/index.html
+++ b/website/generated-content/documentation/programming-guide/index.html
@@ -1098,7 +1098,8 @@ applying <code>Combine</code>:</p><ul><li>Specify 
<code>.withoutDefaults</code>,
 when used as a side input. You&rsquo;ll generally only need to use this option 
if
 the result of your pipeline&rsquo;s <code>Combine</code> is to be used as a 
side input later in
 the pipeline.</li></ul></span><p class=language-go>If your 
<code>PCollection</code> uses any non-global windowing function, the Beam Go SDK
-behaves the same way as with global windowing.</p><h5 
id=combining-values-in-a-keyed-pcollection>4.2.4.6. Combining values in a keyed 
PCollection</h5><p>After creating a keyed PCollection (for example, by using a 
<code>GroupByKey</code>
+behaves the same way as with global windowing. Windows that are empty in the 
input
+<code>PCollection</code> will likewise be empty in the output 
collection.</p><h5 id=combining-values-in-a-keyed-pcollection>4.2.4.6. 
Combining values in a keyed PCollection</h5><p>After creating a keyed 
PCollection (for example, by using a <code>GroupByKey</code>
 transform), a common pattern is to combine the collection of values associated
 with each key into a single, merged value. Drawing on the previous example from
 <code>GroupByKey</code>, a key-grouped <code>PCollection</code> called 
<code>groupedWords</code> looks like this:</p><pre><code>  cat, [1,5,9]
@@ -1230,10 +1231,10 @@ run multiple times. As such, you should be cautious 
about including things like
 state dependency in your user code.</p><p>In general, your user code must 
fulfill at least these requirements:</p><ul><li>Your function object must be 
<strong>serializable</strong>.</li><li>Your function object must be 
<strong>thread-compatible</strong>, and be aware that <em>the
 Beam SDKs are not thread-safe</em>.</li></ul><p>In addition, it&rsquo;s 
recommended that you make your function object <strong>idempotent</strong>.
 Non-idempotent functions are supported by Beam, but require additional
-thought to ensure correctness when there are external side effects.</p><span 
class="language-java language-py"><blockquote><p><strong>Note:</strong> These 
requirements apply to subclasses of <code>DoFn</code></span> (a function object
+thought to ensure correctness when there are external side effects.</p><span 
class="language-java language-py"><blockquote><p><strong>Note:</strong> These 
requirements apply to subclasses of <code>DoFn</code>(a function object
 used with the <a href=#pardo>ParDo</a> transform), <code>CombineFn</code> (a 
function object used
 with the <a href=#combine>Combine</a> transform), and <code>WindowFn</code> (a 
function object
-used with the <a href=#windowing>Window</a> 
transform).</p></blockquote></span><span 
class=language-go><blockquote><p><strong>Note:</strong> These requirements 
apply to <code>DoFn</code>s</span> (a function object
+used with the <a href=#windowing>Window</a> 
transform).</p></blockquote></span><span 
class=language-go><blockquote><p><strong>Note:</strong> These requirements 
apply to <code>DoFn</code>s (a function object
 used with the <a href=#pardo>ParDo</a> transform), <code>CombineFn</code>s (a 
function object used
 with the <a href=#combine>Combine</a> transform), and <code>WindowFn</code>s 
(a function object
 used with the <a href=#windowing>Window</a> 
transform).</p></blockquote></span><h4 id=user-code-serializability>4.3.1. 
Serializability</h4><p>Any function object you provide to a transform must be 
<strong>fully serializable</strong>.
@@ -2546,7 +2547,7 @@ for that <code>PCollection</code>. The 
<code>GroupByKey</code> transform groups
 <code>PCollection</code> by both key and window, based on the windowing 
function. The
 subsequent <code>ParDo</code> transform gets applied multiple times per key, 
once for each
 window.</p><h3 id=provided-windowing-functions>8.2. Provided windowing 
functions</h3><p>You can define different kinds of windows to divide the 
elements of your
-<code>PCollection</code>. Beam provides several windowing functions, 
including:</p><ul><li>Fixed Time Windows</li><li>Sliding Time 
Windows</li><li>Per-Session Windows</li><li>Single Global 
Window</li><li>Calendar-based Windows (not supported by the Beam SDK for 
Python)</li></ul><p>You can also define your own <code>WindowFn</code> if you 
have a more complex need.</p><p>Note that each element can logically belong to 
more than one window, depending
+<code>PCollection</code>. Beam provides several windowing functions, 
including:</p><ul><li>Fixed Time Windows</li><li>Sliding Time 
Windows</li><li>Per-Session Windows</li><li>Single Global 
Window</li><li>Calendar-based Windows (not supported by the Beam SDK for Python 
or Go)</li></ul><p>You can also define your own <code>WindowFn</code> if you 
have a more complex need.</p><p>Note that each element can logically belong to 
more than one window, depending
 on the windowing function you use. Sliding time windowing, for example, creates
 overlapping windows wherein a single element can be assigned to multiple
 windows.</p><h4 id=fixed-time-windows>8.2.1. Fixed time windows</h4><p>The 
simplest form of windowing is using <strong>fixed time windows</strong>: given a
@@ -2594,26 +2595,34 @@ into fixed windows, each 60 seconds in length:</p><div 
class="language-java snip
     <span class=n>PCollection</span><span class=o>&lt;</span><span 
class=n>String</span><span class=o>&gt;</span> <span 
class=n>fixedWindowedItems</span> <span class=o>=</span> <span 
class=n>items</span><span class=o>.</span><span class=na>apply</span><span 
class=o>(</span>
         <span class=n>Window</span><span class=o>.&lt;</span><span 
class=n>String</span><span class=o>&gt;</span><span class=n>into</span><span 
class=o>(</span><span class=n>FixedWindows</span><span class=o>.</span><span 
class=na>of</span><span class=o>(</span><span class=n>Duration</span><span 
class=o>.</span><span class=na>standardSeconds</span><span 
class=o>(</span><span class=n>60</span><span 
class=o>))));</span></code></pre></div></div></div><div class="language-py 
snippet"><div cla [...]
 <span class=n>fixed_windowed_items</span> <span class=o>=</span> <span 
class=p>(</span>
-    <span class=n>items</span> <span class=o>|</span> <span 
class=s1>&#39;window&#39;</span> <span class=o>&gt;&gt;</span> <span 
class=n>beam</span><span class=o>.</span><span class=n>WindowInto</span><span 
class=p>(</span><span class=n>window</span><span class=o>.</span><span 
class=n>FixedWindows</span><span class=p>(</span><span class=mi>60</span><span 
class=p>)))</span></code></pre></div></div></div><h4 
id=using-sliding-time-windows>8.3.2. Sliding time windows</h4><p>The following 
exa [...]
+    <span class=n>items</span> <span class=o>|</span> <span 
class=s1>&#39;window&#39;</span> <span class=o>&gt;&gt;</span> <span 
class=n>beam</span><span class=o>.</span><span class=n>WindowInto</span><span 
class=p>(</span><span class=n>window</span><span class=o>.</span><span 
class=n>FixedWindows</span><span class=p>(</span><span class=mi>60</span><span 
class=p>)))</span></code></pre></div></div></div><div class="language-go 
snippet"><div class="notebook-skip code-snippet"><a class=copy [...]
+       <span class=nx>window</span><span class=p>.</span><span 
class=nf>NewFixedWindows</span><span class=p>(</span><span 
class=mi>60</span><span class=o>*</span><span class=nx>time</span><span 
class=p>.</span><span class=nx>Second</span><span class=p>),</span>
+       <span class=nx>items</span><span 
class=p>)</span></code></pre></div></div></div><h4 
id=using-sliding-time-windows>8.3.2. Sliding time windows</h4><p>The following 
example code shows how to apply <code>Window</code> to divide a 
<code>PCollection</code>
 into sliding time windows. Each window is 30 seconds in length, and a new 
window
 begins every five seconds:</p><div class="language-java snippet"><div 
class="notebook-skip code-snippet"><a class=copy type=button 
data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img 
src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code 
class=language-java data-lang=java>    <span class=n>PCollection</span><span 
class=o>&lt;</span><span class=n>String</span><span class=o>&gt;</span> <span 
class=n>items</span> <span class=o>=</span> <span cl [...]
     <span class=n>PCollection</span><span class=o>&lt;</span><span 
class=n>String</span><span class=o>&gt;</span> <span 
class=n>slidingWindowedItems</span> <span class=o>=</span> <span 
class=n>items</span><span class=o>.</span><span class=na>apply</span><span 
class=o>(</span>
         <span class=n>Window</span><span class=o>.&lt;</span><span 
class=n>String</span><span class=o>&gt;</span><span class=n>into</span><span 
class=o>(</span><span class=n>SlidingWindows</span><span class=o>.</span><span 
class=na>of</span><span class=o>(</span><span class=n>Duration</span><span 
class=o>.</span><span class=na>standardSeconds</span><span 
class=o>(</span><span class=n>30</span><span class=o>)).</span><span 
class=na>every</span><span class=o>(</span><span class=n>Duration< [...]
 <span class=n>sliding_windowed_items</span> <span class=o>=</span> <span 
class=p>(</span>
-    <span class=n>items</span> <span class=o>|</span> <span 
class=s1>&#39;window&#39;</span> <span class=o>&gt;&gt;</span> <span 
class=n>beam</span><span class=o>.</span><span class=n>WindowInto</span><span 
class=p>(</span><span class=n>window</span><span class=o>.</span><span 
class=n>SlidingWindows</span><span class=p>(</span><span 
class=mi>30</span><span class=p>,</span> <span class=mi>5</span><span 
class=p>)))</span></code></pre></div></div></div><h4 
id=using-session-windows>8.3.3. Se [...]
+    <span class=n>items</span> <span class=o>|</span> <span 
class=s1>&#39;window&#39;</span> <span class=o>&gt;&gt;</span> <span 
class=n>beam</span><span class=o>.</span><span class=n>WindowInto</span><span 
class=p>(</span><span class=n>window</span><span class=o>.</span><span 
class=n>SlidingWindows</span><span class=p>(</span><span 
class=mi>30</span><span class=p>,</span> <span class=mi>5</span><span 
class=p>)))</span></code></pre></div></div></div><div class="language-go 
snippet"><div  [...]
+       <span class=nx>window</span><span class=p>.</span><span 
class=nf>NewSlidingWindows</span><span class=p>(</span><span 
class=mi>5</span><span class=o>*</span><span class=nx>time</span><span 
class=p>.</span><span class=nx>Second</span><span class=p>,</span> <span 
class=mi>30</span><span class=o>*</span><span class=nx>time</span><span 
class=p>.</span><span class=nx>Second</span><span class=p>),</span>
+       <span class=nx>items</span><span 
class=p>)</span></code></pre></div></div></div><h4 
id=using-session-windows>8.3.3. Session windows</h4><p>The following example 
code shows how to apply <code>Window</code> to divide a <code>PCollection</code>
 into session windows, where each session must be separated by a time gap of at
 least 10 minutes (600 seconds):</p><div class="language-java snippet"><div 
class="notebook-skip code-snippet"><a class=copy type=button 
data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img 
src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code 
class=language-java data-lang=java>    <span class=n>PCollection</span><span 
class=o>&lt;</span><span class=n>String</span><span class=o>&gt;</span> <span 
class=n>items</span> <span class=o>=</span> <sp [...]
     <span class=n>PCollection</span><span class=o>&lt;</span><span 
class=n>String</span><span class=o>&gt;</span> <span 
class=n>sessionWindowedItems</span> <span class=o>=</span> <span 
class=n>items</span><span class=o>.</span><span class=na>apply</span><span 
class=o>(</span>
         <span class=n>Window</span><span class=o>.&lt;</span><span 
class=n>String</span><span class=o>&gt;</span><span class=n>into</span><span 
class=o>(</span><span class=n>Sessions</span><span class=o>.</span><span 
class=na>withGapDuration</span><span class=o>(</span><span 
class=n>Duration</span><span class=o>.</span><span 
class=na>standardSeconds</span><span class=o>(</span><span 
class=n>600</span><span class=o>))));</span></code></pre></div></div></div><div 
class="language-py snippet [...]
 <span class=n>session_windowed_items</span> <span class=o>=</span> <span 
class=p>(</span>
-    <span class=n>items</span> <span class=o>|</span> <span 
class=s1>&#39;window&#39;</span> <span class=o>&gt;&gt;</span> <span 
class=n>beam</span><span class=o>.</span><span class=n>WindowInto</span><span 
class=p>(</span><span class=n>window</span><span class=o>.</span><span 
class=n>Sessions</span><span class=p>(</span><span class=mi>10</span> <span 
class=o>*</span> <span class=mi>60</span><span 
class=p>)))</span></code></pre></div></div></div><p>Note that the sessions are 
per-key — ea [...]
+    <span class=n>items</span> <span class=o>|</span> <span 
class=s1>&#39;window&#39;</span> <span class=o>&gt;&gt;</span> <span 
class=n>beam</span><span class=o>.</span><span class=n>WindowInto</span><span 
class=p>(</span><span class=n>window</span><span class=o>.</span><span 
class=n>Sessions</span><span class=p>(</span><span class=mi>10</span> <span 
class=o>*</span> <span class=mi>60</span><span 
class=p>)))</span></code></pre></div></div></div><div class="language-go 
snippet"><div clas [...]
+       <span class=nx>window</span><span class=p>.</span><span 
class=nf>NewSessions</span><span class=p>(</span><span class=mi>600</span><span 
class=o>*</span><span class=nx>time</span><span class=p>.</span><span 
class=nx>Second</span><span class=p>),</span>
+       <span class=nx>items</span><span 
class=p>)</span></code></pre></div></div></div><p>Note that the sessions are 
per-key — each key in the collection will have its
 own session groupings depending on the data distribution.</p><h4 
id=using-single-global-window>8.3.4. Single global window</h4><p>If your 
<code>PCollection</code> is bounded (the size is fixed), you can assign all the
 elements to a single global window. The following example code shows how to set
 a single global window for a <code>PCollection</code>:</p><div 
class="language-java snippet"><div class="notebook-skip code-snippet"><a 
class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom 
title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div 
class=highlight><pre class=chroma><code class=language-java data-lang=java>    
<span class=n>PCollection</span><span class=o>&lt;</span><span 
class=n>String</span><span class=o>&gt;</span> <span class=n>items</span> <sp 
[...]
     <span class=n>PCollection</span><span class=o>&lt;</span><span 
class=n>String</span><span class=o>&gt;</span> <span class=n>batchItems</span> 
<span class=o>=</span> <span class=n>items</span><span class=o>.</span><span 
class=na>apply</span><span class=o>(</span>
         <span class=n>Window</span><span class=o>.&lt;</span><span 
class=n>String</span><span class=o>&gt;</span><span class=n>into</span><span 
class=o>(</span><span class=k>new</span> <span 
class=n>GlobalWindows</span><span 
class=o>()));</span></code></pre></div></div></div><div class="language-py 
snippet"><div class="notebook-skip code-snippet"><a class=copy type=button 
data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img 
src=/images/copy-icon.svg></a><div cla [...]
 <span class=n>global_windowed_items</span> <span class=o>=</span> <span 
class=p>(</span>
-    <span class=n>items</span> <span class=o>|</span> <span 
class=s1>&#39;window&#39;</span> <span class=o>&gt;&gt;</span> <span 
class=n>beam</span><span class=o>.</span><span class=n>WindowInto</span><span 
class=p>(</span><span class=n>window</span><span class=o>.</span><span 
class=n>GlobalWindows</span><span 
class=p>()))</span></code></pre></div></div></div><h3 
id=watermarks-and-late-data>8.4. Watermarks and late data</h3><p>In any data 
processing system, there is a certain amount of l [...]
+    <span class=n>items</span> <span class=o>|</span> <span 
class=s1>&#39;window&#39;</span> <span class=o>&gt;&gt;</span> <span 
class=n>beam</span><span class=o>.</span><span class=n>WindowInto</span><span 
class=p>(</span><span class=n>window</span><span class=o>.</span><span 
class=n>GlobalWindows</span><span 
class=p>()))</span></code></pre></div></div></div><div class="language-go 
snippet"><div class="notebook-skip code-snippet"><a class=copy type=button 
data-bs-toggle=tooltip data-bs- [...]
+       <span class=nx>window</span><span class=p>.</span><span 
class=nf>NewGlobalWindows</span><span class=p>(),</span>
+       <span class=nx>items</span><span 
class=p>)</span></code></pre></div></div></div><h3 
id=watermarks-and-late-data>8.4. Watermarks and late data</h3><p>In any data 
processing system, there is a certain amount of lag between the time
 a data event occurs (the &ldquo;event time&rdquo;, determined by the timestamp 
on the data
 element itself) and the time the actual data element gets processed at any 
stage
 in your pipeline (the &ldquo;processing time&rdquo;, determined by the clock 
on the system
@@ -2652,7 +2661,10 @@ the end of a window.</p><div class="language-java 
snippet"><div class="notebook-
               <span class=n>trigger</span><span class=o>=</span><span 
class=n>trigger_fn</span><span class=p>,</span>
               <span class=n>accumulation_mode</span><span 
class=o>=</span><span class=n>accumulation_mode</span><span class=p>,</span>
               <span class=n>timestamp_combiner</span><span 
class=o>=</span><span class=n>timestamp_combiner</span><span class=p>,</span>
-              <span class=n>allowed_lateness</span><span class=o>=</span><span 
class=n>Duration</span><span class=p>(</span><span class=n>seconds</span><span 
class=o>=</span><span class=mi>2</span><span class=o>*</span><span 
class=mi>24</span><span class=o>*</span><span class=mi>60</span><span 
class=o>*</span><span class=mi>60</span><span class=p>))</span> <span 
class=c1># 2 days</span></code></pre></div></div></div><p>When you set 
<code>.withAllowedLateness</code> on a <code>PCollection [...]
+              <span class=n>allowed_lateness</span><span class=o>=</span><span 
class=n>Duration</span><span class=p>(</span><span class=n>seconds</span><span 
class=o>=</span><span class=mi>2</span><span class=o>*</span><span 
class=mi>24</span><span class=o>*</span><span class=mi>60</span><span 
class=o>*</span><span class=mi>60</span><span class=p>))</span> <span 
class=c1># 2 days</span></code></pre></div></div></div><div class="language-go 
snippet"><div class="notebook-skip code-snippet" [...]
+       <span class=nx>window</span><span class=p>.</span><span 
class=nf>NewFixedWindows</span><span class=p>(</span><span 
class=mi>1</span><span class=o>*</span><span class=nx>time</span><span 
class=p>.</span><span class=nx>Minute</span><span class=p>),</span> <span 
class=nx>items</span><span class=p>,</span>
+       <span class=nx>beam</span><span class=p>.</span><span 
class=nf>AllowedLateness</span><span class=p>(</span><span 
class=mi>2</span><span class=o>*</span><span class=mi>24</span><span 
class=o>*</span><span class=nx>time</span><span class=p>.</span><span 
class=nx>Hour</span><span class=p>),</span> <span class=c1>// 2 days
+</span><span class=c1></span><span 
class=p>)</span></code></pre></div></div></div><p>When you set 
<code>.withAllowedLateness</code> on a <code>PCollection</code>, that allowed 
lateness
 propagates forward to any subsequent <code>PCollection</code> derived from the 
first
 <code>PCollection</code> you applied allowed lateness to. If you want to 
change the allowed
 lateness later in your pipeline, you must do so explicitly by applying
@@ -2685,7 +2697,19 @@ with a <code>DoFn</code> to attach the timestamps to 
each element in your <code>
     <span class=c1># TimestampedValue.</span>
     <span class=k>yield</span> <span class=n>beam</span><span 
class=o>.</span><span class=n>window</span><span class=o>.</span><span 
class=n>TimestampedValue</span><span class=p>(</span><span 
class=n>element</span><span class=p>,</span> <span 
class=n>unix_timestamp</span><span class=p>)</span>
 
-<span class=n>timestamped_items</span> <span class=o>=</span> <span 
class=n>items</span> <span class=o>|</span> <span 
class=s1>&#39;timestamp&#39;</span> <span class=o>&gt;&gt;</span> <span 
class=n>beam</span><span class=o>.</span><span class=n>ParDo</span><span 
class=p>(</span><span class=n>AddTimestampDoFn</span><span 
class=p>())</span></code></pre></div></div></div><h2 id=triggers>9. 
Triggers</h2><p>When collecting and grouping data into windows, Beam uses 
<strong>triggers</strong> to
+<span class=n>timestamped_items</span> <span class=o>=</span> <span 
class=n>items</span> <span class=o>|</span> <span 
class=s1>&#39;timestamp&#39;</span> <span class=o>&gt;&gt;</span> <span 
class=n>beam</span><span class=o>.</span><span class=n>ParDo</span><span 
class=p>(</span><span class=n>AddTimestampDoFn</span><span 
class=p>())</span></code></pre></div></div></div><div class="language-go 
snippet"><div class="notebook-skip code-snippet"><a class=copy type=button 
data-bs-toggle=tooltip [...]
+</span><span class=c1></span><span class=kd>func</span> <span 
class=nf>AddTimestampDoFn</span><span class=p>(</span><span 
class=nx>element</span> <span class=nx>LogEntry</span><span class=p>,</span> 
<span class=nx>emit</span> <span class=kd>func</span><span 
class=p>(</span><span class=nx>beam</span><span class=p>.</span><span 
class=nx>EventTime</span><span class=p>,</span> <span 
class=nx>LogEntry</span><span class=p>))</span> <span class=p>{</span>
+       <span class=nx>et</span> <span class=o>:=</span> <span 
class=nf>extractEventTime</span><span class=p>(</span><span 
class=nx>element</span><span class=p>)</span>
+       <span class=c1>// Defining an emitter with beam.EventTime as the first 
parameter
+</span><span class=c1></span>  <span class=c1>// allows the DoFn to set the 
event time for the emitted element.
+</span><span class=c1></span>  <span class=nf>emit</span><span 
class=p>(</span><span class=nx>mtime</span><span class=p>.</span><span 
class=nf>FromTime</span><span class=p>(</span><span class=nx>et</span><span 
class=p>),</span> <span class=nx>element</span><span class=p>)</span>
+<span class=p>}</span>
+
+
+
+<span class=c1>// Use the DoFn with ParDo as normal.
+</span><span class=c1></span>
+<span class=nx>stampedLogs</span> <span class=o>:=</span> <span 
class=nx>beam</span><span class=p>.</span><span class=nf>ParDo</span><span 
class=p>(</span><span class=nx>s</span><span class=p>,</span> <span 
class=nx>AddTimestampDoFn</span><span class=p>,</span> <span 
class=nx>unstampedLogs</span><span 
class=p>)</span></code></pre></div></div></div><h2 id=triggers>9. 
Triggers</h2><span class=language-go><blockquote><p><strong>Note:</strong> The 
Trigger API in the Beam SDK for Go is curren [...]
 determine when to emit the aggregated results of each window (referred to as a
 <em>pane</em>). If you use Beam&rsquo;s default windowing configuration and <a 
href=#default-trigger>default
 trigger</a>, Beam outputs the aggregated result when it
@@ -2734,8 +2758,10 @@ firings:</p><div class="language-java snippet"><div 
class="notebook-skip code-sn
               <span class=o>.</span><span class=na>plusDuration</span><span 
class=o>(</span><span class=n>Duration</span><span class=o>.</span><span 
class=na>standardMinutes</span><span class=o>(</span><span 
class=n>1</span><span class=o>))</span>
       <span class=c1>// Fire on any late data so the bill can be corrected.
 </span><span class=c1></span>      <span class=o>.</span><span 
class=na>withLateFirings</span><span class=o>(</span><span 
class=n>AfterPane</span><span class=o>.</span><span 
class=na>elementCountAtLeast</span><span class=o>(</span><span 
class=n>1</span><span class=o>))</span></code></pre></div></div></div><div 
class="language-py snippet"><div class="notebook-skip code-snippet"><a 
class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom 
title="Copy to clipboard"><img src=/im [...]
-    <span class=n>early</span><span class=o>=</span><span 
class=n>AfterProcessingTime</span><span class=p>(</span><span 
class=n>delay</span><span class=o>=</span><span class=mi>1</span> <span 
class=o>*</span> <span class=mi>60</span><span class=p>),</span> <span 
class=n>late</span><span class=o>=</span><span class=n>AfterCount</span><span 
class=p>(</span><span class=mi>1</span><span 
class=p>))</span></code></pre></div></div></div><div class="language-go 
snippet"><div class="notebook-skip [...]
-<span class=nx>trigger</span> <span class=o>:=</span> <span 
class=nx>window</span><span class=p>.</span><span 
class=nf>TriggerAfterEndOfWindow</span><span class=p>().</span><span 
class=nf>EarlyFiring</span><span class=p>(</span><span 
class=nx>window</span><span class=p>.</span><span 
class=nf>TriggerAfterProcessingTime</span><span class=p>(</span><span 
class=mi>60000</span><span class=p>)).</span><span 
class=nf>LateFiring</span><span class=p>(</span><span 
class=nx>window</span><span class [...]
+    <span class=n>early</span><span class=o>=</span><span 
class=n>AfterProcessingTime</span><span class=p>(</span><span 
class=n>delay</span><span class=o>=</span><span class=mi>1</span> <span 
class=o>*</span> <span class=mi>60</span><span class=p>),</span> <span 
class=n>late</span><span class=o>=</span><span class=n>AfterCount</span><span 
class=p>(</span><span class=mi>1</span><span 
class=p>))</span></code></pre></div></div></div><div class="language-go 
snippet"><div class="notebook-skip [...]
+       <span class=nf>EarlyFiring</span><span class=p>(</span><span 
class=nx>window</span><span class=p>.</span><span 
class=nf>TriggerAfterProcessingTime</span><span class=p>().</span>
+               <span class=nf>PlusDelay</span><span class=p>(</span><span 
class=mi>60</span> <span class=o>*</span> <span class=nx>time</span><span 
class=p>.</span><span class=nx>Second</span><span class=p>)).</span>
+       <span class=nf>LateFiring</span><span class=p>(</span><span 
class=nx>window</span><span class=p>.</span><span 
class=nf>TriggerRepeat</span><span class=p>(</span><span 
class=nx>window</span><span class=p>.</span><span 
class=nf>TriggerAfterCount</span><span class=p>(</span><span 
class=mi>1</span><span class=p>)))</span></code></pre></div></div></div><h4 
id=default-trigger>9.1.1. Default trigger</h4><p>The default trigger for a 
<code>PCollection</code> is based on event time, and emits the
 results of the window when the Beam&rsquo;s watermark passes the end of the 
window,
 and then fires each time late data arrives.</p><p>However, if you are using 
both the default windowing configuration and the
 default trigger, the default trigger emits exactly once, and late data is
@@ -2774,19 +2800,23 @@ when you use the <code>WindowInto</code> transform. 
This code sample sets a time
 trigger for a <code>PCollection</code>, which emits results one minute after 
the first
 element in that window has been processed. The <code>accumulation_mode</code> 
parameter
 sets the window&rsquo;s <strong>accumulation mode</strong>.</p><p 
class=language-go>You set the trigger(s) for a <code>PCollection</code> by 
passing in the <code>beam.Trigger</code> parameter
-when you use the <code>beam.WindowInto</code> transform. This code sample sets 
an Always
-trigger for a <code>PCollection</code>, which emits results every time an 
element in that window has been processed. The 
<code>beam.AccumulationMode</code> parameter
-sets the window&rsquo;s <strong>accumulation mode</strong>.</p><div 
class="language-java snippet"><div class="notebook-skip code-snippet"><a 
class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom 
title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div 
class=highlight><pre class=chroma><code class=language-java data-lang=java>  
<span class=n>PCollection</span><span class=o>&lt;</span><span 
class=n>String</span><span class=o>&gt;</span> <span class=n>pc</span> <sp [...]
+when you use the <code>beam.WindowInto</code> transform. This code sample sets 
a time-based
+trigger for a <code>PCollection</code>, which emits results one minute after 
the first
+element in that window has been processed.
+The <code>beam.AccumulationMode</code> parameter sets the window&rsquo;s 
<strong>accumulation mode</strong>.</p><div class="language-java snippet"><div 
class="notebook-skip code-snippet"><a class=copy type=button 
data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img 
src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code 
class=language-java data-lang=java>  <span class=n>PCollection</span><span 
class=o>&lt;</span><span class=n>String</span><spa [...]
   <span class=n>pc</span><span class=o>.</span><span 
class=na>apply</span><span class=o>(</span><span class=n>Window</span><span 
class=o>.&lt;</span><span class=n>String</span><span class=o>&gt;</span><span 
class=n>into</span><span class=o>(</span><span class=n>FixedWindows</span><span 
class=o>.</span><span class=na>of</span><span class=o>(</span><span 
class=n>1</span><span class=o>,</span> <span class=n>TimeUnit</span><span 
class=o>.</span><span class=na>MINUTES</span><span class=o>))</span>
                                <span class=o>.</span><span 
class=na>triggering</span><span class=o>(</span><span 
class=n>AfterProcessingTime</span><span class=o>.</span><span 
class=na>pastFirstElementInPane</span><span class=o>()</span>
                                                               <span 
class=o>.</span><span class=na>plusDelayOf</span><span class=o>(</span><span 
class=n>Duration</span><span class=o>.</span><span 
class=na>standardMinutes</span><span class=o>(</span><span 
class=n>1</span><span class=o>)))</span>
                                <span class=o>.</span><span 
class=na>discardingFiredPanes</span><span 
class=o>());</span></code></pre></div></div></div><div class="language-py 
snippet"><div class="notebook-skip code-snippet"><a class=copy type=button 
data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img 
src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code 
class=language-py data-lang=py>  <span class=n>pcollection</span> <span 
class=o>|</span> [...]
     <span class=n>FixedWindows</span><span class=p>(</span><span 
class=mi>1</span> <span class=o>*</span> <span class=mi>60</span><span 
class=p>),</span>
     <span class=n>trigger</span><span class=o>=</span><span 
class=n>AfterProcessingTime</span><span class=p>(</span><span class=mi>1</span> 
<span class=o>*</span> <span class=mi>60</span><span class=p>),</span>
-    <span class=n>accumulation_mode</span><span class=o>=</span><span 
class=n>AccumulationMode</span><span class=o>.</span><span 
class=n>DISCARDING</span><span 
class=p>)</span></code></pre></div></div></div><div class="language-go 
snippet"><div class="notebook-skip code-snippet"><a class=copy type=button 
data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img 
src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code 
class=language-go data-lang=go>  
-<span class=nx>windowSize</span> <span class=o>:=</span> <span 
class=mi>10</span> <span class=o>*</span> <span class=nx>time</span><span 
class=p>.</span><span class=nx>Second</span>
-<span class=nx>trigger</span> <span class=o>:=</span> <span 
class=nx>window</span><span class=p>.</span><span 
class=nf>TriggerAlways</span><span class=p>()</span>
-<span class=nx>beam</span><span class=p>.</span><span 
class=nf>WindowInto</span><span class=p>(</span><span class=nx>s</span><span 
class=p>,</span> <span class=nx>window</span><span class=p>.</span><span 
class=nf>NewFixedWindows</span><span class=p>(</span><span 
class=nx>windowSize</span><span class=p>),</span> <span 
class=nx>pCollection</span><span class=p>,</span> <span 
class=nx>beam</span><span class=p>.</span><span class=nf>Trigger</span><span 
class=p>(</span><span class=nx>trigger</ [...]
+    <span class=n>accumulation_mode</span><span class=o>=</span><span 
class=n>AccumulationMode</span><span class=o>.</span><span 
class=n>DISCARDING</span><span 
class=p>)</span></code></pre></div></div></div><div class="language-go 
snippet"><div class="notebook-skip code-snippet"><a class=copy type=button 
data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img 
src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code 
class=language-go data-lang=go>< [...]
+       <span class=nx>window</span><span class=p>.</span><span 
class=nf>NewFixedWindows</span><span class=p>(</span><span 
class=mi>1</span><span class=o>*</span><span class=nx>time</span><span 
class=p>.</span><span class=nx>Minute</span><span class=p>),</span> <span 
class=nx>pcollection</span><span class=p>,</span>
+       <span class=nx>beam</span><span class=p>.</span><span 
class=nf>Trigger</span><span class=p>(</span><span class=nx>window</span><span 
class=p>.</span><span class=nf>TriggerAfterProcessingTime</span><span 
class=p>().</span>
+               <span class=nf>PlusDelay</span><span class=p>(</span><span 
class=mi>1</span><span class=o>*</span><span class=nx>time</span><span 
class=p>.</span><span class=nx>Minute</span><span class=p>)),</span>
+       <span class=nx>beam</span><span class=p>.</span><span 
class=nf>AllowedLateness</span><span class=p>(</span><span 
class=mi>30</span><span class=o>*</span><span class=nx>time</span><span 
class=p>.</span><span class=nx>Minute</span><span class=p>),</span>
+       <span class=nx>beam</span><span class=p>.</span><span 
class=nf>PanesDiscard</span><span class=p>(),</span>
+<span class=p>)</span></code></pre></div></div></div><h4 
id=window-accumulation-modes>9.4.1. Window accumulation modes</h4><p>When you 
specify a trigger, you must also set the the window&rsquo;s <strong>accumulation
 mode</strong>. When a trigger fires, it emits the current contents of the 
window as a
 pane. Since a trigger can fire multiple times, the accumulation mode determines
 whether the system <em>accumulates</em> the window panes as the trigger fires, 
or
@@ -2818,8 +2848,10 @@ on each firing:</p><pre><code>  First trigger firing:  
[5, 8, 3]
 passes the end of the window, you can apply an <em>allowed lateness</em> when 
you set
 your windowing configuration. This gives your trigger the opportunity to react
 to the late data. If allowed lateness is set, the default trigger will emit new
-results immediately whenever late data arrives.</p><p>You set the allowed 
lateness by using <code>.withAllowedLateness()</code> when you set your
-windowing function:</p><div class="language-java snippet"><div 
class="notebook-skip code-snippet"><a class=copy type=button 
data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img 
src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code 
class=language-java data-lang=java>  <span class=n>PCollection</span><span 
class=o>&lt;</span><span class=n>String</span><span class=o>&gt;</span> <span 
class=n>pc</span> <span class=o>=</span> <span class=o>...;</span>
+results immediately whenever late data arrives.</p><p>You set the allowed 
lateness by using <span 
class=language-java><code>.withAllowedLateness()</code></span>
+<span class=language-py><code>allowed_lateness</code></span>
+<span class=language-go><code>beam.AllowedLateness()</code></span>
+when you set your windowing function:</p><div class="language-java 
snippet"><div class="notebook-skip code-snippet"><a class=copy type=button 
data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img 
src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code 
class=language-java data-lang=java>  <span class=n>PCollection</span><span 
class=o>&lt;</span><span class=n>String</span><span class=o>&gt;</span> <span 
class=n>pc</span> <span class=o>=</span> <s [...]
   <span class=n>pc</span><span class=o>.</span><span 
class=na>apply</span><span class=o>(</span><span class=n>Window</span><span 
class=o>.&lt;</span><span class=n>String</span><span class=o>&gt;</span><span 
class=n>into</span><span class=o>(</span><span class=n>FixedWindows</span><span 
class=o>.</span><span class=na>of</span><span class=o>(</span><span 
class=n>1</span><span class=o>,</span> <span class=n>TimeUnit</span><span 
class=o>.</span><span class=na>MINUTES</span><span class=o>))</span>
                               <span class=o>.</span><span 
class=na>triggering</span><span class=o>(</span><span 
class=n>AfterProcessingTime</span><span class=o>.</span><span 
class=na>pastFirstElementInPane</span><span class=o>()</span>
                                                              <span 
class=o>.</span><span class=na>plusDelayOf</span><span class=o>(</span><span 
class=n>Duration</span><span class=o>.</span><span 
class=na>standardMinutes</span><span class=o>(</span><span 
class=n>1</span><span class=o>)))</span>
@@ -2828,10 +2860,18 @@ windowing function:</p><div class="language-java 
snippet"><div class="notebook-s
             <span class=n>FixedWindows</span><span class=p>(</span><span 
class=mi>60</span><span class=p>),</span>
             <span class=n>trigger</span><span class=o>=</span><span 
class=n>AfterProcessingTime</span><span class=p>(</span><span 
class=mi>60</span><span class=p>),</span>
             <span class=n>allowed_lateness</span><span class=o>=</span><span 
class=mi>1800</span><span class=p>)</span> <span class=c1># 30 minutes</span>
-     <span class=o>|</span> <span 
class=o>...</span></code></pre></div></div></div><p>This allowed lateness 
propagates to all <code>PCollection</code>s derived as a result of
+     <span class=o>|</span> <span 
class=o>...</span></code></pre></div></div></div><div class="language-go 
snippet"><div class="notebook-skip code-snippet"><a class=copy type=button 
data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img 
src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code 
class=language-go data-lang=go><span class=nx>allowedToBeLateItems</span> <span 
class=o>:=</span> <span class=nx>beam</span><span class=p>.</span><span clas 
[...]
+       <span class=nx>window</span><span class=p>.</span><span 
class=nf>NewFixedWindows</span><span class=p>(</span><span 
class=mi>1</span><span class=o>*</span><span class=nx>time</span><span 
class=p>.</span><span class=nx>Minute</span><span class=p>),</span> <span 
class=nx>pcollection</span><span class=p>,</span>
+       <span class=nx>beam</span><span class=p>.</span><span 
class=nf>Trigger</span><span class=p>(</span><span class=nx>window</span><span 
class=p>.</span><span class=nf>TriggerAfterProcessingTime</span><span 
class=p>().</span>
+               <span class=nf>PlusDelay</span><span class=p>(</span><span 
class=mi>1</span><span class=o>*</span><span class=nx>time</span><span 
class=p>.</span><span class=nx>Minute</span><span class=p>)),</span>
+       <span class=nx>beam</span><span class=p>.</span><span 
class=nf>AllowedLateness</span><span class=p>(</span><span 
class=mi>30</span><span class=o>*</span><span class=nx>time</span><span 
class=p>.</span><span class=nx>Minute</span><span class=p>),</span>
+<span class=p>)</span></code></pre></div></div></div><p>This allowed lateness 
propagates to all <code>PCollection</code>s derived as a result of
 applying transforms to the original <code>PCollection</code>. If you want to 
change the
 allowed lateness later in your pipeline, you can apply
-<code>Window.configure().withAllowedLateness()</code> again, 
explicitly.</p><h3 id=composite-triggers>9.5. Composite triggers</h3><p>You can 
combine multiple triggers to form <strong>composite triggers</strong>, and can
+<span 
class=language-java><code>Window.configure().withAllowedLateness()</code></span>
+<span class=language-py><code>allowed_lateness</code></span>
+<span class=language-go><code>beam.AllowedLateness()</code></span>
+again, explicitly.</p><h3 id=composite-triggers>9.5. Composite 
triggers</h3><p>You can combine multiple triggers to form <strong>composite 
triggers</strong>, and can
 specify a trigger to emit results repeatedly, at most once, or under other
 custom conditions.</p><h4 id=composite-trigger-types>9.5.1. Composite trigger 
types</h4><p>Beam includes the following composite triggers:</p><ul><li>You can 
add additional early firings or late firings to
 <code>AfterWatermark.pastEndOfWindow</code> via <code>.withEarlyFirings</code> 
and
@@ -2864,7 +2904,13 @@ trigger stops executing</li></ul></p><div 
class="language-java snippet"><div cla
     <span class=n>FixedWindows</span><span class=p>(</span><span 
class=mi>1</span> <span class=o>*</span> <span class=mi>60</span><span 
class=p>),</span>
     <span class=n>trigger</span><span class=o>=</span><span 
class=n>AfterWatermark</span><span class=p>(</span><span 
class=n>late</span><span class=o>=</span><span 
class=n>AfterProcessingTime</span><span class=p>(</span><span 
class=mi>10</span> <span class=o>*</span> <span class=mi>60</span><span 
class=p>)),</span>
     <span class=n>allowed_lateness</span><span class=o>=</span><span 
class=mi>10</span><span class=p>,</span>
-    <span class=n>accumulation_mode</span><span class=o>=</span><span 
class=n>AccumulationMode</span><span class=o>.</span><span 
class=n>DISCARDING</span><span 
class=p>)</span></code></pre></div></div></div><h4 
id=other-composite-triggers>9.5.3. Other composite triggers</h4><p>You can also 
build other sorts of composite triggers. The following example code
+    <span class=n>accumulation_mode</span><span class=o>=</span><span 
class=n>AccumulationMode</span><span class=o>.</span><span 
class=n>DISCARDING</span><span 
class=p>)</span></code></pre></div></div></div><div class="language-go 
snippet"><div class="notebook-skip code-snippet"><a class=copy type=button 
data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img 
src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code 
class=language-go data-lang=go>< [...]
+       <span class=nx>window</span><span class=p>.</span><span 
class=nf>NewFixedWindows</span><span class=p>(</span><span 
class=mi>1</span><span class=o>*</span><span class=nx>time</span><span 
class=p>.</span><span class=nx>Minute</span><span class=p>),</span> <span 
class=nx>pcollection</span><span class=p>,</span>
+       <span class=nx>beam</span><span class=p>.</span><span 
class=nf>Trigger</span><span class=p>(</span><span class=nx>window</span><span 
class=p>.</span><span class=nf>TriggerAfterEndOfWindow</span><span 
class=p>().</span>
+               <span class=nf>LateFiring</span><span class=p>(</span><span 
class=nx>window</span><span class=p>.</span><span 
class=nf>TriggerAfterProcessingTime</span><span class=p>().</span>
+                       <span class=nf>PlusDelay</span><span 
class=p>(</span><span class=mi>10</span><span class=o>*</span><span 
class=nx>time</span><span class=p>.</span><span class=nx>Minute</span><span 
class=p>))),</span>
+       <span class=nx>beam</span><span class=p>.</span><span 
class=nf>AllowedLateness</span><span class=p>(</span><span 
class=mi>2</span><span class=o>*</span><span class=mi>24</span><span 
class=o>*</span><span class=nx>time</span><span class=p>.</span><span 
class=nx>Hour</span><span class=p>),</span>
+<span class=p>)</span></code></pre></div></div></div><h4 
id=other-composite-triggers>9.5.3. Other composite triggers</h4><p>You can also 
build other sorts of composite triggers. The following example code
 shows a simple composite trigger that fires whenever the pane has at least 100
 elements, or after a minute.</p><div class="language-java snippet"><div 
class="notebook-skip code-snippet"><a class=copy type=button 
data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img 
src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code 
class=language-java data-lang=java>  <span class=n>Repeatedly</span><span 
class=o>.</span><span class=na>forever</span><span class=o>(</span><span 
class=n>AfterFirst</span><span class=o>.</span><span class [...]
       <span class=n>AfterPane</span><span class=o>.</span><span 
class=na>elementCountAtLeast</span><span class=o>(</span><span 
class=n>100</span><span class=o>),</span>
@@ -4131,7 +4177,7 @@ expansionAddr := &#34;localhost:8097&#34;
 outT := beam.UnnamedOutput(typex.New(reflectx.String))
 res := beam.CrossLanguage(s, urn, payload, expansionAddr, 
beam.UnnamedInput(inputPCol), outT)
    </code></pre></div></div></li><li><p>After the job has been submitted to 
the Beam runner, shutdown the expansion service by
-terminating the expansion service process.</p></li></ol><h3 
id=x-lang-transform-runner-support>13.3. Runner Support</h3><p>Currently, 
portable runners such as Flink, Spark, and the Direct runner can be used with 
multi-language pipelines.</p><p>Google Cloud Dataflow supports multi-language 
pipelines through the Dataflow Runner v2 backend architecture.</p><div 
class=feedback><p class=update>Last updated on 2021/10/01</p><h3>Have you found 
everything you were looking for?</h3><p class=descr [...]
+terminating the expansion service process.</p></li></ol><h3 
id=x-lang-transform-runner-support>13.3. Runner Support</h3><p>Currently, 
portable runners such as Flink, Spark, and the Direct runner can be used with 
multi-language pipelines.</p><p>Google Cloud Dataflow supports multi-language 
pipelines through the Dataflow Runner v2 backend architecture.</p><div 
class=feedback><p class=update>Last updated on 2021/10/04</p><h3>Have you found 
everything you were looking for?</h3><p class=descr [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam 
logo, and the Apache feather logo are either registered trademarks or 
trademarks of The Apache Software Foundation. All other products or name brands 
are trademarks of their respective holders, including The Apache Software 
Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/get-started/index.xml 
b/website/generated-content/get-started/index.xml
index df139c5..bd3de12 100644
--- a/website/generated-content/get-started/index.xml
+++ b/website/generated-content/get-started/index.xml
@@ -152,7 +152,7 @@ looks more like what is depicted by the red squiggly line 
above the ideal line.&
 &lt;/span>&lt;span class="s2"> &amp;#34;&amp;#34;&amp;#34;&lt;/span>
 &lt;span class="k">def&lt;/span> &lt;span 
class="fm">__init__&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span 
class="n">field&lt;/span>&lt;span class="p">):&lt;/span>
 &lt;span class="c1"># TODO(BEAM-6158): Revert the workaround once we can 
pickle super() on py3.&lt;/span>
-&lt;span class="c1"># super(ExtractAndSumScore, self).__init__()&lt;/span>
+&lt;span class="c1"># super().__init__()&lt;/span>
 &lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span 
class="n">PTransform&lt;/span>&lt;span class="o">.&lt;/span>&lt;span 
class="fm">__init__&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="bp">self&lt;/span>&lt;span class="p">)&lt;/span>
 &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span 
class="n">field&lt;/span> &lt;span class="o">=&lt;/span> &lt;span 
class="n">field&lt;/span>
 &lt;span class="k">def&lt;/span> &lt;span class="nf">expand&lt;/span>&lt;span 
class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span 
class="p">,&lt;/span> &lt;span class="n">pcoll&lt;/span>&lt;span 
class="p">):&lt;/span>
@@ -392,7 +392,7 @@ logical windows based on when those scores occurred in 
event time.&lt;/em>&lt;/p
 &lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-py" 
data-lang="py">&lt;span class="k">class&lt;/span> &lt;span 
class="nc">HourlyTeamScore&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span 
class="n">PTransform&lt;/span>&lt;span class="p">):&lt;/span>
 &lt;span class="k">def&lt;/span> &lt;span 
class="fm">__init__&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span 
class="n">start_min&lt;/span>&lt;span class="p">,&lt;/span> &lt;span 
class="n">stop_min&lt;/span>&lt;span class="p">,&lt;/span> &lt;span 
class="n">window_duration&lt;/span>&lt;span class="p">):&lt;/span>
 &lt;span class="c1"># TODO(BEAM-6158): Revert the workaround once we can 
pickle super() on py3.&lt;/span>
-&lt;span class="c1"># super(HourlyTeamScore, self).__init__()&lt;/span>
+&lt;span class="c1"># super().__init__()&lt;/span>
 &lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span 
class="n">PTransform&lt;/span>&lt;span class="o">.&lt;/span>&lt;span 
class="fm">__init__&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="bp">self&lt;/span>&lt;span class="p">)&lt;/span>
 &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span 
class="n">start_timestamp&lt;/span> &lt;span class="o">=&lt;/span> &lt;span 
class="n">str2timestamp&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="n">start_min&lt;/span>&lt;span class="p">)&lt;/span>
 &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span 
class="n">stop_timestamp&lt;/span> &lt;span class="o">=&lt;/span> &lt;span 
class="n">str2timestamp&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="n">stop_min&lt;/span>&lt;span class="p">)&lt;/span>
@@ -578,7 +578,7 @@ ten minutes after data is received.&lt;/em>&lt;/p>
 &lt;/span>&lt;span class="s2"> &amp;#34;&amp;#34;&amp;#34;&lt;/span>
 &lt;span class="k">def&lt;/span> &lt;span 
class="fm">__init__&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span 
class="n">allowed_lateness&lt;/span>&lt;span class="p">):&lt;/span>
 &lt;span class="c1"># TODO(BEAM-6158): Revert the workaround once we can 
pickle super() on py3.&lt;/span>
-&lt;span class="c1"># super(CalculateUserScores, self).__init__()&lt;/span>
+&lt;span class="c1"># super().__init__()&lt;/span>
 &lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span 
class="n">PTransform&lt;/span>&lt;span class="o">.&lt;/span>&lt;span 
class="fm">__init__&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="bp">self&lt;/span>&lt;span class="p">)&lt;/span>
 &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span 
class="n">allowed_lateness_seconds&lt;/span> &lt;span class="o">=&lt;/span> 
&lt;span class="n">allowed_lateness&lt;/span> &lt;span class="o">*&lt;/span> 
&lt;span class="mi">60&lt;/span>
 &lt;span class="k">def&lt;/span> &lt;span class="nf">expand&lt;/span>&lt;span 
class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span 
class="p">,&lt;/span> &lt;span class="n">pcoll&lt;/span>&lt;span 
class="p">):&lt;/span>
@@ -662,7 +662,7 @@ late results.&lt;/em>&lt;/p>
 &lt;/span>&lt;span class="s2"> &amp;#34;&amp;#34;&amp;#34;&lt;/span>
 &lt;span class="k">def&lt;/span> &lt;span 
class="fm">__init__&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span 
class="n">team_window_duration&lt;/span>&lt;span class="p">,&lt;/span> &lt;span 
class="n">allowed_lateness&lt;/span>&lt;span class="p">):&lt;/span>
 &lt;span class="c1"># TODO(BEAM-6158): Revert the workaround once we can 
pickle super() on py3.&lt;/span>
-&lt;span class="c1"># super(CalculateTeamScores, self).__init__()&lt;/span>
+&lt;span class="c1"># super().__init__()&lt;/span>
 &lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span 
class="n">PTransform&lt;/span>&lt;span class="o">.&lt;/span>&lt;span 
class="fm">__init__&lt;/span>&lt;span class="p">(&lt;/span>&lt;span 
class="bp">self&lt;/span>&lt;span class="p">)&lt;/span>
 &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span 
class="n">team_window_duration&lt;/span> &lt;span class="o">=&lt;/span> 
&lt;span class="n">team_window_duration&lt;/span> &lt;span 
class="o">*&lt;/span> &lt;span class="mi">60&lt;/span>
 &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span 
class="n">allowed_lateness_seconds&lt;/span> &lt;span class="o">=&lt;/span> 
&lt;span class="n">allowed_lateness&lt;/span> &lt;span class="o">*&lt;/span> 
&lt;span class="mi">60&lt;/span>
diff --git 
a/website/generated-content/get-started/mobile-gaming-example/index.html 
b/website/generated-content/get-started/mobile-gaming-example/index.html
index b8f04d2..d1cfe1a 100644
--- a/website/generated-content/get-started/mobile-gaming-example/index.html
+++ b/website/generated-content/get-started/mobile-gaming-example/index.html
@@ -49,7 +49,7 @@ looks more like what is depicted by the red squiggly line 
above the ideal line.<
 </span><span class=s2>  &#34;&#34;&#34;</span>
   <span class=k>def</span> <span class=fm>__init__</span><span 
class=p>(</span><span class=bp>self</span><span class=p>,</span> <span 
class=n>field</span><span class=p>):</span>
     <span class=c1># TODO(BEAM-6158): Revert the workaround once we can pickle 
super() on py3.</span>
-    <span class=c1># super(ExtractAndSumScore, self).__init__()</span>
+    <span class=c1># super().__init__()</span>
     <span class=n>beam</span><span class=o>.</span><span 
class=n>PTransform</span><span class=o>.</span><span 
class=fm>__init__</span><span class=p>(</span><span class=bp>self</span><span 
class=p>)</span>
     <span class=bp>self</span><span class=o>.</span><span class=n>field</span> 
<span class=o>=</span> <span class=n>field</span>
 
@@ -179,7 +179,7 @@ logical windows based on when those scores occurred in 
event time.</em></p><p>No
 <span class=o>}</span></code></pre></div></div></div><div class="language-py 
snippet"><div class="notebook-skip code-snippet"><a class=copy type=button 
data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img 
src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code 
class=language-py data-lang=py><span class=k>class</span> <span 
class=nc>HourlyTeamScore</span><span class=p>(</span><span 
class=n>beam</span><span class=o>.</span><span class=n>PTransfo [...]
   <span class=k>def</span> <span class=fm>__init__</span><span 
class=p>(</span><span class=bp>self</span><span class=p>,</span> <span 
class=n>start_min</span><span class=p>,</span> <span 
class=n>stop_min</span><span class=p>,</span> <span 
class=n>window_duration</span><span class=p>):</span>
     <span class=c1># TODO(BEAM-6158): Revert the workaround once we can pickle 
super() on py3.</span>
-    <span class=c1># super(HourlyTeamScore, self).__init__()</span>
+    <span class=c1># super().__init__()</span>
     <span class=n>beam</span><span class=o>.</span><span 
class=n>PTransform</span><span class=o>.</span><span 
class=fm>__init__</span><span class=p>(</span><span class=bp>self</span><span 
class=p>)</span>
     <span class=bp>self</span><span class=o>.</span><span 
class=n>start_timestamp</span> <span class=o>=</span> <span 
class=n>str2timestamp</span><span class=p>(</span><span 
class=n>start_min</span><span class=p>)</span>
     <span class=bp>self</span><span class=o>.</span><span 
class=n>stop_timestamp</span> <span class=o>=</span> <span 
class=n>str2timestamp</span><span class=p>(</span><span 
class=n>stop_min</span><span class=p>)</span>
@@ -328,7 +328,7 @@ ten minutes after data is received.</em></p><p>As 
processing time advances and m
 </span><span class=s2>  &#34;&#34;&#34;</span>
   <span class=k>def</span> <span class=fm>__init__</span><span 
class=p>(</span><span class=bp>self</span><span class=p>,</span> <span 
class=n>allowed_lateness</span><span class=p>):</span>
     <span class=c1># TODO(BEAM-6158): Revert the workaround once we can pickle 
super() on py3.</span>
-    <span class=c1># super(CalculateUserScores, self).__init__()</span>
+    <span class=c1># super().__init__()</span>
     <span class=n>beam</span><span class=o>.</span><span 
class=n>PTransform</span><span class=o>.</span><span 
class=fm>__init__</span><span class=p>(</span><span class=bp>self</span><span 
class=p>)</span>
     <span class=bp>self</span><span class=o>.</span><span 
class=n>allowed_lateness_seconds</span> <span class=o>=</span> <span 
class=n>allowed_lateness</span> <span class=o>*</span> <span class=mi>60</span>
 
@@ -387,7 +387,7 @@ late results.</em></p><p>The dotted line in the diagram is 
the &ldquo;ideal&rdqu
 </span><span class=s2>  &#34;&#34;&#34;</span>
   <span class=k>def</span> <span class=fm>__init__</span><span 
class=p>(</span><span class=bp>self</span><span class=p>,</span> <span 
class=n>team_window_duration</span><span class=p>,</span> <span 
class=n>allowed_lateness</span><span class=p>):</span>
     <span class=c1># TODO(BEAM-6158): Revert the workaround once we can pickle 
super() on py3.</span>
-    <span class=c1># super(CalculateTeamScores, self).__init__()</span>
+    <span class=c1># super().__init__()</span>
     <span class=n>beam</span><span class=o>.</span><span 
class=n>PTransform</span><span class=o>.</span><span 
class=fm>__init__</span><span class=p>(</span><span class=bp>self</span><span 
class=p>)</span>
     <span class=bp>self</span><span class=o>.</span><span 
class=n>team_window_duration</span> <span class=o>=</span> <span 
class=n>team_window_duration</span> <span class=o>*</span> <span 
class=mi>60</span>
     <span class=bp>self</span><span class=o>.</span><span 
class=n>allowed_lateness_seconds</span> <span class=o>=</span> <span 
class=n>allowed_lateness</span> <span class=o>*</span> <span class=mi>60</span>
diff --git a/website/generated-content/sitemap.xml 
b/website/generated-content/sitemap.xml
index 980082e..4816d58 100644
--- a/website/generated-content/sitemap.xml
+++ b/website/generated-content/sitemap.xml
@@ -1 +1 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?><urlset 
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"; 
xmlns:xhtml="http://www.w3.org/1999/xhtml";><url><loc>/blog/beam-2.32.0/</loc><lastmod>2021-09-16T12:21:14-07:00</lastmod></url><url><loc>/categories/blog/</loc><lastmod>2021-09-16T12:21:14-07:00</lastmod></url><url><loc>/blog/</loc><lastmod>2021-09-16T12:21:14-07:00</lastmod></url><url><loc>/categories/</loc><lastmod>2021-09-17T14:05:48-07:00</lastmod></url><url><loc>/blog/b
 [...]
\ No newline at end of file
+<?xml version="1.0" encoding="utf-8" standalone="yes"?><urlset 
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"; 
xmlns:xhtml="http://www.w3.org/1999/xhtml";><url><loc>/blog/beam-2.32.0/</loc><lastmod>2021-09-16T12:21:14-07:00</lastmod></url><url><loc>/categories/blog/</loc><lastmod>2021-09-16T12:21:14-07:00</lastmod></url><url><loc>/blog/</loc><lastmod>2021-09-16T12:21:14-07:00</lastmod></url><url><loc>/categories/</loc><lastmod>2021-09-17T14:05:48-07:00</lastmod></url><url><loc>/blog/b
 [...]
\ No newline at end of file

Reply via email to