<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Software on livingIT</title>
		<link>https://livingit.de/software/</link>
		<description>Recent content in Software on livingIT</description>
		<generator>Hugo</generator>
		<language>en</language>
		
		
		
		
			<lastBuildDate>Tue, 01 Sep 2026 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://livingit.de/software/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>cargo: command not found, even though rustup is installed</title>
				<link>https://livingit.de/software/rustup-keg-only-path-fix/</link>
				<pubDate>Tue, 01 Sep 2026 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/rustup-keg-only-path-fix/</guid>
				<description>&lt;h1 id=&#34;cargo-command-not-found-even-though-rustup-is-installed&#34;&gt;cargo: command not found, even though rustup is installed&lt;/h1&gt;&#xA;&lt;p&gt;Symptom: &lt;code&gt;rustup&lt;/code&gt; works, &lt;code&gt;rustup show&lt;/code&gt; lists an installed and active toolchain, but &lt;code&gt;cargo&lt;/code&gt;, &lt;code&gt;rustc&lt;/code&gt;, &lt;code&gt;rustfmt&lt;/code&gt; all fail with &amp;ldquo;command not found&amp;rdquo;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;cause&#34;&gt;Cause&lt;/h2&gt;&#xA;&lt;p&gt;On macOS with Homebrew, &lt;code&gt;rustup&lt;/code&gt; is a &lt;strong&gt;keg-only&lt;/strong&gt; formula. Homebrew only symlinks the &lt;code&gt;rustup&lt;/code&gt; binary itself into &lt;code&gt;/opt/homebrew/bin&lt;/code&gt;. It does not symlink the proxy shims that rustup normally ships alongside it, &lt;code&gt;cargo&lt;/code&gt;, &lt;code&gt;rustc&lt;/code&gt;, &lt;code&gt;rustfmt&lt;/code&gt;, &lt;code&gt;cargo-clippy&lt;/code&gt;, and so on. Those live in the keg:&lt;/p&gt;</description>
			</item>
			<item>
				<title>A silent checksum that broke every S3-compatible upload</title>
				<link>https://livingit.de/software/a-silent-checksum/</link>
				<pubDate>Mon, 31 Aug 2026 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/a-silent-checksum/</guid>
				<description>&lt;h1 id=&#34;a-silent-checksum-that-broke-every-s3-compatible-upload&#34;&gt;A silent checksum that broke every S3-compatible upload&lt;/h1&gt;&#xA;&lt;h2 id=&#34;problem&#34;&gt;Problem&lt;/h2&gt;&#xA;&lt;p&gt;We had a small Go service writing generated files to an S3-compatible object store backed by a self-hosted, Ceph-based gateway. It used a popular cloud-portable blob storage abstraction library - the kind that lets you swap &lt;code&gt;s3://&lt;/code&gt;, &lt;code&gt;gs://&lt;/code&gt;, or &lt;code&gt;file://&lt;/code&gt; behind one interface, so application code never has to know which backend it&amp;rsquo;s talking to.&lt;/p&gt;&#xA;&lt;p&gt;Every write failed. Not intermittently — every single &lt;code&gt;PutObject&lt;/code&gt; call came back with a 400 and an error along the lines of:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Replace content in files with ripgrep</title>
				<link>https://livingit.de/software/replace-content/</link>
				<pubDate>Wed, 10 Jan 2024 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/replace-content/</guid>
				<description>&lt;p&gt;Spoiler: &lt;a href=&#34;https://github.com/BurntSushi/ripgrep&#34;&gt;ripgrep&lt;/a&gt; cannot do this standalone. But you can combine it with other tools to achieve this.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-problem&#34;&gt;The problem&lt;/h2&gt;&#xA;&lt;p&gt;I use &lt;a href=&#34;https://obsidian.md/&#34;&gt;Obsidian&lt;/a&gt; with frontmatter (YAML) to track my journal along with some statistics. Sometimes I miss adding all data and want to fill the gaps with the last measurement. Bear with me: I know not correct in a mathematical sense but it is good enough for me. When my note is automatically generated a default value is used.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Connecting via RDP from Linux to Windows</title>
				<link>https://livingit.de/software/rdp-linux-windows/</link>
				<pubDate>Thu, 07 Dec 2023 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/rdp-linux-windows/</guid>
				<description>&lt;h1 id=&#34;the-problem&#34;&gt;The problem&lt;/h1&gt;&#xA;&lt;p&gt;I have a Windows machine in my local network and I want to connect to it via RDP from my Linux machine. For this I use &lt;code&gt;remmina&lt;/code&gt; which is a nice RDP client. When not using a VPN, I can connect to the Windows machine without any problems. But when I use a VPN, I cannot connect to the Windows machine anymore.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-solution&#34;&gt;The solution&lt;/h2&gt;&#xA;&lt;p&gt;The solution was to allow RDO WS and WSS in the Windows firewall. Those rules are usually disabled by default. After enabling them, I can connect to the Windows machine via RDP even when using a VPN.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Running tclip on a Zimaboard</title>
				<link>https://livingit.de/software/tclip-on-zimaboard/</link>
				<pubDate>Thu, 24 Aug 2023 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/tclip-on-zimaboard/</guid>
				<description>&lt;h2 id=&#34;why&#34;&gt;Why?&lt;/h2&gt;&#xA;&lt;p&gt;Because private gists are fantastic and along with tailscale and Zimaboard it is easy to host.&lt;/p&gt;&#xA;&lt;h2 id=&#34;how&#34;&gt;How?&lt;/h2&gt;&#xA;&lt;p&gt;I recently got my hands on a &lt;a href=&#34;https://www.zimaboard.com/&#34;&gt;Zimaboard&lt;/a&gt;. It is powerful and comes with &lt;a href=&#34;https://www.casaos.io/&#34;&gt;CasaOS&lt;/a&gt; preinstalled. I am also a fan of &lt;a href=&#34;https://tailscale.com&#34;&gt;Tailscale&lt;/a&gt; which is probably one of the easiest while still ultra secure VPN solutions out there. Best: they have a very generous free tier.&lt;/p&gt;&#xA;&lt;p&gt;They recently published a blog post about &lt;a href=&#34;https://tailscale.dev/blog/tclip&#34;&gt;tclip&lt;/a&gt;, a simple, not sophisticated way to host your gists privately.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Change your keyboard switches</title>
				<link>https://livingit.de/software/change-keyboard-switches/</link>
				<pubDate>Wed, 26 Jul 2023 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/change-keyboard-switches/</guid>
				<description>&lt;h2 id=&#34;why&#34;&gt;Why?&lt;/h2&gt;&#xA;&lt;p&gt;Just because you can. And because it is fun. And because you can learn something new. And because you can. Or you just bought another expensive board and the experiment with linear switches failed. And switching the switches is cheaper than buying a new board.&lt;/p&gt;&#xA;&lt;p&gt;It is not like a 5 minute job. It takes some time and you need to be careful. But it is doable.&lt;/p&gt;&#xA;&lt;h2 id=&#34;tips&#34;&gt;Tips&lt;/h2&gt;&#xA;&lt;p&gt;Take your time. Carefully remove all key caps. Might help to put them somewhere in order. Remove all old switches. Read explanations from the board makers before. But basically ensure pulling straight upward. Then put in the new switches. Before pushing a switch, ensure pins are correct. Even when new, transport may have one or another been bent. After pushing a switch into place: test. Put back all key caps. By the way: this would have been the perfect time to apply your favorite key caps you always wanted to use.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Welcome RedHat to the game of ... well, business going crazy</title>
				<link>https://livingit.de/software/redhat-closing/</link>
				<pubDate>Fri, 23 Jun 2023 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/redhat-closing/</guid>
				<description>&lt;p&gt;RedHat is forcing clones to rework their operational model (and maybe breaking their promise) .&lt;/p&gt;&#xA;&lt;p&gt;The community is not liking the decision. Take this for example: &lt;a href=&#34;https://www.jeffgeerling.com/blog/2023/dear-red-hat-are-you-dumb&#34;&gt;Dear Red Hat: Are you dumb?&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This actively questions &lt;em&gt;any&lt;/em&gt; use of open source where RedHat is involved. Ultimately, they are a business and as such have to follow some rules. Accepted. Putting other businesses (who &lt;em&gt;could&lt;/em&gt; have been customers for RHEL sometime in the future) on pressure is &amp;hellip;&lt;/p&gt;</description>
			</item>
			<item>
				<title>About fonts</title>
				<link>https://livingit.de/software/about-fonts/</link>
				<pubDate>Tue, 30 May 2023 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/about-fonts/</guid>
				<description>&lt;h2 id=&#34;about-fonts&#34;&gt;About fonts&lt;/h2&gt;&#xA;&lt;p&gt;I like having a good visuals on my screen. I like enough information (some would say &lt;em&gt;too&lt;/em&gt; much) displayed at once. That means I like not too big of a font size. Unfortunately I have to wear some stronger glasses. That means I&amp;rsquo;d go for clear cut fonts without too much serifs, etc.&lt;/p&gt;&#xA;&lt;p&gt;Right now these fonts are my favorites:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://berkeleygraphics.com/typefaces/berkeley-mono/&#34;&gt;Berkeley Mono&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://indestructibletype.com/Drafting/&#34;&gt;Drafting Mono&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://fonts.google.com/specimen/Comfortaa&#34;&gt;Comfortaa&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Comfortaa is used here on the web site, but I might exchange that one for &lt;a href=&#34;https://indestructibletype.com/Jost.html&#34;&gt;Jost*&lt;/a&gt;. Jost* seems to be nice when you want to do some writing, too.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Software Engineering vs Software Development</title>
				<link>https://livingit.de/software/engineering-vs-development/</link>
				<pubDate>Mon, 13 Feb 2023 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/engineering-vs-development/</guid>
				<description>&lt;p&gt;Software development and software engineering are two related yet distinct fields within the realm of computer science. Software development refers to the process of designing, coding, testing, and maintaining software applications, while software engineering is a more structured and systematic approach to software development that emphasizes the design and development of high-quality, reliable, and maintainable software systems.&lt;/p&gt;&#xA;&lt;p&gt;Data plays a crucial role in software engineering and is often used throughout the software development process. In the requirements gathering phase, data is used to understand the needs of users and stakeholders and to identify requirements for software systems. In the design and architecture phase, data is used to inform the design of software systems and to analyze the performance and scalability of systems. In the testing and validation phase, data is used to validate software systems and ensure they meet the needs of users and stakeholders. In the operations and maintenance phase, data is used to monitor and manage the performance and availability of software systems.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Getting the titan security key USB C to work on a Linux system</title>
				<link>https://livingit.de/software/titan/</link>
				<pubDate>Wed, 26 Feb 2020 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/titan/</guid>
				<description>&lt;p&gt;I got myself a titan security key from Google as a second key in case my main one gets broken. I do use Linux and Yubico&amp;rsquo;s 5 NFC series worked fine out of the box.&lt;/p&gt;&#xA;&lt;p&gt;Not so with Google&amp;rsquo;s titan key. Nevertheless, Google&amp;rsquo;s documentation on this matter offered a solution:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://support.google.com/titansecuritykey/answer/9148044?hl=en&amp;amp;ref_topic=9115742&#34;&gt;Add a Titan Security Key on a Linux system&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately, the solution did not work out of the box. By reading the output of dmesg (you have to run sudo dmesg) I realized, that idVendor and idProduct differed from the values in the sample.&lt;/p&gt;</description>
			</item>
			<item>
				<title>A not so obvious reason for an auth error with SSH</title>
				<link>https://livingit.de/software/ssh-auth-error/</link>
				<pubDate>Tue, 19 Nov 2019 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/ssh-auth-error/</guid>
				<description>&lt;h2 id=&#34;problem&#34;&gt;Problem&lt;/h2&gt;&#xA;&lt;p&gt;You try to stay to secure. Say what? Yes, too secure. If you work for different customers and you are like me you might not want to use the same key for every customer. Now, for convenience, you add all your keys to your local agent:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ssh-add key1&#xA;    ...&#xA;ssh-add keyN&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Yikes. Secure and still convenient. Unless you get an auth error:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Received disconnect from a.b.c.d port 22:2: Too many authentication failures&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;You double check the username. You double check your key is loaded to the agent. You start to doubt yourself. Yet nothing seems to be an explanation.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Contributing to Mattermost</title>
				<link>https://livingit.de/software/contribute-to-mattermost/</link>
				<pubDate>Sun, 06 Oct 2019 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/contribute-to-mattermost/</guid>
				<description>&lt;h2 id=&#34;what-is-mattermost&#34;&gt;What is Mattermost?&lt;/h2&gt;&#xA;&lt;p&gt;From their site:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Mattermost is a flexible, open source messaging platform&#xA;that enables secure team collaboration&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So think of Mattermost as an open source Slack alternative. It is also bundled with GitLab on premise Omnibus installations.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-do-i-want-to-achieve&#34;&gt;What do I want to achieve?&lt;/h2&gt;&#xA;&lt;p&gt;While trying to participate in Hacktoberfest 2019 I chose a migration issue for Mattermost as my first target for a PR:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/mattermost/mattermost-server/issues/12550&#34;&gt;Migrate tests from &amp;ldquo;model/system_test.go&amp;rdquo; to use testify&lt;/a&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Running brave on Linux</title>
				<link>https://livingit.de/software/brave-linux-sandbox/</link>
				<pubDate>Mon, 22 Jul 2019 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/brave-linux-sandbox/</guid>
				<description>&lt;h2 id=&#34;running-the-brave-browser-on-linux&#34;&gt;Running the brave browser on Linux&lt;/h2&gt;&#xA;&lt;p&gt;On some Linux systems the brave browser starts with an error stating &lt;code&gt;Unsupported command-line flag: –no-sandbox&lt;/code&gt;. The browser works but this behavior is at least &amp;hellip; annoying.&lt;/p&gt;&#xA;&lt;p&gt;The reason behind this, that for security reasons the brave browser wants to run a session in a user namespace.&lt;/p&gt;&#xA;&lt;p&gt;When you - like me - start brave with just a call to brave it detects if the system supports it, and if not calls the sub process with the -no-sandbox parameter resulting in the error stated above. Though one can argue that a better design of presenting that error (or warning) this is just to tell you you should reconfigure your running kernel.&lt;/p&gt;</description>
			</item>
			<item>
				<title>PyCharm an i3</title>
				<link>https://livingit.de/software/i3-pycharm/</link>
				<pubDate>Tue, 18 Jun 2019 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/i3-pycharm/</guid>
				<description>&lt;h2 id=&#34;i3-and-pycharm-the-uglyness-that-is-the-splash-screen&#34;&gt;i3 and PyCharm: the uglyness that is the splash screen&lt;/h2&gt;&#xA;&lt;p&gt;I am running i3 on my machine. It makes me (maybe subjectively) more productive than something like KDE Plasma and suits my development workflow well. Recently I started working more with Python and started using PyCharm.&lt;/p&gt;&#xA;&lt;p&gt;Though I am not focussed on having a perfect visual appearance rather than the workflow having the splash window forced into a tile made it look that ugly that I decided to find a solution.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Using dash as /usr/bin/sh? - think twice</title>
				<link>https://livingit.de/software/dash-bash/</link>
				<pubDate>Tue, 04 Jun 2019 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/dash-bash/</guid>
				<description>&lt;p&gt;You will find some advices to use another shell than bash as /usr/bin/sh (or /bin/sh). One of the major reasons why this is proposes is speed. While bash is a comfortable shell it is rather big. So when using a smaller alternative to bash as sh scripts might be faster.&lt;/p&gt;&#xA;&lt;p&gt;Arguably this makes sense if you script a lot. If not that argument is pretty useless. So unless you do shell scripts I would argue not to change the system default. And even if you do, you should think twice.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Go modules - an introduction</title>
				<link>https://livingit.de/software/go-modules/</link>
				<pubDate>Mon, 27 May 2019 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/go-modules/</guid>
				<description>&lt;h2 id=&#34;origin&#34;&gt;Origin&lt;/h2&gt;&#xA;&lt;p&gt;This was initially planned as content for a talk on the local Gophers meetup in Frankfurt.&#xA;Unfortunately I had to cancel my attendance and Arne (another organizer) stepped in as&#xA;the presenter.&lt;/p&gt;&#xA;&lt;p&gt;The content of the slides are provided here&lt;/p&gt;&#xA;&lt;h2 id=&#34;go-modules---an-introduction&#34;&gt;Go modules - an introduction&lt;/h2&gt;&#xA;&lt;h3 id=&#34;before-go-modules&#34;&gt;Before go modules&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://livingit.de/go-modules/before-go-modules.png&#34; alt=&#34;Before Go Modules&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;what-is-a-module&#34;&gt;What is a module&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Code organization&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;A module is defined with the package name in the module definition.&lt;/p&gt;</description>
			</item>
			<item>
				<title>User Stories</title>
				<link>https://livingit.de/software/user-stories/</link>
				<pubDate>Fri, 22 Feb 2019 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/user-stories/</guid>
				<description>&lt;h1 id=&#34;my-take-on-explaining-user-stories-&#34;&gt;My take on explaining user stories &amp;hellip;&lt;/h1&gt;&#xA;&lt;p&gt;&amp;hellip; shortly&lt;/p&gt;&#xA;&lt;p&gt;A user story has the following structure:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;As &amp;lt;role&amp;gt; I want to &amp;lt;do&amp;gt; because the benefit is &amp;lt;description&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;A sample:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;As a car driver I want to apply for a licence plate online because it saves me a lot of time.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This communicates clearly the intent and the value of a requirement from the issuers point of view.&lt;/p&gt;&#xA;&lt;p&gt;In general this helps the team to find a common language which should lead to fewer misunderstandings.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Locking and unlocking your desktop with an USB device</title>
				<link>https://livingit.de/software/lock-unlock-yubikey/</link>
				<pubDate>Mon, 07 Jan 2019 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/lock-unlock-yubikey/</guid>
				<description>&lt;h2 id=&#34;goal&#34;&gt;Goal&lt;/h2&gt;&#xA;&lt;p&gt;I recently ordered a Yubikey to secure some of my accounts. When it arrived and the key was linked to the desired accounts I started to look into using the key to sign myself in to Linux.&lt;/p&gt;&#xA;&lt;p&gt;There is a great documentation by yubico how to &lt;a href=&#34;https://support.yubico.com/support/solutions/articles/15000011356-ubuntu-linux-login-guide-u2f&#34;&gt;use PAM&lt;/a&gt; to achieve this. I did not followed this guide because of that reasons:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;the key should be optional, not mandatory&lt;/li&gt;&#xA;&lt;li&gt;it should be revertible without an additional key for recovery purposes&lt;/li&gt;&#xA;&lt;li&gt;The password for the user should be typed at least once a day&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;explanation-of-goals&#34;&gt;Explanation of goals&lt;/h2&gt;&#xA;&lt;h3 id=&#34;key-should-be-optional&#34;&gt;key should be optional&lt;/h3&gt;&#xA;&lt;p&gt;I believe this is possible with PAM but may prove to be a bit tricky with (3)&lt;/p&gt;</description>
			</item>
			<item>
				<title>A docker firewalld with CoreDNS story</title>
				<link>https://livingit.de/software/firewalld-docker/</link>
				<pubDate>Fri, 22 Jun 2018 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/firewalld-docker/</guid>
				<description>&lt;p&gt;I started to use firewalld to secure my system. When I fired up a container and wanted to access the internet I got name resolution errors. You could go for docker&amp;rsquo;s dns options but when you travel to different networks, some of them disallowing access to public DNS servers, you have to have a list of DNS servers. Which may or may not slow down things a bit. So I was looking for a better solution.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Install Go Versioned</title>
				<link>https://livingit.de/software/install-go-versioned/</link>
				<pubDate>Fri, 08 Jun 2018 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/install-go-versioned/</guid>
				<description>&lt;p&gt;This script extends the previous one by installing GO into a version directory and having the environment variables point to a current link&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#! /usr/bin/env bash&#xA;&#xA;VERSION=${VERSION:-1.10.2}&#xA;&#xA;golangurl=https://dl.google.com/go/go${VERSION}.linux-amd64.tar.gz&#xA;downloaddir=&amp;quot;${HOME}/tmp/go-download&amp;quot;&#xA;basedir=&amp;quot;${HOME}/.local/go&amp;quot;&#xA;installdir=&amp;quot;${HOME}/.local/go/_${VERSION}&amp;quot;&#xA;workspacedir=&amp;quot;${HOME}/go&amp;quot;&#xA;&#xA;echo &amp;quot;This script installs Golang into your home folder&amp;quot;&#xA;read -p &amp;quot;Press enter to continue&amp;quot;&#xA;&#xA;if [ -d &amp;quot;${basedir}/${VERSION}&amp;quot; ]; then&#xA;  echo &amp;quot;seems to be installed&amp;quot;&#xA;  exit 1&#xA;fi&#xA;&#xA;echo &amp;quot;Creating download directory ${downloaddir}&amp;quot;&#xA;mkdir -p ${downloaddir}&#xA;&#xA;echo &amp;quot;Downloading Golang&amp;quot;&#xA;wget &amp;quot;${golangurl}&amp;quot; -O &amp;quot;${downloaddir}/go1.10.linux-amd64.tar.gz&amp;quot;&#xA;&#xA;echo &amp;quot;Extracting Golang distribution&amp;quot;&#xA;mkdir -p &amp;quot;${installdir}&amp;quot;&#xA;tar -C &amp;quot;${installdir}&amp;quot; -xzf &amp;quot;${downloaddir}/go1.10.linux-amd64.tar.gz&amp;quot;&#xA;rm &amp;quot;${downloaddir}/go1.10.linux-amd64.tar.gz&amp;quot;&#xA;mv &amp;quot;${installdir}/go&amp;quot; &amp;quot;${basedir}/${VERSION}&amp;quot;&#xA;rm &amp;quot;${basedir}/current&amp;quot;&#xA;ln -s &amp;quot;${basedir}/${VERSION}&amp;quot; &amp;quot;${basedir}/current&amp;quot;&#xA;rm -rf &amp;quot;${installdir}&amp;quot;&#xA;&#xA;echo &amp;quot;Creating go workspace&amp;quot;&#xA;mkdir -p &amp;quot;${workspacedir}/bin&amp;quot;&#xA;mkdir -p &amp;quot;${workspacedir}/src&amp;quot;&#xA;mkdir -p &amp;quot;${workspacedir}/pkg&amp;quot;&#xA;&#xA;echo &amp;quot;export GOROOT=${basedir}/current&amp;quot; &amp;gt; &amp;quot;${HOME}/.go-profile&amp;quot;&#xA;echo &amp;quot;export GOPATH=${HOME}/go&amp;quot; &amp;gt;&amp;gt; &amp;quot;${HOME}/.go-profile&amp;quot;&#xA;echo &amp;quot;export PATH=${basedir}/${current}/go/bin:${GOROOT}/bin:${PATH}&amp;quot; &amp;gt;&amp;gt; &amp;quot;${HOME}/.go-profile&amp;quot;&#xA;&#xA;echo &amp;quot;sourcing ~/.go-profile&amp;quot;&#xA;source &amp;quot;${HOME}/.go-profile&amp;quot;&#xA;&#xA;echo &amp;quot;Testing&amp;quot;&#xA;go version&#xA;&#xA;read -p &amp;quot;Going to add source to ${HOME}/.profile, if unwanted press Ctrl-C now&amp;quot;&#xA;&#xA;echo &amp;gt;&amp;gt; &amp;quot;${HOME}/.profile&amp;quot;&#xA;echo &amp;gt;&amp;gt; &amp;quot;${HOME}/.profile&amp;quot;&#xA;echo &amp;quot;# Set go specific environment&amp;quot; &amp;gt;&amp;gt; &amp;quot;${HOME}/.profile&amp;quot;&#xA;echo &amp;quot;. ~/.go-profile&amp;quot; &amp;gt;&amp;gt; &amp;quot;${HOME}/.profile&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Update: Fixing path&#xA;Update 2: removing installdir&lt;/p&gt;</description>
			</item>
			<item>
				<title>Open a port for an IP range</title>
				<link>https://livingit.de/software/firewalld-open-for-net/</link>
				<pubDate>Fri, 08 Jun 2018 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/firewalld-open-for-net/</guid>
				<description>&lt;p&gt;Using firewalld this is a so called rich rule. To open the ssh port for 192.168.1.0/24 you have to do like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;firewall-cmd --permanent --zone=home --add-rich-rule=&#39;&#xA;  rule family=&amp;quot;ipv4&amp;quot;&#xA;  source address=&amp;quot;192.168.1.0/24&amp;quot;&#xA;  port protocol=&amp;quot;tcp&amp;quot;&#xA;  port=&amp;quot;22&amp;quot;&#xA;  accept&#39;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;assuming you have just enabled &lt;code&gt;dhcpv6-client&lt;/code&gt; as a service our XML looks like something like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&#xA;&amp;lt;zone&amp;gt;&#xA;  &amp;lt;short&amp;gt;Work&amp;lt;/short&amp;gt;&#xA;  &amp;lt;description&amp;gt;For use in work areas. You mostly trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.&amp;lt;/description&amp;gt;&#xA;  &amp;lt;service name=&amp;quot;dhcpv6-client&amp;quot;/&amp;gt;&#xA;  &amp;lt;rule family=&amp;quot;ipv4&amp;quot;&amp;gt;&#xA;    &amp;lt;source address=&amp;quot;10.200.13.0/24&amp;quot;/&amp;gt;&#xA;    &amp;lt;port protocol=&amp;quot;tcp&amp;quot; port=&amp;quot;22&amp;quot;/&amp;gt;&#xA;    &amp;lt;accept/&amp;gt;&#xA;  &amp;lt;/rule&amp;gt;&#xA;&amp;lt;/zone&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Do not forget to reload you firewall configuration using &lt;code&gt;firewall-cmd --reload&lt;/code&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Build Git Overhaul</title>
				<link>https://livingit.de/software/build-git-overhaul/</link>
				<pubDate>Wed, 30 May 2018 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/build-git-overhaul/</guid>
				<description>&lt;p&gt;I wrote a post about [building git]({{ ref &amp;ldquo;build-git.md&amp;rdquo; }}) a while back. Since then I have&#xA;added some additional features such as installing &lt;a href=&#34;https://github.com/tj/git-extras&#34;&gt;git-extras&lt;/a&gt; and &lt;a href=&#34;https://github.com/petervanderdoes/gitflow-avh&#34;&gt;git-flow&lt;/a&gt; from AVH edition.&lt;/p&gt;&#xA;&lt;p&gt;Also, I install it to my home directory, so I do not have to pollute the system directories with a compiled version of my own. Older versions are preserved until I delete them and the used version is linked to be current.&lt;/p&gt;</description>
			</item>
			<item>
				<title>tmpfiles.d - or why are my temp files in /tmp gone?</title>
				<link>https://livingit.de/software/tmpfiles-d/</link>
				<pubDate>Tue, 29 May 2018 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/tmpfiles-d/</guid>
				<description>&lt;p&gt;In later Ubuntu versions tmpfile.d is used to keep /tmp clean. That is, after a reboot, your files you placed in there are vanished. Kind of a bummer when you do not know.&lt;/p&gt;&#xA;&lt;p&gt;You can change that behavior by placing a file into &lt;code&gt;/etc/tmpfile.d/&lt;/code&gt;. If you want to keep your files two days around create a file (let&amp;rsquo;s say named tmp.conf) with the following content:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#/etc/tmpfiles.d/tmp.conf&#xA;d /tmp 1777 root root 2d&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;You probably should not do it unless you run this on all your machines. For me it is simply too easy to assume it works everywhere the same as on my machine. Which might lead you to loose some amount of work/time.&lt;/p&gt;</description>
			</item>
			<item>
				<title>How to change your SSH key password</title>
				<link>https://livingit.de/software/ssh-key-password-change/</link>
				<pubDate>Tue, 08 May 2018 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/ssh-key-password-change/</guid>
				<description>&lt;p&gt;From time to time you should change your password. Everyone knows. For your SSH key this is as simple as changing your Linux login password:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ssh-keygen -p -f ~/.ssh/id_rsa&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Maybe you have to change the path/name depending on your setup.&lt;/p&gt;</description>
			</item>
			<item>
				<title>How to repair your multi file VMWare disk</title>
				<link>https://livingit.de/software/vmware-disk-repair/</link>
				<pubDate>Tue, 08 May 2018 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/vmware-disk-repair/</guid>
				<description>&lt;p&gt;Recently I deleted a snapshort from my virtual machine and I got a message that the virtual disk needs repair.&#xA;The site &lt;a href=&#34;https://kb.vmware.com/s/article/2019259&#34;&gt;Repairing a virtual disk in Workstation&lt;/a&gt; explains how to do this. in detail.&lt;/p&gt;&#xA;&lt;p&gt;Due to the reason I selected to split the disk into multiple files, there were many files that could be the reason for the message.&#xA;So I helped myself with a short find command.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;find -type f -name &amp;quot;*vmdk&amp;quot; -exec vmware-vdiskmanager -R {} \;&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
			</item>
			<item>
				<title>Arch Keyring</title>
				<link>https://livingit.de/software/arch-keyring/</link>
				<pubDate>Wed, 11 Apr 2018 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/arch-keyring/</guid>
				<description>&lt;h2 id=&#34;problem&#34;&gt;Problem&lt;/h2&gt;&#xA;&lt;p&gt;When I wanted to upgrade my ArchLinux installation I got an error about a failed lookup for a key:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;error: key &amp;quot;&amp;lt;KEY ID&amp;gt;&amp;quot; could not be looked up remotely&#xA;error: required key missing from keyring&#xA;error: failed to commit transaction (unexpected error)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;solution&#34;&gt;Solution&lt;/h2&gt;&#xA;&lt;p&gt;Turned out that reinstalling &lt;code&gt;archlinux-keyring&lt;/code&gt; loaded the key:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo pacman -S archlinux-keyring&#xA;sudo pacman -Syu&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
			</item>
			<item>
				<title>Compile Mutt</title>
				<link>https://livingit.de/software/compile-mutt/</link>
				<pubDate>Thu, 29 Mar 2018 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/compile-mutt/</guid>
				<description>&lt;p&gt;I am using mutt as my mail reader and I like to have a rather new version than the one included in LTS linux releases.&lt;/p&gt;&#xA;&lt;p&gt;Therefore I am compiling my mutt version. I fired up an editor and created a script that does this automatically. Here we go:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#! /bin/bash&#xA;&#xA;MUTT_VERSION=1.9.4&#xA;PREFIX=&amp;quot;${HOME}/.local/mutt/${MUTT_VERSION}/&amp;quot;&#xA;&#xA;if [ ! -f &amp;quot;${HOME}/tmp/mutt&amp;quot; ]; then&#xA;  mkdir -p &amp;quot;${HOME}/tmp/mutt&amp;quot;&#xA;fi&#xA;&#xA;cd &amp;quot;${HOME}/tmp/mutt&amp;quot; || exit 1&#xA;wget &amp;quot;http://ftp.mutt.org/pub/mutt/mutt-${MUTT_VERSION}.tar.gz&amp;quot;&#xA;&#xA;cd &amp;quot;${HOME}/tmp/mutt&amp;quot; || exit 1&#xA;tar xzf mutt-$MUTT_VERSION.tar.gz&#xA;&#xA;sudo apt-get install -y libncursesw5 libncursesw5-dev libsasl2-2 libsasl2-dev libtokyocabinet9 libtokyocabinet-dev libgnutls-dev     libglobus-gssapi-gsi-dev libkrb5-dev&#xA;&#xA;cd &amp;quot;${HOME}/tmp/mutt/mutt-${MUTT_VERSION}&amp;quot; || exit 1&#xA;&#xA;./configure --prefix=&amp;quot;${PREFIX}&amp;quot; --with-regex --with-ssl=no --with-sasl --with-gnutls --enable-pop --enable-imap --enable-smtp --with-included-gettext     --with-gss --enable-hcache --enable-sidebar&#xA;make&#xA;make install&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
			</item>
			<item>
				<title>Install Personal Golang</title>
				<link>https://livingit.de/software/install-personal-golang/</link>
				<pubDate>Thu, 29 Mar 2018 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/install-personal-golang/</guid>
				<description>&lt;h1 id=&#34;problem&#34;&gt;Problem&lt;/h1&gt;&#xA;&lt;p&gt;I wanted to set up a Golang environment on a Linux machine and do it repeatedly&lt;/p&gt;&#xA;&lt;h1 id=&#34;solution&#34;&gt;Solution&lt;/h1&gt;&#xA;&lt;p&gt;I created a bash script that downloads Golang and creates a working environment which you can find below.&lt;/p&gt;&#xA;&lt;p&gt;You could also go with &lt;a href=&#34;https://github.com/moovweb/gvm&#34;&gt;gvm&lt;/a&gt; which I have not used but looks promising.&lt;/p&gt;&#xA;&lt;p&gt;Using an environment variable for VERSION you can set the Golang version to install.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#! /usr/bin/env bash&#xA;&#xA;VERSION=${VERSION:-1.10.1}&#xA;&#xA;golangurl=https://dl.google.com/go/go${VERSION}.linux-amd64.tar.gz&#xA;downloaddir=&amp;quot;${HOME}/tmp/go-download&amp;quot;&#xA;installdir=&amp;quot;${HOME}/go-distribution&amp;quot;&#xA;workspacedir=&amp;quot;${HOME}/go&amp;quot;&#xA;&#xA;echo &amp;quot;This script installs Golang into your home folder&amp;quot;&#xA;read -p &amp;quot;Press enter to continue&amp;quot;&#xA;&#xA;echo &amp;quot;Creating download directory ${downloaddir}&amp;quot;&#xA;mkdir -p ${downloaddir}&#xA;&#xA;echo &amp;quot;Downloading Golang&amp;quot;&#xA;wget &amp;quot;${golangurl}&amp;quot; -O &amp;quot;${downloaddir}/go1.10.linux-amd64.tar.gz&amp;quot;&#xA;&#xA;echo &amp;quot;Extracting Golang distribution&amp;quot;&#xA;mkdir -p &amp;quot;${installdir}&amp;quot;&#xA;tar -C &amp;quot;${installdir}&amp;quot; -xzf &amp;quot;${downloaddir}/go1.10.linux-amd64.tar.gz&amp;quot;&#xA;rm &amp;quot;${downloaddir}/go1.10.linux-amd64.tar.gz&amp;quot;&#xA;&#xA;echo &amp;quot;Creating go workspace&amp;quot;&#xA;mkdir -p &amp;quot;${workspacedir}/bin&amp;quot;&#xA;mkdir -p &amp;quot;${workspacedir}/src&amp;quot;&#xA;mkdir -p &amp;quot;${workspacedir}/pkg&amp;quot;&#xA;&#xA;echo &amp;quot;export GOROOT=${HOME}/go-distribution/go&amp;quot; &amp;gt; &amp;quot;${HOME}/.go-profile&amp;quot;&#xA;echo &amp;quot;export GOPATH=${HOME}/go&amp;quot; &amp;gt;&amp;gt; &amp;quot;${HOME}/.go-profile&amp;quot;&#xA;echo &amp;quot;export PATH=${HOME}/go/bin:${GOROOT}/bin:${PATH}&amp;quot; &amp;gt;&amp;gt; &amp;quot;${HOME}/.go-profile&amp;quot;&#xA;&#xA;echo &amp;quot;sourcing ~/.go-profile&amp;quot;&#xA;source &amp;quot;${HOME}/.go-profile&amp;quot;&#xA;&#xA;echo &amp;quot;Testing&amp;quot;&#xA;go version&#xA;&#xA;read -p &amp;quot;Going to add source to ${HOME}/.profile, if unwanted press Ctrl-C now&amp;quot;&#xA;&#xA;echo &amp;gt;&amp;gt; &amp;quot;${HOME}/.profile&amp;quot;&#xA;echo &amp;gt;&amp;gt; &amp;quot;${HOME}/.profile&amp;quot;&#xA;echo &amp;quot;# Set go specific environment&amp;quot; &amp;gt;&amp;gt; &amp;quot;${HOME}/.profile&amp;quot;&#xA;echo &amp;quot;. ~/.go-profile&amp;quot; &amp;gt;&amp;gt; &amp;quot;${HOME}/.profile&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
			</item>
			<item>
				<title>Hugo Page Bundles</title>
				<link>https://livingit.de/software/hugo-page-bundles/</link>
				<pubDate>Wed, 28 Mar 2018 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/hugo-page-bundles/</guid>
				<description>&lt;h1 id=&#34;-or-updating-from-versions-pre-032&#34;&gt;&amp;hellip; or updating from versions pre 0.32&lt;/h1&gt;&#xA;&lt;p&gt;With version 0.32 the page bundle feature was added to hugo. This feature makes page exchange/review cycles much more convenient and is a huge step forward. Anyways, this update may put you in a situation you have to update your content structure slightly.&lt;/p&gt;&#xA;&lt;p&gt;Some useful links:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://scripter.co/hugo-leaf-and-branch-bundles/#branch-bundle-vs-regular-sections&#34;&gt;Hugo: Leaf and Branch Bundles&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://gohugo.io/content-management/page-bundles/&#34;&gt;Page Bundles&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I struggled a bit and received good help in the &lt;a href=&#34;https://discourse.gohugo.io/&#34;&gt;forum&lt;/a&gt; and if I would have updated hugo for each release effectively reading the release notes this would have been much less weird for me.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Arch Linux: zita-resampler 1.6.0-2 update</title>
				<link>https://livingit.de/software/zita-resampler-update/</link>
				<pubDate>Fri, 23 Feb 2018 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/zita-resampler-update/</guid>
				<description>&lt;h1 id=&#34;the-problem&#34;&gt;The problem&lt;/h1&gt;&#xA;&lt;p&gt;On update pacman errors about existing file /usr/lib/libzita-resampler.so.1. ldconfig created a symlink that should have been installed with 1.6.0-1 but was not. Therefore a conflict occurs.&lt;/p&gt;&#xA;&lt;h1 id=&#34;the-solution&#34;&gt;The solution&lt;/h1&gt;&#xA;&lt;p&gt;Delete /usr/lib/libzita-resampler.so.1&lt;/p&gt;&#xA;&lt;h1 id=&#34;note&#34;&gt;Note&lt;/h1&gt;&#xA;&lt;p&gt;For seemingly identical problems with other packages you should do a research before just deleting a file.&lt;/p&gt;</description>
			</item>
			<item>
				<title>First class functions</title>
				<link>https://livingit.de/software/first-class-functions/</link>
				<pubDate>Mon, 27 Nov 2017 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/first-class-functions/</guid>
				<description>&lt;h2 id=&#34;what-are-first-class-functions&#34;&gt;What are first class functions?&lt;/h2&gt;&#xA;&lt;p&gt;If you stumble upon first class functions what usually mean is, that functions are part of the type system of your language. So you can assign a method to a function. As an example:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;package main&#xA;&#xA;import &amp;quot;fmt&amp;quot;&#xA;&#xA;var a func(a int) int&#xA;&#xA;func main() {&#xA;        a = func (a int ) int {&#xA;                return a * a&#xA;        }&#xA;&#xA;        fmt.Println(a(2)) // prints 4&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://play.golang.org/p/0QAUQW6jdL&#34;&gt;RUN&lt;/a&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Build Git</title>
				<link>https://livingit.de/software/build-git/</link>
				<pubDate>Mon, 23 Oct 2017 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/build-git/</guid>
				<description>&lt;h1 id=&#34;my-problem&#34;&gt;My problem&lt;/h1&gt;&#xA;&lt;p&gt;I want to have an up to date git on my Linux system ( currently KDE neon )&lt;/p&gt;&#xA;&lt;h1 id=&#34;my-solution&#34;&gt;My solution&lt;/h1&gt;&#xA;&lt;p&gt;I wrote a little script installing the prerequisites, downloading the sources, compiling and installing:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#! /bin/bash&#xA;&#xA;GIT_VERSION=2.14.2&#xA;&#xA;cd ~&#xA;rm -rf ~/tmp/git&#xA;mkdir -p ~/tmp/git&#xA;sudo apt install unzip automake gcc libssl-dev build-essential libcurl4-gnutls-dev libexpat1-dev gettext curl -y&#xA;cd ~/tmp/git&#xA;wget https://github.com/git/git/archive/v$GIT_VERSION.zip&#xA;cd ~/tmp/git&#xA;unzip v$GIT_VERSION.zip&#xA;cd git-$GIT_VERSION&#xA;make prefix=/usr/local all&#xA;sudo apt remove git -y&#xA;sudo apt autoremove -y&#xA;sudo make prefix=/usr/local install&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
			</item>
			<item>
				<title>Your friendly support technician</title>
				<link>https://livingit.de/software/your-friendly-support-technician/</link>
				<pubDate>Mon, 18 Sep 2017 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/your-friendly-support-technician/</guid>
				<description>&lt;h2 id=&#34;preface&#34;&gt;Preface&lt;/h2&gt;&#xA;&lt;p&gt;Once in a while you might get a call from a support technician telling you&amp;rsquo;re at risk. Or at least your PC is. But fear not, he is there to help &amp;hellip; not.&lt;/p&gt;&#xA;&lt;p&gt;That is because he is the security threat. Usually you are loosing your data and/or some amount of money if you accept the kind offer. Let think through this kind of scam by picking Microsoft as a vendor those guys often pick and the psychology behind those attacks.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Map of Computer Science</title>
				<link>https://livingit.de/software/map-of-computer-science/</link>
				<pubDate>Thu, 07 Sep 2017 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/map-of-computer-science/</guid>
				<description>&lt;p&gt;Really nice video on the field of computer science. A nice introduction.&lt;/p&gt;&#xA;&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;&#xA;&#x9;&#x9;&#x9;&lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube-nocookie.com/embed/SzJ46YA_RaA?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;&#xA;&#x9;&#x9;&lt;/div&gt;</description>
			</item>
			<item>
				<title>Installing elixir - a quickie</title>
				<link>https://livingit.de/software/installelixir/</link>
				<pubDate>Wed, 06 Sep 2017 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/installelixir/</guid>
				<description>&lt;p&gt;This is a short script to install elixir (done this on a Ubuntu 16.04 based distribution) with a fish shell:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb -o erlang-solutions_1.0_all.deb; and sudo dpkg -i erlang-solutions_1.0_all.deb&#xA;sudo apt update&#xA;sudo apt install esl-erlang&#xA;sudo apt install elixir&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Basically the same stuff as on the official &lt;a href=&#34;https://elixir-lang.org/install.html#unix-and-unix-like&#34;&gt;elixir page&lt;/a&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>No network time protocol</title>
				<link>https://livingit.de/software/nontp/</link>
				<pubDate>Mon, 04 Sep 2017 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/nontp/</guid>
				<description>&lt;h2 id=&#34;my-problem&#34;&gt;My problem&lt;/h2&gt;&#xA;&lt;p&gt;My machine was off by two hours after a restart even though &lt;code&gt;/etc/timezone&lt;/code&gt; pointed to the correct timezone.&lt;/p&gt;&#xA;&lt;p&gt;A temporary solution was to execute the following command in bash:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo date -s &amp;quot;$(wget -qSO- --max-redirect=0 google.com 2&amp;gt;&amp;amp;1 | grep Date: | cut -d&#39; &#39; -f5-8)Z&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I solved it by installing &lt;code&gt;htpdate&lt;/code&gt; and setting my time this way. If you are interacting with a Windows Domain are doing other authentication based on time you are way better off using the network time protocol, unfortunately this is not available in my case.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Virtualbox</title>
				<link>https://livingit.de/software/virtualbox/</link>
				<pubDate>Mon, 04 Sep 2017 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/virtualbox/</guid>
				<description>&lt;p&gt;I recently installed a new Linux machine for a colleague. He used Virtualbox and I wanted to install it for him on his new machine, too.&lt;/p&gt;&#xA;&lt;p&gt;The obvious way would have been this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;apt install virtualbox&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Along with some optional packages for X11, guest tools and so on.&lt;/p&gt;&#xA;&lt;p&gt;The install wanted to remove &lt;code&gt;ubuntu-desktop&lt;/code&gt; which I think is unwanted for this use case. I switched to using the repository provided by Virtualbox itself:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Using nativefier to run web pages as app</title>
				<link>https://livingit.de/software/natifier/</link>
				<pubDate>Fri, 25 Aug 2017 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/natifier/</guid>
				<description>&lt;h1 id=&#34;what-is-nativefier&#34;&gt;What is nativefier?&lt;/h1&gt;&#xA;&lt;p&gt;Nativefier is a small tool to wrap web pages into an Electron app to run locally.&lt;/p&gt;&#xA;&lt;h1 id=&#34;how-do-i-get-it&#34;&gt;How do I get it?&lt;/h1&gt;&#xA;&lt;p&gt;Nativefier is a node.js application and has to be installed using npm. You need at least nodejs 4, I tested it using nodejs 8.&lt;/p&gt;&#xA;&lt;p&gt;To install nativefier type the following:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;npm install -g nativefier&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h1 id=&#34;how-to-create-an-application&#34;&gt;How to create an application?&lt;/h1&gt;&#xA;&lt;p&gt;To create an application type&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;nativefier http://www.example.org&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This downloads Electron and creates an application pointing to the URL.&lt;/p&gt;</description>
			</item>
			<item>
				<title>chntpw to the rescue</title>
				<link>https://livingit.de/software/chntpw/</link>
				<pubDate>Wed, 23 Aug 2017 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/chntpw/</guid>
				<description>&lt;h1 id=&#34;my-problem&#34;&gt;My problem&lt;/h1&gt;&#xA;&lt;p&gt;I got a Windows 8.1 PC and wanted to reset the password for local administrator account. A reset was not successful so I switched to using a Linux live image.&lt;/p&gt;&#xA;&lt;p&gt;To do this I downloaded an Ubuntu 16.04 Desktop image and wrote it to a flash drive using RosaImageWriter (see link list below) and booted the machine with it.&#xA;I downloaded the deb package and installed it using &lt;code&gt;sudo dpkg -i Downloads/chntpw_1.0-1_amd64.deb&lt;/code&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Contagion R.A.T.7 mouse on Linux</title>
				<link>https://livingit.de/software/contagionrat7/</link>
				<pubDate>Wed, 23 Aug 2017 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/contagionrat7/</guid>
				<description>&lt;p&gt;I like using the Contagion R.A.T.7 mouse and to use it with Linux you must configure the mouse correctly in terms of buttons.&lt;/p&gt;&#xA;&lt;p&gt;Essentially there are buttons (the mode change button are three buttons for Linux) and one of them is always pressed. You need to exclude them to have a working setup. &lt;a href=&#34;http://www.gdargaud.net/Hack/LinuxMouse.html&#34;&gt;http://www.gdargaud.net/Hack/LinuxMouse.html&lt;/a&gt; is a good tutorial on how to disable the buttons.&lt;/p&gt;&#xA;&lt;p&gt;I have two of them and the product name has changed in between. So I had to double the section and my xorg.conf looks like this:&lt;/p&gt;</description>
			</item>
			<item>
				<title>gRPC message size</title>
				<link>https://livingit.de/software/grpcmsgsize/</link>
				<pubDate>Mon, 21 Aug 2017 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/grpcmsgsize/</guid>
				<description>&lt;h1 id=&#34;what-is-grpc&#34;&gt;What is gRPC?&lt;/h1&gt;&#xA;&lt;p&gt;&lt;cite&gt;A high performance, open-source universal RPC framework - &lt;a href=&#34;https://grpc.io&#34;&gt;https://grpc.io&lt;/a&gt;&lt;/cite&gt;&lt;/p&gt;&#xA;&lt;p&gt;RPC stands for Remote Procedure Call. gRPC is a framework that allows you to create RPC servers using protocol buffers for a variety of languages.&lt;/p&gt;&#xA;&lt;p&gt;&lt;cite&gt;In distributed computing, a remote procedure call (RPC) is when a computer program causes a procedure (subroutine) to execute in a different address space (commonly on another computer on a shared network), which is coded as if it were a normal (local) procedure call, without the programmer explicitly coding the details for the remote interaction. - &lt;a href=&#34;https://en.wikipedia.org/wiki/Remote_procedure_call&#34;&gt;https://en.wikipedia.org/wiki/Remote_procedure_call&lt;/a&gt;&lt;/cite&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Protocol buffer talk @Frankfurt Rhein-Main Gophers Meetup</title>
				<link>https://livingit.de/software/protobuf/</link>
				<pubDate>Thu, 03 Aug 2017 00:00:00 +0000</pubDate>
				<guid>https://livingit.de/software/protobuf/</guid>
				<description>&lt;h1 id=&#34;a-short-overview-of-protocol-buffers&#34;&gt;A short overview of protocol buffers&lt;/h1&gt;&#xA;&lt;p&gt;This post is a slightly modified version of slides for a gophers meetup in Frankfurt. They served primarily as a way to support the talk but are published here for reference.&lt;/p&gt;&#xA;&lt;h2 id=&#34;history&#34;&gt;History&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Internal release 2001 [wiki]&lt;/li&gt;&#xA;&lt;li&gt;Public release 2008 [wiki]&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;what&#34;&gt;What&lt;/h2&gt;&#xA;&lt;p&gt;Protocol buffers are Google&amp;rsquo;s efficient way to communicate over a network.&lt;/p&gt;&#xA;&lt;p&gt;They are a foundation for gRPC [grpc] an RPC framework that makes&#xA;building services rather easy.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
