<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>/home/strubbl</title>
    <link>https://blog.strubbl.de/</link>
    <description>Recent content on /home/strubbl</description>
    <generator>Hugo 0.156.0</generator>
    <language>de-de</language>
    <copyright>[blog.strubbl.de](https://blog.strubbl.de/) [Impressum](/impressum)</copyright>
    <lastBuildDate>Tue, 16 Sep 2025 22:23:36 +0200</lastBuildDate>
    <atom:link href="https://blog.strubbl.de/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Blogroll</title>
      <link>https://blog.strubbl.de/blogroll/</link>
      <pubDate>Tue, 16 Sep 2025 22:23:36 +0200</pubDate>
      <guid>https://blog.strubbl.de/blogroll/</guid>
      <description></description>
    </item>
    <item>
      <title>weeklyOSM minified RSS feed with feed-minifier</title>
      <link>https://blog.strubbl.de/weeklyOSM-minified-RSS-feed-with-feed-minifier/</link>
      <pubDate>Sun, 05 Jan 2025 20:24:00 +0000</pubDate>
      <guid>https://blog.strubbl.de/weeklyOSM-minified-RSS-feed-with-feed-minifier/</guid>
      <description>&lt;h2 id=&#34;intro&#34;&gt;Intro&lt;/h2&gt;&#xA;&lt;p&gt;For the OpenStreetMap news site &lt;em&gt;weeklyOSM&lt;/em&gt; I have created minified RSS feeds with a self-written tool called &lt;a href=&#34;https://codeberg.org/strubbl/feed-minifier&#34;&gt;feed-minifier&lt;/a&gt;. This saves a lot of bandwidth when subscribing to that news site.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-are-the-differences-compared-to-the-original-weeklyosm-feed&#34;&gt;What are the differences compared to the original weeklyOSM feed?&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The number of weeklyOSM articles in the feed is reduced to only contain the latest edition.&lt;/li&gt;&#xA;&lt;li&gt;Flags of the &lt;a href=&#34;https://osmcal.org/&#34;&gt;OSM calendar events&lt;/a&gt; are replaced with emoticons.&lt;/li&gt;&#xA;&lt;li&gt;Language indicator icons for the translation links are replaced by text links with the &lt;a href=&#34;https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes&#34;&gt;language code&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;All other images are replaced with a text in square brackets naming the image source URL, the alt text and the image size. This way no images are loaded automatically when loading the RSS item.&lt;/li&gt;&#xA;&lt;li&gt;New lines in the source of the article content are deleted.&lt;/li&gt;&#xA;&lt;li&gt;HTML comments and CSS classes are removed.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The advantage of all this extra processing of the feed to a minimized version is a reduction of around 90 % in size.&lt;/p&gt;&#xA;&lt;p&gt;E.g. the feed including the Italian weeklyOSM #754 could be reduced from 360,889 bytes to 31,646 bytes. Additionally, the ten title images are not loaded, e.g. the one for weeklyOSM #754 has a size of 464,872 bytes.&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-to-get-the-weeklyosm-feeds&#34;&gt;How to get the weeklyOSM feeds?&lt;/h2&gt;&#xA;&lt;p&gt;Head to &lt;a href=&#34;https://osm.strubbl.de/weeklyOSM-minified/&#34;&gt;osm.strubbl.de/weeklyOSM-minified/&lt;/a&gt; and subscribe using the link to the feed for your language.&lt;/p&gt;&#xA;&lt;h2 id=&#34;discussion-feedback-ideas&#34;&gt;Discussion, Feedback, Ideas&lt;/h2&gt;&#xA;&lt;p&gt;You can &lt;a href=&#34;https://codeberg.org/strubbl/feed-minifier/issues&#34;&gt;create an issue&lt;/a&gt; in the repository or use the thread in the &lt;a href=&#34;https://community.openstreetmap.org/t/small-bandwidth-weeklyosm-eu-rss-feeds/123902&#34;&gt;community.osm.org&lt;/a&gt; forum.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>start failed: unsupported shim version</title>
      <link>https://blog.strubbl.de/start-failed-unsupported-shim-version/</link>
      <pubDate>Mon, 11 Nov 2024 21:06:00 +0000</pubDate>
      <guid>https://blog.strubbl.de/start-failed-unsupported-shim-version/</guid>
      <description>&lt;p&gt;So i got the error while starting up a container via docker-compose:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;Unimplemented: failed to start shim: start failed: unsupported shim version (3): not implemented&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Sometimes a &lt;strong&gt;reboot&lt;/strong&gt; resolves a problem.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Dokuwiki Plugin, um Benachrichtigungen zu Mattermost zu senden</title>
      <link>https://blog.strubbl.de/dokuwiki-plugin-for-mattermost-notification/</link>
      <pubDate>Thu, 31 Oct 2024 20:57:00 +0000</pubDate>
      <guid>https://blog.strubbl.de/dokuwiki-plugin-for-mattermost-notification/</guid>
      <description>&lt;p&gt;Für &lt;a href=&#34;https://mattermost.com/&#34;&gt;Mattermost&lt;/a&gt; gibt es bei &lt;a href=&#34;https://www.dokuwiki.org&#34;&gt;Dokuwiki&lt;/a&gt; selbst &lt;a href=&#34;https://www.dokuwiki.org/mattermost_plugin?do=search&amp;amp;ns=plugin&amp;amp;q=mattermost%20%40plugin&#34;&gt;kein Notifier Plugin&lt;/a&gt;. Das schöne ist aber, dass man stattdessen einfach das &lt;a href=&#34;https://www.dokuwiki.org/plugin:slacknotifier&#34;&gt;Slack Notifier Plugin&lt;/a&gt; nutzen kann. Man konfiguriert dann in den Plugin-Einstellungen die &lt;code&gt;Slack Incoming Webhook URL&lt;/code&gt; auf einen &lt;a href=&#34;https://mattermost.com/blog/mattermost-integrations-incoming-webhooks/&#34;&gt;Webhook&lt;/a&gt;, den man in Mattermost angelegt hat.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>pikaur: Read damn arch-wiki before borking your computer</title>
      <link>https://blog.strubbl.de/pikaur-read-damn-arch-wiki-before-borking-your-computer/</link>
      <pubDate>Wed, 10 Jul 2024 19:50:26 +0200</pubDate>
      <guid>https://blog.strubbl.de/pikaur-read-damn-arch-wiki-before-borking-your-computer/</guid>
      <description>&lt;p&gt;When you get the message from pikaur:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Read damn arch-wiki before borking your computer&#xA;https://wiki.archlinux.org/title/Arch_User_Repository&#xA;(Also, don&amp;#39;t report any issues to pikaur, if ure seeing this message)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;you need to check your &lt;code&gt;base-devel&lt;/code&gt; package is installed.&lt;/p&gt;&#xA;&lt;p&gt;References:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://bbs.archlinux.org/viewtopic.php?id=297084&#34;&gt;https://bbs.archlinux.org/viewtopic.php?id=297084&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/actionless/pikaur/commit/94ec6b087b4083909a2c59e33112f7e0956f77e6&#34;&gt;https://github.com/actionless/pikaur/commit/94ec6b087b4083909a2c59e33112f7e0956f77e6&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://archlinux.org/packages/?q=base-devel&#34;&gt;https://archlinux.org/packages/?q=base-devel&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
    </item>
    <item>
      <title>RSS Feed Pflege: Volltext-Feed</title>
      <link>https://blog.strubbl.de/rss-feed-pflege-volltext-feed-2023-11/</link>
      <pubDate>Sun, 12 Nov 2023 00:19:15 +0100</pubDate>
      <guid>https://blog.strubbl.de/rss-feed-pflege-volltext-feed-2023-11/</guid>
      <description>&lt;p&gt;Heute habe ich mal meine RSS Feeds genauer unter die Lupe genommen und ein paar Anpassungen vorgenommen. Es wird nun ein &lt;a href=&#34;https://blog.strubbl.de/index-full.xml&#34;&gt;Volltext-Feed&lt;/a&gt; und wie bisher ein gekürzter &lt;a href=&#34;https://blog.strubbl.de/index.xml&#34;&gt;Feed mit Teasern&lt;/a&gt; generiert. Bisher dachte ich, dass mit &lt;a href=&#34;https://gohugo.io/&#34;&gt;Hugo&lt;/a&gt; automatisch ein Volltext-Feed generiert wird. Aber dem war nicht so.&lt;/p&gt;&#xA;&lt;p&gt;Zum Glück kann man das ändern. Dazu habe ich&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ein neues &lt;code&gt;OutputFormat&lt;/code&gt; &lt;a href=&#34;https://discourse.gohugo.io/t/multiple-rss-feed-for-single-section/21341/3?u=strubbl&#34;&gt;erzeugt&lt;/a&gt;,&lt;/li&gt;&#xA;&lt;li&gt;ein neues Template basierend auf dem &lt;a href=&#34;https://raw.githubusercontent.com/gohugoio/hugo/master/tpl/tplimpl/embedded/templates/_default/rss.xml&#34;&gt;derzeitigen&lt;/a&gt; RSS Feed Template &lt;a href=&#34;https://discourse.gohugo.io/t/full-text-rss-feed/8368/3?u=strubbl&#34;&gt;erstellt und angepasst&lt;/a&gt; und&lt;/li&gt;&#xA;&lt;li&gt;den neuen Feed &lt;a href=&#34;https://gohugo.io/templates/rss/#include-feed-reference&#34;&gt;in meinem Theme verlinkt&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Das wars.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Automatische Logcheck Regelaktualisierung Für Hochpräzise Zeitstempel Ab Debian 12 Bookworm</title>
      <link>https://blog.strubbl.de/automatische-logcheck-regelaktualisierung-zeitstempel-debian-12-bookworm/</link>
      <pubDate>Wed, 27 Sep 2023 22:34:18 +0200</pubDate>
      <guid>https://blog.strubbl.de/automatische-logcheck-regelaktualisierung-zeitstempel-debian-12-bookworm/</guid>
      <description>&lt;p&gt;Nach dem Update auf Debian 12 funktionieren die selbst angelegten logcheck Regeln nicht mehr. Das liegt daran, dass du nun hochpräzise Zeitstempel in den Logs genutzt werden.&lt;/p&gt;&#xA;&lt;p&gt;Die eigenen Regeln kann man &lt;a href=&#34;https://salsa.debian.org/debian/logcheck/-/blob/debian/1.4.0/debian/logcheck-database.NEWS#L13&#34;&gt;mit einem Befehl für das neue Format&lt;/a&gt; einfach konvertieren. Als root muss folgendes Kommando ausgeführt werden:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;for rule in /etc/logcheck/*.d*/local-*; do sed --in-place --regexp-extended &#39;s,^\^((\\w|\[\[:alpha:\]\])\{3\} \[ :(0-9|\[:digit:\])\]\{11\}),^(\1|[0-9T:.+-]{32}),&#39; &amp;quot;$rule&amp;quot; ; done&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Dabei muss der Ausdruck für die Dateipfade &lt;code&gt;/etc/logcheck/*.d*/local-*&lt;/code&gt; an die eigenen Dateinamen der Regeln angepasst werden. Bei mir beginnen sie mit &lt;code&gt;01-&lt;/code&gt;, sodass ich diese Stelle auf &lt;code&gt;/etc/logcheck/*.d*/01-*&lt;/code&gt; abgeändert habe.&lt;/p&gt;&#xA;&lt;p&gt;Die Regel habe ich auch noch auf die &lt;code&gt;postgrey&lt;/code&gt; Dateien angewendet, weil diese noch den alten Zeitstempel unterstützt haben und nicht auch den neuen.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Namespaces in logseq since v0.8.9</title>
      <link>https://blog.strubbl.de/logseq-v0-8-9-and-namespaces/</link>
      <pubDate>Tue, 22 Nov 2022 21:57:50 +0100</pubDate>
      <guid>https://blog.strubbl.de/logseq-v0-8-9-and-namespaces/</guid>
      <description>&lt;p&gt;Namespaces in logseq are as simple as using a slash in the page&amp;rsquo;s title. If you have worked with namespaces in a logseq version, which is lower than v0.8.9, you should migrate your existing pages according to the &amp;ldquo;New file name rules&amp;rdquo;. These rules are mentioned almost at the &lt;a href=&#34;https://github.com/logseq/logseq/releases/tag/0.8.9&#34;&gt;end of release note&lt;/a&gt;. Otherwise you might notice some weird behaviour with the pages in a namespace.&lt;/p&gt;&#xA;&lt;p&gt;The migration via GUI can be found in logseq: Settings → Advanced → File name format and there is an Edit button, which should be clicked and the instructions in the popup window need to be followed. In your logseq graph this will rename all pages with a slash, where the slash will be replace by three underscores.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>OsmAnd: How to create a layer with custom POIs</title>
      <link>https://blog.strubbl.de/howto-create-in-osmand-a-layer-with-custom-pois/</link>
      <pubDate>Fri, 06 May 2022 14:36:09 +0200</pubDate>
      <guid>https://blog.strubbl.de/howto-create-in-osmand-a-layer-with-custom-pois/</guid>
      <description>&lt;p&gt;This blog post describes how to create a &lt;a href=&#34;https://wiki.openstreetmap.org/wiki/Points_of_interest&#34;&gt;POI (Point Of Interest)&lt;/a&gt; layer in &lt;a href=&#34;https://wiki.openstreetmap.org/wiki/OsmAnd&#34;&gt;OsmAnd&lt;/a&gt;. The layer highlights all locations of a specific POI type, e.g. &lt;a href=&#34;https://wiki.openstreetmap.org/wiki/Tag:sport%3Dtable_tennis&#34;&gt;table tennis&lt;/a&gt; locations, &lt;a href=&#34;https://wiki.openstreetmap.org/wiki/Tag:amenity%3Dtoilets&#34;&gt;toilets&lt;/a&gt;, &lt;a href=&#34;https://wiki.openstreetmap.org/wiki/Tag:amenity%3Dbicycle_repair_station&#34;&gt;bicycle repair stations&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;tl;dr: There is a German version of this post &lt;a href=&#34;https://social.tchncs.de/@Strubbl/108171596674759134&#34;&gt;fitting in one Mastodon toot&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;add-a-custom-poi-layer&#34;&gt;Add a custom POI layer&lt;/h2&gt;&#xA;&lt;h3 id=&#34;start-osmand&#34;&gt;Start OsmAnd&lt;/h3&gt;&#xA;&lt;p&gt;At first you need to start OsmAnd of course.&lt;/p&gt;&#xA;&lt;h3 id=&#34;create-a-poi-filter&#34;&gt;Create a POI filter&lt;/h3&gt;&#xA;&lt;h4 id=&#34;open-burger-menu&#34;&gt;Open Burger menu&lt;/h4&gt;&#xA;&lt;p&gt;Open the main menu of OsmAnd. That is the  &lt;a href=&#34;https://stackoverflow.com/a/64475269/709697&#34;&gt;burger menu&lt;/a&gt; in the bottom left.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/01.png&#34;&gt;&lt;img alt=&#34;Start screen of Osmand with the burger menu highlighted&#34; loading=&#34;lazy&#34; src=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/thumbs/01.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;configure-map&#34;&gt;Configure Map&lt;/h4&gt;&#xA;&lt;p&gt;Select the &lt;em&gt;Configure Map&lt;/em&gt; option.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/02.png&#34;&gt;&lt;img alt=&#34;Main menu of OsmAnd&#34; loading=&#34;lazy&#34; src=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/thumbs/02.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;open-poi-overlays&#34;&gt;Open POI overlays&lt;/h4&gt;&#xA;&lt;p&gt;Select the &lt;em&gt;POI overlay…&lt;/em&gt; option.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/03.png&#34;&gt;&lt;img alt=&#34;Configure map view&#34; loading=&#34;lazy&#34; src=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/thumbs/03.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;search-for-custom-poi-type&#34;&gt;Search for custom POI type&lt;/h4&gt;&#xA;&lt;p&gt;Now you see a lot of POI categories, which you could already use. To create a custom category open the &lt;em&gt;Search&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/04.png&#34;&gt;&lt;img alt=&#34;POI overlay menu&#34; loading=&#34;lazy&#34; src=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/thumbs/04.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Enter the custom type of POI you want to display, e.g. bicycle repair station and select the first search search result.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/05.png&#34;&gt;&lt;img alt=&#34;Search screen for POIs&#34; loading=&#34;lazy&#34; src=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/thumbs/05.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;create-a-custom-filter&#34;&gt;Create a custom filter&lt;/h4&gt;&#xA;&lt;p&gt;Select the filter button right next to text &lt;em&gt;Show bicycle repair station on the map&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/06.png&#34;&gt;&lt;img alt=&#34;Search result for the POI type&#34; loading=&#34;lazy&#34; src=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/thumbs/06.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;You are in the view to create a customized filter now. You could enable different options here, which are depending on the type of POI. I want to see all bicycle repair stations, which are mapped in &lt;a href=&#34;https://www.openstreetmap.org&#34;&gt;OpenStreetMap.org&lt;/a&gt;. So i do not enable any option here.&#xA;Open the &lt;a href=&#34;https://stackoverflow.com/a/64475269/709697&#34;&gt;kebab menu&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/07.png&#34;&gt;&lt;img alt=&#34;Filter view&#34; loading=&#34;lazy&#34; src=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/thumbs/07.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Select the only option &lt;em&gt;Save filter&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/08.png&#34;&gt;&lt;img alt=&#34;Filter view with opened kebab menu&#34; loading=&#34;lazy&#34; src=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/thumbs/08.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Enter a custom name or leave it as is and select &lt;em&gt;Save&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/09.png&#34;&gt;&lt;img alt=&#34;Filter save dialog&#34; loading=&#34;lazy&#34; src=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/thumbs/09.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;enable-custom-poi-layer&#34;&gt;Enable custom POI layer&lt;/h3&gt;&#xA;&lt;p&gt;Use you back key or back gesture to go back to map.&#xA;Open the POI overlay view again.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/01.png&#34;&gt;&lt;img alt=&#34;Start screen of Osmand with the burger menu highlighted&#34; loading=&#34;lazy&#34; src=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/thumbs/01.png&#34;&gt;&lt;/a&gt;&#xA;&lt;a href=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/02.png&#34;&gt;&lt;img alt=&#34;Main menu of OsmAnd&#34; loading=&#34;lazy&#34; src=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/thumbs/02.png&#34;&gt;&lt;/a&gt;&#xA;&lt;a href=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/03.png&#34;&gt;&lt;img alt=&#34;Configure map view&#34; loading=&#34;lazy&#34; src=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/thumbs/03.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now, you can see the option &lt;em&gt;Bicycle repair station&lt;/em&gt;. This represents the filter we have just created. Select it. (I do not know why it is displayed twice. I select the first option.)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/10.png&#34;&gt;&lt;img alt=&#34;Search screen for POIs with our custom POI added&#34; loading=&#34;lazy&#34; src=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/thumbs/10.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Our custom POI overlay is active now.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/11.png&#34;&gt;&lt;img alt=&#34;POI overlay menu with enabled custom POI&#34; loading=&#34;lazy&#34; src=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/thumbs/11.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;explore-the-map&#34;&gt;Explore the map&lt;/h3&gt;&#xA;&lt;p&gt;You can see all bicycle repair stations being mapped in OpenStreetMap. Before and after:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/01.png&#34;&gt;&lt;img alt=&#34;Start screen of Osmand with the burger menu highlighted&#34; loading=&#34;lazy&#34; src=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/thumbs/01.png&#34;&gt;&lt;/a&gt;&#xA;&lt;a href=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/12.png&#34;&gt;&lt;img alt=&#34;Map view with all custom POI locations being highlighted&#34; loading=&#34;lazy&#34; src=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/thumbs/12.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;add-data-to-the-map&#34;&gt;Add data to the map&lt;/h2&gt;&#xA;&lt;p&gt;Of course it is possible to add more POIs to the map. You can directly add the data on &lt;a href=&#34;https://www.openstreetmap.org&#34;&gt;OpenStreetMap.org&lt;/a&gt;.&#xA;It is easier to use a specialized editor to add POIs you know. I can recommend &lt;a href=&#34;https://mapcomplete.osm.be&#34;&gt;Mapcomplete&lt;/a&gt;. It provides different themes for different types of POIs. For example, there is a theme for adding &lt;a href=&#34;https://mapcomplete.osm.be/cycle_infra.html&#34;&gt;bicycle infrastructure&lt;/a&gt; (incl. repair stations) or &lt;a href=&#34;https://mapcomplete.osm.be/toilets.html&#34;&gt;toilets&lt;/a&gt; or &lt;a href=&#34;https://mapcomplete.osm.be/sport_pitches.html&#34;&gt;table tennis&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;When you have added data to OpenStreetMap, be sure to wait for the map data update in OsmAnd. Map data is usually captured at the first day of the month. In the following days the update files are created and deployed. So, the worst case in waiting time is for data being added on the second day of the month, where you would have to wait more than a month to get the updated map data.&lt;/p&gt;&#xA;&lt;p&gt;If you have got OsmAnd+, you could enable Live Updates for your region in order to get the map updates earlier.&lt;/p&gt;&#xA;&lt;h2 id=&#34;multiple-poi-layers&#34;&gt;Multiple POI layers&lt;/h2&gt;&#xA;&lt;p&gt;In the POI overlay view there is an option, where you can select multiple POI types to be displayed. Select the multiple check marks in the bottom left.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/13.png&#34;&gt;&lt;img alt=&#34;Search screen for POIs with multiple option highlighted&#34; loading=&#34;lazy&#34; src=&#34;https://blog.strubbl.de/images/osmand-custom-poi-layer/thumbs/13.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>OpenStreetMap Karten generieren mit Map Machine</title>
      <link>https://blog.strubbl.de/openstreetmap-svg-karten-generieren-mit-map-machine-in-docker/</link>
      <pubDate>Wed, 09 Feb 2022 22:35:36 +0100</pubDate>
      <guid>https://blog.strubbl.de/openstreetmap-svg-karten-generieren-mit-map-machine-in-docker/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://blog.strubbl.de/images/stralsund-hafen.svg&#34;&gt;&lt;img alt=&#34;Karte des Stralsunder Hafens mit map-machine gerendert, auf OpenStreetMap basierend&#34; loading=&#34;lazy&#34; src=&#34;https://blog.strubbl.de/images/stralsund-hafen.png&#34; title=&#34;Karte des Stralsunder Hafens mit map-machine erstellt (Link auf SVG mit 1,5 MB Größe)&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;tl;dr&lt;/strong&gt;: Dieser Artikel beschreibt, wie man mit Map Machine, das in einem Docker Container läuft, Karten als SVG basierend auf OpenStreetMap generieren kann.&lt;/p&gt;&#xA;&lt;p&gt;Map Machine ist ein Projekt, das die Fülle und Vielfalt der Daten von OpenStreetMap zeigen möchte. Es ist ein &lt;a href=&#34;https://wiki.openstreetmap.org/wiki/DE:Rendering&#34;&gt;Map Renderer&lt;/a&gt;, der in Python geschrieben ist und unter MIT License auf &lt;a href=&#34;https://github.com/enzet/map-machine&#34;&gt;GitHub veröffentlicht&lt;/a&gt; ist.&lt;/p&gt;&#xA;&lt;p&gt;Um das das &lt;a href=&#34;https://github.com/enzet/map-machine/blob/main/Dockerfile&#34;&gt;Docker Image&lt;/a&gt; für das Map Machine-Projekt bauen zu können, benötigen wir selbstverständlich auf unserem Rechner &lt;code&gt;docker&lt;/code&gt; und &lt;code&gt;git&lt;/code&gt;. Auf &lt;code&gt;git&lt;/code&gt; könnte man verzichten, wenn man sich das Repository als &lt;a href=&#34;https://github.com/enzet/map-machine/archive/refs/heads/main.zip&#34;&gt;gepacktes Zip&lt;/a&gt; herunterlädt. Dann benötigt man halt die Software zum Zip entpacken.&lt;/p&gt;&#xA;&lt;p&gt;Wenn Docker noch nicht installiert ist, so gibt es Anleitungen z.B. für &lt;a href=&#34;https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-20-04-de&#34;&gt;Ubuntu&lt;/a&gt; oder &lt;a href=&#34;https://wiki.archlinux.org/title/Docker&#34;&gt;Archlinux&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Zunächst erzeugen wir eine lokale Kopie. Dazu müssen wir das  das Repository clonen (oder &lt;a href=&#34;https://github.com/enzet/map-machine/archive/refs/heads/main.zip&#34;&gt;herunterladen&lt;/a&gt; und entpacken):&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;git clone https://github.com/enzet/map-machine.git&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Anschließend können wir in das Verzeichnis &lt;code&gt;map-machine&lt;/code&gt; wechseln, um das Docker Image zu bauen:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker build --pull -t strubbl_mapmachine .&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Bei diesem Kommando ist der Punkt am Ende wichtig, denn er steht für das aktuelle Verzeichnis. Das bedeutet, dass im aktuellen Verzeichnis nach der Bauanleitung (&lt;code&gt;Dockerfile&lt;/code&gt;) für dieses Image gesucht wird.&lt;/p&gt;&#xA;&lt;p&gt;Der Name für das Image &lt;code&gt;strubbl_mapmachine&lt;/code&gt; ist frei gewählt und kann natürlich anders lauten. In den folgenden &lt;code&gt;docker&lt;/code&gt;-Kommandos muss dies dann entsprechend angepasst werden.&lt;/p&gt;&#xA;&lt;p&gt;Während das Image gebaut wird, können schon einige Vorbereitungen getroffen werden, um gleich einen sinnvollen Aufruf an Map Machine zu formulieren.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Es muss ein Verzeichnis angelegt werden, in dem die Karten später zu finden sind. Außerdem sollte es ein Unterverzeichnis darin geben, um einen Karten-Cache anzulegen und zu nutzen. Ich möchte die Karten unter &lt;code&gt;$HOME/data/mapmachine/maps&lt;/code&gt; und somit die Cache-Daten unter &lt;code&gt;$HOME/data/mapmachine/maps/cache&lt;/code&gt; ablegen. Durch die Verwendung der Variablen &lt;code&gt;$HOME&lt;/code&gt; wird automatisch das eigene Home-Verzeichnis verwendet, z.B. &lt;code&gt;/home/strubbl&lt;/code&gt;. Ich erstelle also die von mir gewünschten Verzeichnisse mit dem Ausführen des Befehls &lt;code&gt;mkdir -p $HOME/data/mapmachine/maps/cache&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Der Bereich der Karte, die wir erstellen wollen, wird benötigt. Das nennt sich &lt;a href=&#34;https://wiki.openstreetmap.org/wiki/DE:Bounding_Box&#34;&gt;Bounding Box&lt;/a&gt; oder kurz bbox. Dafür gibt es ein kleines &lt;a href=&#34;https://boundingbox.klokantech.com/&#34;&gt;Tool von Klokan&lt;/a&gt;, damit man sich den gewünschten Kartenausschnitt aussuchen kann. Oben links in dem Tool ist Button mit einem Pfeil der auf ein Rechteck zeigt. Wenn man dieses Werkzeug auswählt, kann man ein Rechteck (die bbox) in der Karte zeichnen.&#xA;Dieses kann man auch nachträglich noch in der Größe anpassen. Die bbox sollte nicht zu groß gewählt werden, weil in diesem Beispiel hier die Daten direkt über die OpenStreetMap API abgefragt werden. Man kann auch über die &lt;a href=&#34;https://github.com/enzet/map-machine#arguments&#34;&gt;Programmargumente&lt;/a&gt; eine XML-Datei mit den Kartendaten angeben, um keine Anfrage an die OpenStreetMap API senden zu müssen.&#xA;Wenn die bbox fertig eingezeichnet ist, kann man im unteren Teil &lt;em&gt;Copy &amp;amp; Paste&lt;/em&gt; des Tools die bbox als Text kopieren. Das Format für die bbox sollte &lt;code&gt;CSV&lt;/code&gt; sein. Dann erkennt man die durch Kommata getrennten zwei Koordinaten.&lt;/li&gt;&#xA;&lt;li&gt;Schließlich benötigen wir noch das &lt;a href=&#34;https://wiki.openstreetmap.org/wiki/DE:Zoom_levels&#34;&gt;Zoom-Level&lt;/a&gt; der Karte. Der Standardwert ist 18, wenn wir keinen angeben.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Wenn diese drei Informationen zusammengetragen sind und das Docker Image erfolgreich gebaut wurde, kann man einen Container basierend auf dem Image starten, der die Karte erstellt und sich dann wieder beendet.&lt;/p&gt;&#xA;&lt;p&gt;Ein Aufruf könnte wie folgt aussehen:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker run -v $HOME/data/mapmachine/maps:/maps strubbl_mapmachine render \&#xA;  --cache=/maps/cache -z=17 -o=/maps/stralsund-hafen.svg \&#xA;  -b=&amp;#34; 13.089452552,54.313679518,13.1049235336,54.3194871239&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Aufgeschlüsselt bedeutet jeder Teil des Kommandos folgendes:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Mit &lt;code&gt;docker run&lt;/code&gt; drückt man aus, dass man einen Container starten will.&lt;/li&gt;&#xA;&lt;li&gt;Nach dem &lt;code&gt;-v&lt;/code&gt; kommt zunächst der Pfad auf unserem PC, wo die genierten Karten hingeschrieben werden sollen: &lt;code&gt;$HOME/data/mapmachine/maps&lt;/code&gt;. Dann folgt ein Doppelpunkt und der Container-interne Pfad &lt;code&gt;/maps&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Anschließend folgt der Name des Docker Images, hier &lt;code&gt;strubbl_mapmachine&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;render&lt;/code&gt; ist das erste Argument, dass an den &lt;code&gt;map-machine&lt;/code&gt;-Befehl gesendet wird, um mitzuteilen, dass eine &lt;a href=&#34;https://github.com/enzet/map-machine#map-generation&#34;&gt;Karte generiert&lt;/a&gt; werden soll.&lt;/li&gt;&#xA;&lt;li&gt;Mit &lt;code&gt;--cache&lt;/code&gt; und dem folgenden Pfad &lt;code&gt;/maps/cache&lt;/code&gt; gibt man an, wo Daten, die über die OpenStreetMap API abgefragt werden, zwischengespeichert werden. Diese können dann wiederverwendet werden.&lt;/li&gt;&#xA;&lt;li&gt;Das Zoom-Level wird über &lt;code&gt;-z 17&lt;/code&gt; angegeben, das hier auf Stufe 17 festgelegt wird.&lt;/li&gt;&#xA;&lt;li&gt;Den Dateinamen für die Karte kann man über den Parameter &lt;code&gt;-o&lt;/code&gt; festlegen. Die Datei sollte unterhalb des Container-internen Verzeichnisses &lt;code&gt;/maps/&lt;/code&gt; liegen, sodass wir die Datei auch auf unserem lokalen Pfad verfügbar haben und sie nicht im Container gespeichert wird, worauf wir nicht zugreifen können sobald der Container beendet wurde. Der Container-interne Pfad wird durch unseren lokalen Pfad gemappt, siehe Parameter &lt;code&gt;-v&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Die bbox wird über den &lt;code&gt;-b&lt;/code&gt;-Parameter angegeben. Die Angabe der Koordinaten mit den Anführungszeichen und dem Leerzeichen in der Form ist wichtig, weil es sonst zu einem &lt;a href=&#34;https://github.com/enzet/map-machine/issues/109&#34;&gt;bekannten Fehler&lt;/a&gt; kommen kann.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Man muss in diesem Docker-Kommando nicht &lt;code&gt;map-machine&lt;/code&gt; mit angeben, weil es das Standardkommando beim Aufruf des Containers ist. Das ist so im &lt;a href=&#34;https://github.com/enzet/map-machine/blob/main/Dockerfile#L15&#34;&gt;Dockerfile definiert&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Mit dieser gewählten kleinen bbox und dem Zoom-Level 17 dauert die Generierung nur ein paar Sekunden (ca. 10 s auf einem i3-6100U mit SSD). Ein größeres Zoom-Level oder eine größere bbox verlängern den Prozess und die Größe der SVG-Kartendatei.&#xA;Z.B. die Generierung einer Karte mit der gleichen bbox aber Zoom-Level 19 dauert in etwa doppelt so lange, wobei dank Nutzung des Caches keine neuen Daten von der OpenStreetMap API abgefragt werden müssen.&lt;/p&gt;&#xA;&lt;p&gt;Wenn das Docker-Kommando fertig ist, haben wir im Pfad &lt;code&gt;$HOME/data/mapmachine/maps/stralsund-hafen.svg&lt;/code&gt; unsere generierte Karte liegen.&lt;/p&gt;&#xA;&lt;p&gt;Danke an Manfred für das Testen des Artikels und die Rückmeldungen. So haben wir zusammen den o.g. &lt;a href=&#34;https://github.com/enzet/map-machine/issues/113&#34;&gt;Bug&lt;/a&gt; gefunden.&lt;/p&gt;&#xA;</description>
    </item>
  </channel>
</rss>
