You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by gi...@apache.org on 2023/05/09 13:56:44 UTC

[groovy-dev-site] branch asf-site updated: 2023/05/09 13:56:40: Generated dev website from groovy-website@aa7bfdb

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/groovy-dev-site.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new e889413  2023/05/09 13:56:40: Generated dev website from groovy-website@aa7bfdb
e889413 is described below

commit e8894133eaa5b82fb289b632478d195d8a539e1d
Author: jenkins <bu...@apache.org>
AuthorDate: Tue May 9 13:56:40 2023 +0000

    2023/05/09 13:56:40: Generated dev website from groovy-website@aa7bfdb
---
 blog/adventures-with-groovyfx.html               |   2 +-
 blog/classifying-iris-flowers-with-deep.html     |   2 +-
 blog/comparators-and-sorting-in-groovy.html      |   2 +-
 blog/deck-of-cards-with-groovy.html              |   2 +-
 blog/deep-learning-and-eclipse-collections.html  |   2 +-
 blog/detecting-objects-with-groovy-the.html      |   2 +-
 blog/feed.atom                                   |  22 +-
 blog/fruity-eclipse-collections.html             |   2 +-
 blog/fun-with-obfuscated-groovy.html             |   2 +-
 blog/gmavenplus-1-6-2-released.html              |   2 +-
 blog/groovy-2-4-16-released.html                 |   2 +-
 blog/groovy-2-4-16-windows.html                  |   2 +-
 blog/groovy-2-4-17-released.html                 |   2 +-
 blog/groovy-2-5-0-released.html                  |   2 +-
 blog/groovy-2-5-1-released.html                  |   2 +-
 blog/groovy-2-5-2-released.html                  |   2 +-
 blog/groovy-2-5-2-windows.html                   |   2 +-
 blog/groovy-2-5-3-released.html                  |   2 +-
 blog/groovy-2-5-3-windows.html                   |   2 +-
 blog/groovy-2-5-4-released.html                  |   2 +-
 blog/groovy-2-5-4-windows.html                   |   2 +-
 blog/groovy-2-5-5-released.html                  |   2 +-
 blog/groovy-2-5-5-windows.html                   |   2 +-
 blog/groovy-2-5-6-released.html                  |   2 +-
 blog/groovy-2-5-7-and.html                       |   2 +-
 blog/groovy-2-5-7-released.html                  |   2 +-
 blog/groovy-2-5-clibuilder-renewal.html          |   2 +-
 blog/groovy-3-0-0-alpha.html                     |   2 +-
 blog/groovy-3-0-0-alpha1.html                    |   2 +-
 blog/groovy-3-0-0-beta.html                      |   2 +-
 blog/groovy-3-0-0-beta1.html                     |   2 +-
 blog/groovy-3-0-0-beta2.html                     |   2 +-
 blog/groovy-4-0-3-released.html                  |   2 +-
 blog/groovy-haiku-processing.html                |   2 +-
 blog/groovy-list-processing-cheat-sheet.html     |   2 +-
 blog/groovy-null-processing.html                 |   2 +-
 blog/groovy-record-performance.html              | 718 +++++++++++++++++++++++
 blog/groovy-records.html                         |   2 +-
 blog/groovy-release-train-4-0.html               |   2 +-
 blog/groovy-sequenced-collections.html           |   2 +-
 blog/helloworldemoji.html                        |   2 +-
 blog/img/equalsTimes.png                         | Bin 0 -> 23804 bytes
 blog/img/hashcodeTimes.png                       | Bin 0 -> 32210 bytes
 blog/index.html                                  |   4 +-
 blog/lego-bricks-with-groovy.html                |   2 +-
 blog/matrix-calculations-with-groovy-apache.html |   2 +-
 blog/parsing-json-with-groovy.html               |   2 +-
 blog/reading-and-writing-csv-files.html          |   2 +-
 blog/testing-your-java-with-groovy.html          |   2 +-
 blog/using-groovy-with-apache-wayang.html        |   2 +-
 blog/whiskey-clustering-with-groovy-and.html     |   2 +-
 blog/wordle-checker.html                         |   2 +-
 blog/zipping-collections-with-groovy.html        |   2 +-
 53 files changed, 784 insertions(+), 56 deletions(-)

