<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>binfalse</title>
		<description>stuff. just for the records.</description>
		<link>https://binfalse.de/</link>
		<atom:link href="https://binfalse.de/feed.xml" rel="self" type="application/rss+xml" />
		
			<item>
				<title>CODE AHOI!</title>
				<description>&lt;!-- _includes/image.html --&gt;
&lt;div class=&quot;image-wrapper alignright&quot;&gt;
    &lt;figure&gt;
    
    &lt;a href=&quot;/assets/media/pics/2020/codeahoi-paperboat.png&quot; title=&quot;Current logo of CODE AHOI&quot; target=&quot;_blank&quot; data-lightbox=&quot;/2020/05/23/code-ahoi/2020/05/23/code-ahoi/&quot; data-title=&quot;Current logo of CODE AHOI&quot; class=&quot;link-noborder&quot;&gt;
    
        &lt;img src=&quot;/assets/media/pics/2020/codeahoi-paperboat.png&quot; alt=&quot;Current logo of CODE AHOI&quot; style=&quot;max-width:300px&quot; /&gt;
    
    &lt;/a&gt;
    
    
        &lt;figcaption&gt;Current logo of CODE AHOI&lt;/figcaption&gt;
    
    &lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;It’s corona-time and so many things are unclear.
Yet, I decided to quit my permanent position at the University of Rostock and try something new o.O&lt;/p&gt;

&lt;p&gt;So I just started my own company!
The current logo is a paper boat and I already crafted a first draft of a website at &lt;a href=&quot;https://codeahoi.de&quot;&gt;CODE AHOI.de&lt;/a&gt;, so strangers can find my new business ;-)&lt;/p&gt;

&lt;p&gt;I would like to use my expertise to support organisations and the local economy.
And I would like to convince them to go for high quality and open source!
Especially for public institutions: &lt;a href=&quot;https://publiccode.eu/&quot;&gt;Public Money? Public Code!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The plan is to also blog about current jobs, ideas, and IT solutions over there at &lt;a href=&quot;https://codeahoi.de/news_en/&quot;&gt;https://codeahoi.de/news_en/&lt;/a&gt;.
Those articles will be multilingual in German and English.
Blogging in German will be an exciting adventure itself…
However, I may copy the English version into this blog if I assume that it may be of interest for readers of this blog.&lt;/p&gt;

&lt;p&gt;So if you’re curious or if you’re in need of a motivated developer and engineer, go and check out &lt;strong&gt;CODE AHOI!&lt;/strong&gt;
And tell your peers ;-)&lt;/p&gt;

&lt;p&gt;Read this article where it appeared first: &lt;a href=&quot;https://binfalse.de/2020/05/23/code-ahoi/&quot;&gt;binfalse.de&lt;/a&gt;&lt;/p&gt;</description>
				<pubDate>Sat, 23 May 2020 13:02:32 +0000</pubDate>
				<link>https://binfalse.de/2020/05/23/code-ahoi/</link>
				<guid isPermaLink="true">https://binfalse.de/2020/05/23/code-ahoi/</guid>
			</item>
		
			<item>
				<title>Window Open Features: Restrict and Test</title>
				<description>&lt;p&gt;Are you also annoyed by websites that open popups and external windows without your menu bar? And without scrollbars and no close button and … and .. and..&lt;/p&gt;

&lt;h2 id=&quot;restrict-window-open-features&quot;&gt;Restrict Window Open Features&lt;/h2&gt;

&lt;p&gt;Don’t worry, you can disable these “features”!
In Firefox, open &lt;a href=&quot;about:config&quot;&gt;about:config&lt;/a&gt; and search for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dom.disable_window_open_feature&lt;/code&gt; (see &lt;a href=&quot;https://pleroma.site/notice/9sfjyFYxWIdEMexkYa&quot;&gt;@azure’s pleroma post&lt;/a&gt;).
Full documentation on these settings are available through &lt;a href=&quot;http://kb.mozillazine.org/Prevent_websites_from_disabling_new_window_features&quot;&gt;MozillaZine&lt;/a&gt;.
These preferences can also be &lt;a href=&quot;kb.mozillazine.org/Locking_preferences&quot;&gt;set (and locked) system wide&lt;/a&gt;, which may be useful for multi-user and multi-system environments&lt;/p&gt;

&lt;h2 id=&quot;test-window-open-features&quot;&gt;Test Window Open Features&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Window/open#Window_features&quot;&gt;Mozilla’s Developer portal has a documentation on possible Window Open Features&lt;/a&gt;.
There you can learn which features are available, what they mean, and how to set them.&lt;/p&gt;

&lt;p&gt;Testing is then pretty easy.
The following checkboxes allow for enabling/disabling most useful window features.
If a box is ticked, the corresponding feature will be set; if it’s unticked the feature will be turned off.
You can then click the link below to test how your browser behaves when opening this blog using the chosen set of features.&lt;/p&gt;

&lt;ul id=&quot;settings&quot;&gt;
&lt;/ul&gt;

&lt;script type=&quot;text/javascript&quot;&gt;
    var ul = document.getElementById(&quot;settings&quot;);
    var windowRef = null;
    var settings = {
        &quot;menubar&quot;: &quot;Menu Bar&quot;,
        &quot;toolbar&quot;: &quot;Navigation Toolbar (Back, Forward, Reload, Stop...)&quot;,
        &quot;scrollbars&quot;: &quot;Scroll Bars&quot;,
        &quot;resizable&quot;: &quot;Resizable&quot;,
        &quot;status&quot;: &quot;Status Bar&quot;,
        &quot;personalbar&quot;: &quot;Personal Toolbar / Bookmarks / Site Navigation Ba&quot;,
        &quot;location&quot;: &quot;Location Bar&quot;,
        &quot;fullscreen&quot;: &quot;Open in Fullscreen (not implemented in many browsers)&quot;,
    }

    for (const [key, value] of Object.entries(settings)) {
        var input = document.createElement(&quot;input&quot;);
        input.type = &quot;checkbox&quot;;
        input.name = key;
        input.value = key;
        input.id = key;
    
        var label = document.createElement('label')
        label.htmlFor = key;
        label.appendChild(document.createTextNode(&quot;\u00A0&quot; + value));
    
        var li = document.createElement(&quot;li&quot;);
        li.appendChild(input);
        li.appendChild(label);
    
        ul.appendChild(li);
    }
    
    function openPopup () {
        var winFeatures = &quot;&quot;
    
        for (const [key, value] of Object.entries(settings)) {
            var input = document.getElementById(key);
            if (input.checked)
                winFeatures += key + &quot;=yes,&quot;
            else
                winFeatures += key + &quot;=no,&quot;
        }
    
        if(windowRef == null || windowRef.closed) {
            windowRef = window.open(&quot;https://binfalse.de/?test=window_open_feature&quot;, &quot;Popup&quot;, winFeatures);
        } else {
            alert (&quot;Popup already opened!? Please close it to test again.&quot;);
        }
    }
&lt;/script&gt;

&lt;p&gt;&lt;strong&gt;TEST NOW:&lt;/strong&gt; &lt;a href=&quot;https://binfalse.de/?test=window_open_feature&quot; target=&quot;Popup&quot; onclick=&quot;openPopup(); return false;&quot;&gt;Open binfalse.de using above settings.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The test should be browser independent, you just need to have Javascript enabled.
However, let me know if it doesn’t work for you!&lt;/p&gt;

&lt;p&gt;To see how I implemented the test tool take a look into the source code of this page, or &lt;a href=&quot;https://github.com/binfalse/binfalse.de/commit/df884dff0b1cc50f1565fc062d83b039a495dab7#diff-2b56a0d205475684917f043114021f30R53&quot;&gt;check the script on GitHub&lt;/a&gt;.
Remember? This blog is all open source :)&lt;/p&gt;
&lt;p&gt;Read this article where it appeared first: &lt;a href=&quot;https://binfalse.de/2020/03/05/testing-window-open-features/&quot;&gt;binfalse.de&lt;/a&gt;&lt;/p&gt;</description>
				<pubDate>Thu, 05 Mar 2020 07:33:11 +0000</pubDate>
				<link>https://binfalse.de/2020/03/05/testing-window-open-features/</link>
				<guid isPermaLink="true">https://binfalse.de/2020/03/05/testing-window-open-features/</guid>
			</item>
		
			<item>
				<title>Say »Hello« to Staticman</title>
				<description>&lt;p&gt;Recently, I stumbled upon &lt;a href=&quot;https://staticman.net/&quot;&gt;Staticman&lt;/a&gt;, which seems like a nice solution for comments on static sites (such as this).
Today I implemented Staticman into &lt;a href=&quot;https://binfalse.de/&quot;&gt;binfalse.de&lt;/a&gt; :)&lt;/p&gt;

&lt;p&gt;The idea is, that you have your static site version controlled at GitHub.
Then you can add the &lt;a href=&quot;https://github.com/apps/staticman-net&quot;&gt;Staticman App&lt;/a&gt; to your repository and add some &lt;a href=&quot;https://staticman.net/docs/configuration&quot;&gt;configuration file&lt;/a&gt;, so Staticman knows where and how to save the comments.
Also &lt;a href=&quot;https://github.com/binfalse/binfalse.de/blob/40b25231f66e3838953e026f85979c6d69d4e375/_includes/comments.html#L58&quot;&gt;add a form&lt;/a&gt; to your static site, that sends the commenting user with the form values to an API page of Staticman.&lt;/p&gt;

&lt;p&gt;Staticman will then create the necessary &lt;a href=&quot;https://en.wikipedia.org/wiki/YAML&quot;&gt;YAML&lt;/a&gt; files and send you a pull request to the corresponding repository.
Thus, you only need to accept the PR and your site will rebuild with the new comment.
Pretty smart I think :)&lt;/p&gt;

&lt;p&gt;Integrating Staticman is pretty easy.
Just follow the step-by-step guide at &lt;a href=&quot;https://staticman.net/docs/index.html&quot;&gt;staticman.net/docs/index.html&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In contrast to many other approaches you still own the comment and don’t need to load it from some third party.
The only privacy concern is, that users need to contact the Staticman API for sending the form values.
However, that seems to be rather harmless compared to what is the default out there…
As it’s still a concern, you can always use any of the other options to send comments.
I’ll keep listing them above the comment form.
Thus, it’s up to the user what’s more convenient/important :)&lt;/p&gt;

&lt;p&gt;If you’re curious, I’d be happy if you give it a try!&lt;/p&gt;

&lt;p&gt;Read this article where it appeared first: &lt;a href=&quot;https://binfalse.de/2020/02/20/say-hello-to-staticman/&quot;&gt;binfalse.de&lt;/a&gt;&lt;/p&gt;</description>
				<pubDate>Thu, 20 Feb 2020 13:17:59 +0000</pubDate>
				<link>https://binfalse.de/2020/02/20/say-hello-to-staticman/</link>
				<guid isPermaLink="true">https://binfalse.de/2020/02/20/say-hello-to-staticman/</guid>
			</item>
		
			<item>
				<title>Migrating from sSMTP to msmtp</title>
				<description>&lt;p&gt;As I described earlier, &lt;a href=&quot;/2016/11/25/mail-support-for-docker-s-php-fpm/&quot;&gt;I’ve been using sSMTP for email support in Docker containers.&lt;/a&gt;
Unfortunately, &lt;a href=&quot;https://packages.qa.debian.org/s/ssmtp.html&quot;&gt;sSMTP&lt;/a&gt; is &lt;a href=&quot;https://wiki.debian.org/sSMTP&quot;&gt;not maintained anymore&lt;/a&gt;.
Instead &lt;a href=&quot;https://marlam.de/msmtp/&quot;&gt;msmtp&lt;/a&gt; should be used.
I put the migration off for as long as possible, but eventually implemented the change!&lt;/p&gt;

&lt;p&gt;For legacy reasons I will leave my orginal articles about &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sSMTP&lt;/code&gt; untouched (I’ll just add a link to this page), and instead post this migration how-to.&lt;/p&gt;

&lt;h2 id=&quot;given&quot;&gt;Given&lt;/h2&gt;

&lt;p&gt;Let’s assume we’ve been using the following &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sSMTP&lt;/code&gt; config in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/ssmtp/ssmtp.conf&lt;/code&gt;:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;nv&quot;&gt;FromLineOverride&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;YES
&lt;span class=&quot;nv&quot;&gt;mailhub&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;RELAY
&lt;span class=&quot;nb&quot;&gt;hostname&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;HOSTNAME
&lt;span class=&quot;nv&quot;&gt;UseTLS&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;YES
&lt;span class=&quot;nv&quot;&gt;UseSTARTTLS&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;YES&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;In addition, we somewhere needed to tell the system/software/module how to send mails.
For example, for PHP it would be somthing like that in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/usr/local/etc/php/conf.d/mail.ini&lt;/code&gt;:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;mail &lt;span class=&quot;k&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;
sendmail_path &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;/usr/sbin/ssmtp -t&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;h2 id=&quot;then&quot;&gt;Then&lt;/h2&gt;

&lt;p&gt;In that case you would need a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;msmtp&lt;/code&gt; configuration in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/msmtprc&lt;/code&gt;:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;defaults
port 25
tls on

account default
auth off
host RELAY
domain HOSTNAME
from webserver@HOSTNAME
add_missing_date_header on&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;In addition, you need to tell the system/software/module send mails via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/usr/bin/msmtp -t&lt;/code&gt;.
For example, for PHP it would be somthing like that in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/usr/local/etc/php/conf.d/mail.ini&lt;/code&gt;:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;mail &lt;span class=&quot;k&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;
sendmail_path &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;/usr/bin/msmtp -t&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Please note that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;msmtp&lt;/code&gt; is in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/usr/bin&lt;/code&gt; not &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/usr/sbin&lt;/code&gt; !! ;-)&lt;/p&gt;

&lt;h2 id=&quot;supplemental-material&quot;&gt;Supplemental Material&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;The paths mentioned above are target paths. Thus, if you’re using Docker it actually doesn’t matter where you store the files, but you need to mount them to those paths inside the container..&lt;/li&gt;
  &lt;li&gt;There are much more options for msmtp! You can also configure an actual mail account at Posteo or Google or wherever. I recommend checking &lt;a href=&quot;https://marlam.de/msmtp/msmtp.html&quot;&gt;its documentation&lt;/a&gt; and &lt;a href=&quot;https://wiki.archlinux.org/index.php/Msmtp&quot;&gt;Arch’s Wiki&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Read this article where it appeared first: &lt;a href=&quot;https://binfalse.de/2020/02/17/migrating-from-ssmtp-to-msmtp/&quot;&gt;binfalse.de&lt;/a&gt;&lt;/p&gt;</description>
				<pubDate>Mon, 17 Feb 2020 15:54:38 +0000</pubDate>
				<link>https://binfalse.de/2020/02/17/migrating-from-ssmtp-to-msmtp/</link>
				<guid isPermaLink="true">https://binfalse.de/2020/02/17/migrating-from-ssmtp-to-msmtp/</guid>
			</item>
		
			<item>
				<title>Jekyll throwing Strange Error at library.rb:112</title>
				<description>&lt;p&gt;Just had a strange error when renbuilding one of the websites I’m in charge of..
Pretty quickly it turned out, that &lt;a href=&quot;https://jekyllrb.com/&quot;&gt;Jekyll&lt;/a&gt; was broken..!?
&lt;a href=&quot;https://www.ruby-lang.org/en/&quot;&gt;Ruby&lt;/a&gt; itself was running as usual, but I couldn’t even ask Jekyll for its version.&lt;/p&gt;

&lt;p&gt;The error was very cryptic and didn’t provide any hint on how to fix things.
The internet also didn’t help much, that’s why I’m logging it here.
I just managed to fix it by chance: A (rather unsimilar) bug report was talking about &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sassc&lt;/code&gt;.
&lt;del&gt;As I did not have an idea on how to approach the problem, I just tried (re)installing the tool.
And it did the trick…!? Not sure why, and not sure why it wasn’t installed as a dependency with Jekyll, or …!?&lt;/del&gt;&lt;/p&gt;

