<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Erwähnenswert</title><link>https://blog.lgohlke.de/</link><description>Recent content on Erwähnenswert</description><generator>Hugo</generator><language>de-de</language><lastBuildDate>Sun, 08 Oct 2023 15:27:34 +0100</lastBuildDate><atom:link href="https://blog.lgohlke.de/index.xml" rel="self" type="application/rss+xml"/><item><title>automatic secure backup on usb with Luks/Udev</title><link>https://blog.lgohlke.de/posts/2023-10-08-automatic-usb-backup/</link><pubDate>Sun, 08 Oct 2023 15:27:34 +0100</pubDate><guid>https://blog.lgohlke.de/posts/2023-10-08-automatic-usb-backup/</guid><description>&lt;p&gt;The goal is to automatically mount a specific encrypted usb device on plugin, run a backup and umount it.&lt;/p&gt;
&lt;h2 id="minor-goals"&gt;
 Minor goals
 &lt;a class="heading-link" href="#minor-goals"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;simple and use standard linux tooling&lt;/li&gt;
&lt;li&gt;do not break security&lt;/li&gt;
&lt;li&gt;interactive, give user feedback&lt;/li&gt;
&lt;li&gt;robust to interuptions&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="prerequisites"&gt;
 Prerequisites
 &lt;a class="heading-link" href="#prerequisites"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;have a spare usb device&lt;/li&gt;
&lt;li&gt;have root access&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="steps"&gt;
 Steps
 &lt;a class="heading-link" href="#steps"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Prepare the encrypted usb device&lt;/li&gt;
&lt;li&gt;Setup automounting&lt;/li&gt;
&lt;li&gt;Setup automatic backup as root with visual feedback for an ordinary user&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="1-prepare-the-encrypted-usb-device"&gt;
 1. Prepare the encrypted usb device
 &lt;a class="heading-link" href="#1-prepare-the-encrypted-usb-device"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Encrypt the device with &lt;a href="https://en.wikipedia.org/wiki/Linux_Unified_Key_Setup" class="external-link" target="_blank" rel="noopener"&gt;luks&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>sleuth valve for tomcat</title><link>https://blog.lgohlke.de/posts/2017-11-26-inject-sleuth-header-on-first-request-with-tomcat/</link><pubDate>Sun, 26 Nov 2017 14:00:07 +0100</pubDate><guid>https://blog.lgohlke.de/posts/2017-11-26-inject-sleuth-header-on-first-request-with-tomcat/</guid><description>&lt;p&gt;At &lt;!-- raw HTML omitted --&gt;idealo&lt;!-- raw HTML omitted --&gt; we do a lot of microservices with spring-boot.
To trace request we use &lt;!-- raw HTML omitted --&gt;spring-cloud-sleuth&lt;!-- raw HTML omitted --&gt; as &lt;!-- raw HTML omitted --&gt;opentracing&lt;!-- raw HTML omitted --&gt; implementation.
I&amp;rsquo;m missing the injection of the trace header on the first request. You still need to deliver those with your request. So here follows my solution…&lt;/p&gt;
&lt;h1 id="concept"&gt;
 concept
 &lt;a class="heading-link" href="#concept"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Let me show my approach. It is aimed to be easy to implement and easy to comprehend.&lt;/p&gt;</description></item><item><title>testing dockerfiles</title><link>https://blog.lgohlke.de/posts/2017-02-24-pragmatic-approach-to-add-tests-for-docker-files/</link><pubDate>Thu, 23 Feb 2017 23:23:07 +0100</pubDate><guid>https://blog.lgohlke.de/posts/2017-02-24-pragmatic-approach-to-add-tests-for-docker-files/</guid><description>&lt;p&gt;Since a while I&amp;rsquo;m facing regularly issues with images create from docker files.
So I&amp;rsquo;m trying to develop a simple approach to test them. It is inspired basically by
&lt;!-- raw HTML omitted --&gt;TDD&lt;!-- raw HTML omitted --&gt;.&lt;/p&gt;
&lt;h1 id="concept"&gt;
 concept
 &lt;a class="heading-link" href="#concept"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Let me show my approach. It is aimed to be easy to implement and easy to comprehend.&lt;/p&gt;
&lt;p&gt;I follow these simple steps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;creating a &lt;code&gt;Dockerfile&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;create a &lt;code&gt;test.sh&lt;/code&gt; under &lt;code&gt;test/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;run &lt;code&gt;test.sh&lt;/code&gt; from &lt;code&gt;test/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h1 id="trivial-example"&gt;
 trivial example
 &lt;a class="heading-link" href="#trivial-example"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;Dockerfile&lt;/code&gt;&lt;/p&gt;</description></item><item><title>maven central release with github in 30 seconds</title><link>https://blog.lgohlke.de/posts/2016-09-21-maven-release-on-github-with-travisci/</link><pubDate>Wed, 21 Sep 2016 14:23:07 +0100</pubDate><guid>https://blog.lgohlke.de/posts/2016-09-21-maven-release-on-github-with-travisci/</guid><description>&lt;p&gt;As a passionate developer I always strive to optimise my build chain for speed and simplicity. In this example I&amp;rsquo;d like to publish a library on &lt;a href="http://search.maven.org/" class="external-link" target="_blank" rel="noopener"&gt;maven central&lt;/a&gt; without any onsite build tooling except my IDE. So lets see how to get rid of gpg key management and implement a trivial &lt;em&gt;push-button release process&lt;/em&gt; with &lt;a href="https://github.com/lkwg82" class="external-link" target="_blank" rel="noopener"&gt;Github&lt;/a&gt; and &lt;a href="https://travis-ci.org" class="external-link" target="_blank" rel="noopener"&gt;TravisCI&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;!-- raw HTML omitted --&gt;(This is reblogged originally from &lt;a href="https://github.com/idealo/logback-redis/wiki/Release-Process" class="external-link" target="_blank" rel="noopener"&gt;idealo/logback-redis/wiki/Release-Process&lt;/a&gt; and sponsored by [Idealo] &lt;code&gt;https:/www.idealo.de&lt;/code&gt;)&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;</description></item><item><title>h2o webserver with docker</title><link>https://blog.lgohlke.de/posts/2016-03-01-dockerized-h2o-webserver/</link><pubDate>Tue, 01 Mar 2016 13:23:07 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2016-03-01-dockerized-h2o-webserver/</guid><description>&lt;p&gt;&lt;a href="https://h2o.examp1e.net/" class="external-link" target="_blank" rel="noopener"&gt;h2o&lt;/a&gt; was one of the earliest webserver supporting &lt;a href="https://web.archive.org/web/20170320065739/https://searchenginewatch.com/2016/02/29/what-is-http2-and-how-does-it-affect-us/" class="external-link" target="_blank" rel="noopener"&gt;http2&lt;/a&gt;. To make the usability just a bit more convinient I packaged it as Docker image. Available at &lt;a href="https://hub.docker.com/r/lkwg82/h2o-http2-server/" class="external-link" target="_blank" rel="noopener"&gt;lkwg82/h2o-http2-server&lt;/a&gt; and will be kept in sync with new versions.&lt;/p&gt;
&lt;h2 id="what-is-h2o"&gt;
 What is h2o?
 &lt;a class="heading-link" href="#what-is-h2o"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;H2O is a new generation HTTP server that provides quicker response to users with less CPU utilization when compared to older generation of web servers. Designed from ground-up, the server takes full advantage of HTTP/2 features including prioritized content serving and server push, promising outstanding experience to the visitors of your web site.&lt;/p&gt;</description></item><item><title>Pocast zu Themen rund um Führung</title><link>https://blog.lgohlke.de/posts/2015-10-26-podcast-zu-fuehrung/</link><pubDate>Mon, 26 Oct 2015 11:23:07 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2015-10-26-podcast-zu-fuehrung/</guid><description>&lt;p&gt;Ich bin durch einen Kollegen auf den Podcast &lt;a href="http://www.mehr-fuehren.de" class="external-link" target="_blank" rel="noopener"&gt;&amp;ldquo;Führung auf den Punkt gebracht&amp;rdquo;&lt;/a&gt; gestoßen und höre ihn nun regelmäßig beim Laufen. Der Titel wirkt etwas staubig, aber die Inhalte überzeugen dafür um so mehr. Alle Podcasts lassen sich in Schriftform nachlesen und enden mit einen inspirierenden Zitat ;).&lt;/p&gt;
&lt;p&gt;Eigentlich bin ich selbst nicht in der Situation als ausgewiesene &amp;ldquo;Führungskraft&amp;rdquo; tätig zu sein. Allerdings ist mein Verständnis von professionellem Arbeiten auch (situativ) zu führen.
Zum anderen stellt sich mir auch die Frage, was ist gute Führung und woran erkennt man sie bzw. wie kann man selbst gut führen.&lt;/p&gt;</description></item><item><title>Isolated web tests in docker</title><link>https://blog.lgohlke.de/posts/2015-10-25-isolated-web-tests-in-docker/</link><pubDate>Sun, 25 Oct 2015 21:23:07 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2015-10-25-isolated-web-tests-in-docker/</guid><description>&lt;p&gt;This is a simple tutorial to show you how easy it can be to run isolated webtests in docker.&lt;/p&gt;
&lt;p&gt;Presumed you want to run your webtests in an isolated environment for the following reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;isolation from other test runs (same ports/same directories/&amp;hellip;)&lt;/li&gt;
&lt;li&gt;automatic cleanup of &amp;hellip;
&lt;ul&gt;
&lt;li&gt;orphaned processes (to avoid memory leaks of test agent)&lt;/li&gt;
&lt;li&gt;cleanup of build files (not filling disk up with temporary files)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;repeatability (of course)&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Btw. with &lt;em&gt;build files&lt;/em&gt; I include the temporary container and images as well. (I just had a bunch of stability tests, which means running tests more than 50 times. I had local memory fuckups twice.)&lt;/p&gt;</description></item><item><title>Detect when docker instance reached memory limit</title><link>https://blog.lgohlke.de/posts/2015-10-25-detect-when-docker-instance-reached-memory-limit/</link><pubDate>Sat, 24 Oct 2015 21:23:07 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2015-10-25-detect-when-docker-instance-reached-memory-limit/</guid><description>&lt;p&gt;I&amp;rsquo;d like to know if my test instance reached the memory limit and behaves a kind of different after that.&lt;/p&gt;
&lt;h2 id="simple-but-slightly-incorrect-approach"&gt;
 simple but slightly incorrect approach
 &lt;a class="heading-link" href="#simple-but-slightly-incorrect-approach"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Just grab the kernel logs for oom-killer for the particular container id.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ CONTAINER_ID&lt;span style="color:#f92672"&gt;=&lt;/span&gt;84ec6201e6a54
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ dmesg -T | grep -B2 docker-$CONTAINER_ID | grep -B1 oom-killer
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;outputs&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;Sun Oct &lt;span style="color:#ae81ff"&gt;25&lt;/span&gt; 22:06:17 2015&lt;span style="color:#f92672"&gt;]&lt;/span&gt; java invoked oom-killer: gfp_mask&lt;span style="color:#f92672"&gt;=&lt;/span&gt;0xd0, order&lt;span style="color:#f92672"&gt;=&lt;/span&gt;0, oom_score_adj&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Limitation: This implies that kernel logs before and after are about the same issue.&lt;/p&gt;</description></item><item><title>List the classpath with guava</title><link>https://blog.lgohlke.de/posts/2015-10-13-list-classpath-with-guava/</link><pubDate>Tue, 13 Oct 2015 21:23:07 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2015-10-13-list-classpath-with-guava/</guid><description>&lt;p&gt;I wanna use some resources on my classpath and dont know the exact path to address them. I&amp;rsquo;ll show this using an example with &lt;a href="http://www.jquery.com" class="external-link" target="_blank" rel="noopener"&gt;jquery&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I have dependency and want to use the jquery inside.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;project&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;...&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;dependencies&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.webjars&lt;span style="color:#f92672"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jquery&lt;span style="color:#f92672"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;2.1.4&lt;span style="color:#f92672"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;com.google.guava&lt;span style="color:#f92672"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;guava&lt;span style="color:#f92672"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;18.0&lt;span style="color:#f92672"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt; // just for my convinience ;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.apache.commons&lt;span style="color:#f92672"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;commons-io&lt;span style="color:#f92672"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.3.2&lt;span style="color:#f92672"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/dependencies&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/project&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;With this demo test:&lt;/p&gt;</description></item><item><title>Tiny Tiny RSS setup with docker-compose in 2 minutes</title><link>https://blog.lgohlke.de/posts/2015-09-08-tinyrss-mit-docker-compose/</link><pubDate>Sat, 05 Sep 2015 21:23:07 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2015-09-08-tinyrss-mit-docker-compose/</guid><description>&lt;p&gt;How can I setup and run my own &lt;a href="https://tt-rss.org/" class="external-link" target="_blank" rel="noopener"&gt;tt-rss&lt;/a&gt; instance with &lt;a href="https://docs.docker.com/compose/" class="external-link" target="_blank" rel="noopener"&gt;docker-compose&lt;/a&gt; within 2 minutes?&lt;/p&gt;
&lt;h2 id="tldr"&gt;
 TL;DR
 &lt;a class="heading-link" href="#tldr"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# preparation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo apt-get install python-pip git curl
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# see https://docs.docker.com/installation/ubuntulinux/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ curl -sSL https://get.docker.com/ | sh
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo pip install docker-compose
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# installation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ git clone https://github.com/lkwg82/blog.git blog
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ cd blog/examples/20150908_tinytinyrss_docker-compose
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ ./run.sh
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# usage&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ firefox http://localhost:9108/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;p&gt;Here comes the little longer story &amp;hellip; not much longer &amp;hellip; only more prose.&lt;/p&gt;</description></item><item><title>Meine Checkliste als Bewerber (Entwickler)</title><link>https://blog.lgohlke.de/posts/2015-08-28-checkliste-als-bewerber/</link><pubDate>Fri, 28 Aug 2015 21:23:07 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2015-08-28-checkliste-als-bewerber/</guid><description>&lt;p&gt;Nicht nur ich werbe mit meiner Arbeitskraft, sondern auch ein Unternehmen wirbt mit einem Arbeitsplatz um meine Arbeitskraft. Daraufhin hat mich ein geschätzter Kollege darum gebeten, meine Checkliste für meine Bewerbungen zu &amp;ldquo;teilen&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Aus gegebenem Anlass - ich werde Immobilienscout24 verlassen - war ich wieder in einigen Bewerbungen. Über die Jahre habe ich gewissen Erfahrungen gemacht, die sich als Fragestellungen und Erwartungen in dieser Liste wiederfinden.&lt;/p&gt;
&lt;h2 id="fachlich"&gt;
 fachlich
 &lt;a class="heading-link" href="#fachlich"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Bugtracker&lt;/li&gt;