diff --git a/blog/adventures-with-groovyfx.html b/blog/adventures-with-groovyfx.html
index 439165d..f61e2fd 100644
--- a/blog/adventures-with-groovyfx.html
+++ b/blog/adventures-with-groovyfx.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Adventures with GroovyFX</a></li><li><a href='#_further_information' class='anchor-link'>Further information</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./deep-learning-an [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Adventures with GroovyFX</a></li><li><a href='#_further_information' class='anchor-link'>Further information</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./deep-learning-an [...]
 <div class="sectionbody">
 <div class="paragraph">
 <p>This blog looks at a <a href="http://groovyfx.org/">GroovyFX</a> version of a <a href="https://donraab.medium.com/my-weird-and-wonderful-first-adventures-with-javafx-6efe3b1923c8">ToDo application originally written in JavaFX</a>.
diff --git a/blog/classifying-iris-flowers-with-deep.html b/blog/classifying-iris-flowers-with-deep.html
index ef32f5f..269578f 100644
--- a/blog/classifying-iris-flowers-with-deep.html
+++ b/blog/classifying-iris-flowers-with-deep.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Classifying Iris Flowers with Deep Learning, Groovy and GraalVM</a></li><li><a href='#_deep_learning' class='anchor-link'>Deep Learning</a></li><li><a href='#_encog' class='anchor-link'>Encog</a></li><li><a href='#_eclipse_deeplearning4j' class='anchor-link'>Eclipse DeepLe [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Classifying Iris Flowers with Deep Learning, Groovy and GraalVM</a></li><li><a href='#_deep_learning' class='anchor-link'>Deep Learning</a></li><li><a href='#_encog' class='anchor-link'>Encog</a></li><li><a href='#_eclipse_deeplearning4j' class='anchor-link'>Eclipse DeepLe [...]
 <div class="sectionbody">
 <div class="paragraph">
 <p><span class="image right"><img src="img/iris_flowers.png" alt="iris flowers" width="200"></span>
diff --git a/blog/comparators-and-sorting-in-groovy.html b/blog/comparators-and-sorting-in-groovy.html
index c593dd3..e399742 100644
--- a/blog/comparators-and-sorting-in-groovy.html
+++ b/blog/comparators-and-sorting-in-groovy.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Comparators and Sorting in Groovy</a></li><li><a href='#_the_java_comparator_story_recap' class='anchor-link'>The Java comparator story recap</a></li><li><a href='#_the_groovy_comparator_story' class='anchor-link'>The Groovy comparator story</a></li><li><a href='#_mixing_i [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Comparators and Sorting in Groovy</a></li><li><a href='#_the_java_comparator_story_recap' class='anchor-link'>The Java comparator story recap</a></li><li><a href='#_the_groovy_comparator_story' class='anchor-link'>The Groovy comparator story</a></li><li><a href='#_mixing_i [...]
 <div class="sectionbody">
 <div class="paragraph">
 <p><span class="image right"><img src="img/cher_record.png" alt="Cher" width="179" height="179"></span>
diff --git a/blog/deck-of-cards-with-groovy.html b/blog/deck-of-cards-with-groovy.html
index b0a5ae0..b2d7ed0 100644
--- a/blog/deck-of-cards-with-groovy.html
+++ b/blog/deck-of-cards-with-groovy.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Deck of cards with Groovy, JDK collections and Eclipse Collections</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./deep-learning-and-eclipse-collections'>Deep Learning and E [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Deck of cards with Groovy, JDK collections and Eclipse Collections</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./deep-learning-and-eclipse-collections'>Deep Learning and E [...]
 <p>Once again, <a href="https://twitter.com/TheDonRaab">Donald Raab</a> has produced an interesting
 <a href="https://donraab.medium.com/how-to-create-a-deck-of-cards-using-eclipse-collections-d9838ac430b7">blog post</a> on
 <a href="https://github.com/eclipse/eclipse-collections">Eclipse Collections</a> this one shows some code for modelling and manipulating cards with Java 17 and Eclipse Collections. His related katas are highly recommended.
diff --git a/blog/deep-learning-and-eclipse-collections.html b/blog/deep-learning-and-eclipse-collections.html
index c76e19e..ca749c3 100644
--- a/blog/deep-learning-and-eclipse-collections.html
+++ b/blog/deep-learning-and-eclipse-collections.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Deep Learning and Eclipse Collections</a></li><li><a href='#_setting_up_our_model_and_data' class='anchor-link'>Setting up our model and data</a></li><li><a href='#_applying_deep_learning' class='anchor-link'>Applying deep learning</a></li></ul><br/><ul class='nav-sidebar' [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Deep Learning and Eclipse Collections</a></li><li><a href='#_setting_up_our_model_and_data' class='anchor-link'>Setting up our model and data</a></li><li><a href='#_applying_deep_learning' class='anchor-link'>Applying deep learning</a></li></ul><br/><ul class='nav-sidebar' [...]
 <div class="sectionbody">
 <div class="paragraph">
 <p>In previous blogs, we&#8217;ve covered
diff --git a/blog/detecting-objects-with-groovy-the.html b/blog/detecting-objects-with-groovy-the.html
index 9bbc378..983e76e 100644
--- a/blog/detecting-objects-with-groovy-the.html
+++ b/blog/detecting-objects-with-groovy-the.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Detecting objects with Groovy, the Deep Java Library (DJL), and Apache MXNet</a></li><li><a href='#_deep_learning' class='anchor-link'>Deep Learning</a></li><li><a href='#_deep_java_library_djl_apache_mxnet' class='anchor-link'>Deep Java Library (DJL) &amp; Apache MXNet</a [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Detecting objects with Groovy, the Deep Java Library (DJL), and Apache MXNet</a></li><li><a href='#_deep_learning' class='anchor-link'>Deep Learning</a></li><li><a href='#_deep_java_library_djl_apache_mxnet' class='anchor-link'>Deep Java Library (DJL) &amp; Apache MXNet</a [...]
 <div class="sectionbody">
 <div class="paragraph">
 <p>This blog posts looks at using <a href="https://groovy-lang.org/">Apache Groovy</a> with the
diff --git a/blog/feed.atom b/blog/feed.atom
index 95bb85d..37be578 100644
--- a/blog/feed.atom
+++ b/blog/feed.atom
@@ -8,21 +8,21 @@
     <author>
       <name>Remko Popma</name>
     </author>
-    <title>Groovy 2.5.0 released</title>
-    <link href="http://groovy.apache.org/blog/groovy-2-5-0-released"/>
+    <title>Apache Groovy 2.5 CliBuilder Renewal</title>
+    <link href="http://groovy.apache.org/blog/groovy-2-5-clibuilder-renewal"/>
     <updated>2018-05-30T11:28:31+00:00</updated>
     <published>2018-05-30T11:28:31+00:00</published>
-    <summary>Groovy 2.5.0 Release Announcement.</summary>
+    <summary>This post looks at new CliBuilder features from Groovy 2.5 in particular the Picocli-based implementation.</summary>
   </entry>
   <entry>
     <author>
       <name>Remko Popma</name>
     </author>
-    <title>Apache Groovy 2.5 CliBuilder Renewal</title>
-    <link href="http://groovy.apache.org/blog/groovy-2-5-clibuilder-renewal"/>
+    <title>Groovy 2.5.0 released</title>
+    <link href="http://groovy.apache.org/blog/groovy-2-5-0-released"/>
     <updated>2018-05-30T11:28:31+00:00</updated>
     <published>2018-05-30T11:28:31+00:00</published>
-    <summary>This post looks at new CliBuilder features from Groovy 2.5 in particular the Picocli-based implementation.</summary>
+    <summary>Groovy 2.5.0 Release Announcement.</summary>
   </entry>
   <entry>
     <author>
@@ -674,4 +674,14 @@
     <published>2023-04-29T09:00:00+00:00</published>
     <summary>This post looks at Groovy support for sequenced collections.</summary>
   </entry>
+  <entry>
+    <author>
+      <name>Paul King</name>
+    </author>
+    <title>Groovy Record Performance</title>
+    <link href="http://groovy.apache.org/blog/groovy-record-performance"/>
+    <updated>2023-05-09T23:39:00+00:00</updated>
+    <published>2023-05-09T23:39:00+00:00</published>
+    <summary>This post looks at the performance of some of the generated methods in Groovy records.</summary>
+  </entry>
 </feed>
diff --git a/blog/fruity-eclipse-collections.html b/blog/fruity-eclipse-collections.html
index fef23cb..ab095f0 100644
--- a/blog/fruity-eclipse-collections.html
+++ b/blog/fruity-eclipse-collections.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Fruity Eclipse Collections</a></li><li><a href='#_eclipse_collections_fruit_salad' class='anchor-link'>Eclipse Collections Fruit Salad</a></li><li><a href='#_exploring_emoji_colors' class='anchor-link'>Exploring emoji colors</a></li><li><a href='#_putting_it_all_together'  [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Fruity Eclipse Collections</a></li><li><a href='#_eclipse_collections_fruit_salad' class='anchor-link'>Eclipse Collections Fruit Salad</a></li><li><a href='#_exploring_emoji_colors' class='anchor-link'>Exploring emoji colors</a></li><li><a href='#_putting_it_all_together'  [...]
 <div class="sectionbody">
 <div class="paragraph">
 <p>This blog post continues on the theme of using fruit emoji from the
diff --git a/blog/fun-with-obfuscated-groovy.html b/blog/fun-with-obfuscated-groovy.html
index 6edb166..096e2a9 100644
--- a/blog/fun-with-obfuscated-groovy.html
+++ b/blog/fun-with-obfuscated-groovy.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Fun with obfuscated Groovy</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./matrix-calculations-with-groovy-apache'>Matrix calculations with Groovy, Apache Commons Math, ojAl [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Fun with obfuscated Groovy</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./matrix-calculations-with-groovy-apache'>Matrix calculations with Groovy, Apache Commons Math, ojAl [...]
 <p>An interesting tweet appeared in my feed this morning:</p>
 </div>
 <div class="paragraph">
diff --git a/blog/gmavenplus-1-6-2-released.html b/blog/gmavenplus-1-6-2-released.html
index b7972c1..6ac1dd0 100644
--- a/blog/gmavenplus-1-6-2-released.html
+++ b/blog/gmavenplus-1-6-2-released.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>GMavenPlus 1.6.2 Released (Community Artifact)</a></li><li><a href='#_gmavenplus_1_6_2_has_been_released' class='anchor-link'>GMavenPlus 1.6.2 has been released.</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Rel [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>GMavenPlus 1.6.2 Released (Community Artifact)</a></li><li><a href='#_gmavenplus_1_6_2_has_been_released' class='anchor-link'>GMavenPlus 1.6.2 has been released.</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Rel [...]
 <h2 id="_gmavenplus_1_6_2_has_been_released">GMavenPlus 1.6.2 has been released.</h2>
 <div class="sectionbody">
 <div class="paragraph">
diff --git a/blog/groovy-2-4-16-released.html b/blog/groovy-2-4-16-released.html
index b59252e..ac49e68 100644
--- a/blog/groovy-2-4-16-released.html
+++ b/blog/groovy-2-4-16-released.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 2.4.16 Released</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-4-16-windows'>Groovy 2.4.16 Windows Installer Released (Community Artifact)</a></li><li><a hr [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 2.4.16 Released</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-4-16-windows'>Groovy 2.4.16 Windows Installer Released (Community Artifact)</a></li><li><a hr [...]
 <p>Dear community,</p>
 </div>
 <div class="paragraph">
diff --git a/blog/groovy-2-4-16-windows.html b/blog/groovy-2-4-16-windows.html
index 0edf2db..44ce0ac 100644
--- a/blog/groovy-2-4-16-windows.html
+++ b/blog/groovy-2-4-16-windows.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 2.4.16 Windows Installer Released (Community Artifact)</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-4-16-released'>Groovy 2.4.16 Released</a></li><li><a h [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 2.4.16 Windows Installer Released (Community Artifact)</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-4-16-released'>Groovy 2.4.16 Released</a></li><li><a h [...]
 <p>The Windows installer for Groovy 2.4.16 (community artifact) is available from: <a href="https://bintray.com/groovy/Distributions/Windows-Installer/groovy-2.4.16-installer" class="bare">https://bintray.com/groovy/Distributions/Windows-Installer/groovy-2.4.16-installer</a>.</p>
 </div></div></div></div></div><footer id='footer'>
                             <div class='row'>
diff --git a/blog/groovy-2-4-17-released.html b/blog/groovy-2-4-17-released.html
index fe07385..8db3c77 100644
--- a/blog/groovy-2-4-17-released.html
+++ b/blog/groovy-2-4-17-released.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 2.4.17 Released</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-4-16-released'>Groovy 2.4.16 Released</a></li><li><a href='./groovy-2-4-16-windows'>Groovy 2. [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 2.4.17 Released</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-4-16-windows'>Groovy 2.4.16 Windows Installer Released (Community Artifact)</a></li><li><a hr [...]
 <p>Dear community,</p>
 </div>
 <div class="paragraph">
diff --git a/blog/groovy-2-5-0-released.html b/blog/groovy-2-5-0-released.html
index cf4304f..82b4b59 100644
--- a/blog/groovy-2-5-0-released.html
+++ b/blog/groovy-2-5-0-released.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 2.5.0 released</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-5-7-released'>Groovy 2.5.7 Released</a></li><li><a href='./groovy-2-5-5-windows'>Groovy 2.5.5  [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 2.5.0 released</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-5-2-windows'>Groovy 2.5.2 Windows Installer Released (Community Artifact)</a></li><li><a href= [...]
 <p>Dear community,</p>
 </div>
 <div class="paragraph">
diff --git a/blog/groovy-2-5-1-released.html b/blog/groovy-2-5-1-released.html
index 2d91071..04d29ee 100644
--- a/blog/groovy-2-5-1-released.html
+++ b/blog/groovy-2-5-1-released.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 2.5.1 released</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-5-7-released'>Groovy 2.5.7 Released</a></li><li><a href='./groovy-2-5-5-windows'>Groovy 2.5.5  [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 2.5.1 released</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-5-2-windows'>Groovy 2.5.2 Windows Installer Released (Community Artifact)</a></li><li><a href= [...]
 <p>Dear community,</p>
 </div>
 <div class="paragraph">
diff --git a/blog/groovy-2-5-2-released.html b/blog/groovy-2-5-2-released.html
index ecd3bc9..a6309df 100644
--- a/blog/groovy-2-5-2-released.html
+++ b/blog/groovy-2-5-2-released.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 2.5.2 released</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-5-2-windows'>Groovy 2.5.2 Windows Installer Released (Community Artifact)</a></li><li><a href= [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 2.5.2 released</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-5-2-windows'>Groovy 2.5.2 Windows Installer Released (Community Artifact)</a></li><li><a href= [...]
 <p>Dear community,</p>
 </div>
 <div class="paragraph">
diff --git a/blog/groovy-2-5-2-windows.html b/blog/groovy-2-5-2-windows.html
index d078b5a..d4fe897 100644
--- a/blog/groovy-2-5-2-windows.html
+++ b/blog/groovy-2-5-2-windows.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 2.5.2 Windows Installer Released (Community Artifact)</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-5-5-windows'>Groovy 2.5.5 Windows Installer Released (C [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 2.5.2 Windows Installer Released (Community Artifact)</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-5-7-and'>Groovy 2.5.7 and 3.0.0-beta-1 Windows Installe [...]
 <p>The Windows installer for Groovy 2.5.2 (community artifact) is available from:
 <a href="https://dl.bintray.com/groovy/Distributions/groovy-2.5.2-installer.exe" class="bare">https://dl.bintray.com/groovy/Distributions/groovy-2.5.2-installer.exe</a></p>
 </div></div></div></div></div><footer id='footer'>
diff --git a/blog/groovy-2-5-3-released.html b/blog/groovy-2-5-3-released.html
index 729a76f..6825aeb 100644
--- a/blog/groovy-2-5-3-released.html
+++ b/blog/groovy-2-5-3-released.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 2.5.3 Released</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-5-3-windows'>Groovy 2.5.3 Windows Installer Released (Community Artifact)</a></li><li><a href= [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 2.5.3 Released</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-5-3-windows'>Groovy 2.5.3 Windows Installer Released (Community Artifact)</a></li><li><a href= [...]
 <p>Dear community,</p>
 </div>
 <div class="paragraph">
diff --git a/blog/groovy-2-5-3-windows.html b/blog/groovy-2-5-3-windows.html
index a4097a1..7b689f7 100644
--- a/blog/groovy-2-5-3-windows.html
+++ b/blog/groovy-2-5-3-windows.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 2.5.3 Windows Installer Released (Community Artifact)</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-5-5-windows'>Groovy 2.5.5 Windows Installer Released (C [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 2.5.3 Windows Installer Released (Community Artifact)</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-5-2-windows'>Groovy 2.5.2 Windows Installer Released (C [...]
 <p>The Windows installer for Groovy 2.5.3 (community artifact) is available from:
 <a href="https://bintray.com/groovy/Distributions/Windows-Installer/groovy-2.5.3-installer" class="bare">https://bintray.com/groovy/Distributions/Windows-Installer/groovy-2.5.3-installer</a></p>
 </div></div></div></div></div><footer id='footer'>
diff --git a/blog/groovy-2-5-4-released.html b/blog/groovy-2-5-4-released.html
index e142cd0..5133eb8 100644
--- a/blog/groovy-2-5-4-released.html
+++ b/blog/groovy-2-5-4-released.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 2.5.4 Released</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-5-4-windows'>Groovy 2.5.4 Windows Installer Released (Community Artifact)</a></li><li><a href= [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 2.5.4 Released</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-5-4-windows'>Groovy 2.5.4 Windows Installer Released (Community Artifact)</a></li><li><a href= [...]
 <p>Dear community,</p>
 </div>
 <div class="paragraph">
diff --git a/blog/groovy-2-5-4-windows.html b/blog/groovy-2-5-4-windows.html
index 8b805ad..65afd14 100644
--- a/blog/groovy-2-5-4-windows.html
+++ b/blog/groovy-2-5-4-windows.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 2.5.4 Windows Installer Released (Community Artifact)</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-5-5-windows'>Groovy 2.5.5 Windows Installer Released (C [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 2.5.4 Windows Installer Released (Community Artifact)</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-5-2-windows'>Groovy 2.5.2 Windows Installer Released (C [...]
 <p>The Windows installer for Groovy 2.5.4 (community artifact) is available from:
 <a href="https://bintray.com/groovy/Distributions/Windows-Installer/groovy-2.5.4-installer" class="bare">https://bintray.com/groovy/Distributions/Windows-Installer/groovy-2.5.4-installer</a></p>
 </div></div></div></div></div><footer id='footer'>
diff --git a/blog/groovy-2-5-5-released.html b/blog/groovy-2-5-5-released.html
index 43396b8..1203cc1 100644
--- a/blog/groovy-2-5-5-released.html
+++ b/blog/groovy-2-5-5-released.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 2.5.5 released</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-5-5-windows'>Groovy 2.5.5 Windows Installer Released (Community Artifact)</a></li><li><a href= [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 2.5.5 released</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-5-5-windows'>Groovy 2.5.5 Windows Installer Released (Community Artifact)</a></li><li><a href= [...]
 <p>Dear community,</p>
 </div>
 <div class="paragraph">
diff --git a/blog/groovy-2-5-5-windows.html b/blog/groovy-2-5-5-windows.html
index 4dd99cd..cda3990 100644
--- a/blog/groovy-2-5-5-windows.html
+++ b/blog/groovy-2-5-5-windows.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 2.5.5 Windows Installer Released (Community Artifact)</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-5-5-released'>Groovy 2.5.5 released</a></li><li><a href [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 2.5.5 Windows Installer Released (Community Artifact)</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-5-2-windows'>Groovy 2.5.2 Windows Installer Released (C [...]
 <p>The Windows installer for Groovy 2.5.5 (community artifact) is available at:
 <a href="https://bintray.com/groovy/Distributions/Windows-Installer/groovy-2.5.5-installer" class="bare">https://bintray.com/groovy/Distributions/Windows-Installer/groovy-2.5.5-installer</a></p>
 </div></div></div></div></div><footer id='footer'>
diff --git a/blog/groovy-2-5-6-released.html b/blog/groovy-2-5-6-released.html
index e923245..ee9d822 100644
--- a/blog/groovy-2-5-6-released.html
+++ b/blog/groovy-2-5-6-released.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 2.5.6 Released</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-5-7-released'>Groovy 2.5.7 Released</a></li><li><a href='./groovy-2-5-5-windows'>Groovy 2.5.5  [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 2.5.6 Released</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-5-2-windows'>Groovy 2.5.2 Windows Installer Released (Community Artifact)</a></li><li><a href= [...]
 <p>Dear community,</p>
 </div>
 <div class="paragraph">
diff --git a/blog/groovy-2-5-7-and.html b/blog/groovy-2-5-7-and.html
index 3166aa9..e7371b4 100644
--- a/blog/groovy-2-5-7-and.html
+++ b/blog/groovy-2-5-7-and.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 2.5.7 and 3.0.0-beta-1 Windows Installers Released (Community Artifacts)</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-5-7-released'>Groovy 2.5.7 Released< [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 2.5.7 and 3.0.0-beta-1 Windows Installers Released (Community Artifacts)</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-5-2-windows'>Groovy 2.5.2 Windows In [...]
 <p>The Windows installer for Groovy 2.5.7 (Community Artifact) is now available from Bintray:
 <a href="https://bintray.com/groovy/Distributions/Windows-Installer/groovy-2.5.7-installer" class="bare">https://bintray.com/groovy/Distributions/Windows-Installer/groovy-2.5.7-installer</a>.</p>
 </div>
diff --git a/blog/groovy-2-5-7-released.html b/blog/groovy-2-5-7-released.html
index 0e66ae1..dccfd25 100644
--- a/blog/groovy-2-5-7-released.html
+++ b/blog/groovy-2-5-7-released.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 2.5.7 Released</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-5-7-and'>Groovy 2.5.7 and 3.0.0-beta-1 Windows Installers Released (Community Artifacts)</a></ [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 2.5.7 Released</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-5-7-and'>Groovy 2.5.7 and 3.0.0-beta-1 Windows Installers Released (Community Artifacts)</a></ [...]
 <p>Dear community,</p>
 </div>
 <div class="paragraph">
diff --git a/blog/groovy-2-5-clibuilder-renewal.html b/blog/groovy-2-5-clibuilder-renewal.html
index bb8f901..2882276 100644
--- a/blog/groovy-2-5-clibuilder-renewal.html
+++ b/blog/groovy-2-5-clibuilder-renewal.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Apache Groovy 2.5 CliBuilder Renewal</a></li><li><a href='#_the_code_groovy_util_clibuilder_code_class_is_deprecated' class='anchor-link'>The <code>groovy.util.CliBuilder</code> Class is Deprecated</a></li><li><a href='#_typed_options' class='anchor-link'>Typed Options</a> [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Apache Groovy 2.5 CliBuilder Renewal</a></li><li><a href='#_the_code_groovy_util_clibuilder_code_class_is_deprecated' class='anchor-link'>The <code>groovy.util.CliBuilder</code> Class is Deprecated</a></li><li><a href='#_typed_options' class='anchor-link'>Typed Options</a> [...]
 <div class="sectionbody">
 <div class="paragraph">
 <p>The <code>CliBuilder</code> class for quickly and concisely building
diff --git a/blog/groovy-3-0-0-alpha.html b/blog/groovy-3-0-0-alpha.html
index ecb37c4..072927f 100644
--- a/blog/groovy-3-0-0-alpha.html
+++ b/blog/groovy-3-0-0-alpha.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 3.0.0-alpha-4 Released</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-3-0-0-alpha1'>Groovy 3.0.0-alpha-4 Windows Installer Released (Community Artifact)</a></ [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 3.0.0-alpha-4 Released</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-3-0-0-alpha1'>Groovy 3.0.0-alpha-4 Windows Installer Released (Community Artifact)</a></ [...]
 <p>Dear community,</p>
 </div>
 <div class="paragraph">
diff --git a/blog/groovy-3-0-0-alpha1.html b/blog/groovy-3-0-0-alpha1.html
index 66029e9..e31c97a 100644
--- a/blog/groovy-3-0-0-alpha1.html
+++ b/blog/groovy-3-0-0-alpha1.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 3.0.0-alpha-4 Windows Installer Released (Community Artifact)</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-3-0-0-alpha'>Groovy 3.0.0-alpha-4 Released</a></l [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 3.0.0-alpha-4 Windows Installer Released (Community Artifact)</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-3-0-0-alpha'>Groovy 3.0.0-alpha-4 Released</a></l [...]
 <p>The Windows installer for Groovy 3.0.0-alpha-4 (Community Artifact) is available from the usual place:
 <a href="https://bintray.com/groovy/Distributions/download_file?file_path=groovy-3.0.0-alpha-4-installer.exe" class="bare">https://bintray.com/groovy/Distributions/download_file?file_path=groovy-3.0.0-alpha-4-installer.exe</a></p>
 </div>
diff --git a/blog/groovy-3-0-0-beta.html b/blog/groovy-3-0-0-beta.html
index 11f43dd..5b92e60 100644
--- a/blog/groovy-3-0-0-beta.html
+++ b/blog/groovy-3-0-0-beta.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 3.0.0-beta-1 Released</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-3-0-0-alpha'>Groovy 3.0.0-alpha-4 Released</a></li><li><a href='./groovy-3-0-0-beta2'>Gro [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 3.0.0-beta-1 Released</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-3-0-0-alpha'>Groovy 3.0.0-alpha-4 Released</a></li><li><a href='./groovy-3-0-0-beta1'>Gro [...]
 <p>Dear community,</p>
 </div>
 <div class="paragraph">
diff --git a/blog/groovy-3-0-0-beta1.html b/blog/groovy-3-0-0-beta1.html
index 635dc70..0316ed4 100644
--- a/blog/groovy-3-0-0-beta1.html
+++ b/blog/groovy-3-0-0-beta1.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 3.0.0-beta-2 Released</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-3-0-0-beta2'>Groovy 3.0.0-beta-2 Windows Installer Released (Community Release)</a></li>< [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 3.0.0-beta-2 Released</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-3-0-0-beta2'>Groovy 3.0.0-beta-2 Windows Installer Released (Community Release)</a></li>< [...]
 <p>Dear community,</p>
 </div>
 <div class="paragraph">
diff --git a/blog/groovy-3-0-0-beta2.html b/blog/groovy-3-0-0-beta2.html
index 52d4c04..475e4fa 100644
--- a/blog/groovy-3-0-0-beta2.html
+++ b/blog/groovy-3-0-0-beta2.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 3.0.0-beta-2 Windows Installer Released (Community Release)</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-3-0-0-alpha1'>Groovy 3.0.0-alpha-4 Windows Installe [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 3.0.0-beta-2 Windows Installer Released (Community Release)</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-3-0-0-beta1'>Groovy 3.0.0-beta-2 Released</a></li>< [...]
 <p>The Windows installer for Groovy 3.0.0-beta-2 is now available from Bintray:
 <a href="https://bintray.com/groovy/Distributions/download_file?file_path=groovy-3.0.0-beta-2-installer.exe" class="bare">https://bintray.com/groovy/Distributions/download_file?file_path=groovy-3.0.0-beta-2-installer.exe</a></p>
 </div>
diff --git a/blog/groovy-4-0-3-released.html b/blog/groovy-4-0-3-released.html
index d91807b..9b2b051 100644
--- a/blog/groovy-4-0-3-released.html
+++ b/blog/groovy-4-0-3-released.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 4.0.3 Released</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-5-7-released'>Groovy 2.5.7 Released</a></li><li><a href='./groovy-2-5-5-windows'>Groovy 2.5.5  [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy 4.0.3 Released</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-5-2-windows'>Groovy 2.5.2 Windows Installer Released (Community Artifact)</a></li><li><a href= [...]
 <p>Dear community,</p>
 </div>
 <div class="paragraph">
diff --git a/blog/groovy-haiku-processing.html b/blog/groovy-haiku-processing.html
index fe9d0f7..28d540c 100644
--- a/blog/groovy-haiku-processing.html
+++ b/blog/groovy-haiku-processing.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy Haiku processing</a></li><li><a href='#_example_1_finding_the_distinct_letters' class='anchor-link'>Example 1: Finding the distinct letters</a></li><li><a href='#_example_2_splitting_letters_into_unique_and_duplicate_partitions' class='anchor-link'>Example 2: Splitt [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy Haiku processing</a></li><li><a href='#_example_1_finding_the_distinct_letters' class='anchor-link'>Example 1: Finding the distinct letters</a></li><li><a href='#_example_2_splitting_letters_into_unique_and_duplicate_partitions' class='anchor-link'>Example 2: Splitt [...]
 <div class="sectionbody">
 <div class="paragraph">
 <p>This blog looks at some Groovy solutions for the examples in the
diff --git a/blog/groovy-list-processing-cheat-sheet.html b/blog/groovy-list-processing-cheat-sheet.html
index 6f29e14..1751487 100644
--- a/blog/groovy-list-processing-cheat-sheet.html
+++ b/blog/groovy-list-processing-cheat-sheet.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy List Processing Cheat Sheet</a></li><li><a href='#_declaring_lists' class='anchor-link'>Declaring lists</a></li><li><a href='#_list_elements_and_properties' class='anchor-link'>List elements and properties</a></li><li><a href='#_modifying_mutable_lists' class='ancho [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy List Processing Cheat Sheet</a></li><li><a href='#_declaring_lists' class='anchor-link'>Declaring lists</a></li><li><a href='#_list_elements_and_properties' class='anchor-link'>List elements and properties</a></li><li><a href='#_modifying_mutable_lists' class='ancho [...]
 <h2 id="_declaring_lists">Declaring lists</h2>
 <div class="sectionbody">
 <div class="paragraph">
diff --git a/blog/groovy-null-processing.html b/blog/groovy-null-processing.html
index 330af6a..82a62be 100644
--- a/blog/groovy-null-processing.html
+++ b/blog/groovy-null-processing.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy Processing Nulls In Lists</a></li><li><a href='#_libraries_covered' class='anchor-link'>Libraries covered</a></li><li><a href='#_mutating_a_list_to_remove_its_nulls' class='anchor-link'>Mutating a list to remove its nulls</a></li><li><a href='#_producing_a_new_list_ [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy Processing Nulls In Lists</a></li><li><a href='#_libraries_covered' class='anchor-link'>Libraries covered</a></li><li><a href='#_mutating_a_list_to_remove_its_nulls' class='anchor-link'>Mutating a list to remove its nulls</a></li><li><a href='#_producing_a_new_list_ [...]
 <div class="sectionbody">
 <div class="paragraph">
 <p>This <a href="https://www.programmergirl.com/java-remove-nulls-from-list/">article</a> by <a href="https://www.programmergirl.com/about-me/">Shubhra Srivastava</a>
diff --git a/blog/groovy-record-performance.html b/blog/groovy-record-performance.html
new file mode 100644
index 0000000..c07eb6a
--- /dev/null
+++ b/blog/groovy-record-performance.html
@@ -0,0 +1,718 @@
+<!DOCTYPE html>
+<!--[if lt IE 7]>      <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
+<!--[if IE 7]>         <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
+<!--[if IE 8]>         <html class="no-js lt-ie9"> <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]--><head>
+    <meta charset='utf-8'/><meta http-equiv='X-UA-Compatible' content='IE=edge'/><meta name='viewport' content='width=device-width, initial-scale=1'/><meta name='keywords' content='groovy, records, java, scala, kotlin, lombok'/><meta name='description' content='This post looks at the performance of some of the generated methods in Groovy records.'/><title>The Apache Groovy programming language - Blogs - Groovy Record Performance</title><link href='../img/favicon.ico' type='image/x-ico' r [...]
+</head><body>
+    <div id='fork-me'>
+        <a href='https://github.com/apache/groovy'>
+            <img style='position: fixed; top: 20px; right: -58px; border: 0; z-index: 100; transform: rotate(45deg);' src='/img/horizontal-github-ribbon.png'/>
+        </a>
+    </div><div id='st-container' class='st-container st-effect-9'>
+        <nav class='st-menu st-effect-9' id='menu-12'>
+            <h2 class='icon icon-lab'>Socialize</h2><ul>
+                <li>
+                    <a href='https://groovy-lang.org/mailing-lists.html' class='icon'><span class='fa fa-envelope'></span> Discuss on the mailing-list</a>
+                </li><li>
+                    <a href='https://twitter.com/ApacheGroovy' class='icon'><span class='fa fa-twitter'></span> Groovy on Twitter</a>
+                </li><li>
+                    <a href='https://groovy-lang.org/events.html' class='icon'><span class='fa fa-calendar'></span> Events and conferences</a>
+                </li><li>
+                    <a href='https://github.com/apache/groovy' class='icon'><span class='fa fa-github'></span> Source code on GitHub</a>
+                </li><li>
+                    <a href='https://groovy-lang.org/reporting-issues.html' class='icon'><span class='fa fa-bug'></span> Report issues in Jira</a>
+                </li><li>
+                    <a href='http://stackoverflow.com/questions/tagged/groovy' class='icon'><span class='fa fa-stack-overflow'></span> Stack Overflow questions</a>
+                </li><li>
+                    <a href='http://groovycommunity.com/' class='icon'><span class='fa fa-slack'></span> Slack Community</a>
+                </li>
+            </ul>
+        </nav><div class='st-pusher'>
+            <div class='st-content'>
+                <div class='st-content-inner'>
+                    <!--[if lt IE 7]>
+                    <p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
+                <![endif]--><div><div class='navbar navbar-default navbar-static-top' role='navigation'>
+                            <div class='container'>
+                                <div class='navbar-header'>
+                                    <button type='button' class='navbar-toggle' data-toggle='collapse' data-target='.navbar-collapse'>
+                                        <span class='sr-only'></span><span class='icon-bar'></span><span class='icon-bar'></span><span class='icon-bar'></span>
+                                    </button><a class='navbar-brand' href='../index.html'>
+                                        <i class='fa fa-star'></i> Apache Groovy
+                                    </a>
+                                </div><div class='navbar-collapse collapse'>
+                                    <ul class='nav navbar-nav navbar-right'>
+                                        <li class=''><a href='https://groovy-lang.org/learn.html'>Learn</a></li><li class=''><a href='https://groovy-lang.org/documentation.html'>Documentation</a></li><li class=''><a href='/download.html'>Download</a></li><li class=''><a href='https://groovy-lang.org/support.html'>Support</a></li><li class=''><a href='/'>Contribute</a></li><li class=''><a href='https://groovy-lang.org/ecosystem.html'>Ecosystem</a></li><li class=''><a href='/blog'>Blog pos [...]
+                                            <a data-effect='st-effect-9' class='st-trigger' href='#'>Socialize</a>
+                                        </li><li class=''>
+                                            <a href='../search.html'>
+                                                <i class='fa fa-search'></i>
+                                            </a>
+                                        </li>
+                                    </ul>
+                                </div>
+                            </div>
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy Record Performance</a></li><li><a href='#_our_domain' class='anchor-link'>Our domain</a></li><li><a href='#_performance_of_hashcode' class='anchor-link'>Performance of <code>hashCode</code></a></li><li><a href='#_performance_of_equals' class='anchor-link'>Performanc [...]
+<div class="sectionbody">
+<div class="paragraph">
+<p>We highly recommend the excellent
+<a href="https://www.youtube.com/results?search_query=%23jepcafe">JEP Café</a>
+series on the
+<a href="https://www.youtube.com/@java">@java</a> YouTube channel.
+Features arriving on the JDK are likely to be features you will
+be able to use in Groovy soon too!</p>
+</div>
+<div class="paragraph">
+<p>In JEP Café <a href="https://www.youtube.com/watch?v=1oC9ESbyvqs">Episode 8</a>,
+<a href="https://twitter.com/JosePaumard">José Paumard</a> looks at a number of topics related to Records including the performance
+of some of the generated methods like <code>hashCode</code> and <code>equals</code>.
+It compares the performance of those methods for Java, Kotlin
+data classes and Lombok&#8217;s @Data classes.</p>
+</div>
+<div class="paragraph">
+<p>Let&#8217;s do a similar comparison adding in Scala case classes
+and Groovy records. For Groovy, we&#8217;ll cover native records
+and emulated records (which you can use on JDK8 and above
+if you are still stuck on older JDK versions).</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_our_domain">Our domain</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>We&#8217;ll use the example about 7½ minutes into the JEP Café episode.
+It is an aggregate of five Strings
+which together form a kind of aggregate label.</p>
+</div>
+<div class="sect2">
+<h3 id="_java_record">Java record</h3>
+<div class="paragraph">
+<p>Here is the Java version:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="java">public record JavaRecordLabel(String x0, String x1, String x2, String x3, String x4) { }</code></pre>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_java_class_with_lomboks_data">Java class with Lombok&#8217;s @Data</h3>
+<div class="paragraph">
+<p>Here is the Lombok equivalent:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="java">@Data
+public class LombokDataLabel {
+    final String x0, x1, x2, x3, x4;
+}</code></pre>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_kotlin_data_class">Kotlin data class</h3>
+<div class="paragraph">
+<p>Here is the Kotlin equivalent:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="kotlin">data class KotlinDataLabel (
+    val x0: String, val x1: String, val x2: String,
+    val x3: String, val x4: String)</code></pre>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_scala_case_class">Scala case class</h3>
+<div class="paragraph">
+<p>Here is the Scala equivalent:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="scala">case class ScalaCaseLabel(x0: String, x1: String, x2: String, x3: String, x4: String)</code></pre>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_groovy_record">Groovy record</h3>
+<div class="paragraph">
+<p>Here is the Groovy equivalent:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="groovy">record GroovyRecordLabel(String x0, String x1, String x2, String x3, String x4) { }</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This will produce bytecode similar to a native Java record
+when run on a version of the JDK supporting records.
+On earlier JDK versions, it will produce an emulated record.
+We are going to use JDK17 for our examples. We can force the
+Groovy compiler to produce emulated code with JDK17 by
+applying a record option annotation as shown here:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="groovy">@RecordOptions(mode = RecordTypeMode.EMULATE)
+record GroovyEmulatedRecordLabel(String x0, String x1, String x2, String x3, String x4) { }</code></pre>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_performance_of_hashcode">Performance of <code>hashCode</code></h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Our benchmark code was written in Java for all cases
+and used <a href="https://github.com/openjdk/jmh">JMH</a>.
+It called the <code>hashCode</code> method of a static instance
+for each of the different cases.
+The full source code is in a <code>record-performance</code> <a href="https://github.com/paulk-asert/record-performance/">repo</a> on GitHub.</p>
+</div>
+<div class="paragraph">
+<p>Here is an example of setting up the static instance (<code>X0</code> .. <code>X4</code> are String constants):</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="java">private static final JavaRecordLabel JAVA_RECORD_LABEL = new JavaRecordLabel(X0, X1, X2, X3, X4);</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Here is an example of the benchmark test:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="java">@Benchmark
+public void hashcodeJavaRecord(Blackhole bh) {
+    bh.consume(JAVA_RECORD_LABEL.hashCode());
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>We used 3 warmup iterations and 10 benchmark iterations:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="groovy">jmh {
+    warmupIterations = 3
+    iterations = 10
+    fork = 1
+    timeUnit = 'ns'
+    benchmarkMode = ['avgt']
+}</code></pre>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_results">Results</h3>
+<div class="paragraph">
+<p>The tests were run using GitHub actions on various platforms.
+The results show average time taken in nanoseconds, so a smaller <em>Score</em> means faster.</p>
+</div>
+<div class="sect3">
+<h4 id="_using_ubuntu_latest">Using ubuntu-latest</h4>
+<div class="listingblock">
+<div class="content">
+<pre>Benchmark                                         Mode  Cnt   Score   Error  Units
+HashCodeBenchmark.hashcodeGroovyEmulatedRecord    avgt   10   3.530 ± 0.186  ns/op
+HashCodeBenchmark.hashcodeGroovyRecord            avgt   10   3.180 ± 0.145  ns/op
+HashCodeBenchmark.hashcodeJavaRecord              avgt   10   3.184 ± 0.156  ns/op
+HashCodeBenchmark.hashcodeKotlinDataLabel         avgt   10   7.523 ± 0.272  ns/op
+HashCodeBenchmark.hashcodeLombokDataLabel         avgt   10  19.042 ± 0.425  ns/op
+HashCodeBenchmark.hashcodeScalaCaseLabel          avgt   10  21.639 ± 0.843  ns/op</pre>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_using_windows_latest">Using windows-latest</h4>
+<div class="listingblock">
+<div class="content">
+<pre>Benchmark                                         Mode  Cnt   Score   Error  Units
+HashCodeBenchmark.hashcodeGroovyEmulatedRecord    avgt   10   3.074 ± 0.010  ns/op
+HashCodeBenchmark.hashcodeGroovyRecord            avgt   10   2.832 ± 0.004  ns/op
+HashCodeBenchmark.hashcodeJavaRecord              avgt   10   3.233 ± 0.003  ns/op
+HashCodeBenchmark.hashcodeKotlinDataLabel         avgt   10   4.091 ± 0.006  ns/op
+HashCodeBenchmark.hashcodeLombokDataLabel         avgt   10  19.000 ± 0.027  ns/op
+HashCodeBenchmark.hashcodeScalaCaseLabel          avgt   10  18.984 ± 0.172  ns/op</pre>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_using_macos_latest">Using macos-latest</h4>
+<div class="listingblock">
+<div class="content">
+<pre>Benchmark                                         Mode  Cnt   Score   Error  Units
+HashCodeBenchmark.hashcodeGroovyEmulatedRecord    avgt   10   2.732 ± 0.135  ns/op
+HashCodeBenchmark.hashcodeGroovyRecord            avgt   10   2.995 ± 0.038  ns/op
+HashCodeBenchmark.hashcodeJavaRecord              avgt   10   3.056 ± 0.147  ns/op
+HashCodeBenchmark.hashcodeKotlinDataLabel         avgt   10   6.670 ± 0.308  ns/op
+HashCodeBenchmark.hashcodeLombokDataLabel         avgt   10  16.560 ± 0.425  ns/op
+HashCodeBenchmark.hashcodeScalaCaseLabel          avgt   10  17.542 ± 0.465  ns/op</pre>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_graphing_the_results">Graphing the results</h4>
+<div class="paragraph">
+<p>We can already see some variance in the results across platforms.
+So, let&#8217;s average the results across the three platforms, which
+gives us the following chart:</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="img/hashcodeTimes.png" alt="hashcodeTimes"></span></p>
+</div>
+<div class="paragraph">
+<p>Next we&#8217;ll look at some of the reasons behind these differences
+and some other considerations which can help you speed up <code>hashCode</code>
+or justify why you might want to choose a slower version as a
+trade-off for other useful properties.</p>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_discussion">Discussion</h3>
+<div class="paragraph">
+<p>It is always dangerous to draw too many conclusions from microbenchmarks.
+We don&#8217;t always know if we are comparing apples with apples, or what else
+was running on the machine when the benchmarks were executed, or how changing
+the benchmark slightly might alter the result. Certainly for <code>hashCode</code>,
+the result is impacted by the number of and types of our record components.
+Even the particular data instances (arbitrary Strings in our case) will
+impact the speed of that method.</p>
+</div>
+<div class="paragraph">
+<p>But what does this really tell us? For Groovy users, it is good to know
+that the <code>hashCode</code> method is as good or better than Java records.
+That isn&#8217;t too surprising since the Groovy bytecode is almost identical
+to the Java bytecode for most parts of records.</p>
+</div>
+<div class="paragraph">
+<p>For Lombok and the other languages, the <code>hashCode</code> method is slower but only
+by a few (or into the 10s of) nanoseconds.
+Do we really care about how fast this particular method is?
+Certainly if we are storing a lot of our label instances
+into hashed collections, it could matter, but otherwise, not so much;
+we&#8217;ll rarely call this method directly.</p>
+</div>
+<div class="paragraph">
+<p>But speed is only one of properties we&#8217;d like in a good <code>hashCode</code> method.
+Another is minimal collisions. We can after all return the constant <code>0</code> or <code>-1</code>
+from our <code>hashCode</code> and that would be very fast but hopeless in terms of collisions.</p>
+</div>
+<div class="sect3">
+<h4 id="_hashing_algorithm">Hashing algorithm</h4>
+<div class="paragraph">
+<p>For Scala case classes, the
+<a href="https://en.wikipedia.org/wiki/MurmurHash">Murmur3</a> hashing algorithm is currently
+used which is slightly slower that what Java uses but
+<a href="https://stackoverflow.com/questions/40980193/scala-murmur-hash-vs-java-native-hash">claims</a>
+to have improved collision resistance.
+If you are using large collections or records with many components, this tradeoff
+might be worth considering.</p>
+</div>
+<div class="paragraph">
+<p>You can use Scala&#8217;s algorithm directly in Groovy with a record definition like this:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="groovy">record GroovyRecordScalaMurmur3Label(String x0, String x1, String x2, String x3, String x4) {
+    int hashCode() {
+        ScalaRunTime._hashCode(new Tuple5&lt;&gt;(x0, x1, x2, x3, x4))
+    }
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>And this has almost identical performance to the native Scala example from our earlier bar chart.</p>
+</div>
+<div class="paragraph">
+<p>If you want a smaller dependency than the Scala runtime jar, you could use
+the <a href="https://guava.dev/releases/31.0-jre/api/docs/src-html/com/google/common/hash/Hashing.html#line.158">32-bit Murmur3</a> algorithm from <a href="https://github.com/google/guava">Guava</a>
+or write your own combiner to combine hashes produced by Apache Commons Codec&#8217;s
+<a href="https://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/digest/MurmurHash3.html#hash32x86-byte:A-">Murmur3 algorithm</a> on the bytes of each String component.
+In my tests, both of these alternatives ended up being slower than borrowing Scala&#8217;s algorithm,
+but I didn&#8217;t try to optimise my implementation.</p>
+</div>
+<div class="paragraph">
+<p>If you want to diver deeper on this topic, check out:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>this great overview article about <a href="https://www.baeldung.com/java-hashmap-optimize-performance">Optimizing HashMap’s Performance</a>,</p>
+</li>
+<li>
+<p>and this article on
+<a href="https://www.javacodegeeks.com/2015/09/an-introduction-to-optimising-a-hashing-strategy.html">optimising a hashing strategy</a> and its impact on collisions,</p>
+</li>
+<li>
+<p>the original
+<a href="https://github.com/aappleby/smhasher/wiki/MurmurHash3">C++ implementation</a> of the Murmur3 algorithm.</p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_jdk_version_support">JDK version support</h4>
+<div class="paragraph">
+<p>One difference worth pointing out is that the Groovy, Lombok and other
+languages work on earlier JDKs. As the GitHub action workflow configuration
+shows, the example in this blog post are tested on JDK 8, 11 and 17.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="yaml">matrix:
+  java: [8,11,17]</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The Java record examples are tested in JDK 17 (technically requires 16+).
+This is good to know if you are stuck on earlier versions but should become
+less of an issue over time.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_caching">Caching</h4>
+<div class="paragraph">
+<p>A nice Groovy feature provided by some of Groovy&#8217;s transforms
+is <em>caching</em>, which is exactly what you might want to do
+for immutable classes (like records). In fact, in Groovy, caching is turned on
+by default for the <code>hashCode</code> and <code>toString</code> methods for <code>@Immutable</code> classes,
+but we leave it off by default for records for Java compatibility.</p>
+</div>
+<div class="paragraph">
+<p>Let&#8217;s turn on caching for the <code>hashCode</code> method with Groovy:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="groovy">@EqualsAndHashCode(useGetters = false, cache = true)
+record GroovyRecordWithCacheLabel(String x0, String x1, String x2, String x3, String x4) { }</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>By default, Groovy records behave like Java records.
+By supplying the <code>@EqualsAndHashCode</code> annotation, we effectively get
+the code for an emulated record instead of the normal record bytecode.
+To be as close to records as possible but with caching turned on,
+we enable <code>cache</code> and disable <code>useGetters</code>. We&#8217;ll discuss the latter
+in more detail in the next subsection.</p>
+</div>
+<div class="paragraph">
+<p>Now, let&#8217;s change our Java and Groovy benchmark code to simulate some code that
+uses <code>hashCode</code> multiple times. For our purposes, we&#8217;ll just sum 5 calls to <code>hashCode</code>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="java">@Benchmark
+public void hashcodeJavaRecord(Blackhole bh) {
+    bh.consume(JAVA_RECORD_LABEL.hashCode()
+        + JAVA_RECORD_LABEL.hashCode()
+        + JAVA_RECORD_LABEL.hashCode()
+        + JAVA_RECORD_LABEL.hashCode()
+        + JAVA_RECORD_LABEL.hashCode());
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>And we can do the same for Groovy. Here are the results of our new benchmark:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>Benchmark                                         Mode  Cnt   Score   Error  Units
+HashCodeCacheBenchmark.hashcodeGroovyCacheRecord  avgt   10   4.296 ± 0.108  ns/op  windows-latest
+HashCodeCacheBenchmark.hashcodeGroovyCacheRecord  avgt   10   4.787 ± 0.151  ns/op  ubuntu-latest
+HashCodeCacheBenchmark.hashcodeGroovyCacheRecord  avgt   10   5.465 ± 0.045  ns/op  macos-latest
+HashCodeCacheBenchmark.hashcodeJavaRecord         avgt   10  21.956 ± 0.023  ns/op  windows-latest
+HashCodeCacheBenchmark.hashcodeJavaRecord         avgt   10  33.820 ± 0.750  ns/op  ubuntu-latest
+HashCodeCacheBenchmark.hashcodeJavaRecord         avgt   10  32.837 ± 1.136  ns/op  macos-latest</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>As expected, the effect of caching is clearly visible. We could certainly
+write our own caching with an explicit <code>hashCode</code> method in Java and perhaps
+call into <code>Objects.hash</code> or similar, but it&#8217;s not as nice as having a declarative
+approach to achieve that.</p>
+</div>
+<div class="paragraph">
+<p>As a side note, we could add <code>@Memoized</code> to the <code>hashCode</code> method in our earlier
+<code>GroovyRecordScalaMurmur3Label</code> example to turn on caching when using that algorithm.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_supporting_javabean_like_behavior">Supporting JavaBean-like behavior</h4>
+<div class="paragraph">
+<p>One other "feature" of Java (and Groovy) records is the ability to override the
+record component "getters". You could for instance, write a 3-String label record in Java that
+always returns its <code>x1</code> component in uppercase:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="java">public record JavaRecordLabelUpper(String x0, String x1, String x2) {
+    public String x1() { return x1.toUpperCase(); }
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Now using the <code>x1()</code> getter method will give you the uppercase version.
+Just be aware though that <code>hashCode</code> (and <code>equals</code>) don&#8217;t use the getter
+but access the field directly.</p>
+</div>
+<div class="paragraph">
+<p>So, while all the components might be equal in the following example,
+the hashcode (and the record as a whole) won&#8217;t be equal:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="java">private static final JavaRecordLabelUpper JAVA_UPPER_1
+        = new JavaRecordLabelUpper("a", "b", "c");
+private static final JavaRecordLabelUpper JAVA_UPPER_2
+        = new JavaRecordLabelUpper("a", "B", "c");
+...
+assertEquals(JAVA_UPPER_1.x0(), JAVA_UPPER_2.x0());
+assertEquals(JAVA_UPPER_1.x1(), JAVA_UPPER_2.x1());
+assertEquals(JAVA_UPPER_1.x2(), JAVA_UPPER_2.x2());
+assertNotEquals(JAVA_UPPER_1.hashCode(), JAVA_UPPER_2.hashCode());
+assertNotEquals(JAVA_UPPER_1, JAVA_UPPER_2);</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This is exactly as expected from the record-related parts of the JLS specification
+and is a reasonable design decision given that records are handling the use case
+of <em>"a simple aggregate of values"</em>.
+Indeed, records step away from many of the JavaBean conventions, so we might expect
+some differences, yet not using the getter might still seem strange to some folks.</p>
+</div>
+<div class="paragraph">
+<p>The JLS specification elaborates further, stating that the above <code>JavaRecordLabelUpper</code>
+class might be considered bad style. The rationale is in terms of a record <code>r2</code> derived
+from the components of record <code>r1</code>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="java">R r2 = new R(r1.c1(), r1.c2(), ..., r1.cn());</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>For any well-behaved record class, <code>r1.equals(r2)</code> should be true, which
+won&#8217;t be the case for <code>JavaRecordLabelUpper</code>.</p>
+</div>
+<div class="paragraph">
+<p>Accessing the component through its getter is slower but would preserve the above property.
+Both the Lombok and Scala implementations use the getter. This accounts for some of the
+reduced speed of those implementations.</p>
+</div>
+<div class="paragraph">
+<p>Groovy records default to Java behavior here but allow you to use the getters
+for <code>hashCode</code> (and <code>equals</code> and <code>toString</code>) if you so desire. It will be slower
+be preserves traditional JavaBean-like getter behavior.</p>
+</div>
+<div class="paragraph">
+<p>Here is what the code would look like:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="groovy">@EqualsAndHashCode
+record GroovyRecordUpperGetter(String x0, String x1, String x2) {
+    String x1() { x1.toUpperCase() }
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The explicit annotation turns on Groovy&#8217;s emulated record bytecode
+which is the same algorithm but defaults to using the getters.</p>
+</div>
+<div class="paragraph">
+<p>And now our tests pass (with <code>assertEquals</code> instead of <code>assertNotEquals</code>):</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="java">private static final GroovyRecordUpperGetter GROOVY_UPPER_GETTER_1
+        = new GroovyRecordUpperGetter("a", "b", "c");
+private static final GroovyRecordUpperGetter GROOVY_UPPER_GETTER_2
+        = new GroovyRecordUpperGetter("a", "B", "c");
+...
+assertEquals(GROOVY_UPPER_GETTER_1.hashCode(), GROOVY_UPPER_GETTER_2.hashCode());</code></pre>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_summary">Summary</h4>
+<div class="paragraph">
+<p>Groovy records have good <code>hashCode</code> performance. There are times when you might want to
+enable caching. Rarely, you might want to also consider swapping the hashing algorithm
+or enabling getters, but if you need to, Groovy makes that easy too.</p>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_performance_of_equals">Performance of <code>equals</code></h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>For this benchmark, the <code>equals</code> method of a static instance
+was called passing in a second static instance.</p>
+</div>
+<div class="paragraph">
+<p>Here is an example of our benchmark code:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="java">@Benchmark
+public void equalsGroovyRecord(Blackhole bh) {
+    bh.consume(GROOVY_RECORD_LABEL.equals(GROOVY_RECORD_LABEL_2));
+}</code></pre>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_results_2">Results</h3>
+<div class="paragraph">
+<p>As before, the tests were run using GitHub actions on various platforms.
+The results show average time taken in nanoseconds, so a smaller <em>Score</em> means faster.</p>
+</div>
+<div class="sect3">
+<h4 id="_using_ubuntu_latest_2">Using ubuntu-latest</h4>
+<div class="listingblock">
+<div class="content">
+<pre>Benchmark                                           Mode  Cnt   Score   Error  Units
+EqualsBenchmark.equalsGroovyEmulatedRecord          avgt   10   2.573 ± 0.017  ns/op
+EqualsBenchmark.equalsGroovyRecord                  avgt   10   0.592 ± 0.002  ns/op
+EqualsBenchmark.equalsJavaRecord                    avgt   10   0.595 ± 0.006  ns/op
+EqualsBenchmark.equalsKotlinDataLabel               avgt   10   3.560 ± 0.024  ns/op
+EqualsBenchmark.equalsLombokDataLabel               avgt   10  24.914 ± 0.118  ns/op
+EqualsBenchmark.equalsScalaCaseLabel                avgt   10  25.000 ± 0.141  ns/op</pre>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_using_windows_latest_2">Using windows-latest</h4>
+<div class="listingblock">
+<div class="content">
+<pre>Benchmark                                           Mode  Cnt   Score   Error  Units
+EqualsBenchmark.equalsGroovyEmulatedRecord          avgt   10   2.221 ± 0.012  ns/op
+EqualsBenchmark.equalsGroovyRecord                  avgt   10   0.511 ± 0.002  ns/op
+EqualsBenchmark.equalsJavaRecord                    avgt   10   0.512 ± 0.001  ns/op
+EqualsBenchmark.equalsKotlinDataLabel               avgt   10   3.071 ± 0.007  ns/op
+EqualsBenchmark.equalsLombokDataLabel               avgt   10  21.491 ± 0.038  ns/op
+EqualsBenchmark.equalsScalaCaseLabel                avgt   10  21.477 ± 0.032  ns/op</pre>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_using_macos_latest_2">Using macos-latest</h4>
+<div class="listingblock">
+<div class="content">
+<pre>Benchmark                                           Mode  Cnt   Score   Error  Units
+EqualsBenchmark.equalsGroovyEmulatedRecord          avgt   10   1.841 ± 0.036  ns/op
+EqualsBenchmark.equalsGroovyRecord                  avgt   10   0.557 ± 0.002  ns/op
+EqualsBenchmark.equalsJavaRecord                    avgt   10   0.557 ± 0.001  ns/op
+EqualsBenchmark.equalsKotlinDataLabel               avgt   10   2.620 ± 0.013  ns/op
+EqualsBenchmark.equalsLombokDataLabel               avgt   10  19.273 ± 0.125  ns/op
+EqualsBenchmark.equalsScalaCaseLabel                avgt   10  19.335 ± 0.298  ns/op</pre>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_graphing_the_results_2">Graphing the results</h4>
+<div class="paragraph">
+<p>Like before, we&#8217;ll average the results across the three platforms:</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="img/equalsTimes.png" alt="equalsTimes"></span></p>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_discussion_2">Discussion</h3>
+<div class="paragraph">
+<p>We saw for <code>hashCode</code>, that using getters retained JavaBean-like expectations
+but with additional costs of calling that method. That impact is doubly worse
+for <code>equals</code> since we call the getters for <code>this</code> and the instance we are comparing
+against. This explains a significant part of the slowness for Lombok and Scala.</p>
+</div>
+<div class="paragraph">
+<p>Groovy follows Java behavior here by default but enables you to turn on getters
+if you desire.</p>
+</div>
+<div class="paragraph">
+<p>The JLS has an example of a <code>SmallPoint</code> record in section
+<a href="https://docs.oracle.com/javase/specs/jls/se20/html/jls-8.html#jls-8.10.3">8.10.3</a>
+which is discussed as <em>bad style</em> because with Java records the last statement prints <code>false</code>.
+If we enable getters, the last statement now prints <code>true</code> as shown in this Groovy equivalent
+of that example:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="java">@EqualsAndHashCode
+record SmallPoint(int x, int y) {
+    int x() { this.x &lt; 100 ? this.x : 100 }
+    int y() { this.y &lt; 100 ? this.y : 100 }
+
+    static main(args) {
+        var p1 = new SmallPoint(200, 300)
+        var p2 = new SmallPoint(200, 300)
+        println p1 == p2  // prints true
+
+        var p3 = new SmallPoint(p1.x(), p1.y())
+        println p1 == p3  // prints true
+    }
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Never-the-less, for this particular example, it might be better style to leave the
+normal field access in place and provide something like a compact canonical
+constructor to truncate the points during construction.</p>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_summary_2">Summary</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>We have looked at a few aspects of the performance of Groovy records and compared
+them to other languages. Groovy&#8217;s default behavior piggybacks directly on Java&#8217;s
+behavior but Groovy has many declarative options to tweak the generated code if needed.</p>
+</div>
+</div>
+</div></div></div></div></div><footer id='footer'>
+                            <div class='row'>
+                                <div class='colset-3-footer'>
+                                    <div class='col-1'>
+                                        <h1>Groovy</h1><ul>
+                                            <li><a href='https://groovy-lang.org/learn.html'>Learn</a></li><li><a href='https://groovy-lang.org/documentation.html'>Documentation</a></li><li><a href='/download.html'>Download</a></li><li><a href='https://groovy-lang.org/support.html'>Support</a></li><li><a href='/'>Contribute</a></li><li><a href='https://groovy-lang.org/ecosystem.html'>Ecosystem</a></li><li><a href='/blog'>Blog posts</a></li><li><a href='https://groovy.apache.org/events.ht [...]
+                                        </ul>
+                                    </div><div class='col-2'>
+                                        <h1>About</h1><ul>
+                                            <li><a href='https://github.com/apache/groovy'>Source code</a></li><li><a href='https://groovy-lang.org/security.html'>Security</a></li><li><a href='https://groovy-lang.org/learn.html#books'>Books</a></li><li><a href='https://groovy-lang.org/thanks.html'>Thanks</a></li><li><a href='http://www.apache.org/foundation/sponsorship.html'>Sponsorship</a></li><li><a href='https://groovy-lang.org/faq.html'>FAQ</a></li><li><a href='https://groovy-lang.or [...]
+                                        </ul>
+                                    </div><div class='col-3'>
+                                        <h1>Socialize</h1><ul>
+                                            <li><a href='https://groovy-lang.org/mailing-lists.html'>Discuss on the mailing-list</a></li><li><a href='https://twitter.com/ApacheGroovy'>Groovy on Twitter</a></li><li><a href='https://groovy-lang.org/events.html'>Events and conferences</a></li><li><a href='https://github.com/apache/groovy'>Source code on GitHub</a></li><li><a href='https://groovy-lang.org/reporting-issues.html'>Report issues in Jira</a></li><li><a href='http://stackoverflow. [...]
+                                        </ul>
+                                    </div><div class='col-right'>
+                                        <p>
+                                            The Groovy programming language is supported by the <a href='http://www.apache.org'>Apache Software Foundation</a> and the Groovy community.
+                                        </p><div text-align='right'>
+                                            <img src='../img/asf_logo.png' title='The Apache Software Foundation' alt='The Apache Software Foundation' style='width:60%'/>
+                                        </div><p>Apache&reg; and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation.</p>
+                                    </div>
+                                </div><div class='clearfix'>&copy; 2003-2023 the Apache Groovy project &mdash; Groovy is Open Source: <a href='http://www.apache.org/licenses/LICENSE-2.0.html' alt='Apache 2 License'>license</a>, <a href='https://privacy.apache.org/policies/privacy-policy-public.html'>privacy policy</a>.</div>
+                            </div>
+                        </footer></div>
+                </div>
+            </div>
+        </div>
+    </div><script src='../js/vendor/jquery-1.10.2.min.js' defer></script><script src='../js/vendor/classie.js' defer></script><script src='../js/vendor/bootstrap.js' defer></script><script src='../js/vendor/sidebarEffects.js' defer></script><script src='../js/vendor/modernizr-2.6.2.min.js' defer></script><script src='../js/plugins.js' defer></script><script src='https://cdnjs.cloudflare.com/ajax/libs/prettify/r298/prettify.min.js'></script><script>document.addEventListener('DOMContentLoa [...]
+          (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+          (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+          m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+          })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+
+          ga('create', 'UA-257558-10', 'auto');
+          ga('send', 'pageview');
+    </script>
+</body></html>
\ No newline at end of file
diff --git a/blog/groovy-records.html b/blog/groovy-records.html
index f0271a8..0aa2a9c 100644
--- a/blog/groovy-records.html
+++ b/blog/groovy-records.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy Records</a></li><li><a href='#_introduction' class='anchor-link'>Introduction</a></li><li><a href='#_optional_enhancements' class='anchor-link'>Optional enhancements</a></li><li><a href='#_internal_details' class='anchor-link'>Internal details</a></li><li><a href='# [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy Records</a></li><li><a href='#_introduction' class='anchor-link'>Introduction</a></li><li><a href='#_optional_enhancements' class='anchor-link'>Optional enhancements</a></li><li><a href='#_internal_details' class='anchor-link'>Internal details</a></li><li><a href='# [...]
 <div class="sectionbody">
 <div class="paragraph">
 <p>A common scenario when programming is the need to group together a bunch
diff --git a/blog/groovy-release-train-4-0.html b/blog/groovy-release-train-4-0.html
index 32089c9..aea2a90 100644
--- a/blog/groovy-release-train-4-0.html
+++ b/blog/groovy-release-train-4-0.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy release train: 4.0.4, 3.0.12, 2.5.18</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-5-7-released'>Groovy 2.5.7 Released</a></li><li><a href='./groovy-2-5-5- [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy release train: 4.0.4, 3.0.12, 2.5.18</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-2-5-2-windows'>Groovy 2.5.2 Windows Installer Released (Community Artifact [...]
 <p>It&#8217;s been a productive time for the Apache Groovy project recently. We recently released versions 4.0.4, 3.0.12 and 2.5.18 with 42, 21 and 15 fixes and improvements respectively. Two quick highlights for the 4.0.4 release before getting into more details about the release.</p>
 </div>
 <div class="paragraph">
diff --git a/blog/groovy-sequenced-collections.html b/blog/groovy-sequenced-collections.html
index 8b444c0..ec0d0ba 100644
--- a/blog/groovy-sequenced-collections.html
+++ b/blog/groovy-sequenced-collections.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy and Sequenced Collections (JEP-431)</a></li><li><a href='#_sequenced_collections_summary' class='anchor-link'>Sequenced Collections Summary</a></li><li><a href='#_accessing_the_first_and_last_element' class='anchor-link'>Accessing the first and last element</a></li> [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Groovy and Sequenced Collections (JEP-431)</a></li><li><a href='#_sequenced_collections_summary' class='anchor-link'>Sequenced Collections Summary</a></li><li><a href='#_accessing_the_first_and_last_element' class='anchor-link'>Accessing the first and last element</a></li> [...]
 <div class="sectionbody">
 <div class="paragraph">
 <p>An exciting feature coming in JDK21 is
diff --git a/blog/helloworldemoji.html b/blog/helloworldemoji.html
index e53cb28..1075000 100644
--- a/blog/helloworldemoji.html
+++ b/blog/helloworldemoji.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Hello World with Emojis</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./deep-learning-and-eclipse-collections'>Deep Learning and Eclipse Collections</a></li><li><a href='./a [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Hello World with Emojis</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./deep-learning-and-eclipse-collections'>Deep Learning and Eclipse Collections</a></li><li><a href='./z [...]
 <p>In a <a href="https://groovy.apache.org/blog/jvm-hello-world-with-groovy">previous blog post</a>
 we took an in-depth look at how to write a "hello world" class at the bytecode level
 using various libraries.</p>
diff --git a/blog/img/equalsTimes.png b/blog/img/equalsTimes.png
new file mode 100644
index 0000000..d3f763a
Binary files /dev/null and b/blog/img/equalsTimes.png differ
diff --git a/blog/img/hashcodeTimes.png b/blog/img/hashcodeTimes.png
new file mode 100644
index 0000000..db066e5
Binary files /dev/null and b/blog/img/hashcodeTimes.png differ
diff --git a/blog/index.html b/blog/index.html
index 344aec0..b31dee8 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3' id='blog-index'><ul class='nav-sidebar list'><li class='active'><a href='/blog/'>Blogs</a></li><li><a href='groovy-sequenced-collections'>Groovy and Sequenced Collections (JEP-431)</a></li><li><a href='lego-bricks-with-groovy'>Lego Bricks with Groovy</a></li><li><a href='helloworldemoji'>Hello World with Emojis</a></li><li><a href='groovy-records'>Groovy Records</a [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3' id='blog-index'><ul class='nav-sidebar list'><li class='active'><a href='/blog/'>Blogs</a></li><li><a href='groovy-record-performance'>Groovy Record Performance</a></li><li><a href='groovy-sequenced-collections'>Groovy and Sequenced Collections (JEP-431)</a></li><li><a href='lego-bricks-with-groovy'>Lego Bricks with Groovy</a></li><li><a href='helloworldemoji'>Hell [...]
                             <div class='row'>
                                 <div class='colset-3-footer'>
                                     <div class='col-1'>
@@ -97,7 +97,7 @@
                     colors: am5.ColorSet.new(root, {})
                 }));
                 wc.data.setAll([
-                { category: "calendar", value: 1 }, { category: "date", value: 3 }, { category: "groovy", value: 67 }, { category: "jsr310", value: 1 }, { category: "time", value: 1 }, { category: "data science", value: 7 }, { category: "eclipse collections", value: 9 }, { category: "kmeans", value: 3 }, { category: "emoji", value: 5 }, { category: "virtual threads", value: 3 }, { category: "scala integration", value: 1 }, { category: "clustering", value: 2 }, { category: "windows instal [...]
+                { category: "centroids", value: 1 }, { category: "data science", value: 7 }, { category: "groovy", value: 68 }, { category: "kmeans", value: 3 }, { category: "records", value: 7 }, { category: "apache spark", value: 1 }, { category: "apache wayang", value: 1 }, { category: "release", value: 25 }, { category: "clibuilder", value: 1 }, { category: "picocli", value: 1 }, { category: "commons cli", value: 1 }, { category: "decryption", value: 1 }, { category: "encryption", va [...]
                 ]);
                 wc.labels.template.setAll({
                     paddingTop: 5,
diff --git a/blog/lego-bricks-with-groovy.html b/blog/lego-bricks-with-groovy.html
index 71992e9..597ccc0 100644
--- a/blog/lego-bricks-with-groovy.html
+++ b/blog/lego-bricks-with-groovy.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Lego Bricks with Groovy</a></li><li><a href='#_basic_collection_processing' class='anchor-link'>Basic Collection Processing</a></li><li><a href='#_our_example_domain' class='anchor-link'>Our example domain</a></li><li><a href='#_some_bricks_to_play_with' class='anchor-link [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Lego Bricks with Groovy</a></li><li><a href='#_basic_collection_processing' class='anchor-link'>Basic Collection Processing</a></li><li><a href='#_our_example_domain' class='anchor-link'>Our example domain</a></li><li><a href='#_some_bricks_to_play_with' class='anchor-link [...]
 <div class="sectionbody">
 <div class="paragraph">
 <p><a href="https://twitter.com/TheDonRaab">Donald Raab</a> has continued has interesting
diff --git a/blog/matrix-calculations-with-groovy-apache.html b/blog/matrix-calculations-with-groovy-apache.html
index f3fdff5..d66a923 100644
--- a/blog/matrix-calculations-with-groovy-apache.html
+++ b/blog/matrix-calculations-with-groovy-apache.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Matrix calculations with Groovy, Apache Commons Math, ojAlgo, Nd4j and EJML</a></li><li><a href='#_fibonacci' class='anchor-link'>Fibonacci</a></li><li><a href='#_leslie_matrices' class='anchor-link'>Leslie Matrices</a></li><li><a href='#_encryption_with_matrices' class='a [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Matrix calculations with Groovy, Apache Commons Math, ojAlgo, Nd4j and EJML</a></li><li><a href='#_fibonacci' class='anchor-link'>Fibonacci</a></li><li><a href='#_leslie_matrices' class='anchor-link'>Leslie Matrices</a></li><li><a href='#_encryption_with_matrices' class='a [...]
 <div class="sectionbody">
 <div class="paragraph">
 <p>This blogs looks at performing matrix calculations with Groovy
diff --git a/blog/parsing-json-with-groovy.html b/blog/parsing-json-with-groovy.html
index 466a28d..e28291c 100644
--- a/blog/parsing-json-with-groovy.html
+++ b/blog/parsing-json-with-groovy.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Parsing JSON with Groovy</a></li><li><a href='#_batteries_included_experience' class='anchor-link'>Batteries included experience</a></li><li><a href='#_gradle' class='anchor-link'>Gradle</a></li><li><a href='#_maven' class='anchor-link'>Maven</a></li><li><a href='#_advance [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Parsing JSON with Groovy</a></li><li><a href='#_batteries_included_experience' class='anchor-link'>Batteries included experience</a></li><li><a href='#_gradle' class='anchor-link'>Gradle</a></li><li><a href='#_maven' class='anchor-link'>Maven</a></li><li><a href='#_advance [...]
 <div class="sectionbody">
 <div class="paragraph">
 <p><span class="image right"><img src="img/json_logo.gif" alt="json logo" width="120"></span>
diff --git a/blog/reading-and-writing-csv-files.html b/blog/reading-and-writing-csv-files.html
index 4760695..5e326ea 100644
--- a/blog/reading-and-writing-csv-files.html
+++ b/blog/reading-and-writing-csv-files.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Reading and Writing CSV files with Groovy</a></li><li><a href='#_introduction' class='anchor-link'>Introduction</a></li><li><a href='#_commons_csv' class='anchor-link'>Commons CSV</a></li><li><a href='#_opencsv' class='anchor-link'>OpenCSV</a></li><li><a href='#_jackson_da [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Reading and Writing CSV files with Groovy</a></li><li><a href='#_introduction' class='anchor-link'>Introduction</a></li><li><a href='#_commons_csv' class='anchor-link'>Commons CSV</a></li><li><a href='#_opencsv' class='anchor-link'>OpenCSV</a></li><li><a href='#_jackson_da [...]
 <h2 id="_introduction">Introduction</h2>
 <div class="sectionbody">
 <div class="paragraph">
diff --git a/blog/testing-your-java-with-groovy.html b/blog/testing-your-java-with-groovy.html
index e894489..81a0a5d 100644
--- a/blog/testing-your-java-with-groovy.html
+++ b/blog/testing-your-java-with-groovy.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Testing your Java with Groovy, Spock, JUnit5, Jacoco, Jqwik and Pitest</a></li><li><a href='#_the_system_under_test' class='anchor-link'>The system under test</a></li><li><a href='#_testing_with_spock' class='anchor-link'>Testing with Spock</a></li><li><a href='#_mutation_ [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Testing your Java with Groovy, Spock, JUnit5, Jacoco, Jqwik and Pitest</a></li><li><a href='#_the_system_under_test' class='anchor-link'>The system under test</a></li><li><a href='#_testing_with_spock' class='anchor-link'>Testing with Spock</a></li><li><a href='#_mutation_ [...]
 <div class="sectionbody">
 <div class="paragraph">
 <p><span class="image right"><img src="img/spock_logo.png" alt="spock logo" width="100"></span>
diff --git a/blog/using-groovy-with-apache-wayang.html b/blog/using-groovy-with-apache-wayang.html
index 55a6fac..f49b844 100644
--- a/blog/using-groovy-with-apache-wayang.html
+++ b/blog/using-groovy-with-apache-wayang.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Using Groovy with Apache Wayang and Apache Spark</a></li><li><a href='#_whiskey_clustering' class='anchor-link'>Whiskey Clustering</a></li><li><a href='#_implementation_details' class='anchor-link'>Implementation Details</a></li><li><a href='#_running_with_the_java_streams [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Using Groovy with Apache Wayang and Apache Spark</a></li><li><a href='#_whiskey_clustering' class='anchor-link'>Whiskey Clustering</a></li><li><a href='#_implementation_details' class='anchor-link'>Implementation Details</a></li><li><a href='#_running_with_the_java_streams [...]
 <div class="sectionbody">
 <div class="paragraph">
 <p><span class="image right"><img src="https://www.apache.org/logos/res/wayang/default.png" alt="wayang logo" width="100"></span>
diff --git a/blog/whiskey-clustering-with-groovy-and.html b/blog/whiskey-clustering-with-groovy-and.html
index 68cb586..a0a76f5 100644
--- a/blog/whiskey-clustering-with-groovy-and.html
+++ b/blog/whiskey-clustering-with-groovy-and.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Whiskey Clustering with Groovy and Apache Ignite</a></li><li><a href='#_whiskey_clustering' class='anchor-link'>Whiskey Clustering</a></li><li><a href='#_apache_ignite' class='anchor-link'>Apache Ignite</a></li><li><a href='#_implementation_details' class='anchor-link'>Imp [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Whiskey Clustering with Groovy and Apache Ignite</a></li><li><a href='#_whiskey_clustering' class='anchor-link'>Whiskey Clustering</a></li><li><a href='#_apache_ignite' class='anchor-link'>Apache Ignite</a></li><li><a href='#_implementation_details' class='anchor-link'>Imp [...]
 <div class="sectionbody">
 <div class="paragraph">
 <p>In a previous <a href="https://groovy.apache.org/blog/using-groovy-with-apache-wayang">blog post</a>,
diff --git a/blog/wordle-checker.html b/blog/wordle-checker.html
index 2a75afb..7a72a97 100644
--- a/blog/wordle-checker.html
+++ b/blog/wordle-checker.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Checking Wordle with Groovy</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-null-processing'>Groovy Processing Nulls In Lists</a></li><li><a href='./groovy-list-proce [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Checking Wordle with Groovy</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./groovy-null-processing'>Groovy Processing Nulls In Lists</a></li><li><a href='./zipping-collectio [...]
 <p>This <a href="https://donraab.medium.com/comparing-my-smalltalk-and-eclipse-collections-wordle-kata-solutions-4058ac7d8ca0">article</a> by <a href="https://twitter.com/TheDonRaab">Donald Raab</a>
 looks at writing a Wordle checker in Smalltalk and Java using <a href="https://github.com/eclipse/eclipse-collections">Eclipse Collections</a>. Let&#8217;s look at doing the same in Groovy.
 We could easily use Eclipse Collections with Groovy
diff --git a/blog/zipping-collections-with-groovy.html b/blog/zipping-collections-with-groovy.html
index 172e4a8..a9c318e 100644
--- a/blog/zipping-collections-with-groovy.html
+++ b/blog/zipping-collections-with-groovy.html
@@ -53,7 +53,7 @@
                                     </ul>
                                 </div>
                             </div>
-                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Zipping Collections with Groovy</a></li><li><a href='#_what_is_zipping' class='anchor-link'>What is zipping?</a></li><li><a href='#_groovy' class='anchor-link'>Groovy</a></li><li><a href='#_eclipse_collections' class='anchor-link'>Eclipse Collections</a></li><li><a href='# [...]
+                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Zipping Collections with Groovy</a></li><li><a href='#_what_is_zipping' class='anchor-link'>What is zipping?</a></li><li><a href='#_groovy' class='anchor-link'>Groovy</a></li><li><a href='#_eclipse_collections' class='anchor-link'>Eclipse Collections</a></li><li><a href='# [...]
 <h2 id="_what_is_zipping">What is zipping?</h2>
 <div class="sectionbody">
 <div class="paragraph">