&lt;p&gt;&lt;del&gt;However, running&lt;/del&gt;&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;gem &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;sassc&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;&lt;del&gt;did fixed it for me (&lt;a href=&quot;https://github.com/binfalse/docker-jekyll/commit/9904684ea07f383428bc50b1f49c7069fc909371&quot;&gt;patch for the corresponding Docker image&lt;/a&gt;).&lt;/del&gt;&lt;/p&gt;

&lt;h2 id=&quot;update&quot;&gt;Update&lt;/h2&gt;

&lt;p&gt;The above didn’t actually fully-solve the problem.
It just re-installed &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sassc&lt;/code&gt; locally, which fixed the issue in the container on the current platform.
However, when I compile the very same image at the Docker Hub and pull the new version it’s broken again..!?
The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sassc&lt;/code&gt; compilation product seems to be plattform dependent!? #wtf&lt;/p&gt;

&lt;p&gt;Anyway. I finally got it fixed by installing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sassc&lt;/code&gt; using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--disable-march-tune-native&lt;/code&gt;, see also &lt;a href=&quot;https://github.com/sass/sassc-ruby/issues/146&quot;&gt;github.com/sass/sassc-ruby/issues/146&lt;/a&gt;:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;gem &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;sassc &lt;span class=&quot;nt&quot;&gt;--&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--disable-march-tune-native&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;The &lt;a href=&quot;https://github.com/binfalse/docker-jekyll/commit/5644ffbadb5453a4a755f5c0147aac904beda92c&quot;&gt;updated patch for my Docker image&lt;/a&gt; is available from GitHub.&lt;/p&gt;

&lt;h2 id=&quot;log&quot;&gt;Log&lt;/h2&gt;

&lt;p&gt;Maybe that can be of help for somebody else?
Here is the full error that was thrown:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;root@cb400a65d394:/jekyll# jekyll &lt;span class=&quot;nt&quot;&gt;-v&lt;/span&gt;
/var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi/library.rb:112: &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;BUG] Illegal instruction at 0x00007f4f75159acd
ruby 2.5.7p206 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;2019-10-01 revision 67816&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;x86_64-linux-gnu]

&lt;span class=&quot;nt&quot;&gt;--&lt;/span&gt; Control frame information &lt;span class=&quot;nt&quot;&gt;-----------------------------------------------&lt;/span&gt;
c:0026 p:---- s:0148 e:000147 CFUNC  :open
c:0025 p:0022 s:0142 e:000141 BLOCK  /var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi/library.rb:112 &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;FINISH]
c:0024 p:---- s:0133 e:000132 CFUNC  :each
c:0023 p:0113 s:0129 e:000128 BLOCK  /var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi/library.rb:109 &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;FINISH]
c:0022 p:---- s:0122 e:000121 CFUNC  :map
c:0021 p:0069 s:0118 e:000117 METHOD /var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi/library.rb:99
c:0020 p:0078 s:0111 e:000110 CLASS  /var/lib/gems/2.5.0/gems/sassc-2.2.1/lib/sassc/native.rb:11
c:0019 p:0007 s:0107 e:000106 CLASS  /var/lib/gems/2.5.0/gems/sassc-2.2.1/lib/sassc/native.rb:6
c:0018 p:0014 s:0104 e:000103 TOP    /var/lib/gems/2.5.0/gems/sassc-2.2.1/lib/sassc/native.rb:5 &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;FINISH]
c:0017 p:---- s:0101 e:000100 CFUNC  :require_relative
c:0016 p:0021 s:0096 e:000095 TOP    /var/lib/gems/2.5.0/gems/sassc-2.2.1/lib/sassc.rb:31 &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;FINISH]
c:0015 p:---- s:0093 e:000092 CFUNC  :require
c:0014 p:0110 s:0088 e:000087 METHOD /usr/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59
c:0013 p:0006 s:0076 e:000075 TOP    /var/lib/gems/2.5.0/gems/jekyll-sass-converter-2.0.1/lib/jekyll/converters/scss.rb:3 &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;FINISH]
c:0012 p:---- s:0073 e:000072 CFUNC  :require
c:0011 p:0110 s:0068 e:000067 METHOD /usr/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59
c:0010 p:0013 s:0056 e:000055 TOP    /var/lib/gems/2.5.0/gems/jekyll-sass-converter-2.0.1/lib/jekyll-sass-converter.rb:4 &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;FINISH]
c:0009 p:---- s:0053 e:000052 CFUNC  :require
c:0008 p:0110 s:0048 e:000047 METHOD /usr/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59
c:0007 p:0226 s:0036 e:000035 TOP    /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll.rb:206 &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;FINISH]
c:0006 p:---- s:0033 e:000032 CFUNC  :require
c:0005 p:0110 s:0028 e:000027 METHOD /usr/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59
c:0004 p:0041 s:0016 e:000015 TOP    /var/lib/gems/2.5.0/gems/jekyll-4.0.0/exe/jekyll:8 &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;FINISH]
c:0003 p:---- s:0013 e:000012 CFUNC  :load
c:0002 p:0132 s:0008 E:000860 EVAL   /usr/local/bin/jekyll:23 &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;FINISH]
c:0001 p:0000 s:0003 E:000c10 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;none&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;FINISH]

&lt;span class=&quot;nt&quot;&gt;--&lt;/span&gt; Ruby level backtrace information &lt;span class=&quot;nt&quot;&gt;----------------------------------------&lt;/span&gt;
/usr/local/bin/jekyll:23:in &lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;&amp;lt;main&amp;gt;&lt;span class=&quot;s1&quot;&gt;'
/usr/local/bin/jekyll:23:in `load'&lt;/span&gt;
/var/lib/gems/2.5.0/gems/jekyll-4.0.0/exe/jekyll:8:in &lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;&amp;lt;top &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;required&lt;span class=&quot;o&quot;&gt;)&amp;gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'
/usr/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'&lt;/span&gt;
/usr/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in &lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;require&lt;span class=&quot;s1&quot;&gt;'
/var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll.rb:206:in `&amp;lt;top (required)&amp;gt;'&lt;/span&gt;
/usr/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in &lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;require&lt;span class=&quot;s1&quot;&gt;'
/usr/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'&lt;/span&gt;
/var/lib/gems/2.5.0/gems/jekyll-sass-converter-2.0.1/lib/jekyll-sass-converter.rb:4:in &lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;&amp;lt;top &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;required&lt;span class=&quot;o&quot;&gt;)&amp;gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'
/usr/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'&lt;/span&gt;
/usr/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in &lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;require&lt;span class=&quot;s1&quot;&gt;'
/var/lib/gems/2.5.0/gems/jekyll-sass-converter-2.0.1/lib/jekyll/converters/scss.rb:3:in `&amp;lt;top (required)&amp;gt;'&lt;/span&gt;
/usr/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in &lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;require&lt;span class=&quot;s1&quot;&gt;'
/usr/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'&lt;/span&gt;
/var/lib/gems/2.5.0/gems/sassc-2.2.1/lib/sassc.rb:31:in &lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;&amp;lt;top &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;required&lt;span class=&quot;o&quot;&gt;)&amp;gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'
/var/lib/gems/2.5.0/gems/sassc-2.2.1/lib/sassc.rb:31:in `require_relative'&lt;/span&gt;
/var/lib/gems/2.5.0/gems/sassc-2.2.1/lib/sassc/native.rb:5:in &lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;&amp;lt;top &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;required&lt;span class=&quot;o&quot;&gt;)&amp;gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'
/var/lib/gems/2.5.0/gems/sassc-2.2.1/lib/sassc/native.rb:6:in `&amp;lt;module:SassC&amp;gt;'&lt;/span&gt;
/var/lib/gems/2.5.0/gems/sassc-2.2.1/lib/sassc/native.rb:11:in &lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;&amp;lt;module:Native&amp;gt;&lt;span class=&quot;s1&quot;&gt;'
/var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi/library.rb:99:in `ffi_lib'&lt;/span&gt;
/var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi/library.rb:99:in &lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;map&lt;span class=&quot;s1&quot;&gt;'
/var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi/library.rb:109:in `block in ffi_lib'&lt;/span&gt;
/var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi/library.rb:109:in &lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;each&lt;span class=&quot;s1&quot;&gt;'
/var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi/library.rb:112:in `block (2 levels) in ffi_lib'&lt;/span&gt;
/var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi/library.rb:112:in &lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;open&lt;span class=&quot;s1&quot;&gt;'

-- Machine register context ------------------------------------------------
 RIP: 0x00007f4f75159acd RBP: 0x00007ffe0bc8a260 RSP: 0x00007ffe0bc898b8
 RAX: 0x3ff0000000000000 RBX: 0x00007ffe0bc898d0 RCX: 0x00000000000003bd
 RDX: 0x00007f4f752923bd RDI: 0x00007ffe0bc898e0 RSI: 0x00007ffe0bc898d0
  R8: 0x0000557270544740  R9: 0x00007f4f75c30170 R10: 0x0000000000000000
 R11: 0x00007f4f75c80ec0 R12: 0x00007f4f752f1500 R13: 0x00007f4f74f93ff0
 R14: 0x00007ffe0bc8a2c0 R15: 0x00007ffe0bc898d0 EFL: 0x0000000000010202

-- C level backtrace information -------------------------------------------
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e7da75) [0x7f4f75e7da75]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e7dca8) [0x7f4f75e7dca8]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75d431f9) [0x7f4f75d431f9]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e0b352) [0x7f4f75e0b352]
/lib/x86_64-linux-gnu/libc.so.6(0x7f4f75b2e100) [0x7f4f75b2e100]
/var/lib/gems/2.5.0/gems/sassc-2.2.1/lib/sassc/libsass.so(0x7f4f75159acd) [0x7f4f75159acd]
/var/lib/gems/2.5.0/gems/sassc-2.2.1/lib/sassc/libsass.so(0x7f4f75158424) [0x7f4f75158424]
/lib64/ld-linux-x86-64.so.2(0x7f4f75f8b5ba) [0x7f4f75f8b5ba]
/lib64/ld-linux-x86-64.so.2(0x7f4f75f8b6b9) [0x7f4f75f8b6b9]
/lib64/ld-linux-x86-64.so.2(0x7f4f75f8f473) [0x7f4f75f8f473]
/lib/x86_64-linux-gnu/libc.so.6(_dl_catch_exception+0x71) [0x7f4f75c28bc1]
/lib64/ld-linux-x86-64.so.2(0x7f4f75f8ed7a) [0x7f4f75f8ed7a]
/lib/x86_64-linux-gnu/libdl.so.2(0x7f4f75a4c258) [0x7f4f75a4c258]
/lib/x86_64-linux-gnu/libc.so.6(_dl_catch_exception+0x71) [0x7f4f75c28bc1]
/lib/x86_64-linux-gnu/libc.so.6(_dl_catch_error+0x2f) [0x7f4f75c28c5f]
/lib/x86_64-linux-gnu/libdl.so.2(0x7f4f75a4c995) [0x7f4f75a4c995]
/lib/x86_64-linux-gnu/libdl.so.2(dlopen+0x46) [0x7f4f75a4c2e6]
/var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi_c.so(library_initialize+0x71) [0x7f4f754b47d1] DynamicLibrary.c:124
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e63de3) [0x7f4f75e63de3]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e7105f) [0x7f4f75e7105f]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e71f4b) [0x7f4f75e71f4b]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e6a202) [0x7f4f75e6a202]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e6eaf4) [0x7f4f75e6eaf4]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(rb_yield+0x369) [0x7f4f75e77599]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(rb_ary_each+0x3c) [0x7f4f75ce44ac]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e63de3) [0x7f4f75e63de3]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e7105f) [0x7f4f75e7105f]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e71f4b) [0x7f4f75e71f4b]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e699eb) [0x7f4f75e699eb]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e6eaf4) [0x7f4f75e6eaf4]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e75e64) [0x7f4f75e75e64]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75ce83dc) [0x7f4f75ce83dc]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e63de3) [0x7f4f75e63de3]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e7105f) [0x7f4f75e7105f]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e71f4b) [0x7f4f75e71f4b]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e699eb) [0x7f4f75e699eb]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e6eaf4) [0x7f4f75e6eaf4]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75d82ab1) [0x7f4f75d82ab1]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75d847d9) [0x7f4f75d847d9]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(rb_require_safe+0x9) [0x7f4f75d84959]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e63de3) [0x7f4f75e63de3]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e7105f) [0x7f4f75e7105f]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e71f4b) [0x7f4f75e71f4b]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e6a202) [0x7f4f75e6a202]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e6eaf4) [0x7f4f75e6eaf4]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75d82ab1) [0x7f4f75d82ab1]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75d847d9) [0x7f4f75d847d9]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(rb_require_safe+0x9) [0x7f4f75d84959]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e63de3) [0x7f4f75e63de3]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e6a202) [0x7f4f75e6a202]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e6eaf4) [0x7f4f75e6eaf4]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75d82ab1) [0x7f4f75d82ab1]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75d847d9) [0x7f4f75d847d9]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(rb_require_safe+0x9) [0x7f4f75d84959]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e63de3) [0x7f4f75e63de3]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e6a202) [0x7f4f75e6a202]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e6eaf4) [0x7f4f75e6eaf4]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75d82ab1) [0x7f4f75d82ab1]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75d847d9) [0x7f4f75d847d9]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(rb_require_safe+0x9) [0x7f4f75d84959]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e63de3) [0x7f4f75e63de3]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e6a202) [0x7f4f75e6a202]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e6eaf4) [0x7f4f75e6eaf4]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75d82ab1) [0x7f4f75d82ab1]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75d847d9) [0x7f4f75d847d9]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(rb_require_safe+0x9) [0x7f4f75d84959]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e63de3) [0x7f4f75e63de3]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e6a202) [0x7f4f75e6a202]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e6eaf4) [0x7f4f75e6eaf4]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75d82ab1) [0x7f4f75d82ab1]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75d83078) [0x7f4f75d83078]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75d8318c) [0x7f4f75d8318c]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e63de3) [0x7f4f75e63de3]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e7105f) [0x7f4f75e7105f]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e71f4b) [0x7f4f75e71f4b]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e6a202) [0x7f4f75e6a202]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75e6eaf4) [0x7f4f75e6eaf4]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7f4f75d46ef3) [0x7f4f75d46ef3]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(ruby_exec_node+0x1d) [0x7f4f75d48d8d]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(ruby_run_node+0x1e) [0x7f4f75d4b24e]
/usr/bin/ruby2.5(0x55726f8f60eb) [0x55726f8f60eb]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xeb) [0x7f4f75b1abbb]
/usr/bin/ruby2.5(_start+0x2a) [0x55726f8f611a]

-- Other runtime information -----------------------------------------------

* Loaded script: /usr/local/bin/jekyll