&lt;li&gt;Continiuous Integration&lt;/li&gt;
&lt;li&gt;CLD&lt;/li&gt;
&lt;li&gt;Clean Code / TDD / Pairprogramming&lt;/li&gt;
&lt;li&gt;DevOps&lt;/li&gt;
&lt;li&gt;Weiterbildung / Konferenzen&lt;/li&gt;
&lt;li&gt;Geräte (wie man es braucht)
&lt;ul&gt;
&lt;li&gt;IDE: Intellij&lt;/li&gt;
&lt;li&gt;zweiter Monitor&lt;/li&gt;
&lt;li&gt;andere Tastatur&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Vorgehensweise (Scrum/Kanban)&lt;/li&gt;
&lt;li&gt;agile?&lt;/li&gt;
&lt;li&gt;Fehleranalyse (Rootcause-Analyse)&lt;/li&gt;
&lt;li&gt;CVS/SVN/GIT&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="firma"&gt;
 Firma
 &lt;a class="heading-link" href="#firma"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;solides Geschäftsumfeld&lt;/li&gt;
&lt;li&gt;Firmenkultur: Abteilungübergreifende Zusammenarbeit (Konkurrenz?)&lt;/li&gt;
&lt;li&gt;abwechslungsreiche Arbeit&lt;/li&gt;
&lt;li&gt;Entwicklungsmöglichkeiten/Karriere&lt;/li&gt;
&lt;li&gt;Mitsprache bei der Arbeitsweise/-planung&lt;/li&gt;
&lt;li&gt;Reisetätigkeit?&lt;/li&gt;
&lt;li&gt;Arbeitsplatz Aussehen/Gestaltungsspielraum&lt;/li&gt;
&lt;li&gt;Sozialleistungen&lt;/li&gt;
&lt;li&gt;Werte der Firma?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="kultur-der-firma"&gt;
 Kultur der Firma
 &lt;a class="heading-link" href="#kultur-der-firma"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Spaß bei der Arbeit?&lt;/li&gt;
