<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Andy Brunner</title>
    <description>The latest articles on DEV Community by Andy Brunner (@andybrunner).</description>
    <link>https://dev.to/andybrunner</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1728039%2F64a8b205-55ee-453f-9c33-0e5589dcb348.png</url>
      <title>DEV Community: Andy Brunner</title>
      <link>https://dev.to/andybrunner</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/andybrunner"/>
    <language>en</language>
    <item>
      <title>Open Source Java Utility Package Version 2025.05.17</title>
      <dc:creator>Andy Brunner</dc:creator>
      <pubDate>Thu, 05 Jun 2025 06:51:54 +0000</pubDate>
      <link>https://dev.to/andybrunner/open-source-java-utility-package-version-20250517-45kg</link>
      <guid>https://dev.to/andybrunner/open-source-java-utility-package-version-20250517-45kg</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkhvyuankg2ohu0ytdbze.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkhvyuankg2ohu0ytdbze.jpeg" alt="Image description" width="800" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A high-performance and user-friendly toolkit tailored for developing small to medium-sized back-end applications&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;KPasswordVault&lt;/strong&gt;: New class to securely hash, store and verify passwords&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;KHTTPServerThread&lt;/strong&gt;: New class to support HTTP server applications (for web or REST services)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;KSMTPMailer&lt;/strong&gt;: Added setLocalFQDNHostName()&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;KLog&lt;/strong&gt;: Added options in KLog.properties and application startup parameters (KLogInclude and KLogExclude) to include or exclude data from logging&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;K&lt;/strong&gt;: Added repeat(), getHTTPStatusText(), truncateMiddle(), compressGZIP(), decompressGZIP(), loadKeyStore(), toPEM(), generateRSAKeyPair(), encodeHTML() and decodeHTML()&lt;/li&gt;
&lt;li&gt;Updated Sample Code&lt;/li&gt;
&lt;li&gt;Some minor code and documentation changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://java-util.k43.ch" rel="noopener noreferrer"&gt;https://java-util.k43.ch&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>logging</category>
      <category>database</category>
      <category>security</category>
    </item>
    <item>
      <title>Freeware: Java Utility Package Version 2025.02.26 released</title>
      <dc:creator>Andy Brunner</dc:creator>
      <pubDate>Wed, 26 Feb 2025 11:37:16 +0000</pubDate>
      <link>https://dev.to/andybrunner/freeware-java-utility-package-version-20250226-released-4hem</link>
      <guid>https://dev.to/andybrunner/freeware-java-utility-package-version-20250226-released-4hem</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkhvyuankg2ohu0ytdbze.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkhvyuankg2ohu0ytdbze.jpeg" alt="Image description" width="800" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A high-performance, user-friendly programming toolkit designed for Java back-end developers&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Publish Java code on GitHub as open source&lt;/li&gt;
&lt;li&gt;K: Added getCurrentVersionNumber()&lt;/li&gt;
&lt;li&gt;K: Added getPasswordHash()&lt;/li&gt;
&lt;li&gt;Added HelloWorld example to test installation with java -jar ch.k43.util.jar&lt;/li&gt;
&lt;li&gt;Some minor code and documentation changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Have fun!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://java-util.k43.ch" rel="noopener noreferrer"&gt;https://java-util.k43.ch&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>logging</category>
      <category>database</category>
      <category>programming</category>
    </item>
    <item>
      <title>Freeware: New version of Java Utility Package (Version 2025.02.13) released</title>
      <dc:creator>Andy Brunner</dc:creator>
      <pubDate>Thu, 13 Feb 2025 10:25:14 +0000</pubDate>
      <link>https://dev.to/andybrunner/freeware-new-version-of-java-utility-package-version-20250213-released-4ic1</link>
      <guid>https://dev.to/andybrunner/freeware-new-version-of-java-utility-package-version-20250213-released-4ic1</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvv4ojvuph4z59mra1ek6.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvv4ojvuph4z59mra1ek6.jpeg" alt="Image description" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A high-performance and user-friendly programming toolkit tailored for Java backend developers&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;KTimer: Added reset()&lt;/li&gt;