* Loaded features:

    0 enumerator.so
    1 thread.rb
    2 rational.so
    3 complex.so
    4 /usr/lib/x86_64-linux-gnu/ruby/2.5.0/enc/encdb.so
    5 /usr/lib/x86_64-linux-gnu/ruby/2.5.0/enc/trans/transdb.so
    6 /usr/lib/x86_64-linux-gnu/ruby/2.5.0/rbconfig.rb
    7 /usr/lib/ruby/2.5.0/rubygems/compatibility.rb
    8 /usr/lib/ruby/2.5.0/rubygems/defaults.rb
    9 /usr/lib/ruby/2.5.0/rubygems/deprecate.rb
   10 /usr/lib/ruby/2.5.0/rubygems/errors.rb
   11 /usr/lib/ruby/2.5.0/rubygems/version.rb
   12 /usr/lib/ruby/2.5.0/rubygems/requirement.rb
   13 /usr/lib/ruby/2.5.0/rubygems/platform.rb
   14 /usr/lib/ruby/2.5.0/rubygems/basic_specification.rb
   15 /usr/lib/ruby/2.5.0/rubygems/stub_specification.rb
   16 /usr/lib/ruby/2.5.0/rubygems/util/list.rb
   17 /usr/lib/x86_64-linux-gnu/ruby/2.5.0/stringio.so
   18 /usr/lib/ruby/2.5.0/uri/rfc2396_parser.rb
   19 /usr/lib/ruby/2.5.0/uri/rfc3986_parser.rb
   20 /usr/lib/ruby/2.5.0/uri/common.rb
   21 /usr/lib/ruby/2.5.0/uri/generic.rb
   22 /usr/lib/ruby/2.5.0/uri/ftp.rb
   23 /usr/lib/ruby/2.5.0/uri/http.rb
   24 /usr/lib/ruby/2.5.0/uri/https.rb
   25 /usr/lib/ruby/2.5.0/uri/ldap.rb
   26 /usr/lib/ruby/2.5.0/uri/ldaps.rb
   27 /usr/lib/ruby/2.5.0/uri/mailto.rb
   28 /usr/lib/ruby/2.5.0/uri.rb
   29 /usr/lib/ruby/2.5.0/rubygems/specification.rb
   30 /usr/lib/ruby/2.5.0/rubygems/exceptions.rb
   31 /usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb
   32 /usr/lib/ruby/2.5.0/rubygems/dependency.rb
   33 /usr/lib/ruby/2.5.0/rubygems/core_ext/kernel_gem.rb
   34 /usr/lib/ruby/2.5.0/monitor.rb
   35 /usr/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb
   36 /usr/lib/ruby/2.5.0/rubygems.rb
   37 /usr/lib/ruby/2.5.0/rubygems/path_support.rb
   38 /usr/lib/ruby/vendor_ruby/did_you_mean/version.rb
   39 /usr/lib/ruby/vendor_ruby/did_you_mean/core_ext/name_error.rb
   40 /usr/lib/ruby/vendor_ruby/did_you_mean/levenshtein.rb
   41 /usr/lib/ruby/vendor_ruby/did_you_mean/jaro_winkler.rb
   42 /usr/lib/ruby/vendor_ruby/did_you_mean/spell_checker.rb
   43 /usr/lib/ruby/2.5.0/delegate.rb
   44 /usr/lib/ruby/vendor_ruby/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rb
   45 /usr/lib/ruby/vendor_ruby/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb
   46 /usr/lib/ruby/vendor_ruby/did_you_mean/spell_checkers/name_error_checkers.rb
   47 /usr/lib/ruby/vendor_ruby/did_you_mean/spell_checkers/method_name_checker.rb
   48 /usr/lib/ruby/vendor_ruby/did_you_mean/spell_checkers/key_error_checker.rb
   49 /usr/lib/ruby/vendor_ruby/did_you_mean/spell_checkers/null_checker.rb
   50 /usr/lib/ruby/vendor_ruby/did_you_mean/formatters/plain_formatter.rb
   51 /usr/lib/ruby/vendor_ruby/did_you_mean.rb
   52 /usr/lib/ruby/2.5.0/tsort.rb
   53 /usr/lib/ruby/2.5.0/rubygems/request_set/gem_dependency_api.rb
   54 /usr/lib/ruby/2.5.0/rubygems/request_set/lockfile/parser.rb
   55 /usr/lib/ruby/2.5.0/rubygems/request_set/lockfile/tokenizer.rb
   56 /usr/lib/ruby/2.5.0/rubygems/request_set/lockfile.rb
   57 /usr/lib/ruby/2.5.0/rubygems/request_set.rb
   58 /usr/lib/ruby/2.5.0/rubygems/util.rb
   59 /usr/lib/ruby/2.5.0/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb
   60 /usr/lib/ruby/2.5.0/rubygems/resolver/molinillo/lib/molinillo/errors.rb
   61 /usr/lib/ruby/2.5.0/set.rb
   62 /usr/lib/ruby/2.5.0/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb
   63 /usr/lib/ruby/2.5.0/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb
   64 /usr/lib/ruby/2.5.0/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb
   65 /usr/lib/ruby/2.5.0/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb
   66 /usr/lib/ruby/2.5.0/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb
   67 /usr/lib/ruby/2.5.0/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb
   68 /usr/lib/ruby/2.5.0/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb
   69 /usr/lib/ruby/2.5.0/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb
   70 /usr/lib/ruby/2.5.0/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb
   71 /usr/lib/ruby/2.5.0/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb
   72 /usr/lib/ruby/2.5.0/rubygems/resolver/molinillo/lib/molinillo/state.rb
   73 /usr/lib/ruby/2.5.0/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb
   74 /usr/lib/ruby/2.5.0/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb
   75 /usr/lib/ruby/2.5.0/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb
   76 /usr/lib/ruby/2.5.0/rubygems/resolver/molinillo/lib/molinillo/resolution.rb
   77 /usr/lib/ruby/2.5.0/rubygems/resolver/molinillo/lib/molinillo/resolver.rb
   78 /usr/lib/ruby/2.5.0/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb
   79 /usr/lib/ruby/2.5.0/rubygems/resolver/molinillo/lib/molinillo.rb
   80 /usr/lib/ruby/2.5.0/rubygems/resolver/molinillo.rb
   81 /usr/lib/ruby/2.5.0/rubygems/resolver/activation_request.rb
   82 /usr/lib/ruby/2.5.0/rubygems/resolver/conflict.rb
   83 /usr/lib/ruby/2.5.0/rubygems/resolver/dependency_request.rb
   84 /usr/lib/ruby/2.5.0/rubygems/resolver/requirement_list.rb
   85 /usr/lib/ruby/2.5.0/rubygems/resolver/stats.rb
   86 /usr/lib/ruby/2.5.0/rubygems/resolver/set.rb
   87 /usr/lib/ruby/2.5.0/rubygems/resolver/api_set.rb
   88 /usr/lib/ruby/2.5.0/rubygems/resolver/composed_set.rb
   89 /usr/lib/ruby/2.5.0/rubygems/resolver/best_set.rb
   90 /usr/lib/ruby/2.5.0/rubygems/resolver/current_set.rb
   91 /usr/lib/ruby/2.5.0/rubygems/resolver/git_set.rb
   92 /usr/lib/ruby/2.5.0/rubygems/resolver/index_set.rb
   93 /usr/lib/ruby/2.5.0/rubygems/resolver/installer_set.rb
   94 /usr/lib/ruby/2.5.0/rubygems/resolver/lock_set.rb
   95 /usr/lib/ruby/2.5.0/rubygems/resolver/vendor_set.rb
   96 /usr/lib/ruby/2.5.0/rubygems/resolver/source_set.rb
   97 /usr/lib/ruby/2.5.0/rubygems/resolver/specification.rb
   98 /usr/lib/ruby/2.5.0/rubygems/resolver/spec_specification.rb
   99 /usr/lib/ruby/2.5.0/rubygems/resolver/api_specification.rb
  100 /usr/lib/ruby/2.5.0/rubygems/resolver/git_specification.rb
  101 /usr/lib/ruby/2.5.0/rubygems/resolver/index_specification.rb
  102 /usr/lib/ruby/2.5.0/rubygems/resolver/installed_specification.rb
  103 /usr/lib/ruby/2.5.0/rubygems/resolver/local_specification.rb
  104 /usr/lib/ruby/2.5.0/rubygems/resolver/lock_specification.rb
  105 /usr/lib/ruby/2.5.0/rubygems/resolver/vendor_specification.rb
  106 /usr/lib/ruby/2.5.0/rubygems/resolver.rb
  107 /usr/lib/ruby/2.5.0/rubygems/source/git.rb
  108 /usr/lib/ruby/2.5.0/rubygems/source/installed.rb
  109 /usr/lib/ruby/2.5.0/rubygems/source/specific_file.rb
  110 /usr/lib/ruby/2.5.0/rubygems/source/local.rb
  111 /usr/lib/ruby/2.5.0/rubygems/source/lock.rb
  112 /usr/lib/ruby/2.5.0/rubygems/source/vendor.rb
  113 /usr/lib/ruby/2.5.0/rubygems/source.rb
  114 /usr/lib/ruby/2.5.0/forwardable/impl.rb
  115 /usr/lib/ruby/2.5.0/forwardable.rb
  116 /usr/lib/x86_64-linux-gnu/ruby/2.5.0/etc.so
  117 /usr/lib/ruby/2.5.0/fileutils.rb
  118 /usr/lib/x86_64-linux-gnu/ruby/2.5.0/date_core.so
  119 /usr/lib/ruby/2.5.0/date.rb
  120 /usr/lib/ruby/2.5.0/time.rb
  121 /usr/lib/ruby/2.5.0/English.rb
  122 /usr/lib/x86_64-linux-gnu/ruby/2.5.0/pathname.so
  123 /usr/lib/ruby/2.5.0/pathname.rb
  124 /usr/lib/ruby/2.5.0/logger.rb
  125 /usr/lib/ruby/2.5.0/csv.rb
  126 /usr/lib/ruby/2.5.0/json/version.rb
  127 /usr/lib/ruby/2.5.0/ostruct.rb
  128 /usr/lib/ruby/2.5.0/json/generic_object.rb
  129 /usr/lib/ruby/2.5.0/json/common.rb
  130 /usr/lib/x86_64-linux-gnu/ruby/2.5.0/json/ext/parser.so
  131 /usr/lib/x86_64-linux-gnu/ruby/2.5.0/json/ext/generator.so
  132 /usr/lib/ruby/2.5.0/json/ext.rb
  133 /usr/lib/ruby/2.5.0/json.rb
  134 /var/lib/gems/2.5.0/gems/pathutil-0.16.2/lib/pathutil/helpers.rb
  135 /var/lib/gems/2.5.0/gems/forwardable-extended-2.6.0/lib/forwardable/extended/version.rb
  136 /var/lib/gems/2.5.0/gems/forwardable-extended-2.6.0/lib/forwardable/extended.rb
  137 /usr/lib/ruby/2.5.0/find.rb
  138 /var/lib/gems/2.5.0/gems/pathutil-0.16.2/lib/pathutil.rb
  139 /var/lib/gems/2.5.0/gems/addressable-2.7.0/lib/addressable/version.rb
  140 /usr/lib/ruby/2.5.0/rubygems/bundler_version_finder.rb
  141 /var/lib/gems/2.5.0/gems/addressable-2.7.0/lib/addressable/idna/pure.rb
  142 /var/lib/gems/2.5.0/gems/addressable-2.7.0/lib/addressable/idna.rb
  143 /var/lib/gems/2.5.0/gems/public_suffix-4.0.3/lib/public_suffix/domain.rb
  144 /var/lib/gems/2.5.0/gems/public_suffix-4.0.3/lib/public_suffix/version.rb
  145 /var/lib/gems/2.5.0/gems/public_suffix-4.0.3/lib/public_suffix/errors.rb
  146 /var/lib/gems/2.5.0/gems/public_suffix-4.0.3/lib/public_suffix/rule.rb
  147 /var/lib/gems/2.5.0/gems/public_suffix-4.0.3/lib/public_suffix/list.rb
  148 /var/lib/gems/2.5.0/gems/public_suffix-4.0.3/lib/public_suffix.rb
  149 /var/lib/gems/2.5.0/gems/addressable-2.7.0/lib/addressable/uri.rb
  150 /usr/lib/ruby/2.5.0/psych/versions.rb
  151 /usr/lib/ruby/2.5.0/psych/exception.rb
  152 /usr/lib/ruby/2.5.0/psych/syntax_error.rb
  153 /usr/lib/x86_64-linux-gnu/ruby/2.5.0/psych.so
  154 /usr/lib/ruby/2.5.0/psych/omap.rb
  155 /usr/lib/ruby/2.5.0/psych/set.rb
  156 /usr/lib/ruby/2.5.0/psych/class_loader.rb
  157 /usr/lib/x86_64-linux-gnu/ruby/2.5.0/strscan.so
  158 /usr/lib/ruby/2.5.0/psych/scalar_scanner.rb
  159 /usr/lib/ruby/2.5.0/psych/nodes/node.rb
  160 /usr/lib/ruby/2.5.0/psych/nodes/stream.rb
  161 /usr/lib/ruby/2.5.0/psych/nodes/document.rb
  162 /usr/lib/ruby/2.5.0/psych/nodes/sequence.rb
  163 /usr/lib/ruby/2.5.0/psych/nodes/scalar.rb
  164 /usr/lib/ruby/2.5.0/psych/nodes/mapping.rb
  165 /usr/lib/ruby/2.5.0/psych/nodes/alias.rb
  166 /usr/lib/ruby/2.5.0/psych/nodes.rb
  167 /usr/lib/ruby/2.5.0/psych/streaming.rb
  168 /usr/lib/ruby/2.5.0/psych/visitors/visitor.rb
  169 /usr/lib/ruby/2.5.0/psych/visitors/to_ruby.rb
  170 /usr/lib/ruby/2.5.0/psych/visitors/emitter.rb
  171 /usr/lib/ruby/2.5.0/psych/handler.rb
  172 /usr/lib/ruby/2.5.0/psych/tree_builder.rb
  173 /usr/lib/ruby/2.5.0/psych/visitors/yaml_tree.rb
  174 /usr/lib/ruby/2.5.0/psych/json/ruby_events.rb
  175 /usr/lib/ruby/2.5.0/psych/visitors/json_tree.rb
  176 /usr/lib/ruby/2.5.0/psych/visitors/depth_first.rb
  177 /usr/lib/ruby/2.5.0/psych/visitors.rb
  178 /usr/lib/ruby/2.5.0/psych/parser.rb
  179 /usr/lib/ruby/2.5.0/psych/coder.rb
  180 /usr/lib/ruby/2.5.0/psych/core_ext.rb
  181 /usr/lib/ruby/2.5.0/psych/stream.rb
  182 /usr/lib/ruby/2.5.0/psych/json/yaml_events.rb
  183 /usr/lib/ruby/2.5.0/psych/json/tree_builder.rb
  184 /usr/lib/ruby/2.5.0/psych/json/stream.rb
  185 /usr/lib/ruby/2.5.0/psych/handlers/document_stream.rb
  186 /usr/lib/ruby/2.5.0/psych.rb
  187 /usr/lib/ruby/2.5.0/yaml.rb
  188 /var/lib/gems/2.5.0/gems/safe_yaml-1.0.5/lib/safe_yaml/libyaml_checker.rb
  189 /var/lib/gems/2.5.0/gems/safe_yaml-1.0.5/lib/safe_yaml/deep.rb
  190 /var/lib/gems/2.5.0/gems/safe_yaml-1.0.5/lib/safe_yaml/parse/hexadecimal.rb
  191 /var/lib/gems/2.5.0/gems/safe_yaml-1.0.5/lib/safe_yaml/parse/sexagesimal.rb
  192 /var/lib/gems/2.5.0/gems/safe_yaml-1.0.5/lib/safe_yaml/parse/date.rb
  193 /var/lib/gems/2.5.0/gems/safe_yaml-1.0.5/lib/safe_yaml/transform/transformation_map.rb
  194 /var/lib/gems/2.5.0/gems/safe_yaml-1.0.5/lib/safe_yaml/transform/to_boolean.rb
  195 /var/lib/gems/2.5.0/gems/safe_yaml-1.0.5/lib/safe_yaml/transform/to_date.rb
  196 /var/lib/gems/2.5.0/gems/safe_yaml-1.0.5/lib/safe_yaml/transform/to_float.rb
  197 /var/lib/gems/2.5.0/gems/safe_yaml-1.0.5/lib/safe_yaml/transform/to_integer.rb
  198 /var/lib/gems/2.5.0/gems/safe_yaml-1.0.5/lib/safe_yaml/transform/to_nil.rb
  199 /var/lib/gems/2.5.0/gems/safe_yaml-1.0.5/lib/safe_yaml/transform/to_symbol.rb
  200 /usr/lib/ruby/2.5.0/base64.rb
  201 /var/lib/gems/2.5.0/gems/safe_yaml-1.0.5/lib/safe_yaml/transform.rb
  202 /var/lib/gems/2.5.0/gems/safe_yaml-1.0.5/lib/safe_yaml/resolver.rb
  203 /var/lib/gems/2.5.0/gems/safe_yaml-1.0.5/lib/safe_yaml/psych_handler.rb
  204 /var/lib/gems/2.5.0/gems/safe_yaml-1.0.5/lib/safe_yaml/psych_resolver.rb
  205 /var/lib/gems/2.5.0/gems/safe_yaml-1.0.5/lib/safe_yaml/safe_to_ruby_visitor.rb
  206 /var/lib/gems/2.5.0/gems/safe_yaml-1.0.5/lib/safe_yaml/load.rb
  207 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/version.rb
  208 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/parse_tree_visitor.rb
  209 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/lexer.rb
  210 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/parser.rb
  211 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/i18n.rb
  212 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/drop.rb
  213 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/tablerowloop_drop.rb
  214 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/forloop_drop.rb
  215 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/extensions.rb
  216 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/errors.rb
  217 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/interrupts.rb
  218 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/strainer.rb
  219 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/expression.rb
  220 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/context.rb
  221 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/parser_switching.rb
  222 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/tag.rb
  223 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/block.rb
  224 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/block_body.rb
  225 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/document.rb
  226 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/variable.rb
  227 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/variable_lookup.rb
  228 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/range_lookup.rb
  229 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/file_system.rb
  230 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/resource_limits.rb
  231 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/template.rb
  232 /usr/lib/ruby/2.5.0/cgi/core.rb
  233 /usr/lib/x86_64-linux-gnu/ruby/2.5.0/cgi/escape.so
  234 /usr/lib/ruby/2.5.0/cgi/util.rb
  235 /usr/lib/ruby/2.5.0/cgi/cookie.rb
  236 /usr/lib/ruby/2.5.0/cgi.rb
  237 /usr/lib/x86_64-linux-gnu/ruby/2.5.0/bigdecimal.so
  238 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/standardfilters.rb
  239 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/condition.rb
  240 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/utils.rb
  241 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/tokenizer.rb
  242 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/parse_context.rb
  243 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/tags/increment.rb
  244 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/tags/ifchanged.rb
  245 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/tags/continue.rb
  246 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/tags/for.rb
  247 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/tags/include.rb
  248 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/tags/raw.rb
  249 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/tags/comment.rb
  250 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/tags/if.rb
  251 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/tags/unless.rb
  252 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/tags/break.rb
  253 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/tags/capture.rb
  254 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/tags/cycle.rb
  255 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/tags/decrement.rb
  256 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/tags/case.rb
  257 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/tags/assign.rb
  258 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid/tags/table_row.rb
  259 /var/lib/gems/2.5.0/gems/liquid-4.0.3/lib/liquid.rb
  260 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/version.rb
  261 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/element.rb
  262 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/error.rb
  263 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/parser.rb
  264 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/utils.rb
  265 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/utils/configurable.rb
  266 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/converter.rb
  267 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/options.rb
  268 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/document.rb
  269 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown.rb
  270 /var/lib/gems/2.5.0/gems/colorator-1.1.0/lib/colorator/core_ext.rb
  271 /var/lib/gems/2.5.0/gems/colorator-1.1.0/lib/colorator.rb
  272 /var/lib/gems/2.5.0/gems/concurrent-ruby-1.1.5/lib/concurrent/constants.rb
  273 /var/lib/gems/2.5.0/gems/concurrent-ruby-1.1.5/lib/concurrent/utility/engine.rb
  274 /var/lib/gems/2.5.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/abstract_object.rb
  275 /var/lib/gems/2.5.0/gems/concurrent-ruby-1.1.5/lib/concurrent/utility/native_extension_loader.rb
  276 /var/lib/gems/2.5.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/mri_object.rb
  277 /var/lib/gems/2.5.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/jruby_object.rb
  278 /var/lib/gems/2.5.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/rbx_object.rb
  279 /var/lib/gems/2.5.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/truffleruby_object.rb
  280 /var/lib/gems/2.5.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/object.rb
  281 /var/lib/gems/2.5.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/volatile.rb
  282 /var/lib/gems/2.5.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/abstract_lockable_object.rb
  283 /var/lib/gems/2.5.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/mutex_lockable_object.rb
  284 /var/lib/gems/2.5.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/jruby_lockable_object.rb
  285 /var/lib/gems/2.5.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/rbx_lockable_object.rb
  286 /var/lib/gems/2.5.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/lockable_object.rb
  287 /var/lib/gems/2.5.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/condition.rb
  288 /var/lib/gems/2.5.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/lock.rb
  289 /var/lib/gems/2.5.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization.rb
  290 /var/lib/gems/2.5.0/gems/concurrent-ruby-1.1.5/lib/concurrent/collection/map/non_concurrent_map_backend.rb
  291 /var/lib/gems/2.5.0/gems/concurrent-ruby-1.1.5/lib/concurrent/collection/map/mri_map_backend.rb
  292 /var/lib/gems/2.5.0/gems/concurrent-ruby-1.1.5/lib/concurrent/map.rb
  293 /var/lib/gems/2.5.0/gems/i18n-1.8.2/lib/i18n/version.rb
  294 /var/lib/gems/2.5.0/gems/i18n-1.8.2/lib/i18n/exceptions.rb
  295 /var/lib/gems/2.5.0/gems/i18n-1.8.2/lib/i18n/interpolate/ruby.rb
  296 /var/lib/gems/2.5.0/gems/i18n-1.8.2/lib/i18n.rb
  297 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/plugin.rb
  298 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/converter.rb
  299 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/generator.rb
  300 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/command.rb
  301 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/liquid_extensions.rb
  302 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/filters/date_filters.rb
  303 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/filters/grouping_filters.rb
  304 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/filters/url_filters.rb
  305 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/filters.rb
  306 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/external.rb
  307 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/log_adapter.rb
  308 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/stevenson.rb
  309 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/drops/drop.rb
  310 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/drops/document_drop.rb
  311 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/commands/build.rb
  312 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/commands/clean.rb
  313 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/commands/doctor.rb
  314 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/commands/help.rb
  315 /usr/lib/ruby/2.5.0/erb.rb
  316 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/commands/new.rb
  317 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/commands/new_theme.rb
  318 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/commands/serve.rb
  319 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/converters/identity.rb
  320 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/converters/markdown.rb
  321 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/parser/base.rb
  322 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/parser/kramdown/blank_line.rb
  323 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/parser/kramdown/eob.rb
  324 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/parser/kramdown/extensions.rb
  325 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/parser/kramdown/horizontal_rule.rb
  326 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/parser/kramdown/list.rb
  327 /usr/lib/ruby/2.5.0/rexml/parseexception.rb
  328 /usr/lib/ruby/2.5.0/rexml/undefinednamespaceexception.rb
  329 /usr/lib/ruby/2.5.0/rexml/encoding.rb
  330 /usr/lib/ruby/2.5.0/rexml/source.rb
  331 /usr/lib/ruby/2.5.0/rexml/parsers/baseparser.rb
  332 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/utils/entities.rb
  333 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/parser/html.rb
  334 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/parser/kramdown/html.rb
  335 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/parser/kramdown/paragraph.rb
  336 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/parser/kramdown/block_boundary.rb
  337 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/parser/kramdown/header.rb
  338 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/parser/kramdown/blockquote.rb
  339 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/parser/kramdown/table.rb
  340 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/parser/kramdown/codeblock.rb
  341 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/parser/kramdown/escaped_chars.rb
  342 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/parser/kramdown/link.rb
  343 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/parser/kramdown/footnote.rb
  344 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/parser/kramdown/html_entity.rb
  345 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/parser/kramdown/line_break.rb
  346 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/parser/kramdown/typographic_symbol.rb
  347 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/parser/kramdown/autolink.rb
  348 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/parser/kramdown/codespan.rb
  349 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/parser/kramdown/emphasis.rb
  350 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/parser/kramdown/smart_quotes.rb
  351 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/parser/kramdown/math.rb
  352 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/parser/kramdown/abbreviation.rb
  353 /var/lib/gems/2.5.0/gems/kramdown-2.1.0/lib/kramdown/parser/kramdown.rb
  354 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/converters/smartypants.rb
  355 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/converters/markdown/kramdown_parser.rb
  356 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/drops/collection_drop.rb
  357 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/drops/excerpt_drop.rb
  358 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/drops/jekyll_drop.rb
  359 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/drops/site_drop.rb
  360 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/drops/static_file_drop.rb
  361 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/drops/unified_payload_drop.rb
  362 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/drops/url_drop.rb
  363 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/tags/highlight.rb
  364 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/tags/include.rb
  365 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/tags/link.rb
  366 /var/lib/gems/2.5.0/gems/jekyll-4.0.0/lib/jekyll/tags/post_url.rb
  367 /var/lib/gems/2.5.0/gems/jekyll-sass-converter-2.0.1/lib/jekyll-sass-converter/version.rb
  368 /var/lib/gems/2.5.0/gems/sassc-2.2.1/lib/sassc/version.rb
  369 /var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi_c.so
  370 /var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi/platform.rb
  371 /var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi/data_converter.rb
  372 /var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi/types.rb
  373 /var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi/library.rb
  374 /var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi/errno.rb
  375 /var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi/pointer.rb
  376 /var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi/memorypointer.rb
  377 /var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi/struct_layout.rb
  378 /var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi/struct_layout_builder.rb
  379 /var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi/struct_by_reference.rb
  380 /var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi/struct.rb
  381 /var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi/union.rb
  382 /var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi/managedstruct.rb
  383 /var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi/callback.rb
  384 /var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi/io.rb
  385 /var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi/autopointer.rb
  386 /var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi/variadic.rb
  387 /var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi/enum.rb
  388 /var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi/version.rb
  389 /var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi/ffi.rb
  390 /var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi.rb