&lt;li&gt;Arbeitszeiten (Gleitzeit/Kernarbeitszeit/Homeoffice)&lt;/li&gt;
&lt;li&gt;überstunden (Freizeit/Auszahlbar)&lt;/li&gt;
&lt;li&gt;Dresscode&lt;/li&gt;
&lt;li&gt;Umgang Du/Sie - Kommunikationskultur&lt;/li&gt;
&lt;li&gt;Arbeitsplatz individualisierbar (Pflanzen)&lt;/li&gt;
&lt;li&gt;Verpflegung: Kaffee/Wasser Angebot&lt;/li&gt;
&lt;li&gt;Fluktuationsrate 5%?&lt;/li&gt;
&lt;li&gt;Mitarbeitermotivation/Teambuilding/Social Events&lt;/li&gt;
&lt;li&gt;Wertschätzung der Mitarbeiter/flache Hierarchien&lt;/li&gt;
&lt;li&gt;Meetingkultur?&lt;/li&gt;
&lt;li&gt;Rollen (Teamlead/DL/Peoplelead/Scrummaster)&lt;/li&gt;
&lt;li&gt;Kundenkontakt&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Hinweise und Fragen sind ausdrücklich erwünscht!&lt;/p&gt;</description></item><item><title>Automatischer Bilderimport beim Anschluss der Kamera</title><link>https://blog.lgohlke.de/posts/2015-05-20-autoimport-pictures-from-camera-with-xfce/</link><pubDate>Wed, 20 May 2015 21:23:07 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2015-05-20-autoimport-pictures-from-camera-with-xfce/</guid><description>&lt;p&gt;Da ich unter Ubuntu nichts adäquates finde, um automatisch meine Bilder zu importieren. Habe ich das Ganze mit einem Shellskript und &lt;a href="http://de.wikipedia.org/wiki/Thunar" class="external-link" target="_blank" rel="noopener"&gt;Thunar&lt;/a&gt; (ist der Dateimanager von &lt;a href="http://xfce.org/" class="external-link" target="_blank" rel="noopener"&gt;Xfce&lt;/a&gt;) gelöst. Der Import startet sobald die Kamera erkannt wird.&lt;/p&gt;
&lt;p&gt;Folgende Anwendungen bitte installieren:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-get install gphoto2 renrot
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Dieses Skipt unter &lt;code&gt;~/bin/importBilder.sh&lt;/code&gt; ablegen.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;set -e
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;exitEnter&lt;span style="color:#f92672"&gt;()&lt;/span&gt; &lt;span style="color:#f92672"&gt;{&lt;/span&gt; echo $1; echo &lt;span style="color:#e6db74"&gt;&amp;#34;press ENTER to exit&amp;#34;&lt;/span&gt;; read; exit 1; &lt;span style="color:#f92672"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;checkInstalled&lt;span style="color:#f92672"&gt;(){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; printf &lt;span style="color:#e6db74"&gt;&amp;#34;checking %-30s installed : &amp;#34;&lt;/span&gt; $1;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; type $1 &amp;gt;/dev/null 2&amp;gt;&amp;amp;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; echo &lt;span style="color:#e6db74"&gt;&amp;#34;ok&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;||&lt;/span&gt; &lt;span style="color:#f92672"&gt;{&lt;/span&gt; echo &lt;span style="color:#e6db74"&gt;&amp;#34;fail&amp;#34;&lt;/span&gt;; exitEnter; &lt;span style="color:#f92672"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;checkInstalled gphoto2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;checkInstalled renrot
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;checkInstalled thunar
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# optional&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# checkInstalled convertCamVideo2ArchivVideo.sh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;imageFolder&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;echo ~/Bilder&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;serialNumber&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt; gphoto2 --get-config /main/status/eosserialnumber | grep ^Current | cut -d&lt;span style="color:#ae81ff"&gt;\ &lt;/span&gt; -f2&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt; &lt;span style="color:#f92672"&gt;||&lt;/span&gt; &lt;span style="color:#f92672"&gt;{&lt;/span&gt; exitEnter; &lt;span style="color:#f92672"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;doImport&lt;span style="color:#f92672"&gt;(){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; timestamp&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;printf %s &lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;date +&lt;span style="color:#e6db74"&gt;&amp;#34;%Y%m%d_%H%M&amp;#34;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; local folder&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;$imageFolder&lt;span style="color:#e6db74"&gt;/autoimport_&lt;/span&gt;$timestamp&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mkdir -p $folder
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; cd $folder &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; gphoto2 -P
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# use exif to rename the file&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; renrot --mtime --name-template &lt;span style="color:#e6db74"&gt;&amp;#34;%Y%m%d_%H%M_%n&amp;#34;&lt;/span&gt; *.JPG
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mkdir _jpeg_original
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mv *JPG_orig _jpeg_original/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mkdir raw
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mv *CR2 raw/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# transcoding video to lower file size&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# convertCamVideo2ArchivVideo.sh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; echo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; echo &lt;span style="color:#e6db74"&gt;&amp;#34;finished import into &amp;#39;&lt;/span&gt;$folder&lt;span style="color:#e6db74"&gt;&amp;#39;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; echo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; echo &lt;span style="color:#e6db74"&gt;&amp;#34;press Enter to exit&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; read
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; thunar $folder
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# only import from a specific camera, not any other&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt; $serialNumber -eq &lt;span style="color:#ae81ff"&gt;2131234489&lt;/span&gt; &lt;span style="color:#f92672"&gt;]&lt;/span&gt;; &lt;span style="color:#66d9ef"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; doImport
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="screenshots"&gt;
 Screenshots
 &lt;a class="heading-link" href="#screenshots"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://blog.lgohlke.de/img/2015-05-20-version-thunrar.jpg" &gt;&lt;img src="https://blog.lgohlke.de/img/2015-05-20-version-thunrar-small.jpg" alt="Version von Thunar"&gt;&lt;/a&gt;
&lt;a href="https://blog.lgohlke.de/img/2015-05-20-advanced-settings-thunrar.jpg" &gt;&lt;img src="https://blog.lgohlke.de/img/2015-05-20-advanced-settings-thunrar-small.jpg" alt="Erweiterte Eigenschaften"&gt;&lt;/a&gt;
&lt;a href="https://blog.lgohlke.de/img/2015-05-20-camera-volumd.jpg" &gt;&lt;img src="https://blog.lgohlke.de/img/2015-05-20-camera-volumd-small.jpg" alt="Volumed Eigenschaften"&gt;&lt;/a&gt;
&lt;a href="https://blog.lgohlke.de/img/2015-05-20-terminal.jpg" &gt;&lt;img src="https://blog.lgohlke.de/img/2015-05-20-terminal-small.jpg" alt="Terminalausgabe wenn die Kamera angeschlossen wird"&gt;&lt;/a&gt;
&lt;a href="https://blog.lgohlke.de/img/2015-05-20-thunar.jpg" &gt;&lt;img src="https://blog.lgohlke.de/img/2015-05-20-thunar-small.jpg" alt="So sieht es dann im Browser aus"&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Aufnahme von Ton mit pulseaudio</title><link>https://blog.lgohlke.de/posts/2015-04-29-pulseaudio-record-output/</link><pubDate>Wed, 29 Apr 2015 21:23:07 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2015-04-29-pulseaudio-record-output/</guid><description>&lt;p&gt;Ich habe heute vergeblich versucht meinen Spotify Sound per Streaming auf meinen Raspberry PI zu streamen. Ich hatte leider regelmäßig immer wieder Aussetzer.&lt;br&gt;
Trotzdem schildere ich hier mal für andere. Vielleicht bekommt das jemand hin und schreibt mir das.&lt;/p&gt;
&lt;h2 id="anwendung-finden"&gt;
 Anwendung finden
 &lt;a class="heading-link" href="#anwendung-finden"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ pacmd list-sink-inputs
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; sink input&lt;span style="color:#f92672"&gt;(&lt;/span&gt;s&lt;span style="color:#f92672"&gt;)&lt;/span&gt; available.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; index: &lt;span style="color:#ae81ff"&gt;16&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	driver: &amp;lt;protocol-native.c&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	flags: START_CORKED
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	state: RUNNING
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	sink: &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; &amp;lt;alsa_output.pci-0000_00_1b.0.analog-surround-41&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	volume: front-left: &lt;span style="color:#ae81ff"&gt;30309&lt;/span&gt; / 46% / -20,09 dB, front-right: &lt;span style="color:#ae81ff"&gt;30309&lt;/span&gt; / 46% / -20,09 dB
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	 balance 0,00
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	muted: no
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	current latency: 1887,44 ms
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	requested latency: 123,81 ms
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	sample spec: s16le 2ch 44100Hz
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	channel map: front-left,front-right
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	 Stereo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	resample method: copy
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	module: &lt;span style="color:#ae81ff"&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	client: &lt;span style="color:#ae81ff"&gt;136&lt;/span&gt; &amp;lt;spotify&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	properties:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		media.role &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;music&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		media.name &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;Spotify&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		application.name &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;spotify&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		native-protocol.peer &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;UNIX socket client&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		native-protocol.version &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;30&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		application.process.id &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;7869&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		application.process.user &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;lars&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		module-stream-restore.id &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;sink-input-by-media-role:music&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Aufnehmen, als Opus Audio-Codec transkodieren und im VLC abspielen. (Der Enkoder erkennt das RAW-Format korrekt.)&lt;/p&gt;</description></item><item><title>Short debian package guide for dummies</title><link>https://blog.lgohlke.de/posts/2015-04-04-create-a-debian-package-for-dummies/</link><pubDate>Tue, 07 Apr 2015 21:23:07 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2015-04-04-create-a-debian-package-for-dummies/</guid><description>&lt;p&gt;As I always struggle with creating a debian so I decided to write the few steps down. Finally. This is more a kind of cheat sheet than a comprehensive guide.&lt;br&gt;
In my example I will package &lt;a href="https://github.com/h2o/h2o" class="external-link" target="_blank" rel="noopener"&gt;h2o&lt;/a&gt; a very fast http/2 static file server capable to run as reverse proxy.&lt;/p&gt;
&lt;p&gt;This is my environment:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ lsb_release -a
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;No LSB modules are available.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Distributor ID:	Ubuntu
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Description:	Ubuntu 14.04.2 LTS
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Release:	14.04
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Codename:	trusty
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="1-creating-the-basic-structure"&gt;
 1. creating the basic structure
 &lt;a class="heading-link" href="#1-creating-the-basic-structure"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;clone repository and change to newly created branch&lt;/p&gt;</description></item><item><title>Packaged DSSIM Implementation of pornel</title><link>https://blog.lgohlke.de/posts/2015-03-21-packaged-dssim/</link><pubDate>Sat, 21 Mar 2015 10:23:07 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2015-03-21-packaged-dssim/</guid><description>&lt;p&gt;I just packaged &lt;a href="https://github.com/pornel/dssim" class="external-link" target="_blank" rel="noopener"&gt;dssim&lt;/a&gt; for ubuntu. So for now it can easily installed and removed as plain deb file.&lt;/p&gt;
&lt;p&gt;To install just type:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo apt-add-repository ppa:lkwg82/dssim
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo apt-get update
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo apt-get install dssim
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Currently it is only available for ubuntu &lt;a href="https://launchpad.net/~lkwg82/&amp;#43;archive/ubuntu/dssim/&amp;#43;packages" class="external-link" target="_blank" rel="noopener"&gt;trusty&lt;/a&gt; (14.04 LTS). On request I&amp;rsquo;ll make it for other versions as well.&lt;/p&gt;</description></item><item><title>Hot swap classes in spring-boot with springloaded</title><link>https://blog.lgohlke.de/posts/2015-02-07-hotswap-classes-in-spring-boot-with-springloaded/</link><pubDate>Tue, 17 Feb 2015 10:23:07 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2015-02-07-hotswap-classes-in-spring-boot-with-springloaded/</guid><description>&lt;p&gt;Spring-Boot is fast, but changing some controller for prototyping still requires some slow restart cycle of some 5s. With &lt;a href="https://github.com/spring-projects/spring-loaded" class="external-link" target="_blank" rel="noopener"&gt;spring-loaded&lt;/a&gt; you can shortcut this to 1s, depending of your project. Just hit CTRL-F9 to compile.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.lgohlke.de/img/2015-02-07-spring-loaded-in-intellij.jpeg" &gt;&lt;img src="https://blog.lgohlke.de/img/2015-02-07-spring-loaded-in-intellij.jpeg" alt="screenshot from intellij"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;See also:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://docs.spring.io/spring-boot/docs/current/reference/html/howto-hotswapping.html" class="external-link" target="_blank" rel="noopener"&gt;Hot swapping in the spring boot manual&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/spring-projects/spring-loaded" class="external-link" target="_blank" rel="noopener"&gt;spring-loaded on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Easy distinct unit and integration test code coverage with sonarqube</title><link>https://blog.lgohlke.de/posts/2015-02-05-sonarqube-code-coverage-unittests-integrationtests/</link><pubDate>Thu, 05 Feb 2015 23:23:07 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2015-02-05-sonarqube-code-coverage-unittests-integrationtests/</guid><description>&lt;p&gt;Simple compute distinct code coverage for unit tests and integration tests. I used jacoco 0.7.2, sonarqube 5.0 and maven 3.2.5 to cook the numbers ;).&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.lgohlke.de/img/2015-02-05-combined-code-coverage.jpg" &gt;&lt;img src="https://blog.lgohlke.de/img/2015-02-05-combined-code-coverage.jpg" alt="screenshot from sonarqube"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;project&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;...&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;profile&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;id&amp;gt;&lt;/span&gt;sonar-coverage&lt;span style="color:#f92672"&gt;&amp;lt;/id&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;build&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;plugins&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.jacoco&lt;span style="color:#f92672"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jacoco-maven-plugin&lt;span style="color:#f92672"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;0.7.2.201409121644&lt;span style="color:#f92672"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;append&amp;gt;&lt;/span&gt;true&lt;span style="color:#f92672"&gt;&amp;lt;/append&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;executions&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;execution&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;id&amp;gt;&lt;/span&gt;agent-for-ut&lt;span style="color:#f92672"&gt;&amp;lt;/id&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;goals&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;goal&amp;gt;&lt;/span&gt;prepare-agent&lt;span style="color:#f92672"&gt;&amp;lt;/goal&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/goals&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/execution&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;execution&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;id&amp;gt;&lt;/span&gt;agent-for-it&lt;span style="color:#f92672"&gt;&amp;lt;/id&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;goals&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;goal&amp;gt;&lt;/span&gt;prepare-agent-integration&lt;span style="color:#f92672"&gt;&amp;lt;/goal&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/goals&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/execution&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;execution&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;id&amp;gt;&lt;/span&gt;jacoco-site&lt;span style="color:#f92672"&gt;&amp;lt;/id&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;phase&amp;gt;&lt;/span&gt;post-integration-test&lt;span style="color:#f92672"&gt;&amp;lt;/phase&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;goals&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;goal&amp;gt;&lt;/span&gt;report&lt;span style="color:#f92672"&gt;&amp;lt;/goal&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/goals&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/execution&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/executions&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/plugins&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/build&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/profile&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/project&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A simple call with maven to run the test suite and activate jacoco class instrumentation would be:&lt;/p&gt;</description></item><item><title>Websockets mit Spring-Boot und Jetty - Publish/Subscribe</title><link>https://blog.lgohlke.de/posts/2015-01-21-websockets-mit-springboot-und-jetty/</link><pubDate>Wed, 21 Jan 2015 14:23:07 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2015-01-21-websockets-mit-springboot-und-jetty/</guid><description>&lt;p&gt;Hier mein kleines Tutorial wie man mit spring-boot und jetty&amp;rsquo;s websocket Client ein Publish/Subscribe Szenario implementieren kann.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Inhalt&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="#hw" &gt;Simples Hello-World mit &amp;ldquo;welcome&amp;rdquo;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#ps" &gt;Simples publish/subscribe um Zeitinformation zu erhalten&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="hw"&gt;
 Simples Hello-World mit &amp;ldquo;welcome&amp;rdquo;
 &lt;a class="heading-link" href="#hw"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Die Idee ist, sich in Java sowohl auf Server- als auch auf Client-Seite mittels Websockets zu verbinden. Nach dem erfolgreichen Verbindungsaufbau sendet der Server eine Nachricht mit dem Text &lt;code&gt;welcome&lt;/code&gt; als Inhalt.&lt;/p&gt;</description></item><item><title>BestOfSpam - +++Geheimdienst ermittelt+++</title><link>https://blog.lgohlke.de/posts/2014-09-06-best-of-spam-part-i/</link><pubDate>Sat, 06 Sep 2014 18:23:07 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2014-09-06-best-of-spam-part-i/</guid><description>&lt;p&gt;Wenn mein Spamfilter mal wieder nicht anspringt, kommt mir auch die eine oder andere Phishing-mail unter die Augen. Diese fand ich schon &amp;ldquo;sehr gut&amp;rdquo;:&lt;/p&gt;
&lt;p&gt;++ ACHTUNG ++ EILMELDUNG++ Diese Chance gibt es nur alle 100 Jahre ++ Geheimdienst ermittelt ++&lt;/p&gt;
&lt;p&gt;Geheime Online-Handelssoftware aufgetaucht! Verdienen auch Sie bis zu &lt;strong&gt;8016,98 Euro pro Monat!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Diese Software ist aber streng geheim! Deshalb kann die Bank dieses System auch noch noch an 21 Interessenten weiter geben!&lt;/p&gt;</description></item><item><title>SonarQube Mojo Bridge now supports Sonarqube 4.2 and above</title><link>https://blog.lgohlke.de/posts/2014-05-25-sonarqube-plugin-mojobridge-supports-sonarqube-4.2-and-above/</link><pubDate>Sun, 25 May 2014 21:23:07 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2014-05-25-sonarqube-plugin-mojobridge-supports-sonarqube-4.2-and-above/</guid><description>&lt;p&gt;I released a new version of [SonarQube Mojo Bridge]&lt;code&gt;http://docs.codehaus.org/display/SONAR/SonarQube+Mojo+Bridge&lt;/code&gt;(💀link) which adds support for [sonarqube 4.2]&lt;code&gt;http://www.sonarqube.org/downloads/&lt;/code&gt; and above.&lt;/p&gt;</description></item><item><title>new release of clever-backup fixed compatibility issue with ubuntu 14.04</title><link>https://blog.lgohlke.de/posts/2014-05-18-clever-backup-compatibility-with-ubuntu-14.04/</link><pubDate>Sun, 18 May 2014 21:23:07 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2014-05-18-clever-backup-compatibility-with-ubuntu-14.04/</guid><description>&lt;p&gt;I released a new version of &lt;a href="https://github.com/lkwg82/clever-backup" class="external-link" target="_blank" rel="noopener"&gt;clever-backup&lt;/a&gt; which fixes incompatibility with ubuntu 14.04 available from &lt;a href="https://launchpad.net/~lkwg82/&amp;#43;archive/clever-backup" class="external-link" target="_blank" rel="noopener"&gt;ppa:lkwg82/clever-backup&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SSH Agent Forwarding Is a Bug</title><link>https://blog.lgohlke.de/posts/2014-05-18-ssh-agent-forwarding-is-a-bug/</link><pubDate>Sun, 18 May 2014 21:23:07 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2014-05-18-ssh-agent-forwarding-is-a-bug/</guid><description>&lt;p&gt;SSH &lt;code&gt;Proxycommand&lt;/code&gt; sollte dem &lt;code&gt;Forward Agent&lt;/code&gt; vorgezogen werden:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://web.archive.org/web/20150228031949/http://blog.lyte.id.au/2012/03/19/ssh-agent-forwarding-is-a-bug/" class="external-link" target="_blank" rel="noopener"&gt;SSH Agent Forwarding Is a Bug&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://web.archive.org/web/20150308181319/http://www.clockwork.net/blog/2012/09/28/602/ssh_agent_hijacking" class="external-link" target="_blank" rel="noopener"&gt;SSH AGENT HIJACKING&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Rotate and convert videos automatically to h264 in the shell</title><link>https://blog.lgohlke.de/posts/2014-04-11-convert-and-rotate-videos-automatically-to-h264/</link><pubDate>Fri, 11 Apr 2014 21:23:07 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2014-04-11-convert-and-rotate-videos-automatically-to-h264/</guid><description>&lt;p&gt;Recently I had the luck to welcome my daughter on earth. I almost welcomed her with my smartphone in my hand recording a video. Actually I did not! But later I did a lot of videos.&lt;/p&gt;
&lt;p&gt;I wonder how to not fill up my disk in a few weeks I had to compress them without loosing too much quality.&lt;/p&gt;
&lt;p&gt;This is my solution:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#set -e&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;set +x
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;size&lt;span style="color:#f92672"&gt;=&lt;/span&gt;-1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; determineMaxVideoSize&lt;span style="color:#f92672"&gt;(){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; local source&lt;span style="color:#f92672"&gt;=&lt;/span&gt;$1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; local width&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;exiftool $source | grep -i &lt;span style="color:#e6db74"&gt;&amp;#34;^Image Width&amp;#34;&lt;/span&gt; | sed -e &lt;span style="color:#e6db74"&gt;&amp;#39;s#.*: ##&amp;#39;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; local height&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;exiftool $source | grep -i &lt;span style="color:#e6db74"&gt;&amp;#34;^Image Height&amp;#34;&lt;/span&gt; | sed -e &lt;span style="color:#e6db74"&gt;&amp;#39;s#.*: ##&amp;#39;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; local max&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;$((&lt;/span&gt;$width&amp;gt;$height ? $width : $height&lt;span style="color:#66d9ef"&gt;))&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt; $max -gt &lt;span style="color:#ae81ff"&gt;1280&lt;/span&gt; &lt;span style="color:#f92672"&gt;]&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; size&lt;span style="color:#f92672"&gt;=&lt;/span&gt;hd720;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; size&lt;span style="color:#f92672"&gt;=&lt;/span&gt;$width&lt;span style="color:#e6db74"&gt;&amp;#34;x&amp;#34;&lt;/span&gt;$height;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; _convert&lt;span style="color:#f92672"&gt;(){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; local source&lt;span style="color:#f92672"&gt;=&lt;/span&gt;$1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; local target&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;$1&lt;span style="color:#e6db74"&gt;.avi&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt; -f $target &lt;span style="color:#f92672"&gt;]&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; echo &lt;span style="color:#e6db74"&gt;&amp;#34;skipping &amp;#39;&lt;/span&gt;$source&lt;span style="color:#e6db74"&gt;&amp;#39;, because &amp;#39;&lt;/span&gt;$target&lt;span style="color:#e6db74"&gt;&amp;#39; already exists&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# exiftool comes with libimage-exiftool-perl&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; local rotation&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;exiftool $source | grep -i ^Rotation | sed -e &lt;span style="color:#e6db74"&gt;&amp;#39;s#.*: ##&amp;#39;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; declare -A videoFilter
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; videoFilter&lt;span style="color:#f92672"&gt;=(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;90&lt;span style="color:#f92672"&gt;]=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;transpose=1&amp;#39;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;180&lt;span style="color:#f92672"&gt;]=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;transpose=1,transpose=1&amp;#39;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;270&lt;span style="color:#f92672"&gt;]=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;transpose=1,transpose=1,transpose=1&amp;#39;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; determineMaxVideoSize $source;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; local metadata&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;tempfile&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; avconv -y -i $source -f ffmetadata $metadata
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; echo &lt;span style="color:#e6db74"&gt;&amp;#34;rotation: &lt;/span&gt;$rotation&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; local videoFilter&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;-vf &lt;/span&gt;&lt;span style="color:#e6db74"&gt;${&lt;/span&gt;videoFilter[$rotation]&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt; $rotation &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; &lt;span style="color:#f92672"&gt;]&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; videoFilter&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; cmd&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;avconv -xerror -i &lt;/span&gt;$source&lt;span style="color:#e6db74"&gt; \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; -acodec libmp3lame -ab 160000 `# mp3 160kB/s` \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; -vcodec libx264 -maxrate 2500k -bufsize 1000000 -r 25 -s &lt;/span&gt;$size&lt;span style="color:#e6db74"&gt; &lt;/span&gt;$videoFilter&lt;span style="color:#e6db74"&gt; `# 25fps, 1280x720` \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; &lt;/span&gt;$target&lt;span style="color:#e6db74"&gt;.tmp.avi \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; -i &lt;/span&gt;$metadata&lt;span style="color:#e6db74"&gt; -map_metadata 1 -map 0 `# add dumped metadata`&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $cmd &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mv $target.tmp.avi $target &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; touch -r &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;$source&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;$target&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export -f _convert
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export -f determineMaxVideoSize
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;find -maxdepth &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; -type f -name &lt;span style="color:#e6db74"&gt;&amp;#34;*MOV&amp;#34;&lt;/span&gt; -o -name &lt;span style="color:#e6db74"&gt;&amp;#34;*3gp&amp;#34;&lt;/span&gt; -o -name &lt;span style="color:#e6db74"&gt;&amp;#34;*mp4&amp;#34;&lt;/span&gt; | xargs -n1 -I &lt;span style="color:#f92672"&gt;{}&lt;/span&gt; bash -c &lt;span style="color:#e6db74"&gt;&amp;#39;_convert {}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I decided to save the script as &lt;code&gt;convertCamVideo2ArchivVideo.sh&lt;/code&gt; in &lt;code&gt;~/bin&lt;/code&gt;. So you can run it from everywhere as this path is already in &lt;code&gt;PATH&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Truecrypt mit Keyfiles und pam_exec automatisch mounten</title><link>https://blog.lgohlke.de/posts/2014-04-10-truecrypt-with-keyfiles-and-pam/</link><pubDate>Thu, 10 Apr 2014 21:23:07 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2014-04-10-truecrypt-with-keyfiles-and-pam/</guid><description>&lt;p&gt;Nachdem ich in im letzten &lt;a href="https://blog.lgohlke.de/posts/2014-04-06-hibernate-and-resume-with-dm-crypt/" &gt;Artikel&lt;/a&gt; kurz beschrieben habe, warum ich mich für [truecrypt] &lt;code&gt;http://ww.truecrypt.org&lt;/code&gt; entschieden habe, möchte ich nun kurz zeigen, wie man mit Hilfe von &lt;a href="https://web.archive.org/web/20140226152417/http://www.linux-pam.org/Linux-PAM-html/sag-pam_exec.html" class="external-link" target="_blank" rel="noopener"&gt;pam_exec&lt;/a&gt; verschlüsselte Datenträger mit [Schlüsseldateien] &lt;code&gt;http://www.truecrypt.org/docs/keyfiles&lt;/code&gt; einbindet.&lt;/p&gt;
&lt;p&gt;Mein System is effektiv hat nur einen menschlichen Nutzer, daher wird im Folgenden nicht nach unterschiedlichen Nutzern unterschieden.&lt;/p&gt;
&lt;h2 id="ziel"&gt;
 Ziel
 &lt;a class="heading-link" href="#ziel"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Eine Zeile pro Datenträger der mit einer Schlüsseldatei mit Hilfe von &lt;code&gt;pam_exec&lt;/code&gt; gemountet wird.&lt;/p&gt;</description></item><item><title>hibernate and resume with dm-crypt under ubuntu</title><link>https://blog.lgohlke.de/posts/2014-04-06-hibernate-and-resume-with-dm-crypt/</link><pubDate>Sun, 06 Apr 2014 18:08:00 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2014-04-06-hibernate-and-resume-with-dm-crypt/</guid><description>&lt;p&gt;I could conclude there is no way out-of-the-box with ubuntu and I now use truecrypt.&lt;/p&gt;
&lt;p&gt;Don&amp;rsquo;t make the mistake and try hibernate/resume with &lt;a href="http://de.wikipedia.org/wiki/Dm-crypt" class="external-link" target="_blank" rel="noopener"&gt;dm-crypt&lt;/a&gt; with big 2TB disk. This trying costs me three full days copying data with no result :(. I repeated it successfully with truecrypt.&lt;/p&gt;
&lt;p&gt;I already had &lt;a href="http://www.truecrypt.org" class="external-link" target="_blank" rel="noopener"&gt;truecrypt&lt;/a&gt; running for years &amp;hellip; for some sensitive private data. I&amp;rsquo;d like to try something new and failed.&lt;/p&gt;</description></item><item><title>Howto Babyphone mit dem Raspberry PI</title><link>https://blog.lgohlke.de/posts/2014-02-09-babyphone-mit-dem-raspberry-pi/</link><pubDate>Sun, 09 Feb 2014 13:08:00 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2014-02-09-babyphone-mit-dem-raspberry-pi/</guid><description>&lt;p&gt;Bald ist es soweit und das Babyphone muss eingerichtet werden. Dazu habe ich mir die Webcam [Logitech C920] &lt;code&gt;https://www.logitech.com/de-de/shop/p/c920s-pro-hd-webcam&lt;/code&gt; und &lt;a href="http://de.wikipedia.org/wiki/Raspberry_Pi#Spezifikationen" class="external-link" target="_blank" rel="noopener"&gt;Raspberry Pi Modell B&lt;/a&gt; gekauft.&lt;/p&gt;
&lt;p&gt;Hier nun meine kleine Anleitung um auf dem Handy Bild und Ton zu haben.&lt;/p&gt;
&lt;h2 id="vorraussetzungen"&gt;
 Vorraussetzungen
 &lt;a class="heading-link" href="#vorraussetzungen"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Der PI hat Netzzugang und ihr könnt per SSH rauf.&lt;/p&gt;
&lt;h2 id="bild"&gt;
 Schritte zum Erfolg - das Bild
 &lt;a class="heading-link" href="#bild"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Als erstes die Tools installieren:&lt;/p&gt;</description></item><item><title>Thoughtworks Technology Radar</title><link>https://blog.lgohlke.de/posts/2014-02-04-thoughtworks-technology-radar-2014/</link><pubDate>Tue, 04 Feb 2014 00:08:00 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2014-02-04-thoughtworks-technology-radar-2014/</guid><description>&lt;p&gt;Letzte Woche ist wieder eine neue Ausgabe des &amp;ldquo;&lt;a href="http://www.thoughtworks.com/de/radar/" class="external-link" target="_blank" rel="noopener"&gt;Technology Radar&lt;/a&gt;&amp;rdquo; von &lt;a href="http://www.thoughtworks.com/" class="external-link" target="_blank" rel="noopener"&gt;ThoughtWorks&lt;/a&gt; erschienen&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.lgohlke.de/img/technology-radar.jpg" alt="technology-radar"&gt;&lt;/p&gt;
&lt;p&gt;Da sind Dinge erwähnt, die man so nicht bemerken würde ;).&lt;/p&gt;
&lt;p&gt;Übrigends hat es &lt;em&gt;Datensparsamkeit&lt;/em&gt; als Begriff in die englische Sprache geschafft:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In our desire to support ever-changing business models,learn from past behavior and provide the best experience for every individual visitor, we are tempted to record as much data as possible. At the same time hackers are more ferocious than ever,with one spectacular security breach after another, and we now know of unprecedented mass-surveillance by government agencies. The term Datensparsamkeit is taken from German privacy legislation and describes the idea to only store as much personal information as is absolutely required for the business or applicable laws. Some examples are instead of storing a customer&amp;rsquo;s full IP address in access logs, just using the first two or three octets and instead of logging transit journeys with a username using an anonymous token. If you never store the information, you do not need to worry about someone stealing it.&lt;/p&gt;</description></item><item><title>Blog relaunched mit Jekyll</title><link>https://blog.lgohlke.de/posts/2014-01-30-blog-relaunch-mit-jekyll/</link><pubDate>Fri, 31 Jan 2014 00:08:00 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2014-01-30-blog-relaunch-mit-jekyll/</guid><description>&lt;p&gt;Habe diesen Blog von &lt;a href="http://spassmitit.blogspot.de/" class="external-link" target="_blank" rel="noopener"&gt;blogger.com&lt;/a&gt; auf self-hosted mit &lt;a href="http://jekyllrb.com/" class="external-link" target="_blank" rel="noopener"&gt;jekyll&lt;/a&gt; umgestellt.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.lgohlke.de/img/logo-2x.png" alt="jekyll"&gt;&lt;/p&gt;
&lt;p&gt;Nach den ersten holprigen Schritten fühlt es sich richtig gut an.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Jekyll is a blog-aware, static site generator in Ruby&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="warum-mich-jekyll-angesprochen-hat"&gt;
 Warum mich Jekyll angesprochen hat?
 &lt;a class="heading-link" href="#warum-mich-jekyll-angesprochen-hat"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Einfach &amp;hellip; nur html schreiben.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jekyllrb.com/docs/templates/" class="external-link" target="_blank" rel="noopener"&gt;Template Support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Scripting so einfach wie in PHP/Javascript&lt;/li&gt;
&lt;li&gt;Performance von statischen Seiten (von 3s auf 0,5s)&lt;/li&gt;
&lt;li&gt;Import von Blogs möglich (ich habe davon Gebrauch gemacht)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Wie zu sehen ist, ist die Farbkomposition besser, als beim &lt;a href="http://spassmitit.blogspot.de/" class="external-link" target="_blank" rel="noopener"&gt;alten Blog&lt;/a&gt;, aber noch nicht ganz rund. Das wird kontinuierlich weiter entwickelt und Feedback ist willkommen!&lt;/p&gt;</description></item><item><title>Leading Change in einer Agile Company</title><link>https://blog.lgohlke.de/posts/2013-12-09-leading-change-in-einer-agile-company/</link><pubDate>Mon, 09 Dec 2013 23:08:00 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2013-12-09-leading-change-in-einer-agile-company/</guid><description>&lt;p&gt;Wie kann ich erfolgreich mein Umfeld verändern? Welche Hebel muss ich in Bewegung setzen, um Ideen umzusetzen? Wie kann ich meinen Chef überzeugen? Diesen oder ähnliche lautenden Fragen werden in dem Artikel von &lt;a href="http://de.wikipedia.org/wiki/John_P._Kotter" class="external-link" target="_blank" rel="noopener"&gt;John P. Kotter&lt;/a&gt; in &lt;a href="https://hbr.org/1995/05/leading-change-why-transformation-efforts-fail-2" class="external-link" target="_blank" rel="noopener"&gt;Leading Change - Why Transformation Efforts Fail&lt;/a&gt; eine Methodik zur Lösung angeboten.&lt;/p&gt;
&lt;p&gt;Wenn mich jemand fragt, wie eine Firma sein muss, in der ich gerne arbeite, dann würde ich sicher antworten &amp;ldquo;&lt;em&gt;&amp;hellip; offen für Veränderungen.&lt;/em&gt;&amp;rdquo;. Damit allein ist es jedoch nicht getan. Es braucht Menschen die diese auch leiten, begleiten und mittragen.&lt;/p&gt;</description></item><item><title>CLD - als ich noch nicht wusste, was das heisst</title><link>https://blog.lgohlke.de/posts/2013-12-05-cld---als-ich-noch-nicht-wusste-was-das-heisst/</link><pubDate>Thu, 05 Dec 2013 22:39:00 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2013-12-05-cld---als-ich-noch-nicht-wusste-was-das-heisst/</guid><description>&lt;p&gt;Im letzten Artikel über meinen Alltag DevOps &lt;a href="https://blog.lgohlke.de/posts/2013-12-03-alltag-eines-devops---wie-ich-das-produktive-monitoring-kaputt-machte/" &gt;Wie ich das Monitoring kaputt machte&lt;/a&gt; habe ich CLD angesprochen. Dabei ist mir eine Geschichte aus meiner Anfangszeit bei meinem jetzigen Arbeitgeber eingefallen. Im Nachhinein lustig, damals etwas verunsichernd.&lt;/p&gt;
&lt;p&gt;Ich bin also neu in meiner Firma und committe Code. Kurz darauf geht die Live-Plattform aus. Was mir in dem Moment noch nicht bewußt war, dass wir gerade CLD &lt;em&gt;leben&lt;/em&gt; und ich gerade eine Kehrseite von CLD intensiv erfahre.&lt;/p&gt;</description></item><item><title>Alltag eines DevOps - wie ich das produktive Monitoring kaputt machte</title><link>https://blog.lgohlke.de/posts/2013-12-03-alltag-eines-devops---wie-ich-das-produktive-monitoring-kaputt-machte/</link><pubDate>Tue, 03 Dec 2013 22:14:08 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2013-12-03-alltag-eines-devops---wie-ich-das-produktive-monitoring-kaputt-machte/</guid><description>&lt;p&gt;Ich arbeite in einer (wirklich tollen) Firma, die sich vielen modernen Themen annimmt und diese versucht &lt;em&gt;zu leben&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;zu leben&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Das bedeutet, dass wir einem aufgeplusterten Buzzword versuchen Leben einzuhauchen. So z.B. achten wir nicht auf Qualität &amp;hellip; wir &lt;em&gt;leben&lt;/em&gt; Qualität. Wir schämen uns für Fehler. Wir lernen aktiv aus Fehlern. Wir analysieren grobe Fehler und leiten Strategien ab, die proaktiv in Verhaltensänderungen überführt werden (sollen). Wir laden es (das Buzzword) so mit Emotionen aus, dass es kaum noch infrage gestellt wird. Dann &lt;em&gt;leben&lt;/em&gt; wir es so intensiv, dass wir alle Übertreibungen einmal erfahren haben und uns bildlich gesprochen mindestens einmal die Augen ausgeheult haben. Danach finden wir meist ein ganz gesundes Mittelmaß und begegnen neue Hypes, die wir durchleben.&lt;/p&gt;</description></item><item><title>Fast visual frontend prototyping - divshot.com</title><link>https://blog.lgohlke.de/posts/2013-11-14-fast-visual-frontend-prototyping---divshot.com/</link><pubDate>Thu, 14 Nov 2013 19:02:00 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2013-11-14-fast-visual-frontend-prototyping---divshot.com/</guid><description>&lt;p&gt;Ich habe es am Samstag ausprobiert und bin etwas begeistert ;)&lt;/p&gt;
&lt;p&gt;Aussagen der Website, die ich so übernehme:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Fast, visual front-end development.&lt;/p&gt;
&lt;p&gt;As simple as a mockup tool. As powerful as a text editor.&lt;/p&gt;
&lt;p&gt;Prototyping with Bootstrap and beyond&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Quelle: &lt;a href="http://www.divshot.com/" class="external-link" target="_blank" rel="noopener"&gt;http://www.divshot.com/&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Technologieradar Mai/2013</title><link>https://blog.lgohlke.de/posts/2013-11-10-technologieradar-mai2013/</link><pubDate>Sun, 10 Nov 2013 18:58:04 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2013-11-10-technologieradar-mai2013/</guid><description>&lt;p&gt;Auf der vergangenen &lt;a href="http://gotocon.com/berlin-2013/" class="external-link" target="_blank" rel="noopener"&gt;Goto in Berlin&lt;/a&gt; wurde von ThoughtWorks das &lt;a href="https://web.archive.org/web/20130711071417/http://www.thoughtworks.com/de/radar" class="external-link" target="_blank" rel="noopener"&gt;Technology Radar&lt;/a&gt; erwähnt.&lt;/p&gt;
&lt;p&gt;Ich kann nur jedem - der den Anspruch an sich hat, auf der Höhe der Zeit zu sein - empfehlen es zu lesen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Legende:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Adopt&lt;/strong&gt;: We feel strongly that the industry should be adopting these items. We use them when appropriate on our projects.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trial&lt;/strong&gt;: Worth pursuing. It is important to understand how to build up this capability. Enterprises should try this technology on a project that can handle the risk.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assess&lt;/strong&gt;: Worth exploring with the goal of understanding how it will affect your enterprise.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hold&lt;/strong&gt;: Proceed with caution.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="techniques"&gt;
 Techniques
 &lt;a class="heading-link" href="#techniques"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id="adopt"&gt;
 ADOPT
 &lt;a class="heading-link" href="#adopt"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Aggregates as documents&lt;/li&gt;
&lt;li&gt;Automated deployment pipeline&lt;/li&gt;
&lt;li&gt;Guerrilla testing&lt;/li&gt;
&lt;li&gt;In-process acceptance testing&lt;/li&gt;
&lt;li&gt;Mobile testing on mobile networks&lt;/li&gt;
&lt;li&gt;Performance testing as a first-class citizen&lt;/li&gt;
&lt;li&gt;Promises for asynchronous programming&lt;/li&gt;
&lt;li&gt;Windows infrastructure automation&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="trial"&gt;
 TRIAL
 &lt;a class="heading-link" href="#trial"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Analyzing test runs&lt;/li&gt;
&lt;li&gt;Blue-green deployment&lt;/li&gt;
&lt;li&gt;Co-location by telepresence&lt;/li&gt;
&lt;li&gt;Continuous delivery for mobile devices&lt;/li&gt;
&lt;li&gt;Database migrations for NoSQL&lt;/li&gt;
&lt;li&gt;Edge Side Includes for page composition&lt;/li&gt;
&lt;li&gt;HTML5 storage instead of cookies&lt;/li&gt;
&lt;li&gt;Logs as data&lt;/li&gt;
&lt;li&gt;Micro-services&lt;/li&gt;
&lt;li&gt;Mobile first&lt;/li&gt;
&lt;li&gt;Perimeterless enterprise&lt;/li&gt;
&lt;li&gt;Responsive web design&lt;/li&gt;
&lt;li&gt;Semantic monitoring&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="assess"&gt;
 ASSESS
 &lt;a class="heading-link" href="#assess"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Capturing client-side JavaScript errors&lt;/li&gt;
&lt;li&gt;Collaborative analytics and data science&lt;/li&gt;
&lt;li&gt;Development environments in the cloud&lt;/li&gt;
&lt;li&gt;Focus on mean time to recovery&lt;/li&gt;
&lt;li&gt;Machine image as a build artifact&lt;/li&gt;
&lt;li&gt;Minimizing application configuration&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="hold"&gt;
 HOLD
 &lt;a class="heading-link" href="#hold"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Exhaustive browser based testing&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="platform"&gt;
 Platform
 &lt;a class="heading-link" href="#platform"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id="adopt-1"&gt;
 ADOPT
 &lt;a class="heading-link" href="#adopt-1"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Elastic Search&lt;/li&gt;
&lt;li&gt;MongoDB&lt;/li&gt;
&lt;li&gt;Neo4J&lt;/li&gt;
&lt;li&gt;Redis&lt;/li&gt;
&lt;li&gt;SMS and USSD as a UI&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="trial-1"&gt;
 TRIAL
 &lt;a class="heading-link" href="#trial-1"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;BigQuery&lt;/li&gt;
&lt;li&gt;Continuous integration in the cloud&lt;/li&gt;
&lt;li&gt;Couchbase&lt;/li&gt;
&lt;li&gt;Hadoop 2.0&lt;/li&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;OpenStack&lt;/li&gt;
&lt;li&gt;Rackspace Cloud&lt;/li&gt;
&lt;li&gt;Riak&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="assess-1"&gt;
 ASSESS
 &lt;a class="heading-link" href="#assess-1"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Azure&lt;/li&gt;
&lt;li&gt;Calatrava&lt;/li&gt;
&lt;li&gt;Datomic&lt;/li&gt;
&lt;li&gt;PhoneGap/Apache Cordova&lt;/li&gt;
&lt;li&gt;PostgreSQL for NoSQL&lt;/li&gt;
&lt;li&gt;Vumi&lt;/li&gt;
&lt;li&gt;Zepto.js&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="hold-1"&gt;
 HOLD
 &lt;a class="heading-link" href="#hold-1"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Big enterprise solutions&lt;/li&gt;
&lt;li&gt;Singleton infrastructure&lt;/li&gt;
&lt;li&gt;WS-*&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="tools"&gt;
 Tools
 &lt;a class="heading-link" href="#tools"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id="adopt-2"&gt;
 ADOPT
 &lt;a class="heading-link" href="#adopt-2"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;D3&lt;/li&gt;
&lt;li&gt;Embedded servlet containers&lt;/li&gt;
&lt;li&gt;Frank&lt;/li&gt;
&lt;li&gt;Gradle&lt;/li&gt;
&lt;li&gt;Graphite&lt;/li&gt;
&lt;li&gt;Immutable servers&lt;/li&gt;
&lt;li&gt;NuGet&lt;/li&gt;
&lt;li&gt;PSake&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="trial-2"&gt;
 TRIAL
 &lt;a class="heading-link" href="#trial-2"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Apache Pig&lt;/li&gt;
&lt;li&gt;Gatling&lt;/li&gt;
&lt;li&gt;Jekyll&lt;/li&gt;
&lt;li&gt;Locust&lt;/li&gt;
&lt;li&gt;Logstash &amp;amp; Graylog2&lt;/li&gt;
&lt;li&gt;PhantomJS&lt;/li&gt;
&lt;li&gt;Puppet-librarian and Chef-librarian&lt;/li&gt;
&lt;li&gt;TestFlight &amp;amp; HockeyApp&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="assess-2"&gt;
 ASSESS
 &lt;a class="heading-link" href="#assess-2"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Browser-based templating&lt;/li&gt;
&lt;li&gt;Faraday&lt;/li&gt;
&lt;li&gt;Hystrix&lt;/li&gt;
&lt;li&gt;Icon fonts&lt;/li&gt;
&lt;li&gt;Light Table&lt;/li&gt;
&lt;li&gt;Octopus&lt;/li&gt;
&lt;li&gt;Reactive Extensions for .Net&lt;/li&gt;
&lt;li&gt;Riemann&lt;/li&gt;
&lt;li&gt;Snowplow Analytics&lt;/li&gt;
&lt;li&gt;UIAutomator&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="hold-2"&gt;
 HOLD
 &lt;a class="heading-link" href="#hold-2"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Heavyweight test tools&lt;/li&gt;
&lt;li&gt;Maven&lt;/li&gt;
&lt;li&gt;TFS&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="languages--frameworks"&gt;
 Languages &amp;amp; Frameworks
 &lt;a class="heading-link" href="#languages--frameworks"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id="adopt-3"&gt;
 ADOPT
 &lt;a class="heading-link" href="#adopt-3"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Clojure&lt;/li&gt;
&lt;li&gt;CSS frameworks&lt;/li&gt;
&lt;li&gt;Jasmine paired with Node.js&lt;/li&gt;
&lt;li&gt;Scala&lt;/li&gt;
&lt;li&gt;Sinatra&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="trial-3"&gt;
 TRIAL
 &lt;a class="heading-link" href="#trial-3"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;CoffeeScript&lt;/li&gt;
&lt;li&gt;Dropwizard&lt;/li&gt;
&lt;li&gt;HTML5 for offline applications&lt;/li&gt;
&lt;li&gt;JavaScript as a platform&lt;/li&gt;
&lt;li&gt;JavaScript MV* frameworks&lt;/li&gt;
&lt;li&gt;Play Framework 2&lt;/li&gt;
&lt;li&gt;Require.js &amp;amp; NPM&lt;/li&gt;
&lt;li&gt;Scratch, Alice, and Kodu&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="assess-3"&gt;
 ASSESS
 &lt;a class="heading-link" href="#assess-3"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;ClojureScript&lt;/li&gt;
&lt;li&gt;Gremlin&lt;/li&gt;
&lt;li&gt;Lua&lt;/li&gt;
&lt;li&gt;Nancy&lt;/li&gt;
&lt;li&gt;OWIN&lt;/li&gt;
&lt;li&gt;RubyMotion&lt;/li&gt;
&lt;li&gt;Twitter Bootstrap&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="hold-3"&gt;
 HOLD
 &lt;a class="heading-link" href="#hold-3"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Backbone.js&lt;/li&gt;
&lt;li&gt;Component-based frameworks&lt;/li&gt;
&lt;li&gt;Handwritten CSS&lt;/li&gt;
&lt;li&gt;Logic in stored procedures&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Quelle: &lt;a href="https://web.archive.org/web/20130711071417/http://www.thoughtworks.com/de/radar" class="external-link" target="_blank" rel="noopener"&gt;http://www.thoughtworks.com/de/radar&lt;/a&gt;&lt;/p&gt;</description></item><item><title>lint-maven-plugin - check your pom.xml</title><link>https://blog.lgohlke.de/posts/2013-09-09-lint-maven-plugin---check-your-pom.xml/</link><pubDate>Mon, 09 Sep 2013 14:00:02 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2013-09-09-lint-maven-plugin---check-your-pom.xml/</guid><description>&lt;p&gt;We know for each and everything there are some &lt;em&gt;Do&amp;rsquo;s&lt;/em&gt; and many &lt;em&gt;Don&amp;rsquo;ts&lt;/em&gt;. This is about recommendations on your &lt;a href="http://maven.apache.org/guides/introduction/introduction-to-the-pom.html" class="external-link" target="_blank" rel="noopener"&gt;pom.xml&lt;/a&gt; of your maven project.&lt;/p&gt;
&lt;p&gt;Just try this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ mvn com.lewisd:lint-maven-plugin:check
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;INFO&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Scanning &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; projects...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;INFO&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;INFO&lt;span style="color:#f92672"&gt;]&lt;/span&gt; ------------------------------------------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;INFO&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Building Maven POM lint plugin 0.0.9-SNAPSHOT
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;INFO&lt;span style="color:#f92672"&gt;]&lt;/span&gt; ------------------------------------------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;INFO&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;INFO&lt;span style="color:#f92672"&gt;]&lt;/span&gt; --- lint-maven-plugin:0.0.8:check &lt;span style="color:#f92672"&gt;(&lt;/span&gt;default-cli&lt;span style="color:#f92672"&gt;)&lt;/span&gt; @ lint-maven-plugin ---
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;INFO&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Writing summary report
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;INFO&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;LINT&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Completed with &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt; violations
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;INFO&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;LINT&lt;span style="color:#f92672"&gt;]&lt;/span&gt; OSSIssueManagementSectionRule: missing section : 0:0 : /home/lars/development/workspaces/sonar/lint-maven-plugin/pom.xml
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;INFO&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;LINT&lt;span style="color:#f92672"&gt;]&lt;/span&gt; ExecutionId: Executions must specify an id : 346:40 : /home/lars/development/workspaces/sonar/lint-maven-plugin/pom.xml
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;INFO&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;LINT&lt;span style="color:#f92672"&gt;]&lt;/span&gt; OSSContinuousIntegrationManagementSectionRule: missing section : 0:0 : /home/lars/development/workspaces/sonar/lint-maven-plugin/pom.xml
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;INFO&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Writing xml report
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;INFO&lt;span style="color:#f92672"&gt;]&lt;/span&gt; ------------------------------------------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;INFO&lt;span style="color:#f92672"&gt;]&lt;/span&gt; BUILD FAILURE
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;INFO&lt;span style="color:#f92672"&gt;]&lt;/span&gt; ------------------------------------------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;INFO&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Total time: 2.678s
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;INFO&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Finished at: Mon Sep &lt;span style="color:#ae81ff"&gt;09&lt;/span&gt; 02:00:32 CEST &lt;span style="color:#ae81ff"&gt;2013&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;INFO&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Final Memory: 11M/267M
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;INFO&lt;span style="color:#f92672"&gt;]&lt;/span&gt; ------------------------------------------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;ERROR&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Failed to execute goal com.lewisd:lint-maven-plugin:0.0.8:check &lt;span style="color:#f92672"&gt;(&lt;/span&gt;default-cli&lt;span style="color:#f92672"&gt;)&lt;/span&gt; on project lint-maven-plugin: &lt;span style="color:#f92672"&gt;[&lt;/span&gt;LINT&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Violations found. For more details, see error messages above, or results in /home/lars/development/workspaces/sonar/lint-maven-plugin/target/maven-lint-result.xml -&amp;gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;Help 1&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;ERROR&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;ERROR&lt;span style="color:#f92672"&gt;]&lt;/span&gt; To see the full stack trace of the errors, re-run Maven with the -e switch.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;ERROR&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Re-run Maven using the -X switch to enable full debug logging.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;ERROR&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;ERROR&lt;span style="color:#f92672"&gt;]&lt;/span&gt; For more information about the errors and possible solutions, please read the following articles:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;ERROR&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;Help 1&lt;span style="color:#f92672"&gt;]&lt;/span&gt; http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="list-of-rules"&gt;
 List of rules
 &lt;a class="heading-link" href="#list-of-rules"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;You can see the list of supported rules with:&lt;/p&gt;</description></item><item><title>Howto: Duplikate mit rdfind finden und mit einem Hardlink ersetzen</title><link>https://blog.lgohlke.de/posts/2013-08-20-howto-duplikate-mit-rdfind-finden-und-mit-einem-hardlink-ersetzen/</link><pubDate>Tue, 20 Aug 2013 21:10:32 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2013-08-20-howto-duplikate-mit-rdfind-finden-und-mit-einem-hardlink-ersetzen/</guid><description>&lt;p&gt;Am Wochenende habe ich mir wieder mein lokales Backup angeschaut, um es dann wie jeden Monat auf die externe Platte zu spiegeln. Dabei ist aufgefallen, dass &lt;a href="http://backintime.le-web.org/" class="external-link" target="_blank" rel="noopener"&gt;backintime&lt;/a&gt; sehr intelligent nur die geänderten oder neuen Dateien übernimmt. Allerdings sind fallen Umbenennungen bzw. verschobene Dateien jedes Mal mit der vollen Größe ins Gewicht.&lt;/p&gt;