&lt;li&gt;K: Added saveError()&lt;/li&gt;
&lt;li&gt;K: Added multiple static fields that describe the environment&lt;/li&gt;
&lt;li&gt;Updated sample code&lt;/li&gt;
&lt;li&gt;Some minor code and documentation changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://java-util.k43.ch" rel="noopener noreferrer"&gt;https://java-util.k43.ch&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>logging</category>
      <category>database</category>
      <category>programming</category>
    </item>
    <item>
      <title>Freeware: Java Utility Package (Version 2025.01.19) released</title>
      <dc:creator>Andy Brunner</dc:creator>
      <pubDate>Sun, 19 Jan 2025 10:27:25 +0000</pubDate>
      <link>https://dev.to/andybrunner/freeware-java-utility-package-version-20250119-released-2331</link>
      <guid>https://dev.to/andybrunner/freeware-java-utility-package-version-20250119-released-2331</guid>
      <description>&lt;p&gt;&lt;strong&gt;A high-performance and user-friendly programming toolkit tailored for Java backend developers&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Support for GraalVM native-image compilation (see Tips / FAQ)&lt;/li&gt;
&lt;li&gt;Check if JVM is Java 8 (version 1.8) or higher&lt;/li&gt;
&lt;li&gt;K: Added isNewVersionAvailable()&lt;/li&gt;
&lt;li&gt;Major rewrite of the website content&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://java-util.k43.ch" rel="noopener noreferrer"&gt;https://java-util.k43.ch&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>logging</category>
      <category>database</category>
      <category>programming</category>
    </item>
    <item>
      <title>Freeware: Java Utility Package (Version 2024.12.08) released</title>
      <dc:creator>Andy Brunner</dc:creator>
      <pubDate>Sun, 08 Dec 2024 12:50:38 +0000</pubDate>
      <link>https://dev.to/andybrunner/freeware-java-utility-package-version-20241208-released-31am</link>
      <guid>https://dev.to/andybrunner/freeware-java-utility-package-version-20241208-released-31am</guid>
      <description>&lt;p&gt;&lt;strong&gt;A fast and easy to use programming toolkit for the Java backend developer&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;KLog: Save the last 10 errors even if logging is not active (retrievable with K.getLastError() and K.getLastErrors()&lt;/li&gt;
&lt;li&gt;K: Changed formatBytes() to show e.g. MiB instead of MB (IEC standard)&lt;/li&gt;
&lt;li&gt;K: Added getPrivateKey(), getPublicKey() and getCertificate()&lt;/li&gt;
&lt;li&gt;Sample code updated&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Have fun!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://java-util.k43.ch" rel="noopener noreferrer"&gt;https://java-util.k43.ch&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>logging</category>
      <category>database</category>
      <category>programming</category>
    </item>
    <item>
      <title>Freeware: Java Utility Package (Version 2024.10.26) released</title>
      <dc:creator>Andy Brunner</dc:creator>
      <pubDate>Sat, 26 Oct 2024 09:56:48 +0000</pubDate>
      <link>https://dev.to/andybrunner/freeware-java-utility-package-version-20241026-released-2791</link>
      <guid>https://dev.to/andybrunner/freeware-java-utility-package-version-20241026-released-2791</guid>
      <description>&lt;p&gt;&lt;strong&gt;A fast and easy to use programming toolkit for the Java backend developer&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;KDB: Added option argTimeOutSec to exec()&lt;/li&gt;
&lt;li&gt;KDB: Added prepare() and execPrepare() to support SQL precompilation and to prevent SQL injection attacks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Have fun!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://java-util.k43.ch" rel="noopener noreferrer"&gt;https://java-util.k43.ch&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>logging</category>
      <category>database</category>
      <category>programm</category>
    </item>
    <item>
      <title>Introducing Free Java Utility Package</title>
      <dc:creator>Andy Brunner</dc:creator>
      <pubDate>Mon, 16 Sep 2024 07:15:28 +0000</pubDate>
      <link>https://dev.to/andybrunner/introducing-free-java-utility-package-1fph</link>
      <guid>https://dev.to/andybrunner/introducing-free-java-utility-package-1fph</guid>
      <description>&lt;p&gt;&lt;strong&gt;A fast and easy to use programming toolkit for the Java backend developer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In my professional life as an administrator and developer, I have benefited many times from countless freeware and open source products. It is therefore natural for me to also contribute to this community.&lt;/p&gt;

&lt;p&gt;This collection of Java classes was created in the course of various projects and will be further developed. I hope that this tool will also serve you well.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://java-util.k43.ch" rel="noopener noreferrer"&gt;https://java-util.k43.ch&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Design Goals&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ease of use&lt;/strong&gt;: The classes and methods must be flexible and simple to use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No UI calls&lt;/strong&gt;: Do everything without user interface to allow this toolkit to be used for background tasks or server processes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fast&lt;/strong&gt;: Write the code as performant as possible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Favor memory usage over I/O&lt;/strong&gt;: In today's world, memory is no longer a limiting factor. Therefore, many operations can be done in memory where (temporary) files were used in the past (e.g. KDB creates a data structure from SQL SELECT, KFile operations are mostly in memory).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use extensive logging&lt;/strong&gt;: The KLog.debug() function is used heavily throughout the code to help debugging your code. Use the toString() methods found in each class to show the internal field values of the objects during development.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Platform independence&lt;/strong&gt;: Write everything platform independent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minimize prerequisites&lt;/strong&gt;: Stay with the Java SE standard libraries. Use only external JAR files when absolutely necessary (e.g. KSMTPMailer, JDBC drivers).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Logging: Simple but powerful
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Reduces the logging complexity to debug, info and error messages.&lt;/li&gt;
&lt;li&gt;Uses the standard Java SE logging class without the need for any additional library.&lt;/li&gt;
&lt;li&gt;Every log records includes an exact time stamp and the source code location.&lt;/li&gt;
&lt;li&gt;Besides the standard ConsoleHandler and FileHandler, the output may be sent to any JDBC database or errors can be sent to an SMTP host.&lt;/li&gt;
&lt;li&gt;Five logging formatters are provided: Tabular line, CSV, JSON, YAML and XML.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

  &lt;span class="nc"&gt;KLog&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;info&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Start"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Exception&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;KLog&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;

  &lt;span class="nc"&gt;KLog&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;debug&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Result is "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2024-09-16T07:17:11.095 D main[1]:ch.k43.util.KLog:open:459                            ===== Application started 2024-09-16T07:17:11.048 =====
2024-09-16T07:17:11.111 D main[1]:ch.k43.util.KLog:open:460                            Java Utility Package (Freeware) ch.k43.util Version 2024.09.15
2024-09-16T07:17:11.112 D main[1]:ch.k43.util.KLog:open:463                            Homepage java-util.k43.ch - Please send any feedback to andy.brunner@k43.ch
2024-09-16T07:17:11.122 D main[1]:ch.k43.util.KLog:open:466                            Host ab-macbook-pro (10.0.0.105)
2024-09-16T07:17:11.122 D main[1]:ch.k43.util.KLog:open:467                            OS platform Mac OS X (Version 14.6.1/aarch64)
2024-09-16T07:17:11.123 D main[1]:ch.k43.util.KLog:open:471                            OS disk space total 3.63 TB, free 2.37 TB, usable 2.37 TB
2024-09-16T07:17:11.123 D main[1]:ch.k43.util.KLog:open:474                            Java version 21 (OpenJDK 64-Bit Server VM - Eclipse Adoptium)
2024-09-16T07:17:11.123 D main[1]:ch.k43.util.KLog:open:477                            Java CPUs 10
2024-09-16T07:17:11.124 D main[1]:ch.k43.util.KLog:open:481                            Java heap maximum 16.00 GB, current 1.00 GB, used 7.68 MB, free 1016.32 MB
2024-09-16T07:17:11.124 D main[1]:ch.k43.util.KLog:open:485                            Java locale de/CH, time UTC +02:00
2024-09-16T07:17:11.125 D main[1]:ch.k43.util.KLog:open:488                            Java classpath ../bin/:../lib/angus-mail-2.0.3.jar:../lib/jakarta.mail-api-2.1.3.jar:../lib/org.json.20230618.jar:../lib/h2-2.2.224.jar:../lib/jakarta.activation-api-2.1.3.jar:../lib/angus-activation-2.0.2.jar
2024-09-16T07:17:11.125 I main[1]:Test:main:9                                          Start
2024-09-16T07:17:11.125 E main[1]:Test:main:16                                         ===&amp;gt; java.lang.ArithmeticException: / by zero
2024-09-16T07:17:11.126 E main[1]:Test:main:16                                         ===&amp;gt; Stack[1]: Test.main(Test.java:14)
2024-09-16T07:17:11.126 D main[1]:Test:main:19                                         Result is 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Database: Access any JDBC database
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Loads the required JDBC driver and executes any SQL statement.&lt;/li&gt;
&lt;li&gt;Any JDBC compliant database may be used.&lt;/li&gt;
&lt;li&gt;Retrieve data in raw Java format (rows as ArraryList, columns as Java Objects).&lt;/li&gt;
&lt;li&gt;Format result set as a JSON, YAML, XML, CSV or tabular string.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="no"&gt;KDB&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="no"&gt;KDB&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="no"&gt;KDB&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;JDBC_H2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"jdbc:h2:mem:mydb"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

  &lt;span class="nc"&gt;KLog&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;abort&lt;/span&gt;&lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isConnected&lt;/span&gt;&lt;span class="o"&gt;(),&lt;/span&gt; &lt;span class="s"&gt;"Error: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getErrorMessage&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;

  &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;exec&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"CREATE TABLE ADDRESSES (SEQUENCE INT AUTO_INCREMENT, LASTNAME VARCHAR(20), FIRSTNAME VARCHAR(20))"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;exec&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"INSERT INTO ADDRESSES (LASTNAME, FIRSTNAME) VALUES ('Smith', 'John')"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;exec&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"INSERT INTO ADDRESSES (LASTNAME, FIRSTNAME) VALUES ('Miller', 'Bob')"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;exec&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"INSERT INTO ADDRESSES (LASTNAME, FIRSTNAME) VALUES ('Johnson', 'Eve')"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
   &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;exec&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"SELECT * FROM ADDRESSES"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getDataAsTable&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
  &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getDataAsJSON&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SEQUENCE    LASTNAME             FIRSTNAME            
1           Smith                John                 
2           Miller               Bob                  
3           Johnson              Eve                  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ADDRESSES"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"SEQUENCE"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"LASTNAME"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Smith"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"FIRSTNAME"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"John"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"SEQUENCE"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"LASTNAME"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Miller"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"FIRSTNAME"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Bob"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"SEQUENCE"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"LASTNAME"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Johnson"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"FIRSTNAME"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Eve"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  SMTP: Create and send message
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Create MIME multipart message with test, HTML and file attachments.&lt;/li&gt;
&lt;li&gt;Support for STARTTLS/TLS or non-TLS connections.&lt;/li&gt;
&lt;li&gt;Support for OAuth 2.0 and basic authentication.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;KSMTPMailer&lt;/span&gt; &lt;span class="n"&gt;mailer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;KSMTPMailer&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

&lt;span class="n"&gt;mailer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setFrom&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"john.doe@acme.com"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;mailer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setTo&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"bob.smith@hotmail.com"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;mailer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setSubject&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Subject"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;mailer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addHTML&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"&amp;lt;h1&amp;gt;Your requested files&amp;lt;/h1&amp;gt;"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;mailer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addText&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Body Text"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;mailer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addFile&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"test1.txt"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;mailer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addFile&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"test2.txt"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;mailer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addText&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Regards, John"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;mailer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;send&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  HTTP Client: Simple standard or REST calls
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Supports HTTP and HTTPS.&lt;/li&gt;
&lt;li&gt;Support for all standard HTTP methods (GET, POST, PUT, POST, etc).&lt;/li&gt;
&lt;li&gt;Request header Date, User-Agent, Host and Content-Length are automatically added.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Properties&lt;/span&gt; &lt;span class="n"&gt;props&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Properties&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;props&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Authorization"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Basic "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="no"&gt;K&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;encodeBase64&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userName&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="sc"&gt;':'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="nc"&gt;KHTTPClient&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;KHTTPClient&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;post&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"https://example.com:4443"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;props&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"HTTP body data"&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
   &lt;span class="nc"&gt;KLog&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;abort&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"HTTP POST failed - "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getLastError&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  K: Utility class
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Encode/decode for URL, Base64, CSV, JSON, XML and YAML.&lt;/li&gt;
&lt;li&gt;AES256 encrypt/decrypt (AES/CBC/PKCS5Padding).&lt;/li&gt;
&lt;li&gt;ZLIB compress/decompress.&lt;/li&gt;
&lt;li&gt;Generate hash (MD5, SHA-2 or SHA-3).&lt;/li&gt;
&lt;li&gt;Query any DNS record (MX, A, etc.).
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Wait 1/4 second&lt;/span&gt;
&lt;span class="no"&gt;K&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;waitMilliseconds&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;250&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Get DNS MX record(s)&lt;/span&gt;
&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;mxRRs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;K&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;queryDNS&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"MX"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"yahoo.com"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;//&lt;/span&gt;
&lt;span class="c1"&gt;// AES-256 Encryption/Decryption&lt;/span&gt;
&lt;span class="c1"&gt;//&lt;/span&gt;
&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;secretKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"This is the secret key"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Create a simple text file&lt;/span&gt;
&lt;span class="nc"&gt;KFile&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;writeFile&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"This is a simple text file"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"AES-Text.txt"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Generate and save random AES-256 initialization vector&lt;/span&gt;
&lt;span class="nc"&gt;KFile&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;writeFile&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="no"&gt;K&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getRandomBytes&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt; &lt;span class="s"&gt;"AES.iv"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Encrypt&lt;/span&gt;
&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;clearText&lt;/span&gt;    &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;KFile&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;readByteFile&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"AES-Text.txt"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;initVector&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;KFile&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;readByteFile&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"AES.iv"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;cipherText&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;K&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;encryptAES256&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;clearText&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;secretKey&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getBytes&lt;/span&gt;&lt;span class="o"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;initVector&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;KFile&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;writeFile&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cipherText&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"AES-Text.encrypted"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Decrypt&lt;/span&gt;
&lt;span class="n"&gt;cipherText&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;KFile&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;readByteFile&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"AES-Text.encrypted"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;initVector&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;KFile&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;readByteFile&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"AES.iv"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;clearText&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;K&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;decryptAES256&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cipherText&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;secretKey&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getBytes&lt;/span&gt;&lt;span class="o"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;initVector&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Have fun and let me know what you like and what needs improvement. You can reach me via email [&lt;a href="mailto:andy.brunner@k43.ch"&gt;andy.brunner@k43.ch&lt;/a&gt;] or at &lt;a href="https://swiss.social/@andybrunner" rel="noopener noreferrer"&gt;Mastodon&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>java</category>
      <category>logging</category>
      <category>database</category>
      <category>tool</category>
    </item>
    <item>
      <title>Freeware: Java Utility Package (Version 2024.09.12) released</title>
      <dc:creator>Andy Brunner</dc:creator>
      <pubDate>Thu, 12 Sep 2024 14:24:05 +0000</pubDate>
      <link>https://dev.to/andybrunner/freeware-java-utility-package-version-20240912-released-555g</link>
      <guid>https://dev.to/andybrunner/freeware-java-utility-package-version-20240912-released-555g</guid>
      <description>&lt;p&gt;&lt;strong&gt;A fast and easy to use programming toolkit for the Java backend developer&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;KThread: New class for easy Java thread creation and termination&lt;/li&gt;
&lt;li&gt;KSMTPMailer: Migrated from JavaMail (javax.mail) to Eclipse Jakarta/Angus mail.&lt;/li&gt;
&lt;li&gt;KDB: Added option in getDataAsTable() to optionally print column headers&lt;/li&gt;
&lt;li&gt;KLog: Show CPU count and OS disk size in debug log&lt;/li&gt;
&lt;li&gt;K: Added option to isNumber() to check for allowed numeric range&lt;/li&gt;
&lt;li&gt;K: Removed argForce argument from stopThread() as newer Java versions removed the depreciated Thread.stop() method&lt;/li&gt;
&lt;li&gt;Some minor code and documentation changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Have fun!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://java-util.k43.ch" rel="noopener noreferrer"&gt;https://java-util.k43.ch&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>programming</category>
      <category>logging</category>
      <category>database</category>
    </item>
    <item>
      <title>macOS Shell: Include all jar files in Java -cp argument</title>
      <dc:creator>Andy Brunner</dc:creator>
      <pubDate>Mon, 02 Sep 2024 11:33:30 +0000</pubDate>
      <link>https://dev.to/andybrunner/macos-shell-include-all-jar-files-in-cp-command-4c6j</link>
      <guid>https://dev.to/andybrunner/macos-shell-include-all-jar-files-in-cp-command-4c6j</guid>
      <description>&lt;p&gt;Just found a single line of a macOS shell to start a Java program which sets the classpath by including all jar files from a directory:&lt;/p&gt;

&lt;p&gt;run.sh&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;java -cp "../bin/:../lib/*" $1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Execute it with&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;./run.sh Test
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>java</category>
      <category>shell</category>
      <category>commandline</category>
      <category>macos</category>
    </item>
    <item>
      <title>UnsupportedDataTypeException: Migrating from javax.mail to jakarta.mail</title>
      <dc:creator>Andy Brunner</dc:creator>
      <pubDate>Mon, 02 Sep 2024 09:42:04 +0000</pubDate>
      <link>https://dev.to/andybrunner/unsupporteddatatypeexception-migrating-from-javaxmail-to-jakartamail-2771</link>
      <guid>https://dev.to/andybrunner/unsupporteddatatypeexception-migrating-from-javaxmail-to-jakartamail-2771</guid>
      <description>&lt;p&gt;While migrating a simple SMTP mailer class from javax.mail to the current jakarta.mail, I ended up with the error&lt;/p&gt;

&lt;p&gt;&lt;em&gt;UnsupportedDataTypeException: no object DCH for MIME type ...&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In various forums, some people suggested to write a custom DataHandler to support the missing MIME types in the newer Jakarta mail implementations.&lt;/p&gt;

&lt;p&gt;Fortunately, the Java code does not need to be changed (despite the import changes).&lt;/p&gt;

&lt;p&gt;After countless number of hours searching the Internet, I finally found the correct jar files to be used during runtime:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;angus-activation-2.0.2.jar&lt;/li&gt;
&lt;li&gt;angus-mail-2.0.3.jar&lt;/li&gt;
&lt;li&gt;jakarta.activation-api-2.1.3.jar&lt;/li&gt;
&lt;li&gt;jakarta.mail-api-2.1.3.jar&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hope this helps someone else.&lt;/p&gt;

</description>
      <category>java</category>
      <category>jakarta</category>
    </item>
    <item>
      <title>Freeware: Java Utility Package (Version 2024.08.29) released</title>
      <dc:creator>Andy Brunner</dc:creator>
      <pubDate>Thu, 29 Aug 2024 14:39:42 +0000</pubDate>
      <link>https://dev.to/andybrunner/freeware-java-utility-package-version-20240829-released-3e80</link>
      <guid>https://dev.to/andybrunner/freeware-java-utility-package-version-20240829-released-3e80</guid>
      <description>&lt;p&gt;&lt;strong&gt;A fast and easy to use programming toolkit for the Java backend developer&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;K: Added isInteger() and stopThread()&lt;/li&gt;
&lt;li&gt;KLogSMTPHandler: Added logging handler to send error log entries (FATAL log level) to any SMTP server&lt;/li&gt;
&lt;li&gt;Updated KLog.properties example file&lt;/li&gt;
&lt;li&gt;Some minor code and documentation changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Have fun!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://java-util.k43.ch" rel="noopener noreferrer"&gt;https://java-util.k43.ch&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>programmin</category>
      <category>logging</category>
      <category>database</category>
    </item>
    <item>
      <title>Freeware: Java Utility Package (Version 2024.08.24) released</title>
      <dc:creator>Andy Brunner</dc:creator>
      <pubDate>Sat, 24 Aug 2024 10:14:31 +0000</pubDate>
      <link>https://dev.to/andybrunner/freeware-java-utility-package-version-20240824-released-77l</link>
      <guid>https://dev.to/andybrunner/freeware-java-utility-package-version-20240824-released-77l</guid>
      <description>&lt;p&gt;A fast and easy to use programming toolkit for the Java backend developer.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;K: Remove SHA-1 algorithm from generateHash(), added serialize() and deserialize()&lt;/li&gt;
&lt;li&gt;KDB: Added maxRows argument to exec() call&lt;/li&gt;
&lt;li&gt;Added serialVersionUID to all classes to protect object serializations&lt;/li&gt;
&lt;li&gt;Added toString() to all classes to write out object data&lt;/li&gt;
&lt;li&gt;Updated sample code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Have fun!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://java-util.k43.ch" rel="noopener noreferrer"&gt;https://java-util.k43.ch&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>programming</category>
      <category>logging</category>
      <category>database</category>
    </item>
  </channel>
</rss>