* Process memory map:

55726f8f5000-55726f8f6000 r--p 00000000 08:03 1049144                    /usr/bin/ruby2.5
55726f8f6000-55726f8f7000 r-xp 00001000 08:03 1049144                    /usr/bin/ruby2.5
55726f8f7000-55726f8f8000 r--p 00002000 08:03 1049144                    /usr/bin/ruby2.5
55726f8f8000-55726f8f9000 r--p 00002000 08:03 1049144                    /usr/bin/ruby2.5
55726f8f9000-55726f8fa000 rw-p 00003000 08:03 1049144                    /usr/bin/ruby2.5
55726fef0000-557270e80000 rw-p 00000000 00:00 0                          [heap]
7f4f747d7000-7f4f74801000 r--s 00000000 08:03 978828                     /lib/x86_64-linux-gnu/ld-2.29.so
7f4f74801000-7f4f74a6f000 r--s 00000000 08:03 1312054                    /var/lib/gems/2.5.0/gems/sassc-2.2.1/lib/sassc/libsass.so
7f4f74a6f000-7f4f74c2c000 r--s 00000000 08:03 978842                     /lib/x86_64-linux-gnu/libc-2.29.so
7f4f74c2c000-7f4f74edd000 r--s 00000000 08:03 1053434                    /usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5.7
7f4f74edd000-7f4f74f73000 r--p 00000000 08:03 979610                     /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28
7f4f74f73000-7f4f7505c000 r-xp 00096000 08:03 979610                     /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28
7f4f7505c000-7f4f750a6000 r--p 0017f000 08:03 979610                     /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28
7f4f750a6000-7f4f750b1000 r--p 001c8000 08:03 979610                     /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28
7f4f750b1000-7f4f750b4000 rw-p 001d3000 08:03 979610                     /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28
7f4f750b4000-7f4f750b7000 rw-p 00000000 00:00 0 
7f4f750b7000-7f4f75120000 r--p 00000000 08:03 1312054                    /var/lib/gems/2.5.0/gems/sassc-2.2.1/lib/sassc/libsass.so
7f4f75120000-7f4f7528f000 r-xp 00069000 08:03 1312054                    /var/lib/gems/2.5.0/gems/sassc-2.2.1/lib/sassc/libsass.so
7f4f7528f000-7f4f752dc000 r--p 001d8000 08:03 1312054                    /var/lib/gems/2.5.0/gems/sassc-2.2.1/lib/sassc/libsass.so
7f4f752dc000-7f4f752e9000 r--p 00224000 08:03 1312054                    /var/lib/gems/2.5.0/gems/sassc-2.2.1/lib/sassc/libsass.so
7f4f752e9000-7f4f752eb000 rw-p 00231000 08:03 1312054                    /var/lib/gems/2.5.0/gems/sassc-2.2.1/lib/sassc/libsass.so
7f4f752eb000-7f4f753b6000 rw-p 00000000 00:00 0 
7f4f753b6000-7f4f753b8000 r--p 00000000 08:03 1053451                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/bigdecimal.so
7f4f753b8000-7f4f753c5000 r-xp 00002000 08:03 1053451                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/bigdecimal.so
7f4f753c5000-7f4f753c8000 r--p 0000f000 08:03 1053451                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/bigdecimal.so
7f4f753c8000-7f4f753c9000 ---p 00012000 08:03 1053451                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/bigdecimal.so
7f4f753c9000-7f4f753ca000 r--p 00012000 08:03 1053451                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/bigdecimal.so
7f4f753ca000-7f4f753cb000 rw-p 00013000 08:03 1053451                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/bigdecimal.so
7f4f753cb000-7f4f753cc000 r--p 00000000 08:03 1053453                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/cgi/escape.so
7f4f753cc000-7f4f753ce000 r-xp 00001000 08:03 1053453                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/cgi/escape.so
7f4f753ce000-7f4f753cf000 r--p 00003000 08:03 1053453                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/cgi/escape.so
7f4f753cf000-7f4f753d0000 r--p 00003000 08:03 1053453                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/cgi/escape.so
7f4f753d0000-7f4f753d1000 rw-p 00004000 08:03 1053453                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/cgi/escape.so
7f4f753d1000-7f4f753d3000 r--p 00000000 08:03 1053555                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/strscan.so
7f4f753d3000-7f4f753d6000 r-xp 00002000 08:03 1053555                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/strscan.so
7f4f753d6000-7f4f753d7000 r--p 00005000 08:03 1053555                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/strscan.so
7f4f753d7000-7f4f753d8000 ---p 00006000 08:03 1053555                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/strscan.so
7f4f753d8000-7f4f753d9000 r--p 00006000 08:03 1053555                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/strscan.so
7f4f753d9000-7f4f753da000 rw-p 00007000 08:03 1053555                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/strscan.so
7f4f753da000-7f4f753dc000 r--p 00000000 08:03 1053444                    /usr/lib/x86_64-linux-gnu/libyaml-0.so.2.0.6
7f4f753dc000-7f4f753f6000 r-xp 00002000 08:03 1053444                    /usr/lib/x86_64-linux-gnu/libyaml-0.so.2.0.6
7f4f753f6000-7f4f753fa000 r--p 0001c000 08:03 1053444                    /usr/lib/x86_64-linux-gnu/libyaml-0.so.2.0.6
7f4f753fa000-7f4f753fb000 r--p 0001f000 08:03 1053444                    /usr/lib/x86_64-linux-gnu/libyaml-0.so.2.0.6
7f4f753fb000-7f4f753fc000 rw-p 00020000 08:03 1053444                    /usr/lib/x86_64-linux-gnu/libyaml-0.so.2.0.6
7f4f75401000-7f4f75404000 r--p 00000000 08:03 1053543                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/psych.so
7f4f75404000-7f4f75408000 r-xp 00003000 08:03 1053543                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/psych.so
7f4f75408000-7f4f75409000 r--p 00007000 08:03 1053543                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/psych.so
7f4f75409000-7f4f7540a000 ---p 00008000 08:03 1053543                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/psych.so
7f4f7540a000-7f4f7540b000 r--p 00008000 08:03 1053543                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/psych.so
7f4f7540b000-7f4f7540c000 rw-p 00009000 08:03 1053543                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/psych.so
7f4f7540c000-7f4f7540e000 r--p 00000000 08:03 1053537                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/json/ext/generator.so
7f4f7540e000-7f4f75413000 r-xp 00002000 08:03 1053537                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/json/ext/generator.so
7f4f75413000-7f4f75415000 r--p 00007000 08:03 1053537                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/json/ext/generator.so
7f4f75415000-7f4f75416000 r--p 00008000 08:03 1053537                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/json/ext/generator.so
7f4f75416000-7f4f75417000 rw-p 00009000 08:03 1053537                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/json/ext/generator.so
7f4f75417000-7f4f75419000 r--p 00000000 08:03 1053538                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/json/ext/parser.so
7f4f75419000-7f4f7541c000 r-xp 00002000 08:03 1053538                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/json/ext/parser.so
7f4f7541c000-7f4f7541d000 r--p 00005000 08:03 1053538                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/json/ext/parser.so
7f4f7541d000-7f4f7541e000 ---p 00006000 08:03 1053538                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/json/ext/parser.so
7f4f7541e000-7f4f7541f000 r--p 00006000 08:03 1053538                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/json/ext/parser.so
7f4f7541f000-7f4f75420000 rw-p 00007000 08:03 1053538                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/json/ext/parser.so
7f4f75420000-7f4f75422000 r--p 00000000 08:03 1053542                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/pathname.so
7f4f75422000-7f4f75426000 r-xp 00002000 08:03 1053542                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/pathname.so
7f4f75426000-7f4f75428000 r--p 00006000 08:03 1053542                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/pathname.so
7f4f75428000-7f4f75429000 r--p 00007000 08:03 1053542                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/pathname.so
7f4f75429000-7f4f7542a000 rw-p 00008000 08:03 1053542                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/pathname.so
7f4f7542a000-7f4f7542d000 r--p 00000000 08:03 1053456                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/date_core.so
7f4f7542d000-7f4f75456000 r-xp 00003000 08:03 1053456                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/date_core.so
7f4f75456000-7f4f7545d000 r--p 0002c000 08:03 1053456                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/date_core.so
7f4f7545d000-7f4f7545e000 ---p 00033000 08:03 1053456                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/date_core.so
7f4f7545e000-7f4f7545f000 r--p 00033000 08:03 1053456                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/date_core.so
7f4f7545f000-7f4f75460000 rw-p 00034000 08:03 1053456                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/date_core.so
7f4f75460000-7f4f75461000 rw-p 00000000 00:00 0 
7f4f75461000-7f4f75463000 r--p 00000000 08:03 1053526                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/etc.so
7f4f75463000-7f4f75466000 r-xp 00002000 08:03 1053526                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/etc.so
7f4f75466000-7f4f75468000 r--p 00005000 08:03 1053526                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/etc.so
7f4f75468000-7f4f75469000 r--p 00006000 08:03 1053526                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/etc.so
7f4f75469000-7f4f7546a000 rw-p 00007000 08:03 1053526                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/etc.so
7f4f75483000-7f4f75487000 r--s 00000000 08:03 978850                     /lib/x86_64-linux-gnu/libdl-2.29.so
7f4f75487000-7f4f7548a000 r--p 00000000 08:03 978858                     /lib/x86_64-linux-gnu/libgcc_s.so.1
7f4f7548a000-7f4f7549b000 r-xp 00003000 08:03 978858                     /lib/x86_64-linux-gnu/libgcc_s.so.1
7f4f7549b000-7f4f7549f000 r--p 00014000 08:03 978858                     /lib/x86_64-linux-gnu/libgcc_s.so.1
7f4f7549f000-7f4f754a0000 r--p 00017000 08:03 978858                     /lib/x86_64-linux-gnu/libgcc_s.so.1
7f4f754a0000-7f4f754a1000 rw-p 00018000 08:03 978858                     /lib/x86_64-linux-gnu/libgcc_s.so.1
7f4f754a2000-7f4f754a6000 r--s 00000000 08:03 1049144                    /usr/bin/ruby2.5
7f4f754a6000-7f4f754ab000 r--p 00000000 08:03 1186360                    /var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi_c.so
7f4f754ab000-7f4f754c1000 r-xp 00005000 08:03 1186360                    /var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi_c.so
7f4f754c1000-7f4f754c9000 r--p 0001b000 08:03 1186360                    /var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi_c.so
7f4f754c9000-7f4f754ca000 r--p 00022000 08:03 1186360                    /var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi_c.so
7f4f754ca000-7f4f754cb000 rw-p 00023000 08:03 1186360                    /var/lib/gems/2.5.0/gems/ffi-1.12.2/lib/ffi_c.so
7f4f754cb000-7f4f754cd000 r--p 00000000 08:03 1053554                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/stringio.so
7f4f754cd000-7f4f754d1000 r-xp 00002000 08:03 1053554                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/stringio.so
7f4f754d1000-7f4f754d3000 r--p 00006000 08:03 1053554                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/stringio.so
7f4f754d3000-7f4f754d4000 r--p 00007000 08:03 1053554                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/stringio.so
7f4f754d4000-7f4f754d5000 rw-p 00008000 08:03 1053554                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/stringio.so
7f4f754d5000-7f4f754d6000 r--p 00000000 08:03 1053512                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/enc/trans/transdb.so
7f4f754d6000-7f4f754d8000 r-xp 00001000 08:03 1053512                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/enc/trans/transdb.so
7f4f754d8000-7f4f754d9000 r--p 00003000 08:03 1053512                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/enc/trans/transdb.so
7f4f754d9000-7f4f754da000 r--p 00003000 08:03 1053512                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/enc/trans/transdb.so
7f4f754da000-7f4f754db000 rw-p 00004000 08:03 1053512                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/enc/trans/transdb.so
7f4f754db000-7f4f754dc000 r--p 00000000 08:03 1053469                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/enc/encdb.so
7f4f754dc000-7f4f754dd000 r-xp 00001000 08:03 1053469                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/enc/encdb.so
7f4f754dd000-7f4f754de000 r--p 00002000 08:03 1053469                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/enc/encdb.so
7f4f754de000-7f4f754df000 r--p 00002000 08:03 1053469                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/enc/encdb.so
7f4f754df000-7f4f754e0000 rw-p 00003000 08:03 1053469                    /usr/lib/x86_64-linux-gnu/ruby/2.5.0/enc/encdb.so
7f4f754e0000-7f4f755e1000 rw-p 00000000 00:00 0 
7f4f755e1000-7f4f758c6000 r--p 00000000 08:03 1064470                    /usr/lib/locale/locale-archive
7f4f758c6000-7f4f758c9000 rw-p 00000000 00:00 0 
7f4f758c9000-7f4f758d8000 r--p 00000000 08:03 978865                     /lib/x86_64-linux-gnu/libm-2.29.so
7f4f758d8000-7f4f75973000 r-xp 0000f000 08:03 978865                     /lib/x86_64-linux-gnu/libm-2.29.so
7f4f75973000-7f4f75a0c000 r--p 000aa000 08:03 978865                     /lib/x86_64-linux-gnu/libm-2.29.so
7f4f75a0c000-7f4f75a0d000 r--p 00142000 08:03 978865                     /lib/x86_64-linux-gnu/libm-2.29.so
7f4f75a0d000-7f4f75a0e000 rw-p 00143000 08:03 978865                     /lib/x86_64-linux-gnu/libm-2.29.so
7f4f75a0e000-7f4f75a10000 rw-p 00000000 00:00 0 
7f4f75a10000-7f4f75a12000 r--p 00000000 08:03 979574                     /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
7f4f75a12000-7f4f75a27000 r-xp 00002000 08:03 979574                     /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
7f4f75a27000-7f4f75a41000 r--p 00017000 08:03 979574                     /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
7f4f75a41000-7f4f75a42000 r--p 00030000 08:03 979574                     /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
7f4f75a42000-7f4f75a43000 rw-p 00031000 08:03 979574                     /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
7f4f75a43000-7f4f75a4b000 rw-p 00000000 00:00 0 
7f4f75a4b000-7f4f75a4c000 r--p 00000000 08:03 978850                     /lib/x86_64-linux-gnu/libdl-2.29.so
7f4f75a4c000-7f4f75a4d000 r-xp 00001000 08:03 978850                     /lib/x86_64-linux-gnu/libdl-2.29.so
7f4f75a4d000-7f4f75a4e000 r--p 00002000 08:03 978850                     /lib/x86_64-linux-gnu/libdl-2.29.so
7f4f75a4e000-7f4f75a4f000 r--p 00002000 08:03 978850                     /lib/x86_64-linux-gnu/libdl-2.29.so
7f4f75a4f000-7f4f75a50000 rw-p 00003000 08:03 978850                     /lib/x86_64-linux-gnu/libdl-2.29.so
7f4f75a50000-7f4f75a5b000 r--p 00000000 08:03 979585                     /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.2
7f4f75a5b000-7f4f75ab9000 r-xp 0000b000 08:03 979585                     /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.2
7f4f75ab9000-7f4f75ad0000 r--p 00069000 08:03 979585                     /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.2
7f4f75ad0000-7f4f75ad1000 ---p 00080000 08:03 979585                     /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.2
7f4f75ad1000-7f4f75ad2000 r--p 00080000 08:03 979585                     /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.2
7f4f75ad2000-7f4f75ad3000 rw-p 00081000 08:03 979585                     /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.2
7f4f75ad3000-7f4f75ada000 r--p 00000000 08:03 978899                     /lib/x86_64-linux-gnu/libpthread-2.29.so
7f4f75ada000-7f4f75ae9000 r-xp 00007000 08:03 978899                     /lib/x86_64-linux-gnu/libpthread-2.29.so
7f4f75ae9000-7f4f75aee000 r--p 00016000 08:03 978899                     /lib/x86_64-linux-gnu/libpthread-2.29.so
7f4f75aee000-7f4f75aef000 r--p 0001a000 08:03 978899                     /lib/x86_64-linux-gnu/libpthread-2.29.so
7f4f75aef000-7f4f75af0000 rw-p 0001b000 08:03 978899                     /lib/x86_64-linux-gnu/libpthread-2.29.so
7f4f75af0000-7f4f75af4000 rw-p 00000000 00:00 0 
7f4f75af4000-7f4f75b19000 r--p 00000000 08:03 978842                     /lib/x86_64-linux-gnu/libc-2.29.so
7f4f75b19000-7f4f75c60000 r-xp 00025000 08:03 978842                     /lib/x86_64-linux-gnu/libc-2.29.so
7f4f75c60000-7f4f75ca9000 r--p 0016c000 08:03 978842                     /lib/x86_64-linux-gnu/libc-2.29.so
7f4f75a50000-7f4f75a5b000 r--p 00000000 08:03 979585                     /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.2
7f4f75a5b000-7f4f75ab9000 r-xp 0000b000 08:03 979585                     /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.2
7f4f75ab9000-7f4f75ad0000 r--p 00069000 08:03 979585                     /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.2
7f4f75ad0000-7f4f75ad1000 ---p 00080000 08:03 979585                     /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.2
7f4f75ad1000-7f4f75ad2000 r--p 00080000 08:03 979585                     /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.2
7f4f75ad2000-7f4f75ad3000 rw-p 00081000 08:03 979585                     /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.2
7f4f75ad3000-7f4f75ada000 r--p 00000000 08:03 978899                     /lib/x86_64-linux-gnu/libpthread-2.29.so
7f4f75ada000-7f4f75ae9000 r-xp 00007000 08:03 978899                     /lib/x86_64-linux-gnu/libpthread-2.29.so
7f4f75ae9000-7f4f75aee000 r--p 00016000 08:03 978899                     /lib/x86_64-linux-gnu/libpthread-2.29.so
7f4f75aee000-7f4f75aef000 r--p 0001a000 08:03 978899                     /lib/x86_64-linux-gnu/libpthread-2.29.so
7f4f75aef000-7f4f75af0000 rw-p 0001b000 08:03 978899                     /lib/x86_64-linux-gnu/libpthread-2.29.so
7f4f75af0000-7f4f75af4000 rw-p 00000000 00:00 0
7f4f75af4000-7f4f75b19000 r--p 00000000 08:03 978842                     /lib/x86_64-linux-gnu/libc-2.29.so
7f4f75b19000-7f4f75c60000 r-xp 00025000 08:03 978842                     /lib/x86_64-linux-gnu/libc-2.29.so
7f4f75c60000-7f4f75ca9000 r--p 0016c000 08:03 978842                     /lib/x86_64-linux-gnu/libc-2.29.so
7f4f75ca9000-7f4f75caa000 ---p 001b5000 08:03 978842                     /lib/x86_64-linux-gnu/libc-2.29.so
7f4f75caa000-7f4f75cad000 r--p 001b5000 08:03 978842                     /lib/x86_64-linux-gnu/libc-2.29.so
7f4f75cad000-7f4f75cb0000 rw-p 001b8000 08:03 978842                     /lib/x86_64-linux-gnu/libc-2.29.so
7f4f75cb0000-7f4f75cb4000 rw-p 00000000 00:00 0
7f4f75cb4000-7f4f75cdd000 r--p 00000000 08:03 1053434                    /usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5.7
7f4f75cdd000-7f4f75e85000 r-xp 00029000 08:03 1053434                    /usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5.7
7f4f75e85000-7f4f75f5c000 r--p 001d1000 08:03 1053434                    /usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5.7
7f4f75f5c000-7f4f75f64000 r--p 002a7000 08:03 1053434                    /usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5.7
7f4f75f64000-7f4f75f65000 rw-p 002af000 08:03 1053434                    /usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5.7
7f4f75f65000-7f4f75f77000 rw-p 00000000 00:00 0
7f4f75f77000-7f4f75f78000 ---p 00000000 00:00 0
7f4f75f78000-7f4f75f7c000 rw-p 00000000 00:00 0
7f4f75f7c000-7f4f75f7d000 r--p 00000000 08:03 978828                     /lib/x86_64-linux-gnu/ld-2.29.so
7f4f75f7d000-7f4f75f9c000 r-xp 00001000 08:03 978828                     /lib/x86_64-linux-gnu/ld-2.29.so
7f4f75f9c000-7f4f75fa4000 r--p 00020000 08:03 978828                     /lib/x86_64-linux-gnu/ld-2.29.so
7f4f75fa4000-7f4f75fa5000 r--p 00027000 08:03 978828                     /lib/x86_64-linux-gnu/ld-2.29.so
7f4f75fa5000-7f4f75fa6000 rw-p 00028000 08:03 978828                     /lib/x86_64-linux-gnu/ld-2.29.so
7f4f75fa6000-7f4f75fa7000 rw-p 00000000 00:00 0
7ffe0b492000-7ffe0bc91000 rw-p 00000000 00:00 0                          [stack]
7ffe0bd84000-7ffe0bd87000 r--p 00000000 00:00 0                          [vvar]
7ffe0bd87000-7ffe0bd89000 r-xp 00000000 00:00 0                          [vdso]


