<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>https://niecore.xyz</title><description/><link>https://niecore.xyz/</link><language>en</language><copyright>Copyright 2024, Nico Müller</copyright><lastBuildDate>Mon, 30 Jan 2023 10:00:00 +0100</lastBuildDate><generator>Hugo - gohugo.io</generator><docs>http://cyber.harvard.edu/rss/rss.html</docs><atom:link href="https://ronaldsvilcins.com/atom.xml" rel="self" type="application/atom+xml"/><item><title>Jenkins basic build strategy configuration examples</title><link>https://niecore.xyz/2023/01/30/jenkins-build-strategy-examples/</link><description>&lt;p>In this post I want to show you a configuration for the jenking plugin &lt;a href="https://github.com/jenkinsci/basic-branch-build-strategies-plugin">basic-branch-build-strategies-plugin&lt;/a>. The main idea of this plugin is to configure, when a pipeline is triggered.&lt;/p>
&lt;h2 id="requirements">Requirements &lt;a href="#requirements" class="hash">#&lt;/a>&lt;/h2>
&lt;p>For my configuration I wanted to have following setup:&lt;/p>
&lt;ol>
&lt;li>Build pushes on any branch&lt;/li>
&lt;li>Build pull requests&lt;/li>
&lt;li>Build tags on update or creation&lt;/li>
&lt;li>Don&amp;rsquo;t build everything after a restart of jenkins&lt;/li>
&lt;/ol>
&lt;h2 id="implementation">Implementation &lt;a href="#implementation" class="hash">#&lt;/a>&lt;/h2>
&lt;blockquote>
&lt;p>Scroll down for the final example&lt;/p>
&lt;/blockquote>
&lt;p>In generell the plugin provides for each of the requirements above a strategy.&lt;/p>
&lt;ol>
&lt;li>&lt;code>buildNamedBranches&lt;/code>&lt;/li>
&lt;li>&lt;code>buildChangeRequests&lt;/code>&lt;/li>
&lt;li>&lt;code>buildTags&lt;/code>&lt;/li>
&lt;li>&lt;code>skipInitialBuildOnFirstBranchIndexing&lt;/code>&lt;/li>
&lt;/ol>
&lt;p>But the problem is that they need to be combined very carefully in order to make them work together.&lt;/p>
&lt;p>In addition to the previously named strategies, the plugin provides container strategies that trigger only when all sub strategies match a specific result. Following container strategies are available:&lt;/p>
&lt;ul>
&lt;li>&lt;code>buildAnyBranches&lt;/code>: Matches as soon as one of the sub strategies is matching&lt;/li>
&lt;li>&lt;code>buildAllBranches&lt;/code>: Matches when all sub strategies are matching&lt;/li>
&lt;li>&lt;code>buildNoneBranches&lt;/code>: Matches when no sub strategy is matching&lt;/li>
&lt;/ul>
&lt;p>The following strategy would match most of our requirements but not the last the one.&lt;/p>
&lt;pre>&lt;code>buildAnyBranches {
stratagies {
buildChangeRequests {
ignoreTargetOnlyChanges(true)
ignoreUntrustedChanges(false)
}
buildRegularBranches()
buildTags {
atLeastDays '-1'
atMostDays '7'
}
}
}
&lt;/code>&lt;/pre>
&lt;p>In order to integrate &lt;code>skipInitialBuildOnFirstBranchIndexing&lt;/code> with our existing configure we need to add a &lt;code>buildAllBranches&lt;/code>. The whole block will then not match in the first build.&lt;/p>
&lt;pre>&lt;code>buildAllBranches {
strategies {
skipInitialBuildOnFirstBranchIndexing()
buildAnyBranches {
stratagies {
buildChangeRequests {
ignoreTargetOnlyChanges(true)
ignoreUntrustedChanges(false)
}
buildRegularBranches()
buildTags {
atLeastDays '-1'
atMostDays '7'
}
}
}
}
}
&lt;/code>&lt;/pre>
&lt;p>Now there is only one problem left. This configuration will not trigger when a new tag is created since &lt;code>skipInitialBuildOnFirstBranchIndexing&lt;/code> will not match on the first creation. This can be solved by another &lt;code>buildAnyBranches&lt;/code> block, which combines &lt;code>skipInitialBuildOnFirstBranchIndexing&lt;/code> and &lt;code>buildTags&lt;/code>&lt;/p>
&lt;h3 id="final-example">Final example &lt;a href="#final-example" class="hash">#&lt;/a>&lt;/h3>
&lt;pre>&lt;code>buildAllBranches {
strategies {
buildAnyBranches {
strategies {
skipInitialBuildOnFirstBranchIndexing()
buildTags {
atLeastDays '-1'
atMostDays '7'
}
}
}
buildAnyBranches {
stratagies {
buildChangeRequests {
ignoreTargetOnlyChanges(true)
ignoreUntrustedChanges(false)
}
buildRegularBranches()
buildTags {
atLeastDays '-1'
atMostDays '7'
}
}
}
}
}
&lt;/code>&lt;/pre>
&lt;h2 id="opinion-on-this-jenkins-solution">Opinion on this jenkins solution &lt;a href="#opinion-on-this-jenkins-solution" class="hash">#&lt;/a>&lt;/h2>
&lt;p>First of all I think the configuration is very unintuitive and gets very complex even in simple scenarios. In order to fully understand the given plugin strategies, I had to look up the source code. I also think this configuration should not be part of the Job, but the pipeline configuration instead. The problem is, that the Jenkins declarative pipeline keyword &lt;code>when&lt;/code> can not be used for a complete pipelines but only stages. A workaround where you would include all your stages in one parent stage would result in a configuration where all jobs will be triggered in the first place but then skip all stages.&lt;/p></description><author>ronalds.vilcins@gmail.com (Ronalds Vilcins)</author><guid>https://niecore.xyz/2023/01/30/jenkins-build-strategy-examples/</guid><pubDate>Mon, 30 Jan 2023 10:00:00 +0100</pubDate></item><item><title>Analog photo scanner comparison (Epson Perection v600 vs Plustek OpticFilm 8200i</title><link>https://niecore.xyz/2022/08/26/analog-photo-scan-comparison/</link><description>&lt;p>Within this post I want to show you the quality differences in analog scanning hardware and methods. For comparision I picked one picture for which I own a photo copy as well as an negative. Following four scanning methods will be evaluated:&lt;/p>
&lt;ul>
&lt;li>Iphone 12 photo of photo&lt;/li>
&lt;li>Epson Perfection v600 photo scan&lt;/li>
&lt;li>Epson Perfection v600 negative scan&lt;/li>
&lt;li>Plustek 8200i negative scan&lt;/li>
&lt;/ul>
&lt;p>All scans have been performed with the software &amp;ldquo;Silverfast 8&amp;rdquo;.&lt;/p>
&lt;h2 id="iphone-12-photo-of-photo">Iphone 12 photo of photo &lt;a href="#iphone-12-photo-of-photo" class="hash">#&lt;/a>&lt;/h2>
&lt;figure class="figure">
&lt;a href="https://niecore.xyz/2022/08/26/analog-photo-scan-comparison/img/iphone_scan.jpg">&lt;img src="https://niecore.xyz/2022/08/26/analog-photo-scan-comparison/img/iphone_scan_hu93b4e77d1ab16a9951de3f26b2b6fd30_1445312_400x400_fit_q75_box.jpg" alt="Iphone 12 photo of photo" class="figure-img img-fluid" width="400" height="300">&lt;/a>
&lt;figcaption class="figure-caption">Iphone 12 photo of photo&lt;/figcaption>
&lt;/figure>
&lt;p>The mobile phone copy is really color accurate and almost all details are captured. The downside is the missing color dynamics. This method also requires the best working conditions like good lightning and no reflections.&lt;/p>
&lt;h2 id="epson-perfection-v600-photo-scan">Epson Perfection v600 photo scan &lt;a href="#epson-perfection-v600-photo-scan" class="hash">#&lt;/a>&lt;/h2>
&lt;figure class="figure">
&lt;a href="https://niecore.xyz/2022/08/26/analog-photo-scan-comparison/img/flatbed_photo_silverfast.jpg">&lt;img src="https://niecore.xyz/2022/08/26/analog-photo-scan-comparison/img/flatbed_photo_silverfast_huf1fe7adbd49996e14964f2d12e538d0f_401318_400x400_fit_q75_box.jpg" alt="Epson Perfection v600 photo scan" class="figure-img img-fluid" width="400" height="271">&lt;/a>
&lt;figcaption class="figure-caption">Epson Perfection v600 photo scan&lt;/figcaption>
&lt;/figure>
&lt;p>In this scan the highlights are overshoot. The overall resolution anyhow is okay.&lt;/p>
&lt;h2 id="epson-perfection-v600-negative-scan">Epson Perfection v600 negative scan &lt;a href="#epson-perfection-v600-negative-scan" class="hash">#&lt;/a>&lt;/h2>
&lt;figure class="figure">
&lt;a href="https://niecore.xyz/2022/08/26/analog-photo-scan-comparison/img/flatbed_negative_silverfast.jpg">&lt;img src="https://niecore.xyz/2022/08/26/analog-photo-scan-comparison/img/flatbed_negative_silverfast_hu56a8558ee7d1dde46556dddb9a85527c_1908652_400x400_fit_q75_box.jpg" alt="Iphone 12 photo of photo" class="figure-img img-fluid" width="400" height="258">&lt;/a>
&lt;figcaption class="figure-caption">Iphone 12 photo of photo&lt;/figcaption>
&lt;/figure>
&lt;p>This scan looks a little blurry to me. Only the color accurancy is better then the photo scan.&lt;/p>
&lt;h2 id="plustek-8200i-negative-scan">Plustek 8200i negative scan &lt;a href="#plustek-8200i-negative-scan" class="hash">#&lt;/a>&lt;/h2>
&lt;figure class="figure">
&lt;a href="https://niecore.xyz/2022/08/26/analog-photo-scan-comparison/img/negative_scanner.jpg">&lt;img src="https://niecore.xyz/2022/08/26/analog-photo-scan-comparison/img/negative_scanner_hu45af88a189a3eef2d8bd9c3c4b9f75cb_427302_400x400_fit_q75_box.jpg" alt="Plustek 8200i negative scan" class="figure-img img-fluid" width="400" height="265">&lt;/a>
&lt;figcaption class="figure-caption">Plustek 8200i negative scan&lt;/figcaption>
&lt;/figure>
&lt;p>This scan has the highest quality in opinion. Highlights are all visible and you can even see the film grain. It looks crisp.&lt;/p>
&lt;h2 id="conclusion">Conclusion &lt;a href="#conclusion" class="hash">#&lt;/a>&lt;/h2>
&lt;p>Its definitly worth to have a decicated negative scanner in order to archive highest quality for your photo archive. The flatbed scanner shall only be used for photos where no negative is available anymore. Still I want to mention that flatbed scanner quality is not as bad as other comments in the internet suggest.&lt;/p></description><author>ronalds.vilcins@gmail.com (Ronalds Vilcins)</author><guid>https://niecore.xyz/2022/08/26/analog-photo-scan-comparison/</guid><pubDate>Fri, 26 Aug 2022 10:00:00 +0100</pubDate></item><item><title>Use a cheap ublox gps dongle for astroberry time and coordindates</title><link>https://niecore.xyz/2022/04/21/gps-usb-dongle-for-astroberry/</link><description>&lt;p>One disadvantage of running astroberry on a raspberry pi is that you dont have a built in real time clock and are asked to setup the current time every time you restart the device unless you are connected to the internet.
Therefore I bought a cheap usb gps dongle that I want to connect to my astrophotography rig which can retrieve the current time from the gps satellites. That will safe me time during the setup phase of the astrophotography rig.&lt;/p>
&lt;figure class="figure">
&lt;a href="https://niecore.xyz/2022/04/21/gps-usb-dongle-for-astroberry/img/u-blox7.PNG">&lt;img src="https://niecore.xyz/2022/04/21/gps-usb-dongle-for-astroberry/img/u-blox7_hu499f7d55bc280c0bf44acbd0c5fc7100_193493_400x400_fit_box_3.PNG" alt="U-Blox Device on Amazon" class="figure-img img-fluid" width="400" height="207">&lt;/a>
&lt;figcaption class="figure-caption">U-Blox Device on Amazon&lt;/figcaption>
&lt;/figure>
&lt;p>I atteched the device to my astroberry and checked if it is detected correctly (see Ublox with iwth id U-Blox AG [u-blox 7]):&lt;/p>
&lt;pre>&lt;code>astroberry@astroberry:~ $ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 006: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Bus 001 Device 005: ID 1546:01a7 U-Blox AG [u-blox 7]
Bus 001 Device 004: ID 04a9:323b Canon, Inc. EOS Rebel T4i
Bus 001 Device 003: ID 03c3:120c
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
&lt;/code>&lt;/pre>
&lt;p>We want to use the indi driver &lt;code>indi_gpsd&lt;/code> which makes use of the &lt;code>gpsd&lt;/code> running on the raspberry pi. In my version of astroberry the &lt;code>gpsd&lt;/code> was already installed and running.
If this is not the case for you run the following commands:&lt;/p>
&lt;pre>&lt;code>sudo apt install gpsd
sudo systemctl start gpsd
sudo systemctl enable gpsd
&lt;/code>&lt;/pre>
&lt;p>After that I disabled the virtual gps of astroberry:&lt;/p>
&lt;pre>&lt;code>astroberry@astroberry:~ $ sudo systemctl stop virtualgps.service
astroberry@astroberry:~ $ sudo systemctl disable virtualgps.service
Removed /etc/systemd/system/multi-user.target.wants/virtualgps.service
&lt;/code>&lt;/pre>
&lt;p>With help of the utility gpsmon I was then able to check the status of the &lt;code>gpsd&lt;/code>:&lt;/p>
&lt;figure class="figure">
&lt;a href="https://niecore.xyz/2022/04/21/gps-usb-dongle-for-astroberry/img/gpsmon.PNG">&lt;img src="https://niecore.xyz/2022/04/21/gps-usb-dongle-for-astroberry/img/gpsmon_hu6c8c0ff58804eb049014ea800e079929_67781_400x400_fit_box_3.PNG" alt="Screenshot of the gpsmon output" class="figure-img img-fluid" width="400" height="269">&lt;/a>
&lt;figcaption class="figure-caption">Screenshot of the gpsmon output&lt;/figcaption>
&lt;/figure>
&lt;p>Warning! the gps dongles antenna is very bad and the gps was not connecting in my case even though I tested it next to a window. Only when the green led of the gps dongle is blinking green you have a gps satellite fix.&lt;/p>
&lt;p>Finally you can add the driver &lt;code>indi_gpsd&lt;/code> to your equipment list and start ekos:&lt;/p>
&lt;figure class="figure">
&lt;a href="https://niecore.xyz/2022/04/21/gps-usb-dongle-for-astroberry/img/indi_gpsd.PNG">&lt;img src="https://niecore.xyz/2022/04/21/gps-usb-dongle-for-astroberry/img/indi_gpsd_huf5ffd917c3ffddef6910dc4d0cb57712_58663_400x400_fit_box_3.PNG" alt="Screenshot of the ekos indi_gpsd driver" class="figure-img img-fluid" width="400" height="330">&lt;/a>
&lt;figcaption class="figure-caption">Screenshot of the ekos indi_gpsd driver&lt;/figcaption>
&lt;/figure></description><author>ronalds.vilcins@gmail.com (Ronalds Vilcins)</author><guid>https://niecore.xyz/2022/04/21/gps-usb-dongle-for-astroberry/</guid><pubDate>Thu, 21 Apr 2022 10:13:04 +0100</pubDate></item><item><title>Rock am ring 2022 artists playlist</title><link>https://niecore.xyz/2022/03/22/rock-am-ring-2022-artits-playlist/</link><description>&lt;p>One song per artist that I want to visit at rock am ring 2022.&lt;/p>
&lt;iframe style="border-radius:12px" src="https://open.spotify.com/embed/playlist/68S7Gxj8hVOmGrcAa1vruG?utm_source=generator&amp;theme=0" width="100%" height="380" frameBorder="0" allowfullscreen="" allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture">&lt;/iframe></description><author>ronalds.vilcins@gmail.com (Ronalds Vilcins)</author><guid>https://niecore.xyz/2022/03/22/rock-am-ring-2022-artits-playlist/</guid><pubDate>Tue, 22 Mar 2022 10:00:00 +0100</pubDate></item><item><title>Display mobile operator data from RUT955 router in Homeassistant</title><link>https://niecore.xyz/2022/03/16/diplay-mobile-operator-data-from-rut955-in-homeassistant/</link><description>
&lt;figure class="figure">
&lt;a href="https://niecore.xyz/2022/03/16/diplay-mobile-operator-data-from-rut955-in-homeassistant/img/ha_screenshot.png">&lt;img src="https://niecore.xyz/2022/03/16/diplay-mobile-operator-data-from-rut955-in-homeassistant/img/ha_screenshot_hu2f7fd423f4ecd132b82b713954b8e09c_27521_400x400_fit_box_3.png" alt="Router connection details in Homeassistant" class="figure-img img-fluid" width="400" height="300">&lt;/a>
&lt;figcaption class="figure-caption">Router connection details in Homeassistant&lt;/figcaption>
&lt;/figure>
&lt;p>The mobile router RUT955 from Teltonika has a MQTT interface which can give information about the mobile operator data like signal strength or current carrier.
Make sure to configure the &lt;code>MQTT Publisher&lt;/code> with your MQTT broker according to this &lt;a href="https://wiki.teltonika-networks.com/view/RUT955_MQTT#MQTT_Publisher">manual&lt;/a>.&lt;/p>
&lt;h2 id="communication-model">communication model &lt;a href="#communication-model" class="hash">#&lt;/a>&lt;/h2>
&lt;p>Unfortunately Teltonika decided to implement a request/response pattern on top of MQTTs publish subscribe pattern in order to retrieve data from the router (see &lt;a href="https://wiki.teltonika-networks.com/view/Monitoring_via_MQTT">reference&lt;/a>).&lt;/p>
&lt;p>If you are i.e. interested in the routers signal strength you would need to subscribe to the topic of your router. Notice that we used the wildcard symbol &lt;code>+&lt;/code> in the second topic level since we do not know the router id yet.&lt;/p>
&lt;pre>&lt;code>mosquitto_sub -h 192.168.1.10 -t router/+/signal -v
&lt;/code>&lt;/pre>
&lt;p>And then in the next step request the signal data point via a publish message&lt;/p>
&lt;pre>&lt;code>mosquitto_pub -h 192.168.1.10 -t router/get -m signal
&lt;/code>&lt;/pre>
&lt;p>Example output where you can see the signal strength &lt;code>-74&lt;/code> and the router id of your device which is &lt;code>1115790027&lt;/code> in my case:&lt;/p>
&lt;pre>&lt;code>router/1115790027/signal -74
&lt;/code>&lt;/pre>
&lt;h2 id="create-mqtt-sensor-entities-in-homeassistant">create MQTT sensor entities in Homeassistant &lt;a href="#create-mqtt-sensor-entities-in-homeassistant" class="hash">#&lt;/a>&lt;/h2>
&lt;p>To receive the sensor data from MQTT into Homeassistant the &lt;a href="https://www.home-assistant.io/integrations/sensor.mqtt/">MQTT Sensor integration&lt;/a> can be used. In the following configuration most of the operator data is captured.&lt;/p>
&lt;pre>&lt;code class="language-yaml"># configuration.yaml
sensor:
- platform: mqtt
name: &amp;quot;Router Operator&amp;quot;
state_topic: &amp;quot;router/1115790027/operator&amp;quot;
- platform: mqtt
name: &amp;quot;Router Network&amp;quot;
state_topic: &amp;quot;router/1115790027/network&amp;quot;
- platform: mqtt
name: &amp;quot;Router Connection&amp;quot;
state_topic: &amp;quot;router/1115790027/connection&amp;quot;
- platform: mqtt
name: &amp;quot;Router Wan&amp;quot;
state_topic: &amp;quot;router/1115790027/wan&amp;quot;
- platform: mqtt
name: &amp;quot;Router Uptime&amp;quot;
state_topic: &amp;quot;router/1115790027/uptime&amp;quot;
- platform: mqtt
name: &amp;quot;Router Signal&amp;quot;
state_topic: &amp;quot;router/1115790027/signal&amp;quot;
device_class: &amp;quot;signal_strength&amp;quot;
unit_of_measurement: &amp;quot;dBm&amp;quot;
&lt;/code>&lt;/pre>
&lt;h2 id="regularly-request-data-points-of-interest-with-an-automation">regularly request data points of interest with an automation &lt;a href="#regularly-request-data-points-of-interest-with-an-automation" class="hash">#&lt;/a>&lt;/h2>
&lt;p>In addition we need to make sure that the data is requested in regular interval. For this a automation with the &lt;a href="https://www.home-assistant.io/docs/automation/trigger/#time-pattern-trigger">time_pattern&lt;/a> trigger and the &lt;a href="https://www.home-assistant.io/docs/mqtt/service/">mqtt.publish&lt;/a> service can be used.&lt;/p>
&lt;pre>&lt;code class="language-yaml"># automations.yaml
sensor:
- id: '1647365447073'
alias: Retrive Router Data From RUT955
description: 'This automation requests mobile operator data via MQTT every 30 seconds'
mode: single
trigger:
- platform: time_pattern
seconds: '30'
action:
- service: mqtt.publish
data:
topic: router/get
payload: signal
- service: mqtt.publish
data:
topic: router/get
payload: operator
- service: mqtt.publish
data:
topic: router/get
payload: network
- service: mqtt.publish
data:
topic: router/get
payload: connection
- service: mqtt.publish
data:
topic: router/get
payload: wan
- service: mqtt.publish
data:
topic: router/get
payload: operator
- service: mqtt.publish
data:
topic: router/get
payload: uptime
&lt;/code>&lt;/pre>
&lt;h2 id="small-rant">small rant &lt;a href="#small-rant" class="hash">#&lt;/a>&lt;/h2>
&lt;p>I can not understand why you would like to implement a request response pattern on top of publish subscribe protocol. Teltonika could have simply published all data points on a regular basis by themselves or use a HTTP Rest API instead of MQTT for this usecase.&lt;/p></description><author>ronalds.vilcins@gmail.com (Ronalds Vilcins)</author><guid>https://niecore.xyz/2022/03/16/diplay-mobile-operator-data-from-rut955-in-homeassistant/</guid><pubDate>Wed, 16 Mar 2022 10:00:00 +0100</pubDate></item><item><title>Configure a git repository with multiple remotes automatically</title><link>https://niecore.xyz/2022/03/09/git-configure-multiple-remotes-automaticly/</link><description>&lt;p>When working with git mirrors you often run into the problem that you want to push a changeset to the upstream repository instead of your mirror.&lt;/p>
&lt;p>The commands to add the upstream remote and push the current HEAD to master branch would look similar to this:&lt;/p>
&lt;pre>&lt;code>git remote add upstream https://github.com/torvalds/linux.git
git push upstream HEAD:master
&lt;/code>&lt;/pre>
&lt;p>Since you in most cases would never push to a mirror repository you can configure git so that all pushes are directed towards the upstream remote instead of origin with following command:&lt;/p>
&lt;pre>&lt;code>git config remote.pushdefault upstream
&lt;/code>&lt;/pre>
&lt;h2 id="automatic-configuration">automatic configuration &lt;a href="#automatic-configuration" class="hash">#&lt;/a>&lt;/h2>
&lt;p>Since these configurations do not persist after clones, each developer has to configure this changes by himself after a fresh clone. An automatic configuration can be archived with help of additional git config includes.&lt;/p>
&lt;p>By placing a git config file into your repository, you could automatically configure your mirrors to have the correct upstream configured:&lt;/p>
&lt;pre>&lt;code># .upstream.gitconfig
[remote &amp;quot;upstream&amp;quot;]
url = https://github.com/torvalds/linux.git
fetch = +refs/heads/*:refs/remotes/upstream/*
[remote]
pushdefault = upstream
&lt;/code>&lt;/pre>
&lt;p>This local config file can be included to your git config with following command:&lt;/p>
&lt;pre>&lt;code># Add this command to your git hook or checkout script
git config --local include.path .upstream.gitconfig
&lt;/code>&lt;/pre></description><author>ronalds.vilcins@gmail.com (Ronalds Vilcins)</author><guid>https://niecore.xyz/2022/03/09/git-configure-multiple-remotes-automaticly/</guid><pubDate>Wed, 09 Mar 2022 10:13:04 +0100</pubDate></item></channel></rss>