<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Blog on pikodat.com</title>
		<link>https://pikodat.com/blog/</link>
		<description>Recent content in Blog on pikodat.com</description>
		<generator>Hugo</generator>
		<language>de-DE</language>
		
		
		
		
			<lastBuildDate>Wed, 08 Nov 2023 16:13:27 +0200</lastBuildDate>
		
			<atom:link href="https://pikodat.com/blog/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Embracing Innovation: Angular 17&#39;s New Features Spotlighting Vite and Standalone Components</title>
				<link>https://pikodat.com/blog/angular-17-release/</link>
				<pubDate>Wed, 08 Nov 2023 16:13:27 +0200</pubDate>
				<guid>https://pikodat.com/blog/angular-17-release/</guid>
				<description>The continuous evolution of web development maintains its pace, and Angular, as a frontrunner in this race, is moving forward with exciting updates. With the advent of Angular 17, we are witnessing a leap into a future where development is faster, smoother, and more intuitive, thanks to the introduction of significant new features. As we unpack the latest release, special attention is drawn to the stable integration of Vite and the introduction of Standalone Components—enhancements that are set to redefine the Angular experience.</description>
			</item>
			<item>
				<title>A Heartwarming Project: Building a Website for My Sons&#39; Former Daycare Provider</title>
				<link>https://pikodat.com/blog/sm-website-project/</link>
				<pubDate>Thu, 19 Oct 2023 16:13:27 +0200</pubDate>
				<guid>https://pikodat.com/blog/sm-website-project/</guid>
				<description>As many of you know, my primary focus has always been on app development. It&amp;rsquo;s my bread and butter, what I live and breathe. But every so often, life throws an unexpected opportunity your way, encouraging you to stretch your wings and try something new. Recently, I had the chance to do just that, and the experience was incredibly fulfilling.</description>
			</item>
			<item>
				<title>Understanding Java&#39;s Long and Integer Cache</title>
				<link>https://pikodat.com/blog/understanding-javas-long-and-integer-cache/</link>
				<pubDate>Tue, 14 Mar 2023 16:13:27 +0200</pubDate>
				<guid>https://pikodat.com/blog/understanding-javas-long-and-integer-cache/</guid>
				<description>Java&amp;rsquo;s &lt;code&gt;Integer&lt;/code&gt; and &lt;code&gt;Long&lt;/code&gt; classes have a built-in caching mechanism that helps reduce memory overhead and improve performance. This cache is used when autoboxing primitive types into their corresponding wrapper classes. The &lt;code&gt;Integer&lt;/code&gt; cache range is from -128 to 127 by default, while the &lt;code&gt;Long&lt;/code&gt; cache has a fixed range from -128 to 127 as well.</description>
			</item>
			<item>
				<title>Quarkus Test, Postgres &amp; Testcontainers</title>
				<link>https://pikodat.com/blog/quarkus-postgres-testcontainers/</link>
				<pubDate>Thu, 27 Oct 2022 16:13:27 +0200</pubDate>
				<guid>https://pikodat.com/blog/quarkus-postgres-testcontainers/</guid>
				<description>&lt;p&gt;Yesterday I deleted all of my local Docker images and suddenly my setup with Quarkus and Testcontainers JDBC connection string (&lt;code&gt;jdbc:tc:postgresql:latest:///test&lt;/code&gt;) didn&amp;rsquo;t work anymore.&lt;/p&gt;&#xA;&lt;div class=&#34;code&#34;&gt;&#xA;  &lt;div class=&#34;code__bar&#34;&gt;&#xA;    &lt;span class=&#34;code__lang&#34;&gt;Code&lt;/span&gt;&#xA;    &lt;button class=&#34;code__copy js-only&#34; type=&#34;button&#34; data-copy lang=&#34;de&#34;&gt;&lt;svg class=&#34;icon icon-copy&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;1.8&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; aria-hidden=&#34;true&#34; focusable=&#34;false&#34;&gt;&lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;12&#34; height=&#34;12&#34; rx=&#34;2.5&#34;/&gt;&lt;path d=&#34;M5 15H4.5A1.5 1.5 0 0 1 3 13.5v-9A1.5 1.5 0 0 1 4.5 3h9A1.5 1.5 0 0 1 15 4.5V5&#34;/&gt;&lt;/svg&gt;&lt;svg class=&#34;icon icon-check&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;1.8&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; aria-hidden=&#34;true&#34; focusable=&#34;false&#34;&gt;&lt;path d=&#34;m5 12.5 4.5 4.5L19 7.5&#34;/&gt;&lt;/svg&gt;&lt;span data-copy-label&gt;Kopieren&lt;/span&gt;&lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Caused by: org.flywaydb.core.internal.exception.FlywaySqlException: Unable to obtain connection from database: Acquisition timeout while waiting for new connection&#xA;-----------------------------------------------------------------------------------------------&#xA;SQL State  : null&#xA;Error Code : 0&#xA;Message    : Acquisition timeout while waiting for new connection&#xA;&#x9;at org.flywaydb.core.internal.jdbc.JdbcUtils.openConnection(JdbcUtils.java:60)&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;It seems that pulling the underlying containers for Postgres and Testcontainers causes this issue because that pulling takes a while. So you could implement a &lt;code&gt;QuarkusTestResourceLifecycleManager&lt;/code&gt; and adjust the time:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Install Oracle JDK without the installer on macOS</title>
				<link>https://pikodat.com/blog/install-custom-jdk-with-sdkman/</link>
				<pubDate>Fri, 09 Jul 2021 16:13:27 +0200</pubDate>
				<guid>https://pikodat.com/blog/install-custom-jdk-with-sdkman/</guid>
				<description>How to install the Oracle JDK without the installer on macOS and also use it with SDKMAN!</description>
			</item>
			<item>
				<title>Capacitor and the Ionic Native Shake Plugin</title>
				<link>https://pikodat.com/blog/capacitor-and-ionic-native-shake-plugin/</link>
				<pubDate>Fri, 31 Jul 2020 16:13:27 +0200</pubDate>
				<guid>https://pikodat.com/blog/capacitor-and-ionic-native-shake-plugin/</guid>
				<description>&lt;p&gt;In a client application (Android and iOS) I recently needed the shake gesture. Fortunately, there is an &lt;a href=&#34;https://ionicframework.com/docs/native/shake&#34;&gt;Ionic Native plugin&lt;/a&gt; for this. Although only iOS support appears in the documentation, the plugin worked without any problems under Cordova / Capacitor on Android. There were also no problems with the combination of Cordova and iOS. But the combination of Capacitor and iOS did not work. Since the app was already developed with Capacitor and I did not want to give away the advantages of Capacitor, I did some research. And it was easy to find out &lt;a href=&#34;https://github.com/leecrossley/cordova-plugin-shake/issues/36&#34;&gt;why it didn&amp;rsquo;t work&lt;/a&gt;. I tried to implement the &lt;code&gt;motionEnded&lt;/code&gt; method (which notifies the Shake Plugin) in the &lt;code&gt;CDVViewController.m&lt;/code&gt; file because there was no &lt;code&gt;MainViewController.m&lt;/code&gt; anymore. That did not work but I luckily remembered that Capacitor 2 uses Swift instead of Objective C. So I only need to override the &lt;code&gt;motionEnded&lt;/code&gt; method in &lt;code&gt;CAPBridgeViewController.swift&lt;/code&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Rename fields in MongoDB documents</title>
				<link>https://pikodat.com/blog/rename-fields-in-mongo-db/</link>
				<pubDate>Wed, 22 May 2019 16:13:27 +0200</pubDate>
				<guid>https://pikodat.com/blog/rename-fields-in-mongo-db/</guid>
				<description>&lt;p&gt;Often the structure of domain objects needs to be updated to reflect some recent business case changes in your app. A lot of devs I worked with are not annoyed with different docs and domain objects. But I like to reflect changes in the domain object in the underlying collection documents.&lt;/p&gt;&#xA;&lt;p&gt;I have a working snippet in my toolbox that worked for years. But as it uses cursors it was painfully slow. Somehow until today I don&amp;rsquo;t thought about using  &lt;code&gt;db.collection.updateMany()&lt;/code&gt; and the &lt;code&gt;$rename&lt;/code&gt; operator.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Stencil components and Vue</title>
				<link>https://pikodat.com/blog/stencil-components-and-vue/</link>
				<pubDate>Fri, 14 Sep 2018 16:13:27 +0200</pubDate>
				<guid>https://pikodat.com/blog/stencil-components-and-vue/</guid>
				<description>&lt;p&gt;Recently I build some components with &lt;a href=&#34;http://stenciljs.com&#34;&gt;Stencil&lt;/a&gt; for an Angular project. Unsurprisingly the created&#xA;components also work well with Vue. There are two steps necessary. Here is the workflow:&lt;/p&gt;&#xA;&lt;h2 id=&#34;first-step-create-your-stencil-component&#34;&gt;First Step: Create your Stencil component&lt;/h2&gt;&#xA;&lt;p&gt;At first create a directory and install Stencils dependencies.&lt;/p&gt;&#xA;&lt;div class=&#34;code&#34;&gt;&#xA;  &lt;div class=&#34;code__bar&#34;&gt;&#xA;    &lt;span class=&#34;code__lang&#34;&gt;Bash&lt;/span&gt;&#xA;    &lt;button class=&#34;code__copy js-only&#34; type=&#34;button&#34; data-copy lang=&#34;de&#34;&gt;&lt;svg class=&#34;icon icon-copy&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;1.8&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; aria-hidden=&#34;true&#34; focusable=&#34;false&#34;&gt;&lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;12&#34; height=&#34;12&#34; rx=&#34;2.5&#34;/&gt;&lt;path d=&#34;M5 15H4.5A1.5 1.5 0 0 1 3 13.5v-9A1.5 1.5 0 0 1 4.5 3h9A1.5 1.5 0 0 1 15 4.5V5&#34;/&gt;&lt;/svg&gt;&lt;svg class=&#34;icon icon-check&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;1.8&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; aria-hidden=&#34;true&#34; focusable=&#34;false&#34;&gt;&lt;path d=&#34;m5 12.5 4.5 4.5L19 7.5&#34;/&gt;&lt;/svg&gt;&lt;span data-copy-label&gt;Kopieren&lt;/span&gt;&lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir stencil-components&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; stencil-components&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm init -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install @stencil/core -S&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install @stencil/utils -D&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Now create your component in Stencil. That is well documented &lt;a href=&#34;https://stenciljs.com/docs/my-first-component/&#34;&gt;here&lt;/a&gt;.&#xA;Name it &lt;code&gt;my-first-component.tsx&lt;/code&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>TSLint Warnings instead of Errors in Webstorm</title>
				<link>https://pikodat.com/blog/reduce-jsf-session-size/</link>
				<pubDate>Wed, 07 Mar 2018 16:13:27 +0200</pubDate>
				<guid>https://pikodat.com/blog/reduce-jsf-session-size/</guid>
				<description>&lt;p&gt;That TSLint rules in Webstorm are displayed as error messages is something that drives me nuts. Today I discovered that one can change that behaviour in Webstorm:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;Preferences&lt;/code&gt; -&amp;gt; &lt;code&gt;Editor&lt;/code&gt; -&amp;gt; &lt;code&gt;Inspections&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Select linter (&lt;code&gt;TypeScript&lt;/code&gt;-&amp;gt;&lt;code&gt;TSLint&lt;/code&gt;, or just use the search box with &lt;code&gt;tslint&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Change Severity to a desired level like &lt;code&gt;Warning&lt;/code&gt; or &lt;code&gt;Weak Warning&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
			</item>
			<item>
				<title>Write your own TypeScript definition files</title>
				<link>https://pikodat.com/blog/own-tsd-files/</link>
				<pubDate>Mon, 01 Aug 2016 16:13:27 +0200</pubDate>
				<guid>https://pikodat.com/blog/own-tsd-files/</guid>
				<description>&lt;p&gt;Last Year I wrote a blog post about &lt;a href=&#34;http://blog.pikodat.com/2015/07/31/typescript-and-jquery/&#34;&gt;TypeScript and jQuery&lt;/a&gt;. I introduced &lt;a href=&#34;https://github.com/DefinitelyTyped/tsd&#34;&gt;TSD&lt;/a&gt;, a manager for TypeScript definition files. &lt;a href=&#34;https://github.com/DefinitelyTyped/tsd&#34;&gt;TSD&lt;/a&gt;, or &lt;a href=&#34;https://github.com/typings/typings&#34;&gt;Typings&lt;/a&gt; as &lt;a href=&#34;https://github.com/typings/typings&#34;&gt;TSD&lt;/a&gt; is deprecated now, contains nearly thousand definition files. But what if you want to use your own library or a library that has no definition file yet? You could write it yourself. It&amp;rsquo;s not that hard. I will show you an really simple example.&lt;/p&gt;&#xA;&lt;p&gt;I created a new Angular 2.0 Project with the Angular CLI. The Angular team switched to TypeScript so it fits perfectly in this example. I added a JavaScript file with a simple function and a tiny class (or what JavaScript devs call classes ;)).&lt;/p&gt;</description>
			</item>
			<item>
				<title>Setting system properties for WildFly with a properties file</title>
				<link>https://pikodat.com/blog/properties-file-for-wildfly/</link>
				<pubDate>Wed, 11 May 2016 16:13:27 +0200</pubDate>
				<guid>https://pikodat.com/blog/properties-file-for-wildfly/</guid>
				<description>&lt;p&gt;To set or override system properties without changing WildFly&amp;rsquo;s configuration there is a CLI parameter &lt;code&gt;-p&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Assuming you have a property file &lt;code&gt;vweber.properties&lt;/code&gt; in &lt;code&gt;/dev/veit/wildfly/&lt;/code&gt; with the following content&lt;/p&gt;&#xA;&lt;div class=&#34;code&#34;&gt;&#xA;  &lt;div class=&#34;code__bar&#34;&gt;&#xA;    &lt;span class=&#34;code__lang&#34;&gt;Code&lt;/span&gt;&#xA;    &lt;button class=&#34;code__copy js-only&#34; type=&#34;button&#34; data-copy lang=&#34;de&#34;&gt;&lt;svg class=&#34;icon icon-copy&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;1.8&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; aria-hidden=&#34;true&#34; focusable=&#34;false&#34;&gt;&lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;12&#34; height=&#34;12&#34; rx=&#34;2.5&#34;/&gt;&lt;path d=&#34;M5 15H4.5A1.5 1.5 0 0 1 3 13.5v-9A1.5 1.5 0 0 1 4.5 3h9A1.5 1.5 0 0 1 15 4.5V5&#34;/&gt;&lt;/svg&gt;&lt;svg class=&#34;icon icon-check&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;1.8&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; aria-hidden=&#34;true&#34; focusable=&#34;false&#34;&gt;&lt;path d=&#34;m5 12.5 4.5 4.5L19 7.5&#34;/&gt;&lt;/svg&gt;&lt;span data-copy-label&gt;Kopieren&lt;/span&gt;&lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;mightyapplication.property=somevalue&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;and start your WildFly with&lt;/p&gt;</description>
			</item>
			<item>
				<title>Guavas MultiMap FTW</title>
				<link>https://pikodat.com/blog/guavas-multimap-ftw/</link>
				<pubDate>Thu, 21 Apr 2016 16:13:27 +0200</pubDate>
				<guid>https://pikodat.com/blog/guavas-multimap-ftw/</guid>
				<description>&lt;p&gt;I often have the need for some kind of &amp;ldquo;grouped list&amp;rdquo;. I have a key and a list of values. Usually I do the following:&lt;/p&gt;&#xA;&lt;div class=&#34;code&#34;&gt;&#xA;  &lt;div class=&#34;code__bar&#34;&gt;&#xA;    &lt;span class=&#34;code__lang&#34;&gt;Java&lt;/span&gt;&#xA;    &lt;button class=&#34;code__copy js-only&#34; type=&#34;button&#34; data-copy lang=&#34;de&#34;&gt;&lt;svg class=&#34;icon icon-copy&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;1.8&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; aria-hidden=&#34;true&#34; focusable=&#34;false&#34;&gt;&lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;12&#34; height=&#34;12&#34; rx=&#34;2.5&#34;/&gt;&lt;path d=&#34;M5 15H4.5A1.5 1.5 0 0 1 3 13.5v-9A1.5 1.5 0 0 1 4.5 3h9A1.5 1.5 0 0 1 15 4.5V5&#34;/&gt;&lt;/svg&gt;&lt;svg class=&#34;icon icon-check&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;1.8&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; aria-hidden=&#34;true&#34; focusable=&#34;false&#34;&gt;&lt;path d=&#34;m5 12.5 4.5 4.5L19 7.5&#34;/&gt;&lt;/svg&gt;&lt;span data-copy-label&gt;Kopieren&lt;/span&gt;&lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;HashMap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Integer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;List&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;map&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;HashMap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;while&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;next&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;map&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;containsKey&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getInt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;KEY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;map&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;put&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getInt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ENV&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;KEY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ArrayList&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;map&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getInt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;KEY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)).&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;add&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getString&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;VALUE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;map&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;I saw an alternative some months ago but I could not remember the name of the class. Today &lt;a href=&#34;https://twitter.com/bernhard_joerg&#34;&gt;@bernhard_joerg&lt;/a&gt; showed me Guavas &lt;code&gt;Multimap&lt;/code&gt;. And what can I say, it was the missing class ;).&lt;/p&gt;</description>
			</item>
			<item>
				<title>Guava Joiner Class</title>
				<link>https://pikodat.com/blog/guava-joiner-class/</link>
				<pubDate>Fri, 01 Apr 2016 16:13:27 +0200</pubDate>
				<guid>https://pikodat.com/blog/guava-joiner-class/</guid>
				<description>&lt;p&gt;Although I&amp;rsquo;m a long time user of &lt;a href=&#34;https://github.com/google/guava&#34;&gt;Google Guava&lt;/a&gt; I discovered the class &lt;code&gt;Joiner&lt;/code&gt; just a few days ago. Eventually everybody who&amp;rsquo;s familiar with Googles Apache Commons alternative have heard about it, but I like to show the usage for those who didn&amp;rsquo;t know yet.&lt;/p&gt;&#xA;&lt;p&gt;Given the following list:&lt;/p&gt;&#xA;&lt;div class=&#34;code&#34;&gt;&#xA;  &lt;div class=&#34;code__bar&#34;&gt;&#xA;    &lt;span class=&#34;code__lang&#34;&gt;Java&lt;/span&gt;&#xA;    &lt;button class=&#34;code__copy js-only&#34; type=&#34;button&#34; data-copy lang=&#34;de&#34;&gt;&lt;svg class=&#34;icon icon-copy&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;1.8&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; aria-hidden=&#34;true&#34; focusable=&#34;false&#34;&gt;&lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;12&#34; height=&#34;12&#34; rx=&#34;2.5&#34;/&gt;&lt;path d=&#34;M5 15H4.5A1.5 1.5 0 0 1 3 13.5v-9A1.5 1.5 0 0 1 4.5 3h9A1.5 1.5 0 0 1 15 4.5V5&#34;/&gt;&lt;/svg&gt;&lt;svg class=&#34;icon icon-check&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;1.8&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; aria-hidden=&#34;true&#34; focusable=&#34;false&#34;&gt;&lt;path d=&#34;m5 12.5 4.5 4.5L19 7.5&#34;/&gt;&lt;/svg&gt;&lt;span data-copy-label&gt;Kopieren&lt;/span&gt;&lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;List&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nameList&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Lists&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;newArrayList&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Solo&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Kenobi&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Skywalker&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Yoda&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;delimiter&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;,&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;You usually would do the following to join the items in one string:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Remove &#34;Server&#34; and &#34;X-Powered-By&#34; Response Headers in Wildfly</title>
				<link>https://pikodat.com/blog/remove-wildfly-response-header/</link>
				<pubDate>Fri, 22 Jan 2016 16:13:27 +0200</pubDate>
				<guid>https://pikodat.com/blog/remove-wildfly-response-header/</guid>
				<description>Wildfly identifies himself in the response headers. To remove this you just have to comment/remove the following lines under the urn:jboss:domain:undertow:2.0 (depend on your WildFly version) subsystem in your standalone.xml</description>
			</item>
			<item>
				<title>Remote debugging Tomcat applications on Raspberry Pi with IntelliJ</title>
				<link>https://pikodat.com/blog/remote-debugging-raspi-intelli/</link>
				<pubDate>Fri, 01 Jan 2016 16:13:27 +0200</pubDate>
				<guid>https://pikodat.com/blog/remote-debugging-raspi-intelli/</guid>
				<description>In this post I will show how to remote debug Tomcat applications on a Raspberry Pi with IntelliJ.</description>
			</item>
			<item>
				<title>Where is my code?</title>
				<link>https://pikodat.com/blog/where-is-my-code/</link>
				<pubDate>Fri, 27 Nov 2015 16:13:27 +0200</pubDate>
				<guid>https://pikodat.com/blog/where-is-my-code/</guid>
				<description>&lt;p&gt;A lib I&amp;rsquo;ve used often lately is &lt;a href=&#34;https://projectlombok.org/features/index.html&#34;&gt;Project Lombok&lt;/a&gt;. Lombok fills the gap&#xA;between Java and some C# syntactic sugar features that makes me slightly jealous ;).&lt;/p&gt;&#xA;&lt;h3 id=&#34;getter-and-setter&#34;&gt;Getter and Setter&lt;/h3&gt;&#xA;&lt;p&gt;Something I liked back in my C# days was the syntax of simple getter and setter without any logic:&lt;/p&gt;&#xA;&lt;div class=&#34;code&#34;&gt;&#xA;  &lt;div class=&#34;code__bar&#34;&gt;&#xA;    &lt;span class=&#34;code__lang&#34;&gt;C#&lt;/span&gt;&#xA;    &lt;button class=&#34;code__copy js-only&#34; type=&#34;button&#34; data-copy lang=&#34;de&#34;&gt;&lt;svg class=&#34;icon icon-copy&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;1.8&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; aria-hidden=&#34;true&#34; focusable=&#34;false&#34;&gt;&lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;12&#34; height=&#34;12&#34; rx=&#34;2.5&#34;/&gt;&lt;path d=&#34;M5 15H4.5A1.5 1.5 0 0 1 3 13.5v-9A1.5 1.5 0 0 1 4.5 3h9A1.5 1.5 0 0 1 15 4.5V5&#34;/&gt;&lt;/svg&gt;&lt;svg class=&#34;icon icon-check&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;1.8&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; aria-hidden=&#34;true&#34; focusable=&#34;false&#34;&gt;&lt;path d=&#34;m5 12.5 4.5 4.5L19 7.5&#34;/&gt;&lt;/svg&gt;&lt;span data-copy-label&gt;Kopieren&lt;/span&gt;&lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Person&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Firstname&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Lastname&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Neat and clean compared to the Java version:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Quick Tip: Remove IntelliJ IDEAs unused directories on OS X</title>
				<link>https://pikodat.com/blog/remove-intelli-unused-dir/</link>
				<pubDate>Sat, 07 Nov 2015 16:13:27 +0200</pubDate>
				<guid>https://pikodat.com/blog/remove-intelli-unused-dir/</guid>
				<description>&lt;p&gt;After upgrading IntelliJ the old directories still remain unused. I suggest to delete them.&lt;/p&gt;&#xA;&lt;p&gt;Cache:&#xA;&lt;code&gt;~/Library/Caches/&amp;lt;Tool&amp;gt;&amp;lt;Version&amp;gt;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Logs:&#xA;&lt;code&gt;~/Library/Logs/&amp;lt;Tool&amp;gt;&amp;lt;Version&amp;gt;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Plugins:&#xA;&lt;code&gt;~/Library/Application Support/&amp;lt;Tool&amp;gt;&amp;lt;Version&amp;gt;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;IntelliJIdea&lt;/code&gt; (Ultimate) or &lt;code&gt;IdeaIC&lt;/code&gt; (Community)&lt;/p&gt;</description>
			</item>
			<item>
				<title>Frontend Logging with JavaFX and Log4j 2</title>
				<link>https://pikodat.com/blog/frontend-logging-with-log4j-and-javafx/</link>
				<pubDate>Sun, 11 Oct 2015 16:13:27 +0200</pubDate>
				<guid>https://pikodat.com/blog/frontend-logging-with-log4j-and-javafx/</guid>
				<description>&lt;p&gt;Although I&amp;rsquo;m developing Java EE applications with HTML5, I sometimes have to build Java SE applications with a Frontend.&#xA;I&amp;rsquo;ve used Swing or AWT in the past. But since JavaFX 2.0 get lost of that awful JavaFX Script, JavaFX is my weapon of&#xA;choice. Recently I wrote a multithreaded applications that needs to inform the user of some working results. I guess I&#xA;was some kind of blue-eyed when I wrote this &amp;ldquo;log&amp;rdquo; function:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Maven Plugin to check for Methods that are not implemented</title>
				<link>https://pikodat.com/blog/maven-not-implemented-plugin/</link>
				<pubDate>Wed, 30 Sep 2015 16:13:27 +0200</pubDate>
				<guid>https://pikodat.com/blog/maven-not-implemented-plugin/</guid>
				<description>&lt;p&gt;Recently my former colleague, IBM Champion and also highly regarded friend &lt;a href=&#34;https://about.me/oliverbusse&#34;&gt;Oliver Busse&lt;/a&gt; wrote a blog post called &amp;ldquo;&lt;a href=&#34;http://notesx.net/hp.nsf/blogpost.xsp?documentId=1002&#34;&gt;Quick-Tip: never forget empty methods anymore&lt;/a&gt;&amp;rdquo;. In summary, it can be stated that Oli throws an &lt;code&gt;UnsupportedOperationException&lt;/code&gt; to signalize that a method is not implemented. I see this approach often and there is nothing wrong with that. But I think there are two disadvantages:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;In my humble opinion the usage of &lt;code&gt;UnsupportedOperationException&lt;/code&gt;to signalize that a method is not yet implemented is some kind of mistreatment. To raise &lt;code&gt;UnsupportedOperationException&lt;/code&gt;doesn&amp;rsquo;t always means it&amp;rsquo;s not yet implemented.&lt;/li&gt;&#xA;&lt;li&gt;Another point is, that I don&amp;rsquo;t like that the developer doesn&amp;rsquo;t see any warnings before or while compiling. Imagine your are going to use a library. &lt;code&gt;UnsupportedOperationException&lt;/code&gt;is a runtime exception and not a checked exception so you never see your failure until the exception is raised (best in production mode ;)).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;So I wrote a &lt;a href=&#34;https://github.com/VeitWeber/not-yet-implemented-maven-plugin&#34;&gt;tiny maven plugin&lt;/a&gt; that introduces the &lt;code&gt;@NotYetImplemented&lt;/code&gt; annotation. Methods with that annotation generate warnings while packaging the application.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Tooltip: Unirest - Lightweight HTTP Request Client Libraries</title>
				<link>https://pikodat.com/blog/tooltip-unirest/</link>
				<pubDate>Fri, 11 Sep 2015 16:13:27 +0200</pubDate>
				<guid>https://pikodat.com/blog/tooltip-unirest/</guid>
				<description>&lt;p&gt;There are a lot of HTTP libraries available in the Java universe like the Apache HttpClient library. Also Java provides&#xA;the &lt;code&gt;HttpURLConnection&lt;/code&gt; class as a standard on-board. They all have in common that I (and thats just my humble&#xA;opinion ;)) don&amp;rsquo;t like them really because they feel like a way back in 2001.&lt;/p&gt;&#xA;&lt;p&gt;So today I stumbled over &lt;a href=&#34;http://unirest.io/&#34;&gt;unirest&lt;/a&gt;, a simple and lightweight HTTP request client library for Java (&#xA;and also other other languages like Ruby or C#). It&amp;rsquo;s simple and fluent API reminds me of the way you would do HTTP&#xA;calls in JavaScript.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Pitfall with &#34;this&#34; in TypeScript</title>
				<link>https://pikodat.com/blog/pitfall-with-this-in-typescript/</link>
				<pubDate>Sun, 30 Aug 2015 16:13:27 +0200</pubDate>
				<guid>https://pikodat.com/blog/pitfall-with-this-in-typescript/</guid>
				<description>&lt;p&gt;Recently I stumbled accross a strange behaviour with the &amp;ldquo;this&amp;rdquo; reference in TypeScript.&lt;/p&gt;&#xA;&lt;div class=&#34;code&#34;&gt;&#xA;  &lt;div class=&#34;code__bar&#34;&gt;&#xA;    &lt;span class=&#34;code__lang&#34;&gt;TypeScript&lt;/span&gt;&#xA;    &lt;button class=&#34;code__copy js-only&#34; type=&#34;button&#34; data-copy lang=&#34;de&#34;&gt;&lt;svg class=&#34;icon icon-copy&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;1.8&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; aria-hidden=&#34;true&#34; focusable=&#34;false&#34;&gt;&lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;12&#34; height=&#34;12&#34; rx=&#34;2.5&#34;/&gt;&lt;path d=&#34;M5 15H4.5A1.5 1.5 0 0 1 3 13.5v-9A1.5 1.5 0 0 1 4.5 3h9A1.5 1.5 0 0 1 15 4.5V5&#34;/&gt;&lt;/svg&gt;&lt;svg class=&#34;icon icon-check&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;1.8&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; aria-hidden=&#34;true&#34; focusable=&#34;false&#34;&gt;&lt;path d=&#34;m5 12.5 4.5 4.5L19 7.5&#34;/&gt;&lt;/svg&gt;&lt;span data-copy-label&gt;Kopieren&lt;/span&gt;&lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-typescript&#34; data-lang=&#34;typescript&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;TestClass&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt;:&lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;constructor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt;:&lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;doSomething&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Value: &amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;objectRef&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;TestClass&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Simple Param&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;methodRef&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;objectRef&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;doSomething&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;write&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;objectRef&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;doSomething&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;write&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34; --- &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;write&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;methodRef&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Somehow I expect the output &lt;code&gt;Value: Simple Param --- Value: Simple Param&lt;/code&gt;. Instead &lt;code&gt;Value: Simple Param --- Value: undefined&lt;/code&gt; is displayed. My humble opinion is that method references always should be bound to an object. But the reasons is clear: TypeScript is a superset of JavaScript and so the semantics on &amp;ldquo;this&amp;rdquo; remains unchanged.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Node.js and Postgres</title>
				<link>https://pikodat.com/blog/nodejs-and-postgres/</link>
				<pubDate>Mon, 10 Aug 2015 23:54:07 +0200</pubDate>
				<guid>https://pikodat.com/blog/nodejs-and-postgres/</guid>
				<description>&lt;p&gt;This tutorial shows how to create a simple web server with a tiny REST &amp;ldquo;API&amp;rdquo; and a PostgreSQL database. I asume that you&#xA;have installed the node.js platform and npm.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m going to use the &lt;a href=&#34;https://github.com/brianc/node-postgres&#34;&gt;node-postgres&lt;/a&gt; client to connect to the PostgreSQL&#xA;database. The installation is easily done with npm.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;npm install pg&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;The table I want to query is very simple.&lt;/p&gt;&#xA;&lt;p&gt;So I&amp;rsquo;m going to create a server listen on port 8081 that write a response if a GET request is received. The query to the&#xA;backend database is in a separate function that connects to the PostgreSQL database and prints the result to the&#xA;response stream as JSON.&lt;/p&gt;</description>
			</item>
			<item>
				<title>TypeScript and jQuery</title>
				<link>https://pikodat.com/blog/typescript-and-jquery/</link>
				<pubDate>Fri, 31 Jul 2015 23:54:07 +0200</pubDate>
				<guid>https://pikodat.com/blog/typescript-and-jquery/</guid>
				<description>&lt;p&gt;If you want to use an existing JavaScript library with TypeScript you need some kind of header file. This file, called definition file, contains type informations about the JavaScript library and enables the TypeScript developer to use the library objects like they where TypeScript objects. You can either write your own (I will write a blog post about that in the near future) or take advantage of &lt;a href=&#34;http://definitelytyped.org/tsd/&#34;&gt;TSD&lt;/a&gt;, a manager for TypeScript definition files based on the GitHub repository &lt;a href=&#34;https://github.com/borisyankov/DefinitelyTyped&#34;&gt;Definitely Typed&lt;/a&gt;. Definitely Typed is community driven library for nearly 1000 TypeScript definition files.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Why Java Developers might love TypeScript</title>
				<link>https://pikodat.com/blog/why-java-devs-might-like-typescript/</link>
				<pubDate>Fri, 24 Jul 2015 23:54:07 +0200</pubDate>
				<guid>https://pikodat.com/blog/why-java-devs-might-like-typescript/</guid>
				<description>&lt;p&gt;I&amp;rsquo;ve met a lot of Java developers that don&amp;rsquo;t like JavaScript. Weak typing, inequality of equality, the scope of variables et cetera. I encourage them not to use only plain JavaScript. AngularJS and jQuery for example brings the best out of JavaScript. But I particulary understand their skepticism. The last days I was playing around with TypeScript and it seems I really love it. TypeScript feels like JavaScript made right (and thats no wonder, because it was designed by &lt;a href=&#34;https://de.wikipedia.org/wiki/Anders_Hejlsberg&#34;&gt;the guy behind Turbo Pascal, Delphi and C#&lt;/a&gt;). TypeScript brings a lot more structure and object oriented goodness, thought under the hood it compiles to JavaScript.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Fun with java.net.URL</title>
				<link>https://pikodat.com/blog/fun-with-java-net-url/</link>
				<pubDate>Wed, 15 Jul 2015 17:54:07 +0200</pubDate>
				<guid>https://pikodat.com/blog/fun-with-java-net-url/</guid>
				<description>&lt;p&gt;I&amp;rsquo;m writing a little app to check the health status of my server and came accross a confusing feature in &lt;code&gt;java.net.URL&lt;/code&gt;. I remembered I struggle with this behaviour when I came from C# to Java. So this might be helpful for Java newbies.&lt;/p&gt;&#xA;&lt;div class=&#34;code&#34;&gt;&#xA;  &lt;div class=&#34;code__bar&#34;&gt;&#xA;    &lt;span class=&#34;code__lang&#34;&gt;Java&lt;/span&gt;&#xA;    &lt;button class=&#34;code__copy js-only&#34; type=&#34;button&#34; data-copy lang=&#34;de&#34;&gt;&lt;svg class=&#34;icon icon-copy&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;1.8&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; aria-hidden=&#34;true&#34; focusable=&#34;false&#34;&gt;&lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;12&#34; height=&#34;12&#34; rx=&#34;2.5&#34;/&gt;&lt;path d=&#34;M5 15H4.5A1.5 1.5 0 0 1 3 13.5v-9A1.5 1.5 0 0 1 4.5 3h9A1.5 1.5 0 0 1 15 4.5V5&#34;/&gt;&lt;/svg&gt;&lt;svg class=&#34;icon icon-check&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;1.8&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; aria-hidden=&#34;true&#34; focusable=&#34;false&#34;&gt;&lt;path d=&#34;m5 12.5 4.5 4.5L19 7.5&#34;/&gt;&lt;/svg&gt;&lt;span data-copy-label&gt;Kopieren&lt;/span&gt;&lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;URL&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;url1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;URL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;http://pikodat.com&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;URL&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;url2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;URL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;http://blog.pikodat.com&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;url1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;equals&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;url2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;The output is:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Plesk, Subdomains and (Wildfly) Docker Images</title>
				<link>https://pikodat.com/blog/plesk-subdomains-and-docker/</link>
				<pubDate>Mon, 13 Jul 2015 17:54:07 +0200</pubDate>
				<guid>https://pikodat.com/blog/plesk-subdomains-and-docker/</guid>
				<description>&lt;p&gt;I&amp;rsquo;m running a &lt;a href=&#34;https://github.com/jboss-dockerfiles/wildfly&#34;&gt;Docker container with Wildfly 9&lt;/a&gt; on my server for testing purposes. The server is managed with &lt;a href=&#34;http://www.plesk.com&#34;&gt;Plesk&lt;/a&gt;, so setting up the subdomain is really easy. For rewriting the subdomain path to the Docker path (and port) there is still some work necessary:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;At first you have to install mod_proxy for the Apache Web Server under &amp;ldquo;Server&amp;rdquo; - &amp;ldquo;Tools and Settings&amp;rdquo; -&amp;gt; &amp;ldquo;General Settings&amp;rdquo; -&amp;gt; &amp;ldquo;Apache Web Server&amp;rdquo;. Activate &amp;ldquo;proxy&amp;rdquo; and &amp;ldquo;proxy_http&amp;rdquo;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Second go to your subdomains &amp;ldquo;Web Server Settings&amp;rdquo; and fill in the following lines under &amp;ldquo;Additional directives for HTTP&amp;rdquo; (assuming that your Docker image runs on port 8089):&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
			</item>
			<item>
				<title>Syntax Highlightning in Ghost</title>
				<link>https://pikodat.com/blog/ghost-syntax-highlightning/</link>
				<pubDate>Sat, 04 Jul 2015 17:54:07 +0200</pubDate>
				<guid>https://pikodat.com/blog/ghost-syntax-highlightning/</guid>
				<description>&lt;p&gt;Dieses Blog läuft auf der Blogging Plattform &lt;a href=&#34;http://www.ghost.org&#34;&gt;Ghost&lt;/a&gt;. Statt HTML oder einem Rich Editor der HTML erzeugt, werden die Artikel in Markdown geschrieben. Markdown ist eine einfache Auszeichnungssprache, welche sich vor allem in der Welt der Softwareentwickler verbreitet hat. Was mir bei der Kombination Ghost + Markdown gefehlt hat, war eine einfache Methode Syntax Highlightning einzubinden. Doch diese Funktionalität lässt sich ohne großen Aufwand nachrüsten. Es gibt einige Möglichkeiten&amp;hellip;ich habe mich für &lt;a href=&#34;http://prismjs.com&#34;&gt;prism.js&lt;/a&gt; entschieden. Dabei handelt es sich um eine Javascript Bibliothek die ein Highlightning für sehr viele Sprachen bereitstellt. Folgende Schritte sind notwendig:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Phonegap / Cordova 4.x app with Android Studio 1.x</title>
				<link>https://pikodat.com/blog/phonegap-cordova-in-android-studio/</link>
				<pubDate>Fri, 22 May 2015 16:13:27 +0200</pubDate>
				<guid>https://pikodat.com/blog/phonegap-cordova-in-android-studio/</guid>
				<description>&lt;p&gt;I assume that you have a working installation of PhoneGap or Cordova CLI. In this post I use the Cordova CLI which is distributed as an npm package in a ready-to-use format (&lt;code&gt;npm install -g cordova&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;p&gt;At first we have to create the app and at the android platform with the Cordova CLI:&lt;/p&gt;&#xA;&lt;div class=&#34;code&#34;&gt;&#xA;  &lt;div class=&#34;code__bar&#34;&gt;&#xA;    &lt;span class=&#34;code__lang&#34;&gt;Bash&lt;/span&gt;&#xA;    &lt;button class=&#34;code__copy js-only&#34; type=&#34;button&#34; data-copy lang=&#34;de&#34;&gt;&lt;svg class=&#34;icon icon-copy&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;1.8&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; aria-hidden=&#34;true&#34; focusable=&#34;false&#34;&gt;&lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;12&#34; height=&#34;12&#34; rx=&#34;2.5&#34;/&gt;&lt;path d=&#34;M5 15H4.5A1.5 1.5 0 0 1 3 13.5v-9A1.5 1.5 0 0 1 4.5 3h9A1.5 1.5 0 0 1 15 4.5V5&#34;/&gt;&lt;/svg&gt;&lt;svg class=&#34;icon icon-check&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;1.8&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; aria-hidden=&#34;true&#34; focusable=&#34;false&#34;&gt;&lt;path d=&#34;m5 12.5 4.5 4.5L19 7.5&#34;/&gt;&lt;/svg&gt;&lt;span data-copy-label&gt;Kopieren&lt;/span&gt;&lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cordova create MyCordovaApp de.flatphormesmedia MyCordovaApp&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code&#34;&gt;&#xA;  &lt;div class=&#34;code__bar&#34;&gt;&#xA;    &lt;span class=&#34;code__lang&#34;&gt;Bash&lt;/span&gt;&#xA;    &lt;button class=&#34;code__copy js-only&#34; type=&#34;button&#34; data-copy lang=&#34;de&#34;&gt;&lt;svg class=&#34;icon icon-copy&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;1.8&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; aria-hidden=&#34;true&#34; focusable=&#34;false&#34;&gt;&lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;12&#34; height=&#34;12&#34; rx=&#34;2.5&#34;/&gt;&lt;path d=&#34;M5 15H4.5A1.5 1.5 0 0 1 3 13.5v-9A1.5 1.5 0 0 1 4.5 3h9A1.5 1.5 0 0 1 15 4.5V5&#34;/&gt;&lt;/svg&gt;&lt;svg class=&#34;icon icon-check&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;1.8&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; aria-hidden=&#34;true&#34; focusable=&#34;false&#34;&gt;&lt;path d=&#34;m5 12.5 4.5 4.5L19 7.5&#34;/&gt;&lt;/svg&gt;&lt;span data-copy-label&gt;Kopieren&lt;/span&gt;&lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MyCordovaApp&lt;span class=&#34;se&#34;&gt;\c&lt;/span&gt;ordova platform add android&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Next we have to build the the project for the Android platform. This step is important as it adds the android target to the Cordova project&lt;/p&gt;</description>
			</item>
			<item>
				<title>JPA 2.1 and UUID</title>
				<link>https://pikodat.com/blog/jpa-and-uuid/</link>
				<pubDate>Sun, 12 Apr 2015 16:13:27 +0200</pubDate>
				<guid>https://pikodat.com/blog/jpa-and-uuid/</guid>
				<description>&lt;p&gt;Recently I came over to map a table in a Postgres Database that contains a UUID Column. With JPA 2.1 there is a very&#xA;simple way to map this column to the java.util.UUID-Field in the entity:&lt;/p&gt;&#xA;&lt;p&gt;At first you need a AttributeConverter:&lt;/p&gt;&#xA;&lt;div class=&#34;code&#34;&gt;&#xA;  &lt;div class=&#34;code__bar&#34;&gt;&#xA;    &lt;span class=&#34;code__lang&#34;&gt;Java&lt;/span&gt;&#xA;    &lt;button class=&#34;code__copy js-only&#34; type=&#34;button&#34; data-copy lang=&#34;de&#34;&gt;&lt;svg class=&#34;icon icon-copy&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;1.8&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; aria-hidden=&#34;true&#34; focusable=&#34;false&#34;&gt;&lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;12&#34; height=&#34;12&#34; rx=&#34;2.5&#34;/&gt;&lt;path d=&#34;M5 15H4.5A1.5 1.5 0 0 1 3 13.5v-9A1.5 1.5 0 0 1 4.5 3h9A1.5 1.5 0 0 1 15 4.5V5&#34;/&gt;&lt;/svg&gt;&lt;svg class=&#34;icon icon-check&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;1.8&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; aria-hidden=&#34;true&#34; focusable=&#34;false&#34;&gt;&lt;path d=&#34;m5 12.5 4.5 4.5L19 7.5&#34;/&gt;&lt;/svg&gt;&lt;span data-copy-label&gt;Kopieren&lt;/span&gt;&lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Converter for use with UUID and Postgres&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; */&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@Converter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;autoApply&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;UuidConverter&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;implements&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;AttributeConverter&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;UUID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;UUID&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;     * Convert entity field to db column value&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;     *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;     * @param attribute field&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;     * @return UUID of entity&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;     */&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@Override&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;UUID&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;convertToDatabaseColumn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;UUID&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;attribute&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;attribute&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;     * Convert db column value to entity field&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;     *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;     * @param dbData column&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;     * @return UUID of entity&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;     */&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@Override&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;UUID&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;convertToEntityAttribute&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;UUID&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dbData&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dbData&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;And now just add this Converter to your Entity-Fields with the @Column-Annotation:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Java vs. C#: Inheritance of annotations</title>
				<link>https://pikodat.com/blog/java-vs-csharp-inheritance-of-annotations/</link>
				<pubDate>Sat, 14 Mar 2015 17:54:07 +0200</pubDate>
				<guid>https://pikodat.com/blog/java-vs-csharp-inheritance-of-annotations/</guid>
				<description>&lt;p&gt;Recently a friend and I came over with the idea to blog a series of Java vs. C#. Everything related to this topic you&amp;rsquo;ll find on the internet is too superficial. We are experienced in both technologies and environments (although my friend is more a .NET guy and my daily bread is Java EE) and could provide a more detailed point of view.&lt;/p&gt;&#xA;&lt;p&gt;Built-in-annotations in Java are not inherited. I think there is no need for an code example because it&amp;rsquo;s a fact :). But for your own annotations, there is a way to inherit them with the @Inherited-annotation.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Static Code Blocks</title>
				<link>https://pikodat.com/blog/static-code-blocks/</link>
				<pubDate>Wed, 04 Feb 2015 17:54:07 +0200</pubDate>
				<guid>https://pikodat.com/blog/static-code-blocks/</guid>
				<description>&lt;p&gt;In a presentation that I gave recently, I noticed that some of the participants never heard of static code blocks before. Static code blocks let you execute something at class loading time (assign a value for example). They are like &amp;ldquo;Class-Constructors&amp;rdquo;. In this example i created a &lt;code&gt;@Default-Configuration&lt;/code&gt;-annotation. Once the Application was loaded, the static code block was looking for the annotation and set the default configuration (a property-file)&lt;/p&gt;&#xA;&lt;p&gt;The annotation:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Filter Requests with JEE 6 / 7</title>
				<link>https://pikodat.com/blog/filter-requests-with-jee/</link>
				<pubDate>Thu, 15 Jan 2015 16:13:27 +0200</pubDate>
				<guid>https://pikodat.com/blog/filter-requests-with-jee/</guid>
				<description>&lt;p&gt;A tiny but shiny improvement with Java EE 6 was the @WebFilter – Annotation which made the filtering and manipulating of requests very easy: No more com.sun.jersey.spi.container.ContainerResponseFilters entries in the web.xml.&lt;/p&gt;&#xA;&lt;p&gt;All you have to do is to implements the Filter-Interface and annotate your class:&lt;/p&gt;&#xA;&lt;div class=&#34;code&#34;&gt;&#xA;  &lt;div class=&#34;code__bar&#34;&gt;&#xA;    &lt;span class=&#34;code__lang&#34;&gt;Java&lt;/span&gt;&#xA;    &lt;button class=&#34;code__copy js-only&#34; type=&#34;button&#34; data-copy lang=&#34;de&#34;&gt;&lt;svg class=&#34;icon icon-copy&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;1.8&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; aria-hidden=&#34;true&#34; focusable=&#34;false&#34;&gt;&lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;12&#34; height=&#34;12&#34; rx=&#34;2.5&#34;/&gt;&lt;path d=&#34;M5 15H4.5A1.5 1.5 0 0 1 3 13.5v-9A1.5 1.5 0 0 1 4.5 3h9A1.5 1.5 0 0 1 15 4.5V5&#34;/&gt;&lt;/svg&gt;&lt;svg class=&#34;icon icon-check&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;1.8&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; aria-hidden=&#34;true&#34; focusable=&#34;false&#34;&gt;&lt;path d=&#34;m5 12.5 4.5 4.5L19 7.5&#34;/&gt;&lt;/svg&gt;&lt;span data-copy-label&gt;Kopieren&lt;/span&gt;&lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;com.fpm.playground.internal.filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;javax.servlet.*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;javax.servlet.annotation.WebFilter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;java.io.IOException&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@WebFilter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;/*&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;CacheFilter&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;implements&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Filter&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@Override&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;doFilter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ServletRequest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ServletResponse&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;FilterChain&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;chain&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// manipulate response&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;chain&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;doFilter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;catch&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IOException&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//TODO handle exception&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;catch&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ServletException&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//TODO handle exception&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@Override&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;init&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;FilterConfig&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filterConfig&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;throws&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ServletException&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@Override&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;destroy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;With this solutions it&amp;rsquo;s very easy to enable CORS in REST-Requests or seperatly cache some resources while others have to refresh every request.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