[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html

Aborted (core dumped)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Read this article where it appeared first: &lt;a href=&quot;https://binfalse.de/2020/02/07/jekyll-throwing-strange-error-at-library-rb-112/&quot;&gt;binfalse.de&lt;/a&gt;&lt;/p&gt;</description>
				<pubDate>Fri, 07 Feb 2020 17:25:25 +0000</pubDate>
				<link>https://binfalse.de/2020/02/07/jekyll-throwing-strange-error-at-library-rb-112/</link>
				<guid isPermaLink="true">https://binfalse.de/2020/02/07/jekyll-throwing-strange-error-at-library-rb-112/</guid>
			</item>
		
			<item>
				<title>Practical Challenges of Interdisciplinary Teamwork</title>
				<description>&lt;!-- _includes/image.html --&gt;
&lt;div class=&quot;image-wrapper alignright&quot;&gt;
    &lt;figure&gt;
    
    &lt;a href=&quot;/assets/media/pics/2019/teamwork.svg&quot; title=&quot;Teamwork&quot; target=&quot;_blank&quot; data-lightbox=&quot;/2019/10/04/practical-challenges-of-interdisciplinary-teamwork/2019/10/04/practical-challenges-of-interdisciplinary-teamwork/&quot; data-title=&quot;Teamwork &amp;mdash; logo created using inscakes's open symbols (Emoji One)&quot; class=&quot;link-noborder&quot;&gt;
    
        &lt;img src=&quot;/assets/media/pics/2019/teamwork.png&quot; alt=&quot;Teamwork&quot; style=&quot;max-width:300px&quot; /&gt;
    
    &lt;/a&gt;
    
    
        &lt;figcaption&gt;Teamwork &amp;mdash; logo created using inscakes's open symbols (Emoji One)&lt;/figcaption&gt;
    
    &lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;Working in an interdisciplinary field is my vocation.
I am a Bioinformatician – my whole education was shaped by an interdisciplinary nature.
I get paid by the &lt;a href=&quot;https://www.uni-rostock.de/&quot;&gt;University of Rostock&lt;/a&gt;, which is also everything but straight forward:
Part-time I am working as a systems engineer for the &lt;a href=&quot;https://www.informatik.uni-rostock.de/&quot;&gt;institute of computer science&lt;/a&gt;, the other time I’m working at the &lt;a href=&quot;https://www.sbi.uni-rostock.de/&quot;&gt;department of systems biology and bioinformatics (SBI)&lt;/a&gt;.
Thus, I have two desks at the university, which are approximately 2km away from each other.
At these desks I am doing hardcore IT stuff and/or/xor applied computer science in various projects and roles.
My colleagues are again purely non-pure:
There are computer scientists from Italy, mathematicians from India, medical biotechnologists from Canada, neurobiologists from Germany, computational engineers from Pakistan, and so on..
At one desk I am talking in English, at the other everyone’s expecting German (including complaints about anglicisms)..&lt;/p&gt;

&lt;p&gt;Here I’m just jotting down some experiences from the recent past to increase the awareness of the complexity on the meta-level of interdisciplinary and intercultural collaborations.&lt;/p&gt;

&lt;h2 id=&quot;different-cultures&quot;&gt;Different Cultures…&lt;/h2&gt;

&lt;p&gt;Pretty early I learned about the issues when working across different domains, languages, and cultures.
For example, a &lt;em&gt;yes&lt;/em&gt; from a German to &lt;em&gt;Do you understand what I just explained?&lt;/em&gt; typically means (s)he understood what I just explained.
However, some cultures would not publicly admit a lack of understanding.
Thus, my colleague will say (s)he understood and then go away to actually do the opposite.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Some time ago, I offered a beer to an Asian friend.
He denied and so he did not get one.
Months later he confessed that he has been suffering, watching me enjoying the cold beer – as he desperately wanted a beer as well!
But in his culture you wouldn’t immediately take something offered.
Instead he wants to be persuaded into a beer…&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Hence, a &lt;em&gt;no&lt;/em&gt; does not necessarily mean &lt;em&gt;no.&lt;/em&gt;
And vice versa, if he offers me some tea or sweets, he would not take my &lt;em&gt;no&lt;/em&gt; for granted, but would offer the sweets again and again ;-)&lt;/p&gt;

