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 2024/11/24 07:47:20 UTC
(groovy-dev-site) branch asf-site updated: 2024/11/24 07:47:15: Generated dev website from groovy-website@0229d5a
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 0421401 2024/11/24 07:47:15: Generated dev website from groovy-website@0229d5a
0421401 is described below
commit 042140102b279a00cbcb658acca9cd99bd4c3261
Author: jenkins <bu...@apache.org>
AuthorDate: Sun Nov 24 07:47:16 2024 +0000
2024/11/24 07:47:15: Generated dev website from groovy-website@0229d5a
---
blog/adventures-with-groovyfx.html | 2 +-
blog/apache-groovy-2022-year-in.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/fruity-eclipse-collections.html | 2 +-
blog/fun-with-obfuscated-groovy.html | 2 +-
blog/gmavenplus-1-6-2-released.html | 2 +-
blog/gpars-meets-virtual-threads.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-dauphine.html | 2 +-
blog/groovy-haiku-processing.html | 2 +-
blog/groovy-list-processing-cheat-sheet.html | 2 +-
blog/groovy-lucene.html | 248 +++++++++++++++++------
blog/groovy-null-processing.html | 2 +-
blog/groovy-record-performance.html | 2 +-
blog/groovy-records.html | 2 +-
blog/groovy-release-train-4-0.html | 2 +-
blog/groovy-sequenced-collections.html | 2 +-
blog/helloworldemoji.html | 2 +-
blog/index.html | 2 +-
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/seasons-greetings-emoji.html | 2 +-
blog/set-operations-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/working-with-sql-databases-with.html | 2 +-
blog/zipping-collections-with-groovy.html | 2 +-
56 files changed, 242 insertions(+), 116 deletions(-)
diff --git a/blog/adventures-with-groovyfx.html b/blog/adventures-with-groovyfx.html
index baceda3..f302b18 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='./set-operations-w [...]
+ </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='./helloworldemoji' [...]
<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/apache-groovy-2022-year-in.html b/blog/apache-groovy-2022-year-in.html
index 7b7e480..6f143ed 100644
--- a/blog/apache-groovy-2022-year-in.html
+++ b/blog/apache-groovy-2022-year-in.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 2022 Year In Review</a></li><li><a href='#_releases_contributions' class='anchor-link'>Releases & Contributions</a></li><li><a href='#_downloads' class='anchor-link'>Downloads</a></li><li><a href='#_blogs' class='anchor-link'>Blogs</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'>Apache Groovy 2022 Year In Review</a></li><li><a href='#_releases_contributions' class='anchor-link'>Releases & Contributions</a></li><li><a href='#_downloads' class='anchor-link'>Downloads</a></li><li><a href='#_blogs' class='anchor-link'>Blogs</a></li><li><a href='#_ [...]
<div class="sectionbody">
<div class="paragraph">
<p>The year 2022 has been a reasonably good one for the Groovy Programming Language.
diff --git a/blog/classifying-iris-flowers-with-deep.html b/blog/classifying-iris-flowers-with-deep.html
index ef9a752..29bd25c 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 7450ca9..de0d89a 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 4fb5bc3..bf76666 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 ce1f676..2d3232c 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’ve covered
diff --git a/blog/detecting-objects-with-groovy-the.html b/blog/detecting-objects-with-groovy-the.html
index f98efe0..b776a3f 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) & 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) & 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/fruity-eclipse-collections.html b/blog/fruity-eclipse-collections.html
index 98a1eeb..94f2844 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 4fd9c9b..7b52163 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='./groovy-record-performance'>Groovy Record Performance</a></li><li><a href='./matrix-calculations-wi [...]
<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 733d6b8..5c6874a 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/gpars-meets-virtual-threads.html b/blog/gpars-meets-virtual-threads.html
index 845895a..9fc05bb 100644
--- a/blog/gpars-meets-virtual-threads.html
+++ b/blog/gpars-meets-virtual-threads.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'>GPars meets Virtual Threads</a></li><li><a href='#_parallel_collections' class='anchor-link'>Parallel Collections</a></li><li><a href='#_agents' class='anchor-link'>Agents</a></li><li><a href='#_actors' class='anchor-link'>Actors</a></li><li><a href='#_dataflow' class='anc [...]
+ </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'>GPars meets Virtual Threads</a></li><li><a href='#_parallel_collections' class='anchor-link'>Parallel Collections</a></li><li><a href='#_agents' class='anchor-link'>Agents</a></li><li><a href='#_actors' class='anchor-link'>Actors</a></li><li><a href='#_dataflow' class='anc [...]
<div class="sectionbody">
<div class="paragraph">
<p><span class="image right"><img src="img/gpars_logo.png" alt="gpars" width="150"></span>
diff --git a/blog/groovy-2-4-16-released.html b/blog/groovy-2-4-16-released.html
index e73238e..58aca54 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 203d2b3..33a2d7f 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 3714861..aabc2dc 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-released'>Groovy 2.4.16 Released</a></li><li><a href='./groovy-2-4-16-windows'>Groovy 2. [...]
<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 d99c5ba..7d443f9 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-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-1-released.html b/blog/groovy-2-5-1-released.html
index 0d14fed..61efb21 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-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-2-released.html b/blog/groovy-2-5-2-released.html
index 5d8b75c..e1fbc37 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 f275cd9..973a6e0 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-4-windows'>Groovy 2.5.4 Windows Installer Released (C [...]
<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 d5d3b7b..2015528 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 30a5964..c2210e0 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-4-windows'>Groovy 2.5.4 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 64de0cd..e8ea94d 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 6cc9a18..00166fb 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-5-windows'>Groovy 2.5.5 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 c445f73..cf6cef6 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 5824ed1..5ea68b3 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-4-windows'>Groovy 2.5.4 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 709d6db..89d28a2 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-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-7-and.html b/blog/groovy-2-5-7-and.html
index 5f06e4f..0d17208 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-4-windows'>Groovy 2.5.4 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 be82fd6..7323ea3 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 8ab7dd1..3ea22a6 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 708ee85..ea81bac 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 a91f96d..f418345 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 3acd736..7e26190 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-beta2'>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 dd543a9..1d855f0 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 22e42b6..c36f6be 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 043f2cf..1d06ce1 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-3-0-0-alpha'>Groovy 3.0.0-alpha-4 Released</a></li><li><a href='./groovy-2-5-4-windows'>Groovy 2 [...]
<p>Dear community,</p>
</div>
<div class="paragraph">
diff --git a/blog/groovy-dauphine.html b/blog/groovy-dauphine.html
index 196f1b5..f20eea8 100644
--- a/blog/groovy-dauphine.html
+++ b/blog/groovy-dauphine.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'>Processing Results for the Critérium du Dauphiné</a></li><li><a href='#_results_file' class='anchor-link'>Results file</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='./parsin [...]
+ </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'>Processing Results for the Critérium du Dauphiné</a></li><li><a href='#_results_file' class='anchor-link'>Results file</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='./readin [...]
<div class="sectionbody">
<div class="paragraph">
<p>The 2023 <a href="https://www.criterium-du-dauphine.fr/en/">Critérium du Dauphiné</a>
diff --git a/blog/groovy-haiku-processing.html b/blog/groovy-haiku-processing.html
index bf45a4b..60df864 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 a9271ed..8c43925 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-lucene.html b/blog/groovy-lucene.html
index 89e29ba..981374f 100644
--- a/blog/groovy-lucene.html
+++ b/blog/groovy-lucene.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'>Searching with Lucene</a></li><li><a href='#_finding_project_names_with_a_regex' class='anchor-link'>Finding project names with a regex</a></li><li><a href='#_finding_project_names_using_regex_matching' class='anchor-link'>Finding project names using regex matching</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'>Searching with Lucene</a></li><li><a href='#_finding_project_names_with_a_regex' class='anchor-link'>Finding project names with a regex</a></li><li><a href='#_finding_project_names_using_regex_matching' class='anchor-link'>Finding project names using regex matching</a></li [...]
<div class="sectionbody">
<div class="paragraph">
<p>The Groovy <a href="https://groovy.apache.org/blog/">blog posts</a> often reference other Apache projects.
@@ -62,7 +62,7 @@ Given that these pages are published, we could use something like <a href="https
For this post, we are going to search for the
information we require from the original source (<a href="https://asciidoc.org/">AsciiDoc</a>) files.
We’ll first look at how we can find project references using regular expressions
-and then using Apache Lucene.</p>
+and then using <a href="https://lucene.apache.org/">Apache Lucene</a>.</p>
</div>
</div>
</div>
@@ -71,10 +71,10 @@ and then using Apache Lucene.</p>
<div class="sectionbody">
<div class="paragraph">
<p>For the sake of this post, let’s assume that project references will
-include the work "Apache" followed by the project name. To make it more
+include the word "Apache" followed by the project name. To make it more
interesting, we’ll also include references to Eclipse projects.
-We’ll also make provision for project with subprojects, at least for
-Apache Commons, so this will pick up names like Apache Commons Math
+We’ll also make provision for projects with subprojects, at least for
+Apache Commons, so this will pick up names like "Apache Commons Math"
for instance. We’ll exclude Apache Groovy since that would hit possibly
every Groovy blog post. We’ll also exclude a bunch of words that appear in
commonly used phrases like "Apache License" and "Apache Projects".</p>
@@ -332,7 +332,7 @@ new IndexWriter(indexDir, config).withCloseable { writer ->
</div>
<div class="paragraph">
<p>With an index defined, we’d typically now perform some kind of search.
-We’ll do just that shortly, but first for the kind of information we are interested in,
+We’ll do just that shortly, but first, for the kind of information we are interested in,
part of the Lucene API lets us explore the index. Here is how we might do that:</p>
</div>
<div class="listingblock">
@@ -389,10 +389,10 @@ docFreq.sort(byReverseValue).take(10).each { k, v ->
<p>Look for terms which match project names, so we can save them to a set</p>
</li>
<li>
-<p>Grab hit frequency metadata for our term</p>
+<p>Grab hit frequency metadata for each term in our set of terms</p>
</li>
<li>
-<p>Grab document frequency metadata for our term</p>
+<p>Grab document frequency metadata for each term in our set of terms</p>
</li>
</ol>
</div>
@@ -505,8 +505,8 @@ as part of some web search functionality. For us, we are going to just
pick out the terms of interest, project names that matching our query.</p>
</div>
<div class="paragraph">
-<p>We the highlight functionality to work, we ask the indexer to store some additional information
-when indexing about term positions. The index code changes to look like this:</p>
+<p>For the highlight functionality to work, we ask the indexer to store some additional information
+when indexing, in particular term positions and offsets. The index code changes to look like this:</p>
</div>
<div class="listingblock">
<div class="content">
@@ -542,10 +542,20 @@ but it wasn’t needed previously.</p>
var fieldQuery = new FieldQuery(query, dirReader, phraseHighlight, fieldMatch)
var stack = new FieldTermStack(dirReader, hit.doc, 'content', fieldQuery)
var phrases = new FieldPhraseList(stack, fieldQuery)
- phrases.phraseList*.termsInfos*.text.flatten()
+ phrases.phraseList*.termsInfos*.text.flatten() // <b class="conum">(1)</b>
}</code></pre>
</div>
</div>
+<div class="colist arabic">
+<ol>
+<li>
+<p>Converts a <code>FieldPhraseList</code> into a list of <code>TermInfo</code> instances into a list of strings</p>
+</li>
+</ol>
+</div>
+<div class="paragraph">
+<p>Now we can run our query code:</p>
+</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code data-lang="groovy">var query = parser.parse(/apache\ * OR eclipse\ */) // <b class="conum">(1)</b>
@@ -658,14 +668,14 @@ We’ll also enable that.</p>
var indexDir = new ByteBuffersDirectory()
var taxonDir = new ByteBuffersDirectory()
var config = new IndexWriterConfig(analyzer)
-var indexWriter = new IndexWriter(indexDir, config)
-var taxonWriter = new DirectoryTaxonomyWriter(taxonDir)
+var indexWriter = new IndexWriter(indexDir, config) // <b class="conum">(1)</b>
+var taxonWriter = new DirectoryTaxonomyWriter(taxonDir) // <b class="conum">(2)</b>
-var fConfig = new FacetsConfig().tap {
- setHierarchical("projectNameCounts", true)
- setMultiValued("projectNameCounts", true)
- setMultiValued("projectFileCounts", true)
- setMultiValued("projectHitCounts", true)
+var fConfig = new FacetsConfig().tap { // <b class="conum">(3)</b>
+ setHierarchical('projectNameCounts', true)
+ setMultiValued('projectNameCounts', true)
+ setMultiValued('projectFileCounts', true)
+ setMultiValued('projectHitCounts', true)
setIndexFieldName('projectHitCounts', '$projectHitCounts')
}
@@ -681,10 +691,10 @@ new File(baseDir).traverse(nameFilter: ~/.*\.adoc/) { file ->
document.add(new StringField('name', file.name, Field.Store.YES))
if (projects) {
println "$file.name: $projects"
- projects.each { k, v ->
- document.add(new IntAssociationFacetField(v, "projectHitCounts", k))
- document.add(new FacetField("projectFileCounts", k))
- document.add(new FacetField("projectNameCounts", k.split()))
+ projects.each { k, v -> // <b class="conum">(4)</b>
+ document.add(new IntAssociationFacetField(v, 'projectHitCounts', k))
+ document.add(new FacetField('projectFileCounts', k))
+ document.add(new FacetField('projectNameCounts', k.split()))
}
}
indexWriter.addDocument(fConfig.build(taxonWriter, document))
@@ -694,6 +704,22 @@ indexWriter.close()
taxonWriter.close()</code></pre>
</div>
</div>
+<div class="colist arabic">
+<ol>
+<li>
+<p>Our normal index writer</p>
+</li>
+<li>
+<p>A writer for our taxonomy</p>
+</li>
+<li>
+<p>Define some properties for the facets we are interested in</p>
+</li>
+<li>
+<p>We add our facets of interest to our document</p>
+</li>
+</ol>
+</div>
<div class="paragraph">
<p>Since we are collecting this data during indexing, we can print it out:</p>
</div>
@@ -730,7 +756,9 @@ zipping-collections-with-groovy.adoc: [eclipse collections:4]
</pre>
<div class="paragraph">
<p>Now when doing searches, we can extract the taxonomy information along with other info.
-With <code>projectHitCounts</code> we can gather the taxonomy metadata for the top hits from our search.</p>
+With <code>projectHitCounts</code> we can gather the taxonomy metadata for the top hits from our search.
+We’ll use <code>MatchAllDocsQuery</code> to match all documents, i.e. the metadata will be for
+all documents.</p>
</div>
<div class="listingblock">
<div class="content">
@@ -742,20 +770,18 @@ var fc = FacetsCollectorManager.search(searcher, new MatchAllDocsQuery(), 0, fcm
var topN = 5
var projects = new TaxonomyFacetIntAssociations('$projectHitCounts', taxonReader, fConfig, fc, AssociationAggregationFunction.SUM)
-var hitCounts = projects.getTopChildren(topN, "projectHitCounts").labelValues.collect{
- [label: it.label, hits: it.value, files: it.count]
-}
+var hitData = projects.getTopChildren(topN, 'projectHitCounts').labelValues
println "\nFrequency of total hits mentioning a project (top $topN):"
-hitCounts.sort{ m -> -m.hits }.each { m ->
- var label = "$m.label ($m.hits)"
- println "${label.padRight(32)} ${bar(m.hits, 0, 50, 50)}"
+hitData.each { m ->
+ var label = "$m.label ($m.value)"
+ println "${label.padRight(32)} ${bar(m.value, 0, 50, 50)}"
}
println "\nFrequency of documents mentioning a project (top $topN):"
-hitCounts.sort{ m -> -m.files }.each { m ->
- var label = "$m.label ($m.files)"
- println "${label.padRight(32)} ${bar(m.files * 2, 0, 20, 20)}"
+hitData.each { m ->
+ var label = "$m.label ($m.count)"
+ println "${label.padRight(32)} ${bar(m.count * 2, 0, 20, 20)}"
}</code></pre>
</div>
</div>
@@ -792,16 +818,16 @@ A <a href="https://github.com/apache/lucene/issues/14008">fix</a> is coming.
</table>
</div>
<div class="paragraph">
-<p>Now, the taxonomy information about file counts is for the selected top hits based on number of hits.
-One of our other facets (<code>projectFileCounts</code>) lets us look at the top frequencies of references in files. Let’s look at how we can query that information:</p>
+<p>Now, the taxonomy information about document frequency is for the top hits scored using the number of hits.
+One of our other facets (<code>projectFileCounts</code>) tracks document frequency independently.
+Let’s look at how we can query that information:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code data-lang="groovy">var facets = new FastTaxonomyFacetCounts(taxonReader, fConfig, fc)
println "\nFrequency of documents mentioning a project (top $topN):"
-var fileCounts = facets.getTopChildren(topN, "projectFileCounts")
-println fileCounts</code></pre>
+println facets.getTopChildren(topN, 'projectFileCounts')</code></pre>
</div>
</div>
<div class="paragraph">
@@ -820,7 +846,9 @@ dim=projectFileCounts path=[] value=-1 childCount=27
<div class="paragraph">
<p>When comparing this result, with the result from our previous facet,
we can see that commons csv is mentioned in more files than mxnet,
-even though mxnet is mentioned more times.</p>
+even though mxnet is mentioned more times. In general, you’d decide
+which document frequency is of more interest to you, and you’d skip
+the <code>projectFileCounts</code> facet if you didn’t need that extra information.</p>
</div>
<div class="paragraph">
<p>Our final facet (<code>projectNameCounts</code>) is a hierarchical facet. These are typically used interactively
@@ -831,13 +859,19 @@ Here is the code which does that.</p>
</div>
<div class="listingblock">
<div class="content">
-<pre class="prettyprint highlight"><code data-lang="groovy">['apache', 'commons'].inits().reverseEach { path ->
+<pre class="prettyprint highlight"><code data-lang="groovy">['apache', 'commons'].inits().reverseEach { path -> // <b class="conum">(1)</b>
println "Frequency of documents mentioning a project with path $path (top $topN):"
- var nameCounts = facets.getTopChildren(topN, "projectNameCounts", *path)
- println "$nameCounts"
+ println "${facets.getTopChildren(topN, 'projectNameCounts', *path)}"
}</code></pre>
</div>
</div>
+<div class="colist arabic">
+<ol>
+<li>
+<p>The <code>inits()</code> method returns all prefixes of a list including the empty list.</p>
+</li>
+</ol>
+</div>
<div class="paragraph">
<p>The output looks like this:</p>
</div>
@@ -870,7 +904,7 @@ which might just use the latter.</p>
</div>
<div class="listingblock">
<div class="content">
-<pre class="prettyprint highlight"><code data-lang="groovy">var parser = new QueryParser("content", analyzer)
+<pre class="prettyprint highlight"><code data-lang="groovy">var parser = new QueryParser('content', analyzer)
var query = parser.parse(/apache\ * AND eclipse\ * AND emoji*/)
var results = searcher.search(query, topN)
var storedFields = searcher.storedFields()
@@ -880,7 +914,16 @@ assert results.totalHits.value() == 1 &&
</div>
<div class="paragraph">
<p>This query shows that there is exactly one blog post that mentions
-Apache projects, Eclipse projects and also emojis.</p>
+Apache projects, Eclipse projects, and also emojis.</p>
+</div>
+<div class="paragraph">
+<p>Facets are a really powerful feature. Given that we are indexing asciidoc source
+files, we could even use libraries like <a href="https://github.com/asciidoctor/asciidoctorj">AsciidoctorJ</a>
+to extract more metadata from our source files and store them as facets.
+We could for instance extra titles, author(s), keywords, publication dates and so forth.
+This would allow us to make some pretty powerful searches.
+We leave this as an exercise for the reader.
+But if you try, please let us know how you go!</p>
</div>
</div>
</div>
@@ -889,7 +932,7 @@ Apache projects, Eclipse projects and also emojis.</p>
<div class="sectionbody">
<div class="paragraph">
<p>As a final example, we chose earlier to extract project names at index time.
-We could have instead used the normal analyzer at the cost of needing more
+We could have instead used a more typical analyzer at the cost of needing more
complex span queries to pull out our project names at search time.
Let’s have a look at what the code for that scenario could look like.</p>
</div>
@@ -921,11 +964,34 @@ new IndexWriter(indexDir, config).withCloseable { writer ->
</div>
<div class="paragraph">
<p>Now our queries will need to be more complex. We have a few options up our sleeve,
-but we’ll choose to put together our queries using some low level query classes.
-We’ll look for "apache commons <namepart>"
-or "(apache|eclipse) <namepart>",
-where <em>namepart</em> is the project name
-without the foundation prefix.</p>
+but we’ll choose to put together our queries using some of Lucene’s low-level query classes.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<div class="title">Note</div>
+</td>
+<td class="content">
+Before considering Lucene’s low-level query classes, you might
+want to look at some of Lucene’s higher-level query classes like the <code>QueryParser</code> class.
+It supports representing a query as a string and includes support for phrases,
+ranges, regex terms and so forth. As far as I am aware, it doesn’t support
+a regex within a phrase, hence the low-level classes we’ll explore below.
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>We’ll look for expressions like "apache commons <suffix>"
+or "(apache|eclipse) <suffix>",
+where <em>suffix</em> is the project name
+without the foundation prefix, or in the case of Apache Commons, the subproject name.</p>
+</div>
+<div class="paragraph">
+<p>Instead of having a list of stop words (excluded words) like in our regex,
+we’ll just have a list of allowable project suffix names.
+It wouldn’t be hard to swap to the stop word approach if we wanted.</p>
</div>
<div class="listingblock">
<div class="content">
@@ -938,19 +1004,19 @@ var projects = [
'nlpcraft', 'pekko', 'hugegraph', 'tinkerpop', 'commons',
'cli', 'opennlp', 'ofbiz', 'codec', 'kie', 'flink'
]
-var namepart = new SpanMultiTermQueryWrapper(new RegexpQuery(
+var suffix = new SpanMultiTermQueryWrapper(new RegexpQuery( // <b class="conum">(1)</b>
new Term('content', "(${projects.join('|')})")))
-// look for apache commons <namepart>
+// look for apache commons <suffix>
SpanQuery[] spanTerms = ['apache', 'commons'].collect{
new SpanTermQuery(new Term('content', it))
-} + namepart
+} + suffix
var apacheCommons = new SpanNearQuery(spanTerms, 0, true)
-// look for (apache|eclipse) <namepart>
+// look for (apache|eclipse) <suffix>
var foundation = new SpanMultiTermQueryWrapper(new RegexpQuery(
new Term('content', '(apache|eclipse)')))
-var otherProject = new SpanNearQuery([foundation, namepart] as SpanQuery[], 0, true)
+var otherProject = new SpanNearQuery([foundation, suffix] as SpanQuery[], 0, true)
var builder = new BooleanQuery.Builder(minimumNumberShouldMatch: 1)
builder.add(otherProject, BooleanClause.Occur.SHOULD)
@@ -960,6 +1026,13 @@ var results = searcher.search(query, 30)
println "Total documents with hits for $query --> $results.totalHits"</code></pre>
</div>
</div>
+<div class="colist arabic">
+<ol>
+<li>
+<p>Regex queries are wrapped to appear in a span query</p>
+</li>
+</ol>
+</div>
<div class="paragraph">
<p>When we run this we see the same number of hits as before:</p>
</div>
@@ -969,19 +1042,56 @@ println "Total documents with hits for $query --> $results.totalHits"</code><
</div>
</div>
<div class="paragraph">
-<p>Using the <code>StandardAnalyzer</code> has numerous advantages.
+<p>Another thing we might want to consider for this example is to make use of
+Groovy’s excellent Domain Specific Language (DSL) capabilities.
+By defining one helper method, <code>span</code>, and providing one metaprogramming
+extension for <code>or</code> on Lucene’s <code>Query</code> class, we can rewrite the last 20 lines
+of the previous example in a more compact and understandable form:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="groovy">var suffix = "(${projects.join('|')})"
+var query = span('apache', 'commons', ~suffix) | span(~'(apache|eclipse)', ~suffix)
+var results = searcher.search(query, 30)
+println "Total documents with hits for $query --> $results.totalHits"</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Running the code gives the same output as previously.</p>
+</div>
+<div class="paragraph">
+<p>We can try out our DSL on other terms:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="groovy">query = span('jackson', 'databind') | span(~'virt.*', 'threads')
+results = searcher.search(query, 30)
+println "Total documents with hits for $query --> $results.totalHits"</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>When run, we’ll now see this output:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>Total documents with hits for (spanNear([content:jackson, content:databind], 0, true) spanNear([SpanMultiTermQueryWrapper(content:/virt.*/), content:threads], 0, true))~1 --> 8 hits</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Using the <code>StandardAnalyzer</code> with span queries certainly opens up the possibility
+of a much wider range of queries. But <code>StandardAnalyzer</code> also has other advantages.
It has baked into it the ability for stop words, smart word breaking, lowercasing
and other features. Other built-in analyzers might also be useful. We could of course,
-also make our regex-based analyzer smarter. Many of Lucene’s features are in reusable
-pieces.</p>
+also make our regex-based analyzer smarter. The fact that many of Lucene’s features
+are in reusable pieces certainly helps.</p>
</div>
<div class="paragraph">
-<p>Another advantage of the <code>StandardAnalyzer</code> is that it properly handles emojis in our index.
-Our regex analyzer in its current form only looks for "word" characters which doesn’t
-work with emoji characters, although it could be expanded to support them.</p>
+<p>A fun advantage of the <code>StandardAnalyzer</code> is that it properly handles emojis in our index.
+Our regex analyzer in its current form only looks for "regex word" characters which doesn’t
+include emoji characters, although it could be expanded to support them.</p>
</div>
<div class="paragraph">
-<p>Given that we’ve used <code>StandardAnalyzer</code> here, let’s look again look at terms
+<p>Given that we’ve used <code>StandardAnalyzer</code> here, let’s look again at terms
in our index but this time pull out emojis instead of project names:</p>
</div>
<div class="listingblock">
@@ -1015,11 +1125,27 @@ emojis.collect { k, v -> "$k: ${v.join(', ')}" }.each { println it }</code></
</div>
</div>
<div class="sect1">
+<h2 id="_references">References</h2>
+<div class="sectionbody">
+<div class="ulist">
+<ul>
+<li>
+<p>Lucene project <a href="https://lucene.apache.org/">website</a></p>
+</li>
+<li>
+<p>Source code <a href="https://github.com/paulk-asert/groovy-lucene">examples</a> for this blog post</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sect1">
<h2 id="_conclusion">Conclusion</h2>
<div class="sectionbody">
<div class="paragraph">
<p>We have analyzed the Groovy blog posts looking for referenced projects
-using regular expressions and Apache Lucene.</p>
+using regular expressions and Apache Lucene. Hopefully this gives you a taste
+of the Lucene APIs and some of Groovy’s features.</p>
</div>
</div>
</div></div></div></div></div><footer id='footer'>
diff --git a/blog/groovy-null-processing.html b/blog/groovy-null-processing.html
index 1507688..b2ec8bd 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
index 96f0b11..42aec04 100644
--- a/blog/groovy-record-performance.html
+++ b/blog/groovy-record-performance.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 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><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
diff --git a/blog/groovy-records.html b/blog/groovy-records.html
index 429cfaf..34042b9 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 6344ff6..add709e 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-3-0-0-alpha'>Groovy 3.0.0-alpha-4 Released</a></li><li><a href='./groovy-2 [...]
<p>It’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 5aee316..a1e1080 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 67f07ee..520c08c 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='./set-operations-with-groovy'>Set Operators with Groovy</a></li><li><a href='./deep-learning-and-eclips [...]
+ </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 [...]
<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/index.html b/blog/index.html
index 502c128..c40f997 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -97,7 +97,7 @@
colors: am5.ColorSet.new(root, {})
}));
wc.data.setAll([
- { category: "concurrency", value: 2 }, { category: "groovy", value: 80 }, { category: "actors", value: 2 }, { category: "pekko", value: 1 }, { category: "gpars", value: 2 }, { category: "calendar", value: 1 }, { category: "date", value: 3 }, { 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: 7 }, { category: "v [...]
+ { category: "groovy", value: 80 }, { category: "emoji", value: 7 }, { category: "set", value: 1 }, { category: "constraint programming", value: 1 }, { category: "jacop", value: 2 }, { category: "or-tools", value: 2 }, { category: "choco", value: 3 }, { category: "jsr331", value: 1 }, { category: "bytecode", value: 1 }, { category: "byte buddy", value: 1 }, { category: "proguardcore", value: 1 }, { category: "asm", value: 1 }, { category: "jvmadvent", value: 1 }, { categor [...]
]);
wc.labels.template.setAll({
paddingTop: 5,
diff --git a/blog/lego-bricks-with-groovy.html b/blog/lego-bricks-with-groovy.html
index 3702cd9..22012a5 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 08a9acb..26053d0 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 10a023d..fc04da2 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 6d9c3b8..f24de0d 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/seasons-greetings-emoji.html b/blog/seasons-greetings-emoji.html
index dd475f3..e5a77ba 100644
--- a/blog/seasons-greetings-emoji.html
+++ b/blog/seasons-greetings-emoji.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'>Season’s Greetings with Emojis</a></li><li><a href='#_jdk_21_new_features' class='anchor-link'>JDK 21 New Features</a></li><li><a href='#_playing_with_emojis_with_groovy' class='anchor-link'>Playing with Emojis with Groovy</a></li><li><a href='#_more_information' cla [...]
+ </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'>Season’s Greetings with Emojis</a></li><li><a href='#_jdk_21_new_features' class='anchor-link'>JDK 21 New Features</a></li><li><a href='#_playing_with_emojis_with_groovy' class='anchor-link'>Playing with Emojis with Groovy</a></li><li><a href='#_more_information' cla [...]
<div class="sectionbody">
<div class="paragraph">
<p>In a <a href="https://groovy.apache.org/blog/helloworldemoji">previous blog post</a>
diff --git a/blog/set-operations-with-groovy.html b/blog/set-operations-with-groovy.html
index 1295ea4..049d685 100644
--- a/blog/set-operations-with-groovy.html
+++ b/blog/set-operations-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'>Set Operators 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='./deep-learning-and-eclipse-collections'>Deep Learning and 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'>Set Operators 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='./helloworldemoji'>Hello World with Emojis</a></li><li><a href='./deep-learning-and-eclipse-collectio [...]
<p><a href="https://twitter.com/TheDonRaab">Donald Raab</a> posted <a href="https://donraab.medium.com/comparing-set-operations-between-java-and-eclipse-collections-92cf1df28d3b">an article</a> about set operators using Java collections and <a href="https://github.com/eclipse/eclipse-collections">Eclipse Collections</a>. <a href="https://donraab.medium.com/comparing-set-operations-between-java-and-eclipse-collections-92cf1df28d3b">That post</a> focuses
on the <em>union</em>, <em>intersection</em> and <em>difference</em> operators. We’ll add in
<em>symmetric difference</em> since Groovy supports operator overloading for that
diff --git a/blog/using-groovy-with-apache-wayang.html b/blog/using-groovy-with-apache-wayang.html
index f03437d..04924fa 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 3e3cbf1..abdcc92 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 85bb151..9957455 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='./groovy-list-proce [...]
<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’s look at doing the same in Groovy.
We could easily use Eclipse Collections with Groovy
diff --git a/blog/working-with-sql-databases-with.html b/blog/working-with-sql-databases-with.html
index d4268dc..296831b 100644
--- a/blog/working-with-sql-databases-with.html
+++ b/blog/working-with-sql-databases-with.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'>Working with SQL databases with Groovy and GraalVM</a></li><li><a href='#_native_metadata' class='anchor-link'>Native Metadata</a></li><li><a href='#_working_with_sql_in_groovy' class='anchor-link'>Working with SQL in Groovy</a></li><li><a href='#_configuring_our_native_bu [...]
+ </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'>Working with SQL databases with Groovy and GraalVM</a></li><li><a href='#_native_metadata' class='anchor-link'>Native Metadata</a></li><li><a href='#_working_with_sql_in_groovy' class='anchor-link'>Working with SQL in Groovy</a></li><li><a href='#_configuring_our_native_bu [...]
<div class="sectionbody">
<div class="paragraph">
<p>During the week, there was an interesting
diff --git a/blog/zipping-collections-with-groovy.html b/blog/zipping-collections-with-groovy.html
index 59194cb..8f7df63 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">