&lt;p&gt;Nun kommt &lt;a href="http://rdfind.pauldreik.se/" class="external-link" target="_blank" rel="noopener"&gt;rdfind&lt;/a&gt; ins Spiel.&lt;/p&gt;
&lt;p&gt;Mit dem Paketmanager installieren:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo apt-get install rdfind
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="step-by-step-demo"&gt;
 Step-by-Step Demo
 &lt;a class="heading-link" href="#step-by-step-demo"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# emuliere eine Backupverzeichnisstruktur in /tmp&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ cd /tmp/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ mkdir backup
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ cd backup/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ mkdir -p 2013/&lt;span style="color:#f92672"&gt;{&lt;/span&gt;01..08&lt;span style="color:#f92672"&gt;}&lt;/span&gt;/home/lars
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# in jedem Verzeichnis &amp;#39;lars&amp;#39; eine 100M Datei erstellen&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ find -type d -name lars -exec dd &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;/dev/zero bs&lt;span style="color:#f92672"&gt;=&lt;/span&gt;1M count&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;100&lt;/span&gt; of&lt;span style="color:#f92672"&gt;={}&lt;/span&gt;/x &lt;span style="color:#ae81ff"&gt;\;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;100+0 Datensätze ein
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;100+0 Datensätze aus
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;104857600&lt;/span&gt; Bytes &lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;105&lt;/span&gt; MB&lt;span style="color:#f92672"&gt;)&lt;/span&gt; kopiert, 0,326316 s, &lt;span style="color:#ae81ff"&gt;321&lt;/span&gt; MB/s
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;100+0 Datensätze ein
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;100+0 Datensätze aus
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;104857600&lt;/span&gt; Bytes &lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;105&lt;/span&gt; MB&lt;span style="color:#f92672"&gt;)&lt;/span&gt; kopiert, 0,274126 s, &lt;span style="color:#ae81ff"&gt;383&lt;/span&gt; MB/s
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;100+0 Datensätze ein
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;100+0 Datensätze aus
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;104857600&lt;/span&gt; Bytes &lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;105&lt;/span&gt; MB&lt;span style="color:#f92672"&gt;)&lt;/span&gt; kopiert, 0,24677 s, &lt;span style="color:#ae81ff"&gt;425&lt;/span&gt; MB/s
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;100+0 Datensätze ein
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;100+0 Datensätze aus
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;104857600&lt;/span&gt; Bytes &lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;105&lt;/span&gt; MB&lt;span style="color:#f92672"&gt;)&lt;/span&gt; kopiert, 0,243897 s, &lt;span style="color:#ae81ff"&gt;430&lt;/span&gt; MB/s
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;100+0 Datensätze ein
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;100+0 Datensätze aus
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;104857600&lt;/span&gt; Bytes &lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;105&lt;/span&gt; MB&lt;span style="color:#f92672"&gt;)&lt;/span&gt; kopiert, 0,301347 s, &lt;span style="color:#ae81ff"&gt;348&lt;/span&gt; MB/s
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;100+0 Datensätze ein
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;100+0 Datensätze aus
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;104857600&lt;/span&gt; Bytes &lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;105&lt;/span&gt; MB&lt;span style="color:#f92672"&gt;)&lt;/span&gt; kopiert, 0,268799 s, &lt;span style="color:#ae81ff"&gt;390&lt;/span&gt; MB/s
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;100+0 Datensätze ein
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;100+0 Datensätze aus
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;104857600&lt;/span&gt; Bytes &lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;105&lt;/span&gt; MB&lt;span style="color:#f92672"&gt;)&lt;/span&gt; kopiert, 0,325733 s, &lt;span style="color:#ae81ff"&gt;322&lt;/span&gt; MB/s
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;100+0 Datensätze ein
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;100+0 Datensätze aus
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;104857600&lt;/span&gt; Bytes &lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;105&lt;/span&gt; MB&lt;span style="color:#f92672"&gt;)&lt;/span&gt; kopiert, 0,248939 s, &lt;span style="color:#ae81ff"&gt;421&lt;/span&gt; MB/s
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# aktuelle Platzverbrauch&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ du -sh
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;801M .
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ rdfind -makehardlinks true *
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Now scanning &lt;span style="color:#e6db74"&gt;&amp;#34;2013&amp;#34;&lt;/span&gt;, found &lt;span style="color:#ae81ff"&gt;8&lt;/span&gt; files.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Now have &lt;span style="color:#ae81ff"&gt;8&lt;/span&gt; files in total.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Removed &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; files due to nonunique device and inode.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Now removing files with zero size from list...removed &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; files
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Total size is &lt;span style="color:#ae81ff"&gt;838860800&lt;/span&gt; bytes or &lt;span style="color:#ae81ff"&gt;800&lt;/span&gt; Mib
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Now sorting on size:removed &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; files due to unique sizes from list.8 files left.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Now eliminating candidates based on first bytes:removed &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; files from list.8 files left.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Now eliminating candidates based on last bytes:removed &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; files from list.8 files left.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Now eliminating candidates based on md5 checksum:removed &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; files from list.8 files left.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;It seems like you have &lt;span style="color:#ae81ff"&gt;8&lt;/span&gt; files that are not unique
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Totally, &lt;span style="color:#ae81ff"&gt;700&lt;/span&gt; Mib can be reduced.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Now making results file results.txt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Now making hard links.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Making &lt;span style="color:#ae81ff"&gt;7&lt;/span&gt; links.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ du -sh
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;101M .
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Das wurde hier an einer Datei demonstriert die in all ihren Kopien identisch ist, weil sie aus &amp;lsquo;0&amp;rsquo; besteht.&lt;/p&gt;</description></item><item><title>Learning from mistakes and talk about</title><link>https://blog.lgohlke.de/posts/2013-06-22-learning-from-mistakes-and-talk-about/</link><pubDate>Sat, 22 Jun 2013 22:25:08 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2013-06-22-learning-from-mistakes-and-talk-about/</guid><description>&lt;p&gt;I just found a video when etsy talks on &lt;a href="http://www.softdevtube.com/" class="external-link" target="_blank" rel="noopener"&gt;softdevtube.com&lt;/a&gt; about &lt;a href="http://www.softdevtube.com/2013/06/18/scaling-etsy-what-went-wrong-what-went-right/" class="external-link" target="_blank" rel="noopener"&gt;What went right, what went wrong&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Alternatively you can watch the slides of that presentation.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://de.slideshare.net/beamrider9/scaling-etsy-what-went-wrong-what-went-right" class="external-link" target="_blank" rel="noopener"&gt;Scaling Etsy: What Went Wrong, What Went Right&lt;/a&gt; from &lt;a href="http://de.slideshare.net/beamrider9" class="external-link" target="_blank" rel="noopener"&gt;Ross Snyder&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;What makes me thinking it is worth mentioning these slides is, that I believe in the same principles (transparency, cross functional teams, talking about mistakes, reevaluate former decisions, &amp;hellip;) written in there.&lt;/p&gt;
&lt;p&gt;Enjoy!&lt;/p&gt;</description></item><item><title>opensource community collaboration at it's best</title><link>https://blog.lgohlke.de/posts/2013-06-10-opensource-community-collaboration-at-its-best/</link><pubDate>Mon, 10 Jun 2013 18:56:00 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2013-06-10-opensource-community-collaboration-at-its-best/</guid><description>&lt;p&gt;Today I had a great experience with contributing to an opensource project &lt;a href="https://github.com/craigwblake/redline" class="external-link" target="_blank" rel="noopener"&gt;redline&lt;/a&gt; (Redline is a pure Java library for manipulating RPM Package Manager packages). Actually it was last week and today I had this pleasure.&lt;/p&gt;
&lt;p&gt;Last week I fixed some lines in code and pulled a &lt;a href="https://github.com/craigwblake/redline/pull/24" class="external-link" target="_blank" rel="noopener"&gt;merge request&lt;/a&gt;. The same day, just 2 hours later, it was merged.&lt;/p&gt;
&lt;p&gt;Today I asked for a release to benefit from these changes without publishing an separate inhouse version. I offered some additional refactorings to justify a release, however &lt;a href="https://github.com/craigwblake" class="external-link" target="_blank" rel="noopener"&gt;Craig W. Blake&lt;/a&gt; did not discussed or requested some more changes. An new &lt;a href="http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22redline%22" class="external-link" target="_blank" rel="noopener"&gt;release&lt;/a&gt; is already online.&lt;/p&gt;</description></item><item><title>The Battle we didn't choose - blog on cancer</title><link>https://blog.lgohlke.de/posts/2013-05-08-the-battle-we-didnt-choose---blog-on-cancer/</link><pubDate>Wed, 08 May 2013 05:00:11 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2013-05-08-the-battle-we-didnt-choose---blog-on-cancer/</guid><description>&lt;p&gt;&lt;em&gt;remarkable photo blog&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;See &lt;a href="http://mywifesfightwithbreastcancer.com/" class="external-link" target="_blank" rel="noopener"&gt;http://mywifesfightwithbreastcancer.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Found on &lt;a href="http://www.zeit.de/2013/19/blog-merendino-krebs-abschied" class="external-link" target="_blank" rel="noopener"&gt;Zeit.de&lt;/a&gt;&lt;/p&gt;</description></item><item><title>easily exploring Java AbstractSyntaxTree</title><link>https://blog.lgohlke.de/posts/2013-05-01-easily-exploring-java-abstractsyntaxtree/</link><pubDate>Wed, 01 May 2013 13:36:53 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2013-05-01-easily-exploring-java-abstractsyntaxtree/</guid><description>&lt;p&gt;If you ever need to deal with the AST in java here I&amp;rsquo;d like to this small tool I&amp;rsquo;ve found some time ago.&lt;/p&gt;
&lt;p&gt;Start it with:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;java -cp checkstyle-5.6-all.jar com.puppycrawl.tools.checkstyle.gui.Main PomSourceImporter.java
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It shows this file [de/lgohlke/sonar/PomSourceImporter]&lt;code&gt;https://github.com/SonarCommunity/sonar-maven-checks/blob/master/src/main/java/de/lgohlke/sonar/PomSourceImporter.java&lt;/code&gt; (💀link)&lt;/p&gt;
&lt;p&gt;A nice feature is typing ENTER on an ast node and the corresponding source code will be highlighted as well.&lt;/p&gt;
&lt;p&gt;You can get it with checkstyle from &lt;a href="http://checkstyle.sourceforge.net" class="external-link" target="_blank" rel="noopener"&gt;checkstyle.sourceforge.net&lt;/a&gt;, it is also described here &lt;a href="http://checkstyle.sourceforge.net/writingchecks.html" class="external-link" target="_blank" rel="noopener"&gt;The Checkstyle SDK Gui&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Erster Follower ;)</title><link>https://blog.lgohlke.de/posts/2013-04-17-erster-follower_/</link><pubDate>Wed, 17 Apr 2013 20:00:00 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2013-04-17-erster-follower_/</guid><description>&lt;p&gt;Juhu, ich habe meinen ersten Follower :)&lt;/p&gt;
&lt;p&gt;Hiermit möchte ich meinen ersten regelmäßigen Leser begrüßen.&lt;/p&gt;
&lt;p&gt;&lt;!-- raw HTML omitted --&gt;Hallo Jonas ;)&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;
&lt;p&gt;Diese Ehre ist nur dem ersten vorbehalten! Aber auch nur, weil er mich darauf hingewiesen hat.^^&lt;/p&gt;</description></item><item><title>Github page</title><link>https://blog.lgohlke.de/posts/2013-04-09-github-page/</link><pubDate>Tue, 09 Apr 2013 20:37:20 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2013-04-09-github-page/</guid><description>&lt;p&gt;Ich muss sagen &lt;a href="https://github.com" class="external-link" target="_blank" rel="noopener"&gt;github.com&lt;/a&gt; ist schon eine tolle Sache.&lt;/p&gt;
&lt;p&gt;Gerade habe ich mir eine Website angelegt (&lt;a href="http://lkwg82.github.io/" class="external-link" target="_blank" rel="noopener"&gt;lkwg82.github.io&lt;/a&gt;) und dort auch meine &lt;a href="https://web.archive.org/web/20161106095703/http://lkwg82.github.io/projects/2013.04.08-is24-sonar-maven-checks/" class="external-link" target="_blank" rel="noopener"&gt;Präsentation&lt;/a&gt; zum Sonar-Plugin [Sonar+Mojo+Bridge] &lt;code&gt;http://docs.codehaus.org/display/SONAR/SonarQube+Mojo+Bridge&lt;/code&gt; (💀link) hinterlegt.&lt;/p&gt;
&lt;p&gt;Alles super einfach, toll!&lt;/p&gt;</description></item><item><title>Sicheres und einfaches Backup mit Encfs in die Cloud</title><link>https://blog.lgohlke.de/posts/2013-04-08-sicheres-und-einfaches-backup-mit-encfs-in-die-cloud/</link><pubDate>Mon, 08 Apr 2013 21:53:04 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2013-04-08-sicheres-und-einfaches-backup-mit-encfs-in-die-cloud/</guid><description>&lt;p&gt;Wie in &lt;a href="https://blog.lgohlke.de/posts/2013-02-17-encfs---reverse/" &gt;encfs &amp;ndash;reverse&lt;/a&gt; schon angekündigt, stellt &lt;a href="https://web.archive.org/web/20130126125752/http://www.arg0.net/encfs" class="external-link" target="_blank" rel="noopener"&gt;encfs&lt;/a&gt; eine einfache praktikable Lösung bereit, Klartext-Verzeichnisse on-the-fly als verschlüsselte Verzeichnisse zu mounten.&lt;/p&gt;
&lt;h2 id="übersicht"&gt;
 Übersicht
 &lt;a class="heading-link" href="#%c3%bcbersicht"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Dazu bedarf es nur weniger Zeilen (1) und der Information zur Verschlüsselung im Klartextverzeichnis (2)&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;encfs --reverse clear-text-directory directory-to-show-as-encrypted
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ ls -al
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;insgesamt &lt;span style="color:#ae81ff"&gt;2768&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;drwxr-xr-x &lt;span style="color:#ae81ff"&gt;10&lt;/span&gt; lars lars &lt;span style="color:#ae81ff"&gt;4096&lt;/span&gt; Mär &lt;span style="color:#ae81ff"&gt;15&lt;/span&gt; 15:18 .
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;drwxr-xr-x &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt; lars lars &lt;span style="color:#ae81ff"&gt;4096&lt;/span&gt; Dez &lt;span style="color:#ae81ff"&gt;17&lt;/span&gt; 23:46 ..
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;-rw-r--r-- &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; lars lars &lt;span style="color:#ae81ff"&gt;1090&lt;/span&gt; Feb &lt;span style="color:#ae81ff"&gt;13&lt;/span&gt; 10:39 .encfs6.xml
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Die Datei aus (2) bekommt man durch den klassischen Weg (Anlegen eines verschlüsselten Verzeichnisses)&lt;/p&gt;</description></item><item><title>Vncserver nur von lokal erreichbar starten</title><link>https://blog.lgohlke.de/posts/2013-04-01-vncserver-nur-von-lokal-erreichbar-starten/</link><pubDate>Mon, 01 Apr 2013 14:54:55 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2013-04-01-vncserver-nur-von-lokal-erreichbar-starten/</guid><description>&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ vncserver :1 -depth &lt;span style="color:#ae81ff"&gt;8&lt;/span&gt; -geometry 1600x900 -localhost -nolisten tcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;prüfen mit&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ netstat -tulpen | grep vnc
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;(&lt;/span&gt;Not all processes could be identified, non-owned process info
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; will not be shown, you would have to be root to see it all.&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tcp &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; 127.0.0.1:5901 0.0.0.0:* LISTEN &lt;span style="color:#ae81ff"&gt;1000&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;19697&lt;/span&gt; 11916/Xtightvnc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>line coverage per test by Jacoco</title><link>https://blog.lgohlke.de/posts/2013-02-28-line-coverage-per-test-by-jacoco/</link><pubDate>Thu, 28 Feb 2013 20:14:25 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2013-02-28-line-coverage-per-test-by-jacoco/</guid><description>&lt;p&gt;Nach einem [Eintrag in der Mailingliste] &lt;code&gt;http://markmail.org/search/?q=list%3Aorg.codehaus.sonar.dev+release+candidate+3.5#query:list%3Aorg.codehaus.sonar.dev%20release%20candidate%203.5+page:1+mid:r6yn2l5jnu6gfdl3+state:results&lt;/code&gt; (💀link) von Sonar wird Jacoco demnächst auch die Coverage von einzelnen Tests unterscheiden können. Siehe auch [Sonar Issue] &lt;code&gt;https://jira.codehaus.org/browse/SONAR-2501&lt;/code&gt; (💀link).&lt;/p&gt;
&lt;p&gt;Damit könnte man dann ähnlich wie hier beim &lt;a href="https://code.google.com/archive/p/metricanalyzer/" class="external-link" target="_blank" rel="noopener"&gt;metricanalyzer&lt;/a&gt; eine qualitative Einschätzung der Tests vornehmen. Wird noch richtig interessant!&lt;/p&gt;
&lt;p&gt;Nun stellen sich mir nur noch die Fragen, ob &amp;hellip;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;hellip;auch Branch-Coverage möglich wird?&lt;/li&gt;
&lt;li&gt;&amp;hellip; das auch bei parallelen Tests geht?&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>EncFS --reverse</title><link>https://blog.lgohlke.de/posts/2013-02-17-encfs---reverse/</link><pubDate>Sun, 17 Feb 2013 22:42:00 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2013-02-17-encfs---reverse/</guid><description>&lt;p&gt;Gerade habe ich in der Manpage von EncFS eine sehr schöne Lösung für ein sicheres Backup in der Cloud gefunden.&lt;/p&gt;
&lt;p&gt;Encfs ist ein Dateisystem im Userspace und bietet eine Sicht auf Verzeichnisse an. Ursprünglich ging es darum verschlüsselte Verzeichnisse entschlüsselt anzuzeigen. Der &lt;em&gt;Reverse&lt;/em&gt; Modus bietet genau den umgekehrten Weg an. Somit können beliebige (unverschlüsselte) Verzeichnisse mittels &lt;code&gt;EncFs&lt;/code&gt; als verschlüsselte Verzeichnisse angezeigt werden.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Wow. Wtf?&amp;rdquo; Werden sich gerade einige fragen. Aber mit dieser umgekehrten Sicht, kann man einfach mit einem Synchronisationswerkzeug das Ganze an syncronisieren. &amp;ldquo;Wow!&amp;rdquo;&lt;/p&gt;</description></item><item><title>Clean Code Regel für Sonar</title><link>https://blog.lgohlke.de/posts/2013-02-16-clean-code-regel-fuer-sonar/</link><pubDate>Sat, 16 Feb 2013 20:32:51 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2013-02-16-clean-code-regel-fuer-sonar/</guid><description>&lt;p&gt;Diese Woche habe ich das &lt;strong&gt;&amp;lsquo;Clean Code: A Handbook of Agile Software Craftsmanship&amp;rsquo;&lt;/strong&gt; noch einmal gelesen. Nach einem weiteren Jahr Praxis, sieht man viele Sachen schon wieder erstaunlich anders.&lt;/p&gt;
&lt;p&gt;Ich mußte dann doch gleich auf der Sonar-Mailingliste nachfragen, ob es schon eine Regel für &amp;lsquo;G15 Selector Arguments&amp;rsquo; gibt. Gibt es wohl nicht.&lt;/p&gt;
&lt;p&gt;Hier nun mein Beitrag dazu: &lt;code&gt;https://github.com/lkwg82/sonar-java/commit/9dcb5e1864d9deb6ce77c4f5e9c32e856b5a5505&lt;/code&gt; (💀link). Bin mal gespannt, ob und wenn in welcher Form die Regel aufgenommen wird.&lt;/p&gt;</description></item><item><title>Datenschutz auf dem Blocklevel bei Rootservern</title><link>https://blog.lgohlke.de/posts/2013-02-11-datenschutz-auf-dem-blocklevel-bei-rootservern/</link><pubDate>Mon, 11 Feb 2013 15:38:00 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2013-02-11-datenschutz-auf-dem-blocklevel-bei-rootservern/</guid><description>&lt;p&gt;Ich habe vor kurzem meinen Server umgezogen. Dabei ging es mir vorallem um mehr Speicherplatz. Die Kapazität ohne monatliche Mehrkosten konnte ich von 750GB auf 3TB erhöhen.&lt;/p&gt;
&lt;p&gt;So ein Umzug ist auch immer ein Neuanfang. Ja, so pathetisch wie es klingt, so denkt man auch &amp;hellip; ganz kurz. Ich habe mir vorgenommen einige Sachen besser zu machen.&lt;/p&gt;
&lt;p&gt;Bei meinem letzten Umzug waren die großen Veränderungen, dass ich die einzelnen Dienste in autonome virtuelle Maschine portiert. Diese VMs laufen nun in einem virtuellen Netz auf dem Server, mittels Virtualbox. Läuft alles wunderbar und man kann schnell mal experimentieren und neue VMs dazupacken.&lt;/p&gt;</description></item><item><title>Buch: Schöner wird es nicht</title><link>https://blog.lgohlke.de/posts/2013-02-10-buch-schoener-wird-es-nicht/</link><pubDate>Sun, 10 Feb 2013 23:05:00 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2013-02-10-buch-schoener-wird-es-nicht/</guid><description>&lt;p&gt;Ich möchte hier einfach mal anfangen zu erwähnen, welche Bücher mich einfach nur geschlaucht haben, mir Spaß gemacht haben und ich weiterempfehlen kann, oder auch nicht.&lt;/p&gt;
&lt;h2 id="schöner-wirds-nicht"&gt;
 &amp;ldquo;Schöner wird&amp;rsquo;s nicht&amp;rdquo;
 &lt;a class="heading-link" href="#sch%c3%b6ner-wirds-nicht"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;von David Sedaris&lt;/p&gt;
&lt;p&gt;Punkte: 3 von 5&lt;/p&gt;
&lt;p&gt;Ich fand schlecht rein und mußte mich erst an die Banalität gewöhnen. Nachher hat mich das Buch dann aber auch nicht mehr losgelassen. Ich würde es am ehesten mit einer Seifenoper vergleichen &amp;hellip; eigentlich nichts was einen interessiert aber nach 15 Minuten Langeweile, wird es doch auf ganz magische Weise interessant und man ist abhängig ;).&lt;/p&gt;</description></item><item><title>Undeleting opened files on ext4</title><link>https://blog.lgohlke.de/posts/2013-02-09-undeleting-opened-files-on-ext4/</link><pubDate>Sat, 09 Feb 2013 21:23:07 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2013-02-09-undeleting-opened-files-on-ext4/</guid><description>&lt;p&gt;Mich lässt das Thema nicht los: Hier nun die kurze Anleitung, wie man gelöschte Dateien wiederherstellt, wenn sie noch von Prozessen geöffnet sind:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;pid finden&lt;/li&gt;
&lt;li&gt;filehandle finden: &lt;code&gt;/proc/&amp;lt;pid&amp;gt;/fd&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;mit cp dieses filehandle kopieren&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ausführliche Anleitung hier: &lt;a href="http://glandium.org/blog/?p=87" class="external-link" target="_blank" rel="noopener"&gt;http://glandium.org/blog/?p=87&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Organspende</title><link>https://blog.lgohlke.de/posts/2013-02-06-organspende/</link><pubDate>Wed, 06 Feb 2013 22:45:27 +0100</pubDate><guid>https://blog.lgohlke.de/posts/2013-02-06-organspende/</guid><description>&lt;p&gt;Ich fand den Comic von Xkcd ziemlich interessant, meiner Meinung steckt da ziemlich viel drin, wenn man länger darüber nachdenkt.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://imgs.xkcd.com/comics/lego.png" alt="xkcd: LEGO"&gt;&lt;/p&gt;
&lt;p&gt;Gefunden bei Telepolis: &lt;a href="https://web.archive.org/web/20130214004322/http://www.heise.de:80/tp/artikel/38/38321/1.html" class="external-link" target="_blank" rel="noopener"&gt;Organspende: Für und Wider&lt;/a&gt;&lt;/p&gt;</description></item></channel></rss>