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 90a16aa 2025/04/19 12:07:57: Generated dev website from
groovy-website@685eec2
90a16aa is described below
commit 90a16aa6f4a118e416e81820f7d17b5fa0d42680
Author: jenkins <[email protected]>
AuthorDate: Sat Apr 19 12:07:57 2025 +0000
2025/04/19 12:07:57: Generated dev website from groovy-website@685eec2
---
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 | 2 +-
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/groovy-text-similarity.html | 2 +-
blog/helloworldemoji.html | 2 +-
blog/img/matrixAberlourRadar.png | Bin 0 -> 23234 bytes
blog/img/matrixWhiskyCorrHeatmap.png | Bin 0 -> 71690 bytes
blog/img/matrixWhiskyScatterPlot.png | Bin 0 -> 32363 bytes
blog/img/matrixWhiskySelectionsRadar.png | Bin 0 -> 53401 bytes
blog/img/underdogAberlourRadar.png | Bin 0 -> 99410 bytes
blog/img/underdogClusterKmeans.png | Bin 0 -> 118405 bytes
blog/img/underdogClustersAgglomerative.png | Bin 0 -> 118698 bytes
blog/img/underdogRadarPlot.png | Bin 97639 -> 0 bytes
blog/img/underdogScatterPlot.png | Bin 111853 -> 0 bytes
blog/img/underdogWhiskySelectionsRadar.png | Bin 0 -> 145092 bytes
blog/index.html | 2 +-
blog/lego-bricks-with-groovy.html | 2 +-
blog/matrix-calculations-with-groovy-apache.html | 2 +-
blog/netbeans.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/wayang-tensorflow.html | 2 +-
blog/whiskey-clustering-with-groovy-and.html | 4 +-
blog/whisky-revisited.html | 621 +++++++++++++++++++++++
blog/whisky-underdog.html | 260 ----------
blog/wordle-checker.html | 2 +-
blog/working-with-sql-databases-with.html | 2 +-
blog/zipping-collections-with-groovy.html | 2 +-
71 files changed, 681 insertions(+), 320 deletions(-)
diff --git a/blog/adventures-with-groovyfx.html
b/blog/adventures-with-groovyfx.html
index 6a1c0ba..2bdeb2b 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='./helloworldemoji' [...]
+ </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 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 b4a01ae..9ef8386 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 cddb56d..d252896 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 1d182f9..6e57676 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 79ca8ea..2482083 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 1c494d2..431bdaf 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 fde7128..22af649 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 e07b5ef..74b0602 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 611ca79..ad60d02 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='./groovy-record-performance'>Groovy Record Performance</a></li><li><a
href='./matrix-calculations-wi [...]
+ </div><div id='content' class='page-1'><div
class='row'><div class='row-fluid'><div class='col-lg-3'><ul
class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a
href='#doc'>Fun with obfuscated Groovy</a></li></ul><br/><ul
class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color:
#eee'><span>Related posts</span></li><li><a
href='./matrix-calculations-with-groovy-apache'>Matrix calculations with
Groovy, Apache Commons Math, ojAl [...]
<p>An interesting tweet appeared in my feed this morning:</p>
</div>
<div class="paragraph">
diff --git a/blog/gmavenplus-1-6-2-released.html
b/blog/gmavenplus-1-6-2-released.html
index e075cfe..53bf75b 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 730ef21..c7d851a 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 994beb1..ae729db 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 c9eb13f..a7888ea 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://groovy.jfrog.io/artifactory/dist-release-local/groovy-windows-installer/groovy-2.4.16/"
class="bare">https://groovy.jfrog.io/artifactory/dist-release-local/groovy-windows-installer/groovy-2.4.16/</a></p>
</div></div></div></div></div><footer id='footer'>
diff --git a/blog/groovy-2-4-17-released.html b/blog/groovy-2-4-17-released.html
index c87cbf6..8c82ca4 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 8768273..1a4118e 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-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.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 [...]
<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 a77c188..2e71ddd 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-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.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 [...]
<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 5801d58..f73b915 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 0103511..1b86aa6 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-4-windows'>Groovy 2.5.4 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-5-windows'>Groovy 2.5.5 Windows Installer Released (C [...]
<p>The Windows installer for Groovy 2.5.2 (community artifact) is available
from:
<a
href="https://groovy.jfrog.io/artifactory/dist-release-local/groovy-windows-installer/groovy-2.5.2/"
class="bare">https://groovy.jfrog.io/artifactory/dist-release-local/groovy-windows-installer/groovy-2.5.2/</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 f5dd1ea..84f4d83 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 1296ffe..2c85fcd 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-4-windows'>Groovy 2.5.4 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-5-windows'>Groovy 2.5.5 Windows Installer Released (C [...]
<p>The Windows installer for Groovy 2.5.3 (community artifact) is available
from:
<a
href="https://groovy.jfrog.io/artifactory/dist-release-local/groovy-windows-installer/groovy-2.5.3/"
class="bare">https://groovy.jfrog.io/artifactory/dist-release-local/groovy-windows-installer/groovy-2.5.3/</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 17aa0cc..eea7cbc 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 488f26b..7433988 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://groovy.jfrog.io/artifactory/dist-release-local/groovy-windows-installer/groovy-2.5.4/"
class="bare">https://groovy.jfrog.io/artifactory/dist-release-local/groovy-windows-installer/groovy-2.5.4/</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 a4ef4a5..ea11f27 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 b4ddfe9..d7f96cd 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-4-windows'>Groovy 2.5.4 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.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 [...]
<p>The Windows installer for Groovy 2.5.5 (community artifact) is available at:
<a
href="https://groovy.jfrog.io/artifactory/dist-release-local/groovy-windows-installer/groovy-2.5.5/"
class="bare">https://groovy.jfrog.io/artifactory/dist-release-local/groovy-windows-installer/groovy-2.5.5/</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 f79c567..36c5ebc 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-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.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 [...]
<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 d1f75f6..ed74ccd 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-4-windows'>Groovy 2.5.4 Windows In
[...]
+ </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<
[...]
<p>The Windows installer for Groovy 2.5.7 (Community Artifact) is now
available:
<a
href="https://groovy.jfrog.io/artifactory/dist-release-local/groovy-windows-installer/groovy-2.5.7/"
class="bare">https://groovy.jfrog.io/artifactory/dist-release-local/groovy-windows-installer/groovy-2.5.7/</a></p>
</div>
diff --git a/blog/groovy-2-5-7-released.html b/blog/groovy-2-5-7-released.html
index 97dd3f1..e444e60 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 8300d81..59e88f7 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 c10174e..4129215 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 d4d8612..43a6031 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://groovy.jfrog.io/artifactory/dist-release-local/groovy-windows-installer/groovy-3.0.0-alpha-4/"
class="bare">https://groovy.jfrog.io/artifactory/dist-release-local/groovy-windows-installer/groovy-3.0.0-alpha-4/</a>
Note this installer doesn’t include Spock since there isn’t a
Spock release compatible with Groovy 3.0.</p>
diff --git a/blog/groovy-3-0-0-beta.html b/blog/groovy-3-0-0-beta.html
index 5bc67a9..ea646bf 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 a545752..d60d4ea 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 db6d535..c2fb28b 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-beta1'>Groovy 3.0.0-beta-2 Released</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 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 [...]
<p>The Windows installer for Groovy 3.0.0-beta-2 is now available:
<a
href="https://groovy.jfrog.io/artifactory/dist-release-local/groovy-windows-installer/groovy-3.0.0-beta-2/"
class="bare">https://groovy.jfrog.io/artifactory/dist-release-local/groovy-windows-installer/groovy-3.0.0-beta-2/</a></p>
</div>
diff --git a/blog/groovy-4-0-3-released.html b/blog/groovy-4-0-3-released.html
index 4d836b9..1b6ec11 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-3-0-0-alpha'>Groovy 3.0.0-alpha-4
Released</a></li><li><a href='./groovy-2-5-4-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 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 [...]
<p>Dear community,</p>
</div>
<div class="paragraph">
diff --git a/blog/groovy-dauphine.html b/blog/groovy-dauphine.html
index bfc313f..ddaac7c 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='./readin [...]
+ </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 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 388690c..4173131 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 25d2a40..5c0efcb 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 b8117c2..95020c6 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='#_a_regular_expression_for_project_names' class='anchor-link'>A regular
expression for project names</a></li><li><a
href='#_collecting_project_name_statistics_using_regex_matching'
class='anchor-link'>Collecting project name stati [...]
+ </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='#_a_regular_expression_for_project_names' class='anchor-link'>A regular
expression for project names</a></li><li><a
href='#_collecting_project_name_statistics_using_regex_matching'
class='anchor-link'>Collecting project name stati [...]
<a href="https://github.com/paulk-asert/" target="_blank" rel="noopener
noreferrer"><img style="border-radius:50%;height:48px;width:auto"
src="img/paulk-asert.png" alt="Paul King"></a>
<div style="display:grid;align-items:center;margin:0.1ex;padding:0ex">
<div><a href="https://github.com/paulk-asert/" target="_blank" rel="noopener
noreferrer"><span>Paul King</span></a></div>
diff --git a/blog/groovy-null-processing.html b/blog/groovy-null-processing.html
index 351b7b7..0ab31a8 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 63c255e..427014f 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 90589ab..ef1df93 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 8d7de08..879b81f 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-3-0-0-alpha'>Groovy
3.0.0-alpha-4 Released</a></li><li><a href='./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 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- [...]
<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 fe856c0..d4ae824 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/groovy-text-similarity.html b/blog/groovy-text-similarity.html
index ec91ff3..48a8c70 100644
--- a/blog/groovy-text-similarity.html
+++ b/blog/groovy-text-similarity.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 Text Similarity</a></li><li><a href='#_introduction'
class='anchor-link'>Introduction</a></li><li><a href='#_background'
class='anchor-link'>Background</a></li><li><a href='#_simple_string_metrics'
class='anchor-link'>Simple String Metrics</a></li><li><a href='#_pho [...]
+ </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 Text Similarity</a></li><li><a href='#_introduction'
class='anchor-link'>Introduction</a></li><li><a href='#_background'
class='anchor-link'>Background</a></li><li><a href='#_simple_string_metrics'
class='anchor-link'>Simple String Metrics</a></li><li><a href='#_pho [...]
<a href="https://github.com/paulk-asert/" target="_blank" rel="noopener
noreferrer"><img style="border-radius:50%;height:48px;width:auto"
src="img/paulk-asert.png" alt="Paul King"></a>
<div style="display:grid;align-items:center;margin:0.1ex;padding:0ex">
<div><a href="https://github.com/paulk-asert/" target="_blank" rel="noopener
noreferrer"><span>Paul King</span></a></div>
diff --git a/blog/helloworldemoji.html b/blog/helloworldemoji.html
index 3e1c40b..fbfdea8 100644
--- a/blog/helloworldemoji.html
+++ b/blog/helloworldemoji.html
@@ -53,7 +53,7 @@
</ul>
</div>
</div>
- </div><div id='content' class='page-1'><div
class='row'><div class='row-fluid'><div class='col-lg-3'><ul
class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a
href='#doc'>Hello World with Emojis</a></li></ul><br/><ul
class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color:
#eee'><span>Related posts</span></li><li><a
href='./deep-learning-and-eclipse-collections'>Deep Learning and Eclipse
Collections</a></li><li><a href='./a [...]
+ </div><div id='content' class='page-1'><div
class='row'><div class='row-fluid'><div class='col-lg-3'><ul
class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a
href='#doc'>Hello World with Emojis</a></li></ul><br/><ul
class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color:
#eee'><span>Related posts</span></li><li><a
href='./set-operations-with-groovy'>Set Operators with Groovy</a></li><li><a
href='./deep-learning-and-eclips [...]
<p>In a <a
href="https://groovy.apache.org/blog/jvm-hello-world-with-groovy">previous blog
post</a>
we took an in-depth look at how to write a "hello world" class at the bytecode
level
using various libraries.</p>
diff --git a/blog/img/matrixAberlourRadar.png b/blog/img/matrixAberlourRadar.png
new file mode 100644
index 0000000..bd2c62b
Binary files /dev/null and b/blog/img/matrixAberlourRadar.png differ
diff --git a/blog/img/matrixWhiskyCorrHeatmap.png
b/blog/img/matrixWhiskyCorrHeatmap.png
new file mode 100644
index 0000000..556d134
Binary files /dev/null and b/blog/img/matrixWhiskyCorrHeatmap.png differ
diff --git a/blog/img/matrixWhiskyScatterPlot.png
b/blog/img/matrixWhiskyScatterPlot.png
new file mode 100644
index 0000000..58380c6
Binary files /dev/null and b/blog/img/matrixWhiskyScatterPlot.png differ
diff --git a/blog/img/matrixWhiskySelectionsRadar.png
b/blog/img/matrixWhiskySelectionsRadar.png
new file mode 100644
index 0000000..2820e57
Binary files /dev/null and b/blog/img/matrixWhiskySelectionsRadar.png differ
diff --git a/blog/img/underdogAberlourRadar.png
b/blog/img/underdogAberlourRadar.png
new file mode 100644
index 0000000..ac61dd2
Binary files /dev/null and b/blog/img/underdogAberlourRadar.png differ
diff --git a/blog/img/underdogClusterKmeans.png
b/blog/img/underdogClusterKmeans.png
new file mode 100644
index 0000000..07e810d
Binary files /dev/null and b/blog/img/underdogClusterKmeans.png differ
diff --git a/blog/img/underdogClustersAgglomerative.png
b/blog/img/underdogClustersAgglomerative.png
new file mode 100644
index 0000000..2b06bee
Binary files /dev/null and b/blog/img/underdogClustersAgglomerative.png differ
diff --git a/blog/img/underdogRadarPlot.png b/blog/img/underdogRadarPlot.png
deleted file mode 100644
index 2761550..0000000
Binary files a/blog/img/underdogRadarPlot.png and /dev/null differ
diff --git a/blog/img/underdogScatterPlot.png b/blog/img/underdogScatterPlot.png
deleted file mode 100644
index 19cac0f..0000000
Binary files a/blog/img/underdogScatterPlot.png and /dev/null differ
diff --git a/blog/img/underdogWhiskySelectionsRadar.png
b/blog/img/underdogWhiskySelectionsRadar.png
new file mode 100644
index 0000000..d8c808a
Binary files /dev/null and b/blog/img/underdogWhiskySelectionsRadar.png differ
diff --git a/blog/index.html b/blog/index.html
index a1507bb..ad2f4f3 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -97,7 +97,7 @@
colors: am5.ColorSet.new(root, {})
}));
wc.data.setAll([
- { category: "groovy", value: 84 }, { category: "emoji", value:
8 }, { 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 [...]
+ { category: "concurrency", value: 2 }, { category: "groovy",
value: 84 }, { 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: 8 }, { category: "v [...]
]);
wc.labels.template.setAll({
paddingTop: 5,
diff --git a/blog/lego-bricks-with-groovy.html
b/blog/lego-bricks-with-groovy.html
index 407b616..07861f4 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 137ab85..6266fa8 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/netbeans.html b/blog/netbeans.html
index 9fad747..046b60d 100644
--- a/blog/netbeans.html
+++ b/blog/netbeans.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 Apache NetBeans with Apache 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='./parsing-json-with-groovy'>Parsing JSON with Groovy</a></li><li><a
href='./groovy-nul [...]
+ </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 Apache NetBeans with Apache 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='./parsing-json-with-groovy'>Parsing JSON with Groovy</a></li><li><a
href='./groovy-nul [...]
<a href="https://github.com/paulk-asert/" target="_blank" rel="noopener
noreferrer"><img style="border-radius:50%;height:48px;width:auto"
src="img/paulk-asert.png" alt="Paul King"></a>
<div style="display:grid;align-items:center;margin:0.1ex;padding:0ex">
<div><a href="https://github.com/paulk-asert/" target="_blank" rel="noopener
noreferrer"><span>Paul King</span></a></div>
diff --git a/blog/parsing-json-with-groovy.html
b/blog/parsing-json-with-groovy.html
index 25fd443..6571178 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 b991204..aca5544 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 5e1596e..bd06b2b 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 aeceaff..ca4a872 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='./helloworldemoji'>Hello
World with Emojis</a></li><li><a href='./deep-learning-and-eclipse-collectio
[...]
+ </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='. [...]
<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 685ff6f..dba79c1 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='#_implementing_a_distributed_kmeans'
class='anchor-link'>Implementing a distributed KMeans</a></li><li><a
href='#_running [...]
+ </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='#_implementing_a_distributed_kmeans'
class='anchor-link'>Implementing a distributed KMeans</a></li><li><a
href='#_running [...]
<a href="https://github.com/paulk-asert/" target="_blank" rel="noopener
noreferrer"><img style="border-radius:50%;height:48px;width:auto"
src="img/paulk-asert.png" alt="Paul King"></a>
<div style="display:grid;align-items:center;margin:0.1ex;padding:0ex">
<div><a href="https://github.com/paulk-asert/" target="_blank" rel="noopener
noreferrer"><span>Paul King</span></a></div>
diff --git a/blog/wayang-tensorflow.html b/blog/wayang-tensorflow.html
index c173c7f..d40eda9 100644
--- a/blog/wayang-tensorflow.html
+++ b/blog/wayang-tensorflow.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 TensorFlow from Apache Wayang</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='./using-groovy-with-apache-wayang'>Using Groovy with Apache Wayang and
Apache Spark</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'>Using TensorFlow from Apache Wayang</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='./using-groovy-with-apache-wayang'>Using Groovy with Apache Wayang and
Apache Spark</a></li [...]
<a href="https://github.com/paulk-asert/" target="_blank" rel="noopener
noreferrer"><img style="border-radius:50%;height:48px;width:auto"
src="img/paulk-asert.png" alt="Paul King"></a>
<div style="display:grid;align-items:center;margin:0.1ex;padding:0ex">
<div><a href="https://github.com/paulk-asert/" target="_blank" rel="noopener
noreferrer"><span>Paul King</span></a></div>
diff --git a/blog/whiskey-clustering-with-groovy-and.html
b/blog/whiskey-clustering-with-groovy-and.html
index 9353af5..54582a5 100644
--- a/blog/whiskey-clustering-with-groovy-and.html
+++ b/blog/whiskey-clustering-with-groovy-and.html
@@ -3,7 +3,7 @@
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]--><head>
- <meta charset='utf-8'/><meta http-equiv='X-UA-Compatible'
content='IE=edge'/><meta name='viewport' content='width=device-width,
initial-scale=1'/><meta name='keywords' content='data science, groovy, ignite,
kmeans, clustering, whisky'/><meta name='description' content='This post looks
at using Apache Ignite with Apache Groovy and the K-Means algorithm to cluster
scotch whiskeys.'/><title>The Apache Groovy programming language - Blogs -
Whiskey Clustering with Groovy and Apache Ignite [...]
+ <meta charset='utf-8'/><meta http-equiv='X-UA-Compatible'
content='IE=edge'/><meta name='viewport' content='width=device-width,
initial-scale=1'/><meta name='keywords' content='data science, groovy, ignite,
kmeans, clustering, whisky, whiskey'/><meta name='description' content='This
post looks at using Apache Ignite with Apache Groovy and the K-Means algorithm
to cluster scotch whiskeys.'/><title>The Apache Groovy programming language -
Blogs - Whiskey Clustering with Groovy and Apac [...]
</head><body>
<div id='fork-me'>
<a href='https://github.com/apache/groovy'>
@@ -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/whisky-revisited.html b/blog/whisky-revisited.html
new file mode 100644
index 0000000..257503d
--- /dev/null
+++ b/blog/whisky-revisited.html
@@ -0,0 +1,621 @@
+<!DOCTYPE html>
+<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
+<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
+<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]--><head>
+ <meta charset='utf-8'/><meta http-equiv='X-UA-Compatible'
content='IE=edge'/><meta name='viewport' content='width=device-width,
initial-scale=1'/><meta name='keywords' content='whisky, whiskey, groovy,
kmeans, clustering, apache echarts'/><meta name='description' content='This
post looks at using the Underdog data science library.'/><title>The Apache
Groovy programming language - Blogs - Whisky flavor profiles
revisited</title><link href='../img/favicon.ico' type='image/x-ico' rel='i [...]
+</head><body>
+ <div id='fork-me'>
+ <a href='https://github.com/apache/groovy'>
+ <img style='position: fixed; top: 20px; right: -58px; border: 0;
z-index: 100; transform: rotate(45deg);'
src='../img/horizontal-github-ribbon.png'/>
+ </a>
+ </div><div id='st-container' class='st-container st-effect-9'>
+ <nav class='st-menu st-effect-9' id='menu-12'>
+ <h2 class='icon icon-lab'>Socialize</h2><ul>
+ <li>
+ <a href='https://groovy-lang.org/mailing-lists.html'
class='icon'><span class='fa fa-envelope'></span> Discuss on the
mailing-list</a>
+ </li><li>
+ <a href='https://twitter.com/ApacheGroovy'
class='icon'><span class='fa fa-twitter'></span> Groovy on Twitter</a>
+ </li><li>
+ <a href='https://groovy-lang.org/events.html'
class='icon'><span class='fa fa-calendar'></span> Events and conferences</a>
+ </li><li>
+ <a href='https://github.com/apache/groovy'
class='icon'><span class='fa fa-github'></span> Source code on GitHub</a>
+ </li><li>
+ <a href='https://groovy-lang.org/reporting-issues.html'
class='icon'><span class='fa fa-bug'></span> Report issues in Jira</a>
+ </li><li>
+ <a href='http://stackoverflow.com/questions/tagged/groovy'
class='icon'><span class='fa fa-stack-overflow'></span> Stack Overflow
questions</a>
+ </li><li>
+ <a href='http://www.groovycommunity.com/'
class='icon'><span class='fa fa-slack'></span> Slack Community</a>
+ </li>
+ </ul>
+ </nav><div class='st-pusher'>
+ <div class='st-content'>
+ <div class='st-content-inner'>
+ <!--[if lt IE 7]>
+ <p class="browsehappy">You are using an
<strong>outdated</strong> browser. Please <a
href="http://browsehappy.com/">upgrade your browser</a> to improve your
experience.</p>
+ <![endif]--><div><div class='navbar navbar-default
navbar-static-top' role='navigation'>
+ <div class='container'>
+ <div class='navbar-header'>
+ <button type='button'
class='navbar-toggle' data-toggle='collapse' data-target='.navbar-collapse'>
+ <span class='sr-only'></span><span
class='icon-bar'></span><span class='icon-bar'></span><span
class='icon-bar'></span>
+ </button><a class='navbar-brand'
href='../index.html'>
+ <i class='fa fa-star'></i> Apache
Groovy
+ </a>
+ </div><div class='navbar-collapse collapse'>
+ <ul class='nav navbar-nav navbar-right'>
+ <li class=''><a
href='https://groovy-lang.org/learn.html'>Learn</a></li><li class=''><a
href='https://groovy-lang.org/documentation.html'>Documentation</a></li><li
class=''><a href='/download.html'>Download</a></li><li class=''><a
href='https://groovy-lang.org/support.html'>Support</a></li><li class=''><a
href='/'>Contribute</a></li><li class=''><a
href='https://groovy-lang.org/ecosystem.html'>Ecosystem</a></li><li class=''><a
href='/blog'>Blog pos [...]
+ <a data-effect='st-effect-9'
class='st-trigger' href='#'>Socialize</a>
+ </li><li class=''>
+ <a href='../search.html'>
+ <i class='fa fa-search'></i>
+ </a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div><div id='content' class='page-1'><div
class='row'><div class='row-fluid'><div class='col-lg-3'><ul
class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a
href='#doc'>Whisky flavor profiles revisited</a></li><li><a
href='#_the_case_study' class='anchor-link'>The Case Study</a></li><li><a
href='#_a_first_look_at_underdog' class='anchor-link'>A first look at
Underdog</a></li><li><a href='#_a_first_look_at_matrix' class='anchor-link'>A
fir [...]
+<div class="sectionbody">
+<table><tr><td style="padding: 0px; padding-left: 20px; padding-right: 20px;
font-size: 18pt; line-height: 1.5; margin: 0px">
+<div class="paragraph">
+<p><span class="blue"><em>Let’s take a first look at Underdog and
Matrix, two new Groovy powered dataframe libraries.
+We’ll explore Whisky flavor profiles!</em></span></p>
+</div>
+</td></tr></table>
+<div class="paragraph">
+<p>In previous blog posts, we have looked at clustering whisky profiles
using:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a
href="https://groovy.apache.org/blog/using-groovy-with-apache-wayang">Apache
Wayang’s cross-platform machine learning</a> supporting native and Apache
Sparkâ„¢ data processing platforms</p>
+</li>
+<li>
+<p><a
href="https://groovy.apache.org/blog/whiskey-clustering-with-groovy-and">Apache
Ignite’s distributed machine learning</a></p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>The <a
href="https://github.com/paulk-asert/groovy-data-science">groovy-data-science</a>
repo also has examples of this case study using other technologies
including:</p>
+</div>
+<table class="tableblock frame-all grid-all stretch">
+<colgroup>
+<col style="width: 20%;">
+<col style="width: 80%;">
+</colgroup>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Data
manipulation</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Tablesaw,
Datumbox, Apache Commons CSV, Tribuo</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p
class="tableblock">Clustering</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Smile,
Apache Commons Math, Datumbox, Weka, Encog, Elki, Tribuo</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p
class="tableblock">Visualization</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">XChart,
Tablesaw Plot.ly, Smile visualization, JFreeChart</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Scaling
clustering</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Apache
Ignite, Apache Spark, Apache Wayang, Apache Flink, Apache Beam</p></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p>Let’s take a first look at two new Groovy powered dataframe libraries,
+<a href="https://grooviter.github.io/underdog/">Underdog</a> and
+<a href="https://github.com/Alipsa/matrix">Matrix</a>,
+to explore the same case study.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_the_case_study">The Case Study</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p><span class="image right"><img src="img/whiskey_bottles.jpg" alt="whisky
bottles" width="180"></span>
+In the quest to find the perfect single-malt Scotch whisky,
+the whiskies produced from
+<a href="https://www.niss.org/sites/default/files/ScotchWhisky01.txt">86
distilleries</a>
+have been ranked by expert tasters according to 12 criteria
+(Body, Sweetness, Malty, Smoky, Fruity, etc.).
+We’ll use algorithms, like <a
href="https://en.wikipedia.org/wiki/K-means_clustering">KMeans</a>, to cluster
the whiskies
+into related groups.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_a_first_look_at_underdog">A first look at Underdog</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>A relatively new data science library is
+<a href="https://grooviter.github.io/underdog/">Underdog</a>.
+Let’s use it to explore Whisky profiles.
+It has many Groovy-powered features delivering a very expressive developer
experience.</p>
+</div>
+<div class="paragraph">
+<p>Underdog sits on top of some well-known data-science libraries in the JVM
ecosystem
+like Smile, Tablesaw, and <a href="https://echarts.apache.org/">Apache
ECharts</a>.
+If you have used any of those libraries, you’ll recognise parts of the
functionality
+shining through.</p>
+</div>
+<div class="paragraph">
+<p>First, we’ll load our CSV file into an Underdog dataframe:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="groovy">def file =
getClass().getResource('whisky.csv').file
+def df = Underdog.df().read_csv(file).drop('RowID')</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Let’s look at the shape of and schema for the data:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="groovy">println df.shape()
+println df.schema()</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>It gives this output:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>86 rows X 13 cols
+ Structure of whisky.csv
+ Index | Column Name | Column Type |
+-----------------------------------------
+ 0 | Distillery | STRING |
+ 1 | Body | INTEGER |
+ 2 | Sweetness | INTEGER |
+ 3 | Smoky | INTEGER |
+ 4 | Medicinal | INTEGER |
+ 5 | Tobacco | INTEGER |
+ 6 | Honey | INTEGER |
+ 7 | Spicy | INTEGER |
+ 8 | Winey | INTEGER |
+ 9 | Nutty | INTEGER |
+ 10 | Malty | INTEGER |
+ 11 | Fruity | INTEGER |
+ 12 | Floral | INTEGER |</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Let’s look at a correlation matrix plot of the data:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="groovy">def plot =
Underdog.plots()
+def features = df.columns - 'Distillery'
+plot.correlationMatrix(df[features]).show()</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Which has this output:</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="img/underdogCorrelationPlot.png"
alt="correlation plot" width="50%"></span></p>
+</div>
+<div class="paragraph">
+<p>Let’s now explore searching for whiskies of a particular flavor,
+in this case profiles that are somewhat <em>fruity</em> and somewhat
<em>sweet</em> in flavor.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="groovy">def selected =
df[df['Fruity'] > 2 & df['Sweetness'] > 2]
+println selected.shape()</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>We can see that there are 6 such whiskies:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>6 rows X 13 cols</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Let’s have a look at the flavor profiles as a radar plot.
+The <code>underdog-plots</code> module has shortcuts making it easy to access
the Apache ECharts library.
+There is one such shortcut for a radar plot of a single series. Let’s
look at row 0 of our selected whiskies:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="groovy">plot.radar(
+ features,
+ [4] * features.size(),
+ selected[features].toList()[0],
+ selected['Distillery'][0]
+).show()</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Which has this output:</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="img/underdogAberlourRadar.png" alt="radar
plot for Aberlour" width="50%"></span></p>
+</div>
+<div class="paragraph">
+<p>This pops up in a browser window for the code shown above, but other output
options are also available.</p>
+</div>
+<div class="paragraph">
+<p>This shows one of our 6 selected whiskies of interest. We could certainly
do 5 other similar plots.
+The library (currently) doesn’t have a pre-built chart with multiple
series all displayed together,
+but the library is built in a fairly flexible manner, and we can reach down
one layer and
+build such a chart ourselves with not too much work:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="groovy">def multiRadar =
Chart.createGridOptions('Whisky flavor profiles',
+ 'Somewhat sweet, somewhat fruity') +
+create {
+ radar {
+ radius('50%')
+ indicator(features.zip([4] * features.size())
+ .collect { n, mx -> [name: n, max: mx] })
+ }
+ selected.toList().each { row ->
+ series(RadarSeries) {
+ data([[name: row[0], value: row[1..-1]]])
+ }
+ }
+}.customize {
+ legend {
+ show(true)
+ }
+}
+plot.show(multiRadar)</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Which has this output:</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="img/underdogWhiskySelectionsRadar.png"
alt="radar plot for six whiskies" width="50%"></span></p>
+</div>
+<div class="paragraph">
+<p>It can often be infuriating when a library doesn’t offer a feature
you need,
+so it’s great that we can add such a feature on the fly!</p>
+</div>
+<div class="paragraph">
+<p>Let’s now cluster the distilleries using k-means, and place the
cluster allocations back into the dataframe:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="groovy">def ml =
Underdog.ml()
+def d = df[features] as double[][]
+def clusters = ml.clustering.kMeans(d, nClusters: 3)
+df['Cluster'] = clusters.toList()</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Underdog offers some aggregation functions, so we can check the counts for
the cluster allocation:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="groovy">println
df.agg([Distillery:'count'])
+ .by('Cluster')
+ .rename('Whisky Cluster Sizes')</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Or, we can easily print out the distilleries in each cluster:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="groovy">println 'Clusters'
+for (int i in clusters.toSet()) {
+ println "$i:${df[df['Cluster'] == i]['Distillery'].join(', ')}"
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Which gives the following output:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>Clusters
+0:Aberfeldy, Aberlour, Auchroisk, Balmenach, Belvenie, BenNevis, Benrinnes,
Benromach, BlairAthol, Dailuaine, Dalmore, Edradour, GlenOrd, Glendronach,
Glendullan, Glenfarclas, Glenlivet, Glenrothes, Glenturret, Knochando,
Longmorn, Macallan, Mortlach, RoyalLochnagar, Strathisla
+1:Ardbeg, Balblair, Bowmore, Bruichladdich, Caol Ila, Clynelish, GlenGarioch,
GlenScotia, Highland Park, Isle of Jura, Lagavulin, Laphroig, Oban,
OldPulteney, Springbank, Talisker, Teaninich
+2:AnCnoc, Ardmore, ArranIsleOf, Auchentoshan, Aultmore, Benriach, Bladnoch,
Bunnahabhain, Cardhu, Craigallechie, Craigganmore, Dalwhinnie, Deanston,
Dufftown, GlenDeveronMacduff, GlenElgin, GlenGrant, GlenKeith, GlenMoray,
GlenSpey, Glenallachie, Glenfiddich, Glengoyne, Glenkinchie, Glenlossie,
Glenmorangie, Inchgower, Linkwood, Loch Lomond, Mannochmore, Miltonduff,
OldFettercairn, RoyalBrackla, Scapa, Speyburn, Speyside, Strathmill, Tamdhu,
Tamnavulin, Tobermory, Tomatin, Tomintoul, Tom [...]
+</div>
+</div>
+<div class="paragraph">
+<p>It’s very hard to visualize 12 dimensional data,
+so let’s project our data onto 2 dimensions using PCA and store those
projections back into the dataframe:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="groovy">def pca =
ml.features.pca(d, 2)
+def projected = pca.apply(d)
+df['X'] = projected*.getAt(0)
+df['Y'] = projected*.getAt(1)</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>We can now create a scatter plot of this data as follows:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="groovy">plot.scatter(
+ df['X'],
+ df['Y'],
+ df['Cluster'],
+ 'Whisky Clusters (kMeans)'
+).show()</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The output looks like this:</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="img/underdogClusterKmeans.png" alt="scatter
plot kmeans" width="50%"></span></p>
+</div>
+<div class="paragraph">
+<p>We can go and change our clustering algorithm, e.g.
<code>ml.clustering.agglomerative(d, nClusters: 3)</code>,
+in which case the cluster allocation counts will look like this:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre> Whisky Cluster Sizes
+ Cluster | Count [Distillery] |
+----------------------------------
+ 1 | 39 |
+ 2 | 41 |
+ 0 | 6 |</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>And the scatter plot looks like this:</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="img/underdogClustersAgglomerative.png"
alt="scatter plot agglomerative" width="50%"></span></p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_a_first_look_at_matrix">A first look at Matrix</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>The
+<a href="https://github.com/Alipsa/matrix/tree/main">Matrix</a>
+library makes it easy to work with a matrix of tabular data.</p>
+</div>
+<div class="paragraph">
+<p>Let’s read in our data and explore its size:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="groovy">def url =
getClass().getResource('whisky.csv')
+Matrix m = CsvImporter.importCsv(url).dropColumns('RowID')
+println m.dimensions()</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This outputs:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>[observations:86, variables:13]</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Currently, the data is all strings. Matrix provides a <code>convert</code>
option for getting data
+into the right type including handling missing values. It also has powerful
normalization
+functionality. We’ll want to normalize our data because some of the
algorithms and certainly
+the radar plot assume normalized data (values between 0 and 1).</p>
+</div>
+<div class="paragraph">
+<p>But, here we’ll show off the <code>apply</code> functionality which
will convert and normalize all-in-one
+by hand:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="groovy">def features =
m.columnNames() - 'Distillery'
+def size = features.size()
+features.each { feature ->
+ m.apply(feature) { it.toDouble() / 4 }
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Now, like we did with Underdog, we want to perform a query to find the
+whiskies which are somewhat <em>fruity</em> and somewhat <em>sweet</em> in
flavor:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="groovy">def selected=
m.subset{ it.Fruity > 0.5 && it.Sweetness > 0.5 }
+println selected.dimensions()
+println selected.head(10)</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Which has this output:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>[observations:6, variables:13]
+Distillery Body Sweetness Smoky Medicinal Tobacco Honey
Spicy Winey Nutty Malty Fruity Floral
+Aberlour 0.75 0.75 0.25 0.0 0.0 1.0
0.75 0.5 0.5 0.75 0.75 0.5
+AnCnoc 0.25 0.75 0.5 0.0 0.0 0.5
0.0 0.0 0.5 0.5 0.75 0.5
+Linkwood 0.5 0.75 0.25 0.0 0.0 0.25
0.25 0.5 0.0 0.25 0.75 0.5
+Macallan 1.0 0.75 0.25 0.0 0.0 0.5
0.25 1.0 0.5 0.5 0.75 0.25
+RoyalBrackla 0.5 0.75 0.5 0.25 0.25 0.25
0.5 0.25 0.0 0.5 0.75 0.5
+Strathmill 0.5 0.75 0.25 0.0 0.0 0.0
0.5 0.0 0.5 0.25 0.75 0.5</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>We can do a radar plot for just the first:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="groovy">def transparency =
80
+def aberlour = selected.subset(0..0)
+def rc = RadarChart.create(aberlour).addSeries('Distillery', transparency)
+new SwingWrapper(rc.exportSwing().chart).displayChart()</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The output looks like this:</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="img/matrixAberlourRadar.png" alt="aberlour
profile" width="50%"></span></p>
+</div>
+<div class="paragraph">
+<p>Or, for all selected whiskies:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="groovy">rc =
RadarChart.create(selected).addSeries('Distillery', transparency)
+new SwingWrapper(rc.exportSwing().chart).displayChart()</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Which looks like this:</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="img/matrixWhiskySelectionsRadar.png"
alt="selected whisky profiles" width="50%"></span></p>
+</div>
+<div class="paragraph">
+<p>Let’s now apply K-Means, placing the allocated clusters back into the
matrix:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="groovy">def iterations = 20
+def data = m.selectColumns(*features) as double[][]
+def model = KMeans.fit(data,3, iterations)
+m['Cluster'] = model.group().toList()</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>We can also project onto two dimensions using PCA:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="groovy">def pca =
PCA.fit(data)
+def projected = pca.getProjection(2).apply(data)
+m['X'] = projected*.getAt(0)
+m['Y'] = projected*.getAt(1)</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>We’ve placed the projected coordinates back into the matrix.
+Let’s now create a scatter plot with the distilleries for each cluster
+added in distinct series:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="groovy">def clusters =
m['Cluster'].toSet()
+def sc = ScatterChart.create(m)
+sc.title = 'Whisky Flavor Clusters'
+for (i in clusters) {
+ def series = m.subset('Cluster', i)
+ sc.addSeries("Cluster $i", series.column('X'), series.column('Y'))
+}
+new SwingWrapper(sc.exportSwing().chart).displayChart()</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>When run, we get the following output:</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="img/matrixWhiskyScatterPlot.png" alt="scatter
plot" width="50%"></span></p>
+</div>
+<div class="paragraph">
+<p>Matrix doesn’t have a correlation heatmap out of the box, but it does
have heatmap plots,
+and it does have correlation functionality.
+It’s easy enough to roll our own:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="prettyprint highlight"><code data-lang="groovy">def corr =
[size<..0, 0..<size].combinations().collect { i, j ->
+ Correlation.cor(data*.getAt(j), data*.getAt(i)) * 100 as int
+}
+
+def corrMatrix = Matrix.builder().data(X: 0..<corr.size(), Heat: corr)
+ .types([Number] * 2)
+ .matrixName('Heatmap')
+ .build()
+
+def hc = HeatmapChart.create(corrMatrix)
+ .addSeries('Heat Series', features.reverse(), features,
+ corrMatrix.column('Heat').collate(size))
+hc.exportPng('matrixWhiskyCorrHeatmap.png' as File)
+new SwingWrapper(hc.exportSwing().chart).displayChart()</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Which has this output:</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="img/matrixWhiskyCorrHeatmap.png"
alt="heatmap" width="50%"></span></p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_further_information">Further information</h2>
+<div class="sectionbody">
+<div class="ulist">
+<ul>
+<li>
+<p><a href="https://grooviter.github.io/underdog/">Underdog</a></p>
+</li>
+<li>
+<p><a href="https://github.com/paulk-asert/whisky-underdog">source code for
Underdog examples</a></p>
+</li>
+<li>
+<p><a href="https://github.com/Alipsa/matrix/tree/main">Matrix</a></p>
+</li>
+<li>
+<p><a href="https://github.com/paulk-asert/whisky-matrix">source code for
Matrix examples</a></p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_conclusion">Conclusion</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>We have looked at how to use Underdog and Matrix.</p>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Update history</div>
+<div class="paragraph">
+<p><strong>19/Apr/2025</strong>: Initial version<br></p>
+</div>
+</div>
+</div>
+</div>
+</div></div></div></div></div><footer id='footer'>
+ <div class='row'>
+ <div class='colset-3-footer'>
+ <div class='col-1'>
+ <h1>Groovy</h1><ul>
+ <li><a
href='https://groovy-lang.org/learn.html'>Learn</a></li><li><a
href='https://groovy-lang.org/documentation.html'>Documentation</a></li><li><a
href='/download.html'>Download</a></li><li><a
href='https://groovy-lang.org/support.html'>Support</a></li><li><a
href='/'>Contribute</a></li><li><a
href='https://groovy-lang.org/ecosystem.html'>Ecosystem</a></li><li><a
href='/blog'>Blog posts</a></li><li><a
href='https://groovy.apache.org/events.ht [...]
+ </ul>
+ </div><div class='col-2'>
+ <h1>About</h1><ul>
+ <li><a
href='https://github.com/apache/groovy'>Source code</a></li><li><a
href='https://groovy-lang.org/security.html'>Security</a></li><li><a
href='https://groovy-lang.org/learn.html#books'>Books</a></li><li><a
href='https://groovy-lang.org/thanks.html'>Thanks</a></li><li><a
href='http://www.apache.org/foundation/sponsorship.html'>Sponsorship</a></li><li><a
href='https://groovy-lang.org/faq.html'>FAQ</a></li><li><a
href='https://groovy-lang.or [...]
+ </ul>
+ </div><div class='col-3'>
+ <h1>Socialize</h1><ul>
+ <li><a
href='https://groovy-lang.org/mailing-lists.html'>Discuss on the
mailing-list</a></li><li><a href='https://twitter.com/ApacheGroovy'>Groovy on
Twitter</a></li><li><a href='https://groovy-lang.org/events.html'>Events and
conferences</a></li><li><a href='https://github.com/apache/groovy'>Source code
on GitHub</a></li><li><a
href='https://groovy-lang.org/reporting-issues.html'>Report issues in
Jira</a></li><li><a href='http://stackoverflow. [...]
+ </ul>
+ </div><div class='col-right'>
+ <p>
+ The Groovy programming language is
supported by the <a href='http://www.apache.org'>Apache Software Foundation</a>
and the Groovy community.
+ </p><div text-align='right'>
+ <img src='../img/asf_logo.png'
title='The Apache Software Foundation' alt='The Apache Software Foundation'
style='width:60%'/>
+ </div><p>Apache® and the Apache
feather logo are either registered trademarks or trademarks of The Apache
Software Foundation.</p>
+ </div>
+ </div><div class='clearfix'>© 2003-2025
the Apache Groovy project — Groovy is Open Source: <a
href='http://www.apache.org/licenses/LICENSE-2.0.html' alt='Apache 2
License'>license</a>, <a
href='https://privacy.apache.org/policies/privacy-policy-public.html'>privacy
policy</a>.</div>
+ </div>
+ </footer></div>
+ </div>
+ </div>
+ </div>
+ </div><script src='../js/vendor/jquery-1.10.2.min.js'
defer></script><script src='../js/vendor/classie.js' defer></script><script
src='../js/vendor/bootstrap.js' defer></script><script
src='../js/vendor/sidebarEffects.js' defer></script><script
src='../js/vendor/modernizr-2.6.2.min.js' defer></script><script
src='../js/plugins.js' defer></script><script
src='../js/vendor/prettify.min.js'></script><script>document.addEventListener('DOMContentLoaded',prettyPrint)</script>
+</body></html>
\ No newline at end of file
diff --git a/blog/whisky-underdog.html b/blog/whisky-underdog.html
deleted file mode 100644
index 0ea45bf..0000000
--- a/blog/whisky-underdog.html
+++ /dev/null
@@ -1,260 +0,0 @@
-<!DOCTYPE html>
-<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
-<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
-<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
-<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]--><head>
- <meta charset='utf-8'/><meta http-equiv='X-UA-Compatible'
content='IE=edge'/><meta name='viewport' content='width=device-width,
initial-scale=1'/><meta name='keywords' content='whisky, groovy, kmeans,
clustering'/><meta name='description' content='This post looks at using the
Underdog data science library.'/><title>The Apache Groovy programming language
- Blogs - A first look at Underdog</title><link href='../img/favicon.ico'
type='image/x-ico' rel='icon'/><script src='../js/matomo.j [...]
-</head><body>
- <div id='fork-me'>
- <a href='https://github.com/apache/groovy'>
- <img style='position: fixed; top: 20px; right: -58px; border: 0;
z-index: 100; transform: rotate(45deg);'
src='../img/horizontal-github-ribbon.png'/>
- </a>
- </div><div id='st-container' class='st-container st-effect-9'>
- <nav class='st-menu st-effect-9' id='menu-12'>
- <h2 class='icon icon-lab'>Socialize</h2><ul>
- <li>
- <a href='https://groovy-lang.org/mailing-lists.html'
class='icon'><span class='fa fa-envelope'></span> Discuss on the
mailing-list</a>
- </li><li>
- <a href='https://twitter.com/ApacheGroovy'
class='icon'><span class='fa fa-twitter'></span> Groovy on Twitter</a>
- </li><li>
- <a href='https://groovy-lang.org/events.html'
class='icon'><span class='fa fa-calendar'></span> Events and conferences</a>
- </li><li>
- <a href='https://github.com/apache/groovy'
class='icon'><span class='fa fa-github'></span> Source code on GitHub</a>
- </li><li>
- <a href='https://groovy-lang.org/reporting-issues.html'
class='icon'><span class='fa fa-bug'></span> Report issues in Jira</a>
- </li><li>
- <a href='http://stackoverflow.com/questions/tagged/groovy'
class='icon'><span class='fa fa-stack-overflow'></span> Stack Overflow
questions</a>
- </li><li>
- <a href='http://www.groovycommunity.com/'
class='icon'><span class='fa fa-slack'></span> Slack Community</a>
- </li>
- </ul>
- </nav><div class='st-pusher'>
- <div class='st-content'>
- <div class='st-content-inner'>
- <!--[if lt IE 7]>
- <p class="browsehappy">You are using an
<strong>outdated</strong> browser. Please <a
href="http://browsehappy.com/">upgrade your browser</a> to improve your
experience.</p>
- <![endif]--><div><div class='navbar navbar-default
navbar-static-top' role='navigation'>
- <div class='container'>
- <div class='navbar-header'>
- <button type='button'
class='navbar-toggle' data-toggle='collapse' data-target='.navbar-collapse'>
- <span class='sr-only'></span><span
class='icon-bar'></span><span class='icon-bar'></span><span
class='icon-bar'></span>
- </button><a class='navbar-brand'
href='../index.html'>
- <i class='fa fa-star'></i> Apache
Groovy
- </a>
- </div><div class='navbar-collapse collapse'>
- <ul class='nav navbar-nav navbar-right'>
- <li class=''><a
href='https://groovy-lang.org/learn.html'>Learn</a></li><li class=''><a
href='https://groovy-lang.org/documentation.html'>Documentation</a></li><li
class=''><a href='/download.html'>Download</a></li><li class=''><a
href='https://groovy-lang.org/support.html'>Support</a></li><li class=''><a
href='/'>Contribute</a></li><li class=''><a
href='https://groovy-lang.org/ecosystem.html'>Ecosystem</a></li><li class=''><a
href='/blog'>Blog pos [...]
- <a data-effect='st-effect-9'
class='st-trigger' href='#'>Socialize</a>
- </li><li class=''>
- <a href='../search.html'>
- <i class='fa fa-search'></i>
- </a>
- </li>
- </ul>
- </div>
- </div>
- </div><div id='content' class='page-1'><div
class='row'><div class='row-fluid'><div class='col-lg-3'><ul
class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a
href='#doc'>A first look at Underdog</a></li><li><a
href='#_further_information' class='anchor-link'>Further
information</a></li><li><a href='#_conclusion'
class='anchor-link'>Conclusion</a></li></ul><br/><ul class='nav-sidebar'><li
style='padding: 0.35em 0.625em; background-color: #e [...]
-<div class="sectionbody">
-<table><tr><td style="padding: 0px; padding-left: 20px; padding-right: 20px;
font-size: 18pt; line-height: 1.5; margin: 0px">
-<div class="paragraph">
-<p><span class="blue"><em>Let’s explore Whisky profiles using
Underdog!</em></span></p>
-</div>
-</td></tr></table>
-<div class="paragraph">
-<p>A relatively new data science library is
-<a href="https://grooviter.github.io/underdog/">Underdog</a>.
-Let’s use it to explore Whiskey profiles.
-It has many Groovy-powered features delivering a very expressive developer
experience.</p>
-</div>
-<div class="paragraph">
-<p>Underdog sits on top of some well-known data-science libraries like Smile,
Tablesaw, and Apache eCharts.
-If you have used any of those libraries, you’ll recognise parts of the
functionality.</p>
-</div>
-<div class="paragraph">
-<p>First, we’ll load our CSV file:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="prettyprint highlight"><code data-lang="groovy">def file = new
File(getClass().classLoader.getResource('whiskey.csv').file)
-def df = Underdog.df().read_csv(file.path).drop('RowID')</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>Let’s look at the shape of and schema for the data:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="prettyprint highlight"><code data-lang="groovy">println df.shape()
-println df.schema()</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>It gives this output:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre>86 rows X 13 cols
- Structure of whiskey.csv
- Index | Column Name | Column Type |
------------------------------------------
- 0 | Distillery | STRING |
- 1 | Body | INTEGER |
- 2 | Sweetness | INTEGER |
- 3 | Smoky | INTEGER |
- 4 | Medicinal | INTEGER |
- 5 | Tobacco | INTEGER |
- 6 | Honey | INTEGER |
- 7 | Spicy | INTEGER |
- 8 | Winey | INTEGER |
- 9 | Nutty | INTEGER |
- 10 | Malty | INTEGER |
- 11 | Fruity | INTEGER |
- 12 | Floral | INTEGER |</pre>
-</div>
-</div>
-<div class="paragraph">
-<p>Let’s look at a correlation matrix plot of the data:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="prettyprint highlight"><code data-lang="groovy">def plot =
Underdog.plots()
-def features = df.columns - 'Distillery'
-plot.correlationMatrix(df[features]).show()</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>Which has this output:</p>
-</div>
-<div class="paragraph">
-<p><span class="image"><img src="img/underdogCorrelationPlot.png"
alt="correlation plot" width="50%"></span></p>
-</div>
-<div class="paragraph">
-<p>We can also look at the data for any individual distillery using a radar
plot. Let’s look at it for row 0:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="prettyprint highlight"><code data-lang="groovy">def data =
df[features] as double[][]
-plot.radar(
- features,
- [4] * features.size(),
- data[0].toList(),
- df['Distillery'][0]
-).show()</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>Which has this output:</p>
-</div>
-<div class="paragraph">
-<p><span class="image"><img src="img/underdogRadarPlot.png" alt="radar plot"
width="50%"></span></p>
-</div>
-<div class="paragraph">
-<p>Let’s now cluster the distilleries using k-means:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="prettyprint highlight"><code data-lang="groovy">def ml =
Underdog.ml()
-def clusters = ml.clustering.kMeans(data, nClusters: 3)
-df['Cluster'] = clusters.toList()
-
-println 'Clusters'
-for (int i in clusters.toSet()) {
- println "$i:${df[df['Cluster'] == i]['Distillery'].join(', ')}"
-}</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>It gives the following output:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre>Clusters
-0:Aberfeldy, Aberlour, Auchroisk, Balmenach, Belvenie, BenNevis, Benrinnes,
Benromach, BlairAthol, Dailuaine, Dalmore, Edradour, GlenOrd, Glendronach,
Glendullan, Glenfarclas, Glenlivet, Glenrothes, Glenturret, Knochando,
Longmorn, Macallan, Mortlach, RoyalLochnagar, Strathisla
-1:Ardbeg, Balblair, Bowmore, Bruichladdich, Caol Ila, Clynelish, GlenGarioch,
GlenScotia, Highland Park, Isle of Jura, Lagavulin, Laphroig, Oban,
OldPulteney, Springbank, Talisker, Teaninich
-2:AnCnoc, Ardmore, ArranIsleOf, Auchentoshan, Aultmore, Benriach, Bladnoch,
Bunnahabhain, Cardhu, Craigallechie, Craigganmore, Dalwhinnie, Deanston,
Dufftown, GlenDeveronMacduff, GlenElgin, GlenGrant, GlenKeith, GlenMoray,
GlenSpey, Glenallachie, Glenfiddich, Glengoyne, Glenkinchie, Glenlossie,
Glenmorangie, Inchgower, Linkwood, Loch Lomond, Mannochmore, Miltonduff,
OldFettercairn, RoyalBrackla, Scapa, Speyburn, Speyside, Strathmill, Tamdhu,
Tamnavulin, Tobermory, Tomatin, Tomintoul, Tom [...]
-</div>
-</div>
-<div class="paragraph">
-<p>Finally, let’s project our data onto 2 dimensions using PCA and plot
that as a scatter plot:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="prettyprint highlight"><code data-lang="groovy">def pca =
ml.features.pca(data, 2)
-def projected = pca.apply(data)
-
-df['X'] = projected*.getAt(0)
-df['Y'] = projected*.getAt(1)
-
-plot.scatter(
- df['X'],
- df['Y'],
- df['Cluster'],
- 'Whiskey Clusters'
-).show()</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>The output looks like this:</p>
-</div>
-<div class="paragraph">
-<p><span class="image"><img src="img/underdogScatterPlot.png" alt="scatter
plot" width="50%"></span></p>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="_further_information">Further information</h2>
-<div class="sectionbody">
-<div class="ulist">
-<ul>
-<li>
-<p><a href="https://grooviter.github.io/underdog/">Underdog</a></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="_conclusion">Conclusion</h2>
-<div class="sectionbody">
-<div class="paragraph">
-<p>We have looked at how to use Underdog.</p>
-</div>
-<div class="sidebarblock">
-<div class="content">
-<div class="title">Update history</div>
-<div class="paragraph">
-<p><strong>17/Apr/2025</strong>: Initial version<br></p>
-</div>
-</div>
-</div>
-</div>
-</div></div></div></div></div><footer id='footer'>
- <div class='row'>
- <div class='colset-3-footer'>
- <div class='col-1'>
- <h1>Groovy</h1><ul>
- <li><a
href='https://groovy-lang.org/learn.html'>Learn</a></li><li><a
href='https://groovy-lang.org/documentation.html'>Documentation</a></li><li><a
href='/download.html'>Download</a></li><li><a
href='https://groovy-lang.org/support.html'>Support</a></li><li><a
href='/'>Contribute</a></li><li><a
href='https://groovy-lang.org/ecosystem.html'>Ecosystem</a></li><li><a
href='/blog'>Blog posts</a></li><li><a
href='https://groovy.apache.org/events.ht [...]
- </ul>
- </div><div class='col-2'>
- <h1>About</h1><ul>
- <li><a
href='https://github.com/apache/groovy'>Source code</a></li><li><a
href='https://groovy-lang.org/security.html'>Security</a></li><li><a
href='https://groovy-lang.org/learn.html#books'>Books</a></li><li><a
href='https://groovy-lang.org/thanks.html'>Thanks</a></li><li><a
href='http://www.apache.org/foundation/sponsorship.html'>Sponsorship</a></li><li><a
href='https://groovy-lang.org/faq.html'>FAQ</a></li><li><a
href='https://groovy-lang.or [...]
- </ul>
- </div><div class='col-3'>
- <h1>Socialize</h1><ul>
- <li><a
href='https://groovy-lang.org/mailing-lists.html'>Discuss on the
mailing-list</a></li><li><a href='https://twitter.com/ApacheGroovy'>Groovy on
Twitter</a></li><li><a href='https://groovy-lang.org/events.html'>Events and
conferences</a></li><li><a href='https://github.com/apache/groovy'>Source code
on GitHub</a></li><li><a
href='https://groovy-lang.org/reporting-issues.html'>Report issues in
Jira</a></li><li><a href='http://stackoverflow. [...]
- </ul>
- </div><div class='col-right'>
- <p>
- The Groovy programming language is
supported by the <a href='http://www.apache.org'>Apache Software Foundation</a>
and the Groovy community.
- </p><div text-align='right'>
- <img src='../img/asf_logo.png'
title='The Apache Software Foundation' alt='The Apache Software Foundation'
style='width:60%'/>
- </div><p>Apache® and the Apache
feather logo are either registered trademarks or trademarks of The Apache
Software Foundation.</p>
- </div>
- </div><div class='clearfix'>© 2003-2025
the Apache Groovy project — Groovy is Open Source: <a
href='http://www.apache.org/licenses/LICENSE-2.0.html' alt='Apache 2
License'>license</a>, <a
href='https://privacy.apache.org/policies/privacy-policy-public.html'>privacy
policy</a>.</div>
- </div>
- </footer></div>
- </div>
- </div>
- </div>
- </div><script src='../js/vendor/jquery-1.10.2.min.js'
defer></script><script src='../js/vendor/classie.js' defer></script><script
src='../js/vendor/bootstrap.js' defer></script><script
src='../js/vendor/sidebarEffects.js' defer></script><script
src='../js/vendor/modernizr-2.6.2.min.js' defer></script><script
src='../js/plugins.js' defer></script><script
src='../js/vendor/prettify.min.js'></script><script>document.addEventListener('DOMContentLoaded',prettyPrint)</script>
-</body></html>
\ No newline at end of file
diff --git a/blog/wordle-checker.html b/blog/wordle-checker.html
index 0d01a03..5dd7a41 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 bb87bc8..162927b 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 a695b56..86a9453 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">