&lt;h2 id=&quot;different-languages&quot;&gt;Different Languages…&lt;/h2&gt;

&lt;p&gt;Such contradictions are not necessarily a cultural issue, but it is sometimes due to the language:
If our mother tongues differ we are typically falling back to English, which is then a foreign language for both dialogue partners.
Consequently, everyone struggles expressing and grasping thoughts.
This entails a good potential for misunderstandings.
In addition, there may be a clash of domain languages – experts from different fields think in orthogonal concepts or use the same words differently.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I recently had a kitchen-conversation with a biophysicist from Iran about &lt;a href=&quot;https://en.wikipedia.org/wiki/Polymerase_chain_reaction&quot;&gt;PCR: The polymerase chain reaction&lt;/a&gt;.
For quite some time I thought he must be drunk, because it did absolutely make no sense what he was talking about.
Until I realised, that he was actually talking about &lt;a href=&quot;https://en.wikipedia.org/wiki/Principal_component_analysis&quot;&gt;PCA: The Principal Component Analysis&lt;/a&gt;!
Both, PCR and PCA would have made sense to chat about with him and the pronunciation of the German &lt;em&gt;A&lt;/em&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ʔaː&lt;/code&gt;) and the English &lt;em&gt;R&lt;/em&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ɑːr&lt;/code&gt;) is quite similar..&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There are many similar confusions.
At our department, for example, &lt;strong&gt;PSA&lt;/strong&gt; is used for a public service announcement or for a &lt;a href=&quot;https://en.wikipedia.org/wiki/Prostate-specific_antigen&quot;&gt;prostate-specific antigen&lt;/a&gt; – that’s not always crystal clear.
Similarly, &lt;strong&gt;APT&lt;/strong&gt; is an abbreviation for apartment at one of my desks, while it may mean &lt;a href=&quot;https://en.wikipedia.org/wiki/Advanced_persistent_threat&quot;&gt;advanced persistent threat&lt;/a&gt; or that someone is talking about &lt;a href=&quot;https://en.wikipedia.org/wiki/APT_(Package_Manager)&quot;&gt;Debian’s package manager&lt;/a&gt; at the other desk.&lt;/p&gt;

&lt;h2 id=&quot;different-tools&quot;&gt;Different Tools…&lt;/h2&gt;

&lt;p&gt;However, it is not only about languages, but also about best-practices in different domains!
People from diverse disciplines learnt to use diverging tools and workflows, that sometimes seem crazy from the opposite perspective.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Not long ago, we built a website in an interdisciplinary project.
The developer drafted some text for the webpage and asked the others to review the wording and correct typos – assuming to get a pull request, as the sources are shared on a common code platform.
However, the response was an email with a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.docx&lt;/code&gt; attachment:
The whole text of the web page was copied to Microsoft Word and then corrected using track-changes!
Which in turn caused further trouble with the developer, who’s not used to work with Microsoft’s office… ;-)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Indeed, that happens all too often!&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The other day, someone sent an email&lt;/p&gt;
  &lt;blockquote&gt;
    &lt;p&gt;Please kindly find the attached file, the first draft of workflow.&lt;br /&gt;
I am looking forward to your feedback.&lt;/p&gt;
  &lt;/blockquote&gt;

  &lt;p&gt;attached was a file &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Präsentation2.pptx&lt;/code&gt;.
That, of course, made the tech-guy’s hair stand on end!
Powerpoint to draw figures?
A meaningless file name with German diaeresis (Umlaut)?
And the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2&lt;/code&gt; in the file’s name explains everything about how the documents are versioned..&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And so goes the whole communication between the experts from different domains.
While some always communicate through tickets on the coding platform, others will respond with attachments to emails or using some other channels (such as Twitter messages or whatever chat protocols).
Consequently, you are spending a significant amount of time on searching, jigsawing, and puzzling messages.&lt;/p&gt;

&lt;h2 id=&quot;different-times&quot;&gt;Different Times…&lt;/h2&gt;

&lt;p&gt;The communication becomes even more difficult if the partners are located in different time zones.
Obviously, there is then less overlap in working hours.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;When I write an email to a collaborator in New Zealand, he will typically receive it around the middle of his night and answer in the middle of my night.
For a call, we need to schedule a meeting which is &lt;em&gt;out-of-office-time&lt;/em&gt; for both of us.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Consequently, decisions, that would have been made in a few minutes during a &lt;abbr title=&quot;face-to-face&quot;&gt;f2f&lt;/abbr&gt; meeting, can take several days of discussions.&lt;/p&gt;

&lt;h2 id=&quot;different-goverments&quot;&gt;Different Goverments…&lt;/h2&gt;

&lt;p&gt;Working across different time zones typically also implies working across loyalties.
My collaborators may need to comply with very different laws – or they may be affected by other absurd rules!&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;In a recent project we decided to use one of these big American platforms to facilitate our collaboration.
Suddenly, it turned out that some people in the team cannot access the platform anymore.
Even though they did nothing wrong, a wigged carrot on steroids violently banned them with embargos or sanctions.
Including all consequences.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Such things are simply unpredictable, but have serious impact on the collaboration.&lt;/p&gt;

&lt;h2 id=&quot;ergo-stop&quot;&gt;Ergo… Stop?&lt;/h2&gt;

&lt;p&gt;With all these difficulties, should you stop interdisciplinary teamwork?
Certainly not!!
Instead, be aware of these challenges and budget some extra time&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;to learn how to speak to one another without confusion,&lt;/li&gt;
  &lt;li&gt;to acknowledge the complexity on the meta-level of interactions, and&lt;/li&gt;
  &lt;li&gt;for unexpected interruptions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Despite all the difficulties, it’s great to work in diverse teams!
Even though it drove me crazy multiple times, I learnt to appreciate decelerations.
&lt;strong&gt;Different skills, contradictory perspectives, and orthogonal peculiarities entail many discussions and cost a great deal of energy, but almost always improve the quality of the product.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In addition, and maybe more importantly, working in an interdisciplinary field expands your horizon and you will learn things you cannot imagine.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;A recent visitor from Hong Kong exchanged insights about the current protests in his home country.
I had a conversation with two colleague from India and Pakistan about the Kashmir conflict.
And I actually felt the effects of embargos - which are otherwise far away from Germans..&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;However, the outcome is absolutely worth the &lt;em&gt;“trouble”&lt;/em&gt; ;-)&lt;/p&gt;

&lt;p&gt;Read this article where it appeared first: &lt;a href=&quot;https://binfalse.de/2019/10/04/practical-challenges-of-interdisciplinary-teamwork/&quot;&gt;binfalse.de&lt;/a&gt;&lt;/p&gt;</description>
				<pubDate>Fri, 04 Oct 2019 12:30:57 +0000</pubDate>
				<link>https://binfalse.de/2019/10/04/practical-challenges-of-interdisciplinary-teamwork/</link>
				<guid isPermaLink="true">https://binfalse.de/2019/10/04/practical-challenges-of-interdisciplinary-teamwork/</guid>
			</item>
		
			<item>
				<title>Dockerising Contao 4</title>
				<description>&lt;p&gt;Last year, we moved the website of our department from Typo3 to &lt;a href=&quot;https://contao.org/en/&quot;&gt;Contao&lt;/a&gt; version 3.
I wrote about that in &lt;a href=&quot;/2018/01/24/dockerising-a-contao-page/&quot;&gt;Dockerising a Contao website&lt;/a&gt; and &lt;a href=&quot;/2018/02/20/dockerising-a-contao-website-ii/&quot;&gt;Dockerising a Contao website II&lt;/a&gt;.
Now it was time to upgrade from Contao version 3 to 4.
And as usual: Things have changed…
So, how to jail a Contao 4 into a &lt;a href=&quot;https://www.docker.com/&quot;&gt;Docker&lt;/a&gt; container?&lt;/p&gt;

&lt;p&gt;Similar to Contao 3, we use two images for our Contao 4 site.
One is a general Contao 4 installation, the other one is our personalised version.&lt;/p&gt;

&lt;h2 id=&quot;a-general-contao-4-image&quot;&gt;A general Contao 4 image&lt;/h2&gt;

&lt;p&gt;The general Contao 4 is based on an &lt;a href=&quot;https://hub.docker.com/_/php&quot;&gt;PHP image&lt;/a&gt; that includes an &lt;a href=&quot;https://httpd.apache.org/&quot;&gt;Apache webserver&lt;/a&gt;.
In addition, we need to&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;install a few dependencies,&lt;/li&gt;
  &lt;li&gt;enable some Apache modules,&lt;/li&gt;
  &lt;li&gt;install some extra PHP extensions,&lt;/li&gt;
  &lt;li&gt;install &lt;a href=&quot;https://getcomposer.org/&quot;&gt;Composer,&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;and finally use Composer to install Contao.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This time, I outsourced the installation of Composer into a seperate script &lt;a href=&quot;https://github.com/binfalse/docker-contao/blob/1f562a56e594f74e72514beeaabe38d06c0ff037/install-composer.sh&quot;&gt;install-composer.sh&lt;/a&gt;:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;c&quot;&gt;#!/bin/sh&lt;/span&gt;

&lt;span class=&quot;nv&quot;&gt;EXPECTED_SIGNATURE&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;wget &lt;span class=&quot;nt&quot;&gt;-q&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-O&lt;/span&gt; - https://composer.github.io/installer.sig&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
php &lt;span class=&quot;nt&quot;&gt;-r&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;copy('https://getcomposer.org/installer', 'composer-setup.php');&quot;&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;ACTUAL_SIGNATURE&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;php &lt;span class=&quot;nt&quot;&gt;-r&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;echo hash_file('sha384', 'composer-setup.php');&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$EXPECTED_SIGNATURE&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$ACTUAL_SIGNATURE&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;then&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&amp;amp;2 &lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'ERROR: Invalid installer signature'&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;rm &lt;/span&gt;composer-setup.php
    &lt;span class=&quot;nb&quot;&gt;exit &lt;/span&gt;1
&lt;span class=&quot;k&quot;&gt;fi

&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;mkdir&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt; /composer/packages

php &lt;span class=&quot;nt&quot;&gt;-d&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;memory_limit&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-1&lt;/span&gt; composer-setup.php &lt;span class=&quot;nt&quot;&gt;--install-dir&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/composer
&lt;span class=&quot;nv&quot;&gt;RESULT&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$?&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;rm &lt;/span&gt;composer-setup.php
&lt;span class=&quot;c&quot;&gt;#chown -R www-data: /composer&lt;/span&gt;

&lt;span class=&quot;nb&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$RESULT&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Thus, you’ll find a current composer installation in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/composer&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://github.com/binfalse/docker-contao/blob/1f562a56e594f74e72514beeaabe38d06c0ff037/Dockerfile&quot;&gt;Dockerfile for the general image&lt;/a&gt; then boils down to the following:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-dockerfile&quot; data-lang=&quot;dockerfile&quot;&gt;&lt;span class=&quot;k&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;s&quot;&gt; php:7-apache&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;MAINTAINER&lt;/span&gt;&lt;span class=&quot;s&quot;&gt; martin scharm &amp;lt;https://binfalse.de/contact/&amp;gt;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;RUN &lt;/span&gt;apt-get update &lt;span class=&quot;se&quot;&gt;\
&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt-get &lt;span class=&quot;nb&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-y&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-q&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--no-install-recommends&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\
&lt;/span&gt;    wget &lt;span class=&quot;se&quot;&gt;\
&lt;/span&gt;    curl &lt;span class=&quot;se&quot;&gt;\
&lt;/span&gt;    unzip &lt;span class=&quot;se&quot;&gt;\
&lt;/span&gt;    zlib1g-dev &lt;span class=&quot;se&quot;&gt;\
&lt;/span&gt;    libpng-dev &lt;span class=&quot;se&quot;&gt;\
&lt;/span&gt;    libjpeg62-turbo &lt;span class=&quot;se&quot;&gt;\
&lt;/span&gt;    libjpeg62-turbo-dev &lt;span class=&quot;se&quot;&gt;\
&lt;/span&gt;    libcurl4-openssl-dev &lt;span class=&quot;se&quot;&gt;\
&lt;/span&gt;    libfreetype6-dev &lt;span class=&quot;se&quot;&gt;\
&lt;/span&gt;    libmcrypt-dev &lt;span class=&quot;se&quot;&gt;\
&lt;/span&gt;    libxml2-dev &lt;span class=&quot;se&quot;&gt;\
&lt;/span&gt;    libzip-dev &lt;span class=&quot;se&quot;&gt;\
&lt;/span&gt;    ssmtp &lt;span class=&quot;se&quot;&gt;\
&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt-get clean &lt;span class=&quot;se&quot;&gt;\
&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;rm&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-r&lt;/span&gt; /var/lib/apt/lists/&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\
&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; a2enmod expires headers rewrite

&lt;span class=&quot;k&quot;&gt;RUN &lt;/span&gt;docker-php-source extract &lt;span class=&quot;se&quot;&gt;\
&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; docker-php-ext-configure gd &lt;span class=&quot;nt&quot;&gt;--with-freetype-dir&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/usr/include/ &lt;span class=&quot;nt&quot;&gt;--with-jpeg-dir&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/usr/include/ &lt;span class=&quot;se&quot;&gt;\
&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; docker-php-ext-install &lt;span class=&quot;nt&quot;&gt;-j&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;nproc&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt; zip gd curl pdo pdo_mysql soap intl &lt;span class=&quot;se&quot;&gt;\
&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; docker-php-source delete

&lt;span class=&quot;k&quot;&gt;ADD&lt;/span&gt;&lt;span class=&quot;s&quot;&gt; install-composer.sh /install-composer.sh&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;RUN &lt;/span&gt;bash /install-composer.sh &lt;span class=&quot;se&quot;&gt;\
&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;chown&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-R&lt;/span&gt; www-data: /var/www

&lt;span class=&quot;k&quot;&gt;USER&lt;/span&gt;&lt;span class=&quot;s&quot;&gt; www-data&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;RUN &lt;/span&gt;php &lt;span class=&quot;nt&quot;&gt;-d&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;memory_limit&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-1&lt;/span&gt; /composer/composer.phar create-project contao/managed-edition /var/www/html &lt;span class=&quot;s1&quot;&gt;'4.4.*'&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;PLEASE NOTE:&lt;/strong&gt; sSMTP is not maintained anymore! Please switch to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;msmtp&lt;/code&gt;, for example, as I explained in &lt;a href=&quot;/2020/02/17/migrating-from-ssmtp-to-msmtp/&quot;&gt;Migrating from sSMTP to msmtp&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This image includes the package for &lt;a href=&quot;https://packages.qa.debian.org/s/ssmtp.html&quot;&gt;sSMTP&lt;/a&gt; to enable support for mails.
To learn how to configure sSMTP, have a look into my earlier article &lt;a href=&quot;/2016/11/25/mail-support-for-docker-s-php-fpm/&quot;&gt;Mail support for Docker’s php:fpm&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Alltogether, this gives us a proper recipe to get a dockerised Contao 4.
It is also available from the &lt;a href=&quot;https://hub.docker.com/&quot;&gt;Docker Hub&lt;/a&gt; as &lt;a href=&quot;https://hub.docker.com/r/binfalse/contao/&quot;&gt;binfalse/contao&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;a-personalised-contao-4-image&quot;&gt;A personalised Contao 4 image&lt;/h2&gt;

&lt;p&gt;Based on that general Docker image, you can now create your personalised Docker image.
There is a &lt;a href=&quot;https://github.com/binfalse/docker-contao/blob/1f562a56e594f74e72514beeaabe38d06c0ff037/Dockerfile-personalised&quot;&gt;template in the corresponding Github repository.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A few things worth mentioning:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;After installing additional contao modules, you should clear Contao’s cache using:&lt;/li&gt;
&lt;/ul&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-dockerfile&quot; data-lang=&quot;dockerfile&quot;&gt;&lt;span class=&quot;k&quot;&gt;RUN &lt;/span&gt;php &lt;span class=&quot;nt&quot;&gt;-q&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-d&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;memory_limit&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-1&lt;/span&gt; /var/www/html/vendor/contao/manager-bundle/bin/contao-console cache:clear &lt;span class=&quot;nt&quot;&gt;--env&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;prod &lt;span class=&quot;nt&quot;&gt;--no-warmup&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;ul&gt;
  &lt;li&gt;Contao still does not respect the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HTTP_X_FORWARDED_PROTO&lt;/code&gt;… Thus, if running behind a reverse proxy, Contao assumes its accessed through plain HTTP and won’t deliver HTTPS links. I explained that in &lt;a href=&quot;2018/02/20/dockerising-a-contao-website-ii/#https-vs-http&quot;&gt;Contao 3: HTTPS vs HTTP&lt;/a&gt;. However, the workaround for Contao 3 doesn’t work anymore - and there seems to be no proper solution for Contao 4. Therefore, we need to &lt;a href=&quot;2018/02/20/dockerising-a-contao-website-ii/&quot;&gt;inject some code into the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;app.php&lt;/code&gt;&lt;/a&gt;… Yes, you read correctly… Ugly, but anyway, can easily be done using:&lt;/li&gt;
&lt;/ul&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-dockerfile&quot; data-lang=&quot;dockerfile&quot;&gt;&lt;span class=&quot;k&quot;&gt;RUN &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sed&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-i&lt;/span&gt;.bak &lt;span class=&quot;s1&quot;&gt;'s%/\*%$_SERVER[&quot;HTTPS&quot;] = 1;/*%'&lt;/span&gt; /var/www/html/web/app.php&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;ul&gt;
  &lt;li&gt;The composer-based installation apparently fails to set the files’ links. Thus we need to do it manually:&lt;/li&gt;
&lt;/ul&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-dockerfile&quot; data-lang=&quot;dockerfile&quot;&gt;&lt;span class=&quot;k&quot;&gt;RUN &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;mkdir&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt; /var/www/html/files &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;ln&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-s&lt;/span&gt; /var/www/html/files /var/www/html/web/files&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Everything else should be pretty self-explaining…&lt;/p&gt;

&lt;h2 id=&quot;tying-things-together&quot;&gt;Tying things together&lt;/h2&gt;

&lt;p&gt;Use Docker-Compose or whatever to spawn a container of your personalised image (similar to &lt;a href=&quot;/2018/01/24/dockerising-a-contao-page/#tying-it-all-together-using-docker-compose&quot;&gt;Contao 3: Docker-Compose&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Just make sure, you mount a few things correctly into the container:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;your files need to go to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/var/www/html/files&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Contao’s configuration belongs to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/var/www/html/system/config/*.php&lt;/code&gt;, as usual&lt;/li&gt;
  &lt;li&gt;Symfony’s configuration belongs to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/var/www/html/app/config/parameters.yml&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/var/www/html/app/config/config.yml&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;For the mail configuration see &lt;a href=&quot;/2016/11/25/mail-support-for-docker-s-php-fpm/&quot;&gt;Mail support for Docker’s php:fpm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Please note, that the database connection must be configured in Symfony’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;parameters.yml&lt;/code&gt;!&lt;/strong&gt; Instead of Contao’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;localconfig.php&lt;/code&gt;, as it used to be for Contao 3.&lt;/p&gt;

&lt;p&gt;Read this article where it appeared first: &lt;a href=&quot;https://binfalse.de/2019/07/17/dockerising-contao-4/&quot;&gt;binfalse.de&lt;/a&gt;&lt;/p&gt;</description>
				<pubDate>Wed, 17 Jul 2019 07:48:06 +0000</pubDate>
				<link>https://binfalse.de/2019/07/17/dockerising-contao-4/</link>
				<guid isPermaLink="true">https://binfalse.de/2019/07/17/dockerising-contao-4/</guid>
			</item>
		
			<item>
				<title>Puppet to deploy Matlab</title>
				<description>&lt;!-- _includes/image.html --&gt;
&lt;div class=&quot;image-wrapper alignright&quot;&gt;
    &lt;figure&gt;
    
    &lt;a href=&quot;/assets/media/commons/Matlab_Logo-Puppet_Logo.svg&quot; title=&quot;Merge of Puppet Logo [Puppet_Logo.svg, Public domain] and MathWorks, Inc. [Matlab_Logo.svg, CC0], via Wikimedia Commons&quot; target=&quot;_blank&quot; data-lightbox=&quot;/2019/06/27/puppet-to-deploy-matlab/2019/06/27/puppet-to-deploy-matlab/&quot; data-title=&quot;Merge of Puppet Logo [Puppet_Logo.svg, Public domain] and MathWorks, Inc. [Matlab_Logo.svg, CC0], via Wikimedia Commons&quot; class=&quot;link-noborder&quot;&gt;
    
        &lt;img src=&quot;/assets/media/commons/Matlab_Logo-Puppet_Logo.png&quot; alt=&quot;Merge of Puppet Logo [Puppet_Logo.svg, Public domain] and MathWorks, Inc. [Matlab_Logo.svg, CC0], via Wikimedia Commons&quot; style=&quot;max-width:300px&quot; /&gt;
    
    &lt;/a&gt;
    
    
        &lt;figcaption&gt;Merge of Puppet Logo [Puppet_Logo.svg, Public domain] and MathWorks, Inc. [Matlab_Logo.svg, CC0], via Wikimedia Commons&lt;/figcaption&gt;
    
    &lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;If you’re coming from a scientific environment you’ve almost certainly heard of &lt;a href=&quot;https://en.wikipedia.org/wiki/MATLAB&quot;&gt;Matlab,&lt;/a&gt; haven’t you?
This brutally large software blob that can do basically all the math magic for people with minimal programming skills ;-)&lt;/p&gt;

&lt;p&gt;However, in a scientic environment you may need to deploy that software to a large number &lt;a href=&quot;https://en.wikipedia.org/wiki/Microsoft_Windows&quot;&gt;Windows&lt;/a&gt; PCs.
And lazy admins being lazy… We have tools for that! For example &lt;a href=&quot;https://puppet.com/&quot;&gt;Puppet&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;deployment&quot;&gt;Deployment&lt;/h2&gt;

&lt;p&gt;Here I assume that you have a network license server somewhere in your local infrastructure.
And I further assume that you already know how to install Matlab manually by answering all the questions in the installer &lt;a href=&quot;https://en.wikipedia.org/wiki/Graphical_user_interface&quot;&gt;GUI&lt;/a&gt; - so that you’ll end up with a working Matlab installation.&lt;/p&gt;

&lt;h3 id=&quot;0-what-we-need&quot;&gt;0. What we need&lt;/h3&gt;

&lt;p&gt;To deploy Matlab we need to have a few things ready:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;the Matlab binaries. They typically come in form of two &lt;a href=&quot;https://en.wikipedia.org/wiki/DVD&quot;&gt;DVD&lt;/a&gt; images in &lt;a href=&quot;https://en.wikipedia.org/wiki/ISO_image&quot;&gt;ISO&lt;/a&gt; format.&lt;/li&gt;
  &lt;li&gt;a license key, which typically looks like a large number of integers seperated by dashes &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;12345-67890-12343-....&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;a license file, that contains information on the license server etc&lt;/li&gt;
  &lt;li&gt;a puppet manifest - I’ll assume it’s called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MODULE/manifests/matlab.pp&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;a directory that is shared through Puppet - I will assume it’s the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/share/&lt;/code&gt; directory. Configure that for example in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/puppetlabs/puppet/fileserver.conf&lt;/code&gt; using:&lt;/li&gt;
&lt;/ul&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ini&quot; data-lang=&quot;ini&quot;&gt;&lt;span class=&quot;nn&quot;&gt;[share]&lt;/span&gt;
    &lt;span class=&quot;err&quot;&gt;path&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;/share/&lt;/span&gt;
    &lt;span class=&quot;err&quot;&gt;allow&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;*&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;h3 id=&quot;1-unpack-the-matlab-files&quot;&gt;1. Unpack the Matlab files&lt;/h3&gt;

&lt;p&gt;We need to extract the Matlab binaries from both ISO images.
There are many ways to access the files, eg.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;open the files with a archive manager&lt;/li&gt;
&lt;/ul&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;xarchiver /path/to/matlab.iso&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;ul&gt;
  &lt;li&gt;mount them using loop devices&lt;/li&gt;
&lt;/ul&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;mount &lt;span class=&quot;nt&quot;&gt;-o&lt;/span&gt; loop /path/to/matlab.iso /mnt&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;ul&gt;
  &lt;li&gt;or “uncompress” them using 7zip&lt;/li&gt;
&lt;/ul&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;7z x /path/to/matlab.iso&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Whatever you’re using, you need to merge all the files of both images into a single directory, including the two hidden files &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.dvd1&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.dvd2&lt;/code&gt;!
The target directory should be shared through Puppet.
So move all files to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/share/matlab/&lt;/code&gt;. If there is now a file called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/share/matlab/.dvd1&lt;/code&gt; and another file &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/share/matlab/.dvd2&lt;/code&gt; on your system chances are good that you’re all set up :)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Afterwards, also put the license file into that directory&lt;/strong&gt; (it’s typically called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;license.dat&lt;/code&gt;, save it as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/share/matlab/license.dat&lt;/code&gt;).&lt;/p&gt;

&lt;h3 id=&quot;2-prepare-an-input-file-for-the-installer&quot;&gt;2. Prepare an input file for the installer&lt;/h3&gt;

&lt;p&gt;Ever installed Matlab?
It will ask a lot of questions..
But we can avoid those, by giving the answers in a file called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;installer_input.txt&lt;/code&gt;!
You will find a skeleton in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/share/matlab/installer_input.txt&lt;/code&gt;.
Just copy that file to your module’s template directory and postfix it with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.erb&lt;/code&gt; -&amp;gt; this will make it a template for our module.
Go through that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MODULE/templates/installer_input.txt.erb&lt;/code&gt; file and replace static settings with static strings, and variable settings with &lt;a href=&quot;https://puppet.com/docs/puppet/5.3/lang_template_erb.html&quot;&gt;ERB syntax.&lt;/a&gt; You should have at least the following lines in that file:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;c&quot;&gt;## SPECIFY INSTALLATION FOLDER&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;destinationFolder&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&amp;lt;%&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; @matlab_destination %&amp;gt;

&lt;span class=&quot;c&quot;&gt;## SPECIFY FILE INSTALLATION KEY &lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;fileInstallationKey&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&amp;lt;%&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; @matlab_licensekey %&amp;gt;

&lt;span class=&quot;c&quot;&gt;## ACCEPT LICENSE AGREEMENT  &lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;agreeToLicense&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;yes&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;## SPECIFY INSTALLER MODE &lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;mode&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;silent

&lt;span class=&quot;c&quot;&gt;## SPECIFY PATH TO LICENSE FILE (Required for network license types only)&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;licensePath&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&amp;lt;%&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; @matlab_licensepath %&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;We’ll fill the variables in the module’s manifest.&lt;/p&gt;

&lt;h3 id=&quot;3-prepare-the-installation&quot;&gt;3. Prepare the installation&lt;/h3&gt;

&lt;p&gt;Go ahead and open &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MODULE/manifests/matlab.pp&lt;/code&gt; in your preferred editor.&lt;/p&gt;

&lt;p&gt;First, we need to define a few variables (a) for the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;installer_input.txt.erb&lt;/code&gt; template and (b) for the rest of the manifest:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;vg&quot;&gt;$matlabid&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;2018b&quot;&lt;/span&gt;
&lt;span class=&quot;vg&quot;&gt;$matlab_installpath&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;C:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;tmp&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;install&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;matlab${matlabid}&quot;&lt;/span&gt;
&lt;span class=&quot;vg&quot;&gt;$matlab_installer&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;${matlab_installpath}&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;setup.exe&quot;&lt;/span&gt;
&lt;span class=&quot;vg&quot;&gt;$matlab_licensepath&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;${matlab_installpath}&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;license.dat&quot;&lt;/span&gt;
&lt;span class=&quot;vg&quot;&gt;$matlab_licensekey&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;12345-67890-12343-....&quot;&lt;/span&gt;
&lt;span class=&quot;vg&quot;&gt;$matlab_input&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;C:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;tmp&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;install&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;matlab-installer_input.txt&quot;&lt;/span&gt;
&lt;span class=&quot;vg&quot;&gt;$matlab_destination&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;C:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Program Files&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;MATLAB&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;R${matlabid}&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;I guess that is all self-explanatory?
Here, we’re installing a Matlab version &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2018b&lt;/code&gt;.
We’ll download the shared Matlab files to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;C:\\tmp\\install\\matlab2018b&lt;/code&gt;.
And we’ll expect the installed Matlab tool in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;C:\\Program Files\\MATLAB\\R${matlabid}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;So let’s go and copy all the files from Puppet’s share:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;n&quot;&gt;file&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;install files for matlab&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;ensure&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;present&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;path&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;vg&quot;&gt;$matlab_installpath&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;source&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;puppet:///share/matlab&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;recurse&lt;/span&gt;      &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;kp&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;notify&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Package&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;MATLAB R${matlabid}&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;File&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;C:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;tmp&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;install&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;So we’re downloading &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;puppet:///share/matlab&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$matlab_installpath&lt;/code&gt; (=&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;C:\\tmp\\install\\matlab${matlabid}&lt;/code&gt;).
This requires the directory &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;C:\\tmp\\install&lt;/code&gt; to be created beforehand. So make sure you created it, eg using:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;n&quot;&gt;file&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;C:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;tmp&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;ensure&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;directory&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;file&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;C:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;tmp&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;install&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;ensure&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;directory&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;File&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;c:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;tmp&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Next we’ll create the installer input file based on our template:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;n&quot;&gt;file&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;vg&quot;&gt;$matlab_input&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;content&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;template&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'MODULE/installer_input.txt.erb'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;ensure&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;present&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;File&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;install files for matlab&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;notify&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Package&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;MATLAB R${matlabid}&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;This will basically read our &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;installer_input.txt.erb&lt;/code&gt;, replace the variables with our settings above, and write it to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$matlab_input&lt;/code&gt; (=&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;C:\\tmp\\install\\matlab-installer_input.txt&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;That’s it. We’re now ready to tell Puppet how to install Matlab!&lt;/p&gt;

&lt;h3 id=&quot;4-launch-the-installer&quot;&gt;4. Launch the installer&lt;/h3&gt;

&lt;p&gt;The installation instructions can be encoded by a final &lt;a href=&quot;https://puppet.com/docs/puppet/5.3/types/package.html&quot;&gt;&lt;em&gt;package&lt;/em&gt; block&lt;/a&gt; in the manifest:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;n&quot;&gt;package&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;MATLAB R${matlabid}&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;ensure&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;installed&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;source&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;$matlab_installer&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
        &lt;span class=&quot;no&quot;&gt;File&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;vg&quot;&gt;$matlab_input&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;
        &lt;span class=&quot;no&quot;&gt;File&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;install files for matlab&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;install_options&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'-inputFile'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;vg&quot;&gt;$matlab_input&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Thus, if &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MATLAB R${matlabid}&lt;/code&gt; is not yet installed on the client machine, Puppet will run&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$matlab_installer&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-inputFile&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$matlab_input&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;which will expand with our variable-setup above to&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-powershell&quot; data-lang=&quot;powershell&quot;&gt;&lt;span class=&quot;n&quot;&gt;C:\tmp\install\matlab2018b\setup.exe&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-inputFile&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;C:\tmp\install\matlab-installer_input.txt&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;All right, that’s it.
Just assign this module to your clients and they will start installing Matlab automagically :)&lt;/p&gt;

&lt;p&gt;Read this article where it appeared first: &lt;a href=&quot;https://binfalse.de/2019/06/27/puppet-to-deploy-matlab/&quot;&gt;binfalse.de&lt;/a&gt;&lt;/p&gt;</description>
				<pubDate>Thu, 27 Jun 2019 13:30:10 +0000</pubDate>
				<link>https://binfalse.de/2019/06/27/puppet-to-deploy-matlab/</link>
				<guid isPermaLink="true">https://binfalse.de/2019/06/27/puppet-to-deploy-matlab/</guid>
			</item>
		
			<item>
				<title>Thunar's volatile default application</title>
				<description>&lt;!-- _includes/image.html --&gt;
&lt;div class=&quot;image-wrapper alignright&quot;&gt;
    &lt;figure&gt;
    
    &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Thunar.svg&quot; title=&quot;Xfce project [GPL (http://www.gnu.org/licenses/gpl.html)], via Wikimedia Commons&quot; target=&quot;_blank&quot; data-lightbox=&quot;/2019/06/27/thunar-s-volatile-default-application/2019/06/27/thunar-s-volatile-default-application/&quot; data-title=&quot;Thunar's hammer in the Xfce project [GPL (http://www.gnu.org/licenses/gpl.html)], via Wikimedia Commons&quot; class=&quot;link-noborder&quot;&gt;
    
        &lt;img src=&quot;/assets/media/commons/Thunar-converted-from-Thunar.svg.png&quot; alt=&quot;Xfce project [GPL (http://www.gnu.org/licenses/gpl.html)], via Wikimedia Commons&quot; style=&quot;max-width:300px&quot; /&gt;
    
    &lt;/a&gt;
    
    
        &lt;figcaption&gt;Thunar's hammer in the Xfce project [GPL (http://www.gnu.org/licenses/gpl.html)], via Wikimedia Commons&lt;/figcaption&gt;
    
    &lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Thunar&quot;&gt;Thunar&lt;/a&gt; (&lt;a href=&quot;https://xfce.org/&quot;&gt;Xfce&lt;/a&gt;’s file manager) has a rather unintuitive behaviour to select the default app:
For some file types it seems that chossing a program of the context menu’s &lt;em&gt;“Open With…”&lt;/em&gt; overwrites the default application for that file type…
That means, once I open a &lt;a href=&quot;https://en.wikipedia.org/wiki/Portable_Network_Graphics&quot;&gt;PNG&lt;/a&gt; file with &lt;a href=&quot;https://www.gimp.org/&quot;&gt;Gimp&lt;/a&gt;, Gimp becomes the default for PNGs and double clicking the next PNG will result in &lt;a href=&quot;http://designingforperformance.com/performance-is-ux/#designers-impact-on-performance&quot;&gt;a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;gt;300 ms&lt;/code&gt; delay&lt;/a&gt; to launch Gimp.
Strangely, that only happens for &lt;em&gt;some&lt;/em&gt; file types. Others seem to be invariant to the &lt;em&gt;open-with-selection&lt;/em&gt;…?
Anyway, bugged me enough to finally look into it..&lt;/p&gt;

&lt;p&gt;It &lt;a href=&quot;https://bugzilla.xfce.org/show_bug.cgi?id=12493&quot;&gt;seems, that this was a design decision&lt;/a&gt; whithin the Xfce project:
If you actively selected a default application it will stay the default application, even if you temporarily open-with another application.
If you did not actively select a default application, the last application will be used by default -&amp;gt; this is my annoying use case.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;At least, I now know what is needed to do: Actively select a default applications…&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can do it using the UI by right-clicking a file of the type and selecting &lt;em&gt;Open With Other Application…&lt;/em&gt;. Then select the desired application and make sure you tick &lt;em&gt;Use as default for this kind of file&lt;/em&gt;.
From then on, this will be your default application, until you actively change it.&lt;/p&gt;

&lt;p&gt;That may be a good solution for many of you, but it’s also pretty tedious to find and right-click all the different file types. And of course it’s not the way I’m working. There must be a nicer option - and there is!
The configuration for Thunar’s mime type bindings is stored in 
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.config/mimeapps.list&lt;/code&gt; :)&lt;/p&gt;

&lt;p&gt;This file contains two sections:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[Added Associations]&lt;/code&gt; contains a list of known file types and possible associations to applications&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[Default Applications]&lt;/code&gt; is a list of file types and … their default application…&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thus, to add another &lt;em&gt;default-application-association,&lt;/em&gt; you just need to append another line to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[Default Applications]&lt;/code&gt; section. You may just copy a line from the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[Added Associations]&lt;/code&gt; and reduce the number of applications to one, eg. for PNG images:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-php&quot; data-lang=&quot;php&quot;&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Added&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Associations&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;png&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;eom&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;desktop&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;eog&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;desktop&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;gimp&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;desktop&lt;/span&gt;
&lt;span class=&quot;mf&quot;&gt;...&lt;/span&gt;

&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;Default&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Applications&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;png&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;eog&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;desktop&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;If your desired application is not yet int the list of &lt;em&gt;Added Associations&lt;/em&gt;, you may find it in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/usr/share/applications/&lt;/code&gt;.
If you still cannot find an application, you can generate a new one.
Just create a file &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.local/share/applications/YOURAPP.desktop&lt;/code&gt; containing something like this:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ini&quot; data-lang=&quot;ini&quot;&gt;&lt;span class=&quot;nn&quot;&gt;[Desktop Entry]&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;Encoding&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;UTF-8&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;Version&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;1.0&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;Type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;Application&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;NoDisplay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;true&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;Exec&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;/PATH/TO/YOUR/APPLICATION&quot;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;%f&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;YOURAPP&quot;&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;Comment&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;YOURAPP COMMENT&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Afterwards, you can use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;YOURAPP.desktop&lt;/code&gt; in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.config/mimeapps.list&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Looks like I’m often in trouble with default applications…? Is it just me?&lt;br /&gt;
If you have problems with &lt;a href=&quot;https://kde.org/&quot;&gt;KDE&lt;/a&gt; applications, you may want to look into my article on &lt;a href=&quot;/2013/01/24/kde-file-type-actions/&quot;&gt;KDE file type actions&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Read this article where it appeared first: &lt;a href=&quot;https://binfalse.de/2019/06/27/thunar-s-volatile-default-application/&quot;&gt;binfalse.de&lt;/a&gt;&lt;/p&gt;</description>
				<pubDate>Thu, 27 Jun 2019 07:47:02 +0000</pubDate>
				<link>https://binfalse.de/2019/06/27/thunar-s-volatile-default-application/</link>
				<guid isPermaLink="true">https://binfalse.de/2019/06/27/thunar-s-volatile-default-application/</guid>
			</item>
		
			<item>
				<title>apt-cacher-ng versus apt-transport-https</title>
				<description>&lt;p&gt;The headline sounds pretty technical, and so is the topic.
Let’s quickly introduce both antagonists:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;apt-cacher-ng&lt;/code&gt; is a tool to cache packages of the &lt;a href=&quot;https://wiki.debian.org/Apt&quot;&gt;apt&lt;/a&gt; ecosystem. As an administrator, you may have multiple &lt;a href=&quot;https://www.debian.org/&quot;&gt;Debian&lt;/a&gt;-based systems. The overlap of packages that all the systems need is typically huge. That means, hundreds of your systems will require the latest security update for &lt;a href=&quot;https://curl.haxx.se/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;curl&lt;/code&gt;&lt;/a&gt; at around the same time. Running an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;apt-cacher-ng&lt;/code&gt; server in your local environment will take a bit heat off Debian’s infrastructure and improves the download speed of packages. See also the &lt;a href=&quot;https://www.unix-ag.uni-kl.de/~bloch/acng/&quot;&gt;Apt-Cacher NG project page&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;apt-transport-https&lt;/code&gt; is an apt module to obtain packages over a secure &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;https://&lt;/code&gt; connection. Traditionally, packages are downloaded through plain &lt;a href=&quot;https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol&quot;&gt;HTTP&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/File_Transfer_Protocol&quot;&gt;FTP&lt;/a&gt;, but as these are unencrypted a third party may observe what you’re doing at a repository (which packages you’re downloading etc..). Please note, that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;apt-transport-https&lt;/code&gt; is already integrated in latest versions of apt - no need to install it separately.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So basically, both &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;apt-cacher-ng&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;apt-transport-https&lt;/code&gt; do a good thing! But… They don’t really like each other.. At least by default. However, I’ll show you how to make them behave ;-)&lt;/p&gt;

&lt;h2 id=&quot;the-problem&quot;&gt;The Problem&lt;/h2&gt;

&lt;p&gt;The issue is perfectly obvious: You want &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;apt-cacher-ng&lt;/code&gt; to &lt;em&gt;cache &lt;a href=&quot;https://en.wikipedia.org/wiki/Transport_Layer_Security&quot;&gt;TLS&lt;/a&gt; encrypted traffic…?&lt;/em&gt; That won’t happen.&lt;/p&gt;

&lt;h2 id=&quot;the-solution&quot;&gt;The Solution&lt;/h2&gt;

&lt;p&gt;You need to tell the client to create an unencrypted connection to the cache server, and then the cache server can connect to the repository through TLS.&lt;/p&gt;

&lt;h3 id=&quot;example&quot;&gt;Example&lt;/h3&gt;

&lt;p&gt;Let me explain that using &lt;a href=&quot;https://www.docker.com/&quot;&gt;Docker&lt;/a&gt;.
To &lt;a href=&quot;https://docs.docker.com/install/linux/docker-ce/debian/&quot;&gt;properly install Docker on a Debian based system,&lt;/a&gt; you would add a file &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/apt/sources.list.d/docker.list&lt;/code&gt; containing a repository such as:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;deb &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;arch&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;amd64] https://download.docker.com/linux/debian stretch stable&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;However, when &lt;a href=&quot;https://www.unix-ag.uni-kl.de/~bloch/acng/html/config-servquick.html#config-client&quot;&gt;apt is told to use a cache server&lt;/a&gt;, it would fail to download Docker’ packages:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;c&quot;&gt;# apt-get update&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;...]
W: Failed to fetch https://download.docker.com/linux/debian/dists/stretch/InRelease  Invalid response from proxy: HTTP/1.0 403 CONNECT denied &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;ask the admin to allow HTTPS tunnels&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;     &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;IP: 1.2.3.4 3142]
W: Some index files failed to download. They have been ignored, or old ones used instead.&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Let’s fix that using the following workaround:&lt;/p&gt;

&lt;h4 id=&quot;0-assumptions&quot;&gt;0. Assumptions&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;There is an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;apt-cacher-ng&lt;/code&gt; running at &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;http://apt.cache:3142&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;apt.cache&lt;/code&gt; resolves to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.2.3.4&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;There is a client configured to use the cache server, e.g. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/apt/apt.conf.d/02proxy&lt;/code&gt; says:&lt;/li&gt;
&lt;/ul&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;Acquire::http &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt; Proxy &lt;span class=&quot;s2&quot;&gt;&quot;http://apt.cache:3142&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;h4 id=&quot;1-create-a-mock-dns-for-the-cache-server&quot;&gt;1. Create a mock DNS for the cache server&lt;/h4&gt;

&lt;p&gt;You need to create a pseudo domain name that points to the cache server. This name will then tell the cache server which target repository to access.
Let’s say we’re using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker.cache&lt;/code&gt;.
You can either create a proper DNS record, or just add a line to the client’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/hosts&lt;/code&gt; file:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;1.2.3.4 apt.cache docker.cache&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Now, both &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;apt.cache&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker.cache&lt;/code&gt; will resolve to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.2.3.4&lt;/code&gt; at the client.&lt;/p&gt;

&lt;h4 id=&quot;2-update-the-clients-repository-entry&quot;&gt;2. Update the client’s repository entry&lt;/h4&gt;

&lt;p&gt;Instead of contacting the repository directly, the client should now connect to the cache server instead.
You need to change the contents in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/apt/sources.list.d/docker.list&lt;/code&gt; to:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;deb http://docker.cache stretch stable&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Thus, the client now treats the cache server as a proper repository!&lt;/p&gt;

&lt;h4 id=&quot;3-inform-the-cache-server&quot;&gt;3. Inform the cache server&lt;/h4&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;apt-cacher-ng&lt;/code&gt; of course needs to be told what to do, when clients want to access something from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker.cache&lt;/code&gt;: It should forward the request to the original repository!&lt;/p&gt;

&lt;p&gt;This is called remapping. First create a file &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/apt-cacher-ng/backends_docker_com&lt;/code&gt; at the server containing the link to the original repository:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;https://download.docker.com/linux/debian&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Then, populate the remapping rule in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/apt-cacher-ng/acng.conf&lt;/code&gt;. You will find a section of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Remap&lt;/code&gt; entries (see &lt;a href=&quot;https://github.com/Efreak/apt-cacher-ng/blob/c46918435a4d6f92df2b1c66718c7a8ab770055b/conf/acng.conf#L51&quot;&gt;default config of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;acng.conf&lt;/code&gt;&lt;/a&gt;). Just append your rule:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;Remap-dockercom: http://docker.cache &lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; file:backends_docker_com&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;This line reads:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;There is a remap rule called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Remap-dockercom&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;which remaps requests for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;http://docker.cache&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;to whatever is written in file &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;backends_docker_com&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s it. Restart the cache server and give it a try :)&lt;/p&gt;

&lt;h4 id=&quot;4-add-more-remaps&quot;&gt;4. Add more Remaps&lt;/h4&gt;

&lt;p&gt;If you want to use more repositories through &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;https://&lt;/code&gt;, just create further mock-DNS-entries and append corresponding remapping rules to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;acng.conf&lt;/code&gt;. Pretty easy..&lt;/p&gt;

&lt;h2 id=&quot;the-improvements&quot;&gt;The Improvements&lt;/h2&gt;

&lt;p&gt;This setup of course strips the encryption off apt calls.
Granted, it’s just the connections in your own environment, but still not really elegant..
So the goal is to also encrypt the traffic between client and cache server.&lt;/p&gt;

&lt;p&gt;There is apparently no support for TLS in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;apt-cacher-ng&lt;/code&gt;, but you can still configure an &lt;a href=&quot;https://nginx.org&quot;&gt;Nginx&lt;/a&gt; proxy (or what ever proxy you find handy) at the cache server, which supports TLS and just forwards requests to the upstream &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;apt-cacher-ng&lt;/code&gt; at the same machine. Or you could setup an &lt;a href=&quot;https://www.stunnel.org/&quot;&gt;stunnel&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;supplemental&quot;&gt;Supplemental&lt;/h2&gt;

&lt;p&gt;There are &lt;a href=&quot;https://www.unix-ag.uni-kl.de/~bloch/acng/html/howtos.html#ssluse&quot;&gt;a few other workarounds for this issue&lt;/a&gt; available. Most of them just show how to circumvent caching for HTTPS repositories (which somehow reduces the cache server to absurdity). Here, I just documented the (in my eyes) cleanest solution.&lt;/p&gt;

&lt;p&gt;Read this article where it appeared first: &lt;a href=&quot;https://binfalse.de/2019/05/13/apt-cacher-ng-vs-apt-transport-https/&quot;&gt;binfalse.de&lt;/a&gt;&lt;/p&gt;</description>
				<pubDate>Mon, 13 May 2019 07:16:44 +0000</pubDate>
				<link>https://binfalse.de/2019/05/13/apt-cacher-ng-vs-apt-transport-https/</link>
				<guid isPermaLink="true">https://binfalse.de/2019/05/13/apt-cacher-ng-vs-apt-transport-https/</guid>
			</item>
		
	</channel>
</rss>
