<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>The Scoop</title>
    <description>Outdoor Adventures and Tech Writings by Alastair Brunton</description>
    <link>https://axb.no/</link>
    <atom:link href="https://axb.no/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Tue, 21 Apr 2026 14:07:43 +0200</pubDate>
    <lastBuildDate>Tue, 21 Apr 2026 14:07:43 +0200</lastBuildDate>
    <generator>Jekyll v3.9.5</generator>
    
      
      <item>
        <title>dacia and renault radio codes</title>
        <description>&lt;div style=&quot;display: flex; justify-content: center; gap: 40px; margin-bottom: 30px; align-items: center;&quot;&gt;
  &lt;img src=&quot;/assets/images/dacia-logo.png&quot; alt=&quot;Dacia Logo&quot; style=&quot;height: 60px; width: auto;&quot; /&gt;
  &lt;img src=&quot;/assets/images/renault-logo.png&quot; alt=&quot;Renault Logo&quot; style=&quot;height: 80px; width: auto;&quot; /&gt;
&lt;/div&gt;

&lt;p&gt;If your Dacia or Renault has lost power or had its battery disconnected, you might find your radio asking for an unlock code. Instead of paying a dealership to unlock it, you can find the code yourself using our lookup tool below.&lt;/p&gt;

&lt;h3 id=&quot;how-to-find-your-pre-code&quot;&gt;How to find your pre-code&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Remove the Radio:&lt;/strong&gt; You will usually need radio removal keys (or sometimes just a couple of small screwdrivers or pens) to gently pull the unit out of the dashboard.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Find the Sticker:&lt;/strong&gt; On the back or side of the radio, there will be a sticker with various barcodes and serial numbers.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Identify the Pre-Code:&lt;/strong&gt; Look for a long serial number. The “pre-code” is always the &lt;strong&gt;last four characters&lt;/strong&gt; of this serial number. It consists of &lt;strong&gt;one letter followed by three numbers&lt;/strong&gt; (for example, &lt;code&gt;A123&lt;/code&gt; or &lt;code&gt;V482&lt;/code&gt;). Sometimes it is written separately, often prefixed by “T0” (e.g., &lt;code&gt;T0A123&lt;/code&gt;).&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;radio-code-lookup-tool&quot;&gt;Radio Code Lookup Tool&lt;/h3&gt;

&lt;p&gt;Enter your 4-character pre-code (e.g., A123) in the box below to instantly get your unlock code.&lt;/p&gt;

&lt;div class=&quot;radio-lookup-container&quot; style=&quot;background: #f4f4f4; padding: 20px; border-radius: 8px; margin: 20px 0; text-align: center;&quot;&gt;
    &lt;input type=&quot;text&quot; id=&quot;precode-input&quot; placeholder=&quot;e.g. A123&quot; maxlength=&quot;4&quot; style=&quot;padding: 10px; font-size: 16px; width: 150px; text-transform: uppercase;&quot; /&gt;
    &lt;button id=&quot;lookup-btn&quot; style=&quot;padding: 10px 20px; font-size: 16px; cursor: pointer; background: #007bff; color: white; border: none; border-radius: 4px;&quot;&gt;Get Code&lt;/button&gt;
    &lt;div id=&quot;result-display&quot; style=&quot;margin-top: 15px; font-size: 20px; font-weight: bold; min-height: 30px;&quot;&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
    document.addEventListener(&quot;DOMContentLoaded&quot;, function() {
        const btn = document.getElementById(&apos;lookup-btn&apos;);
        const input = document.getElementById(&apos;precode-input&apos;);
        const result = document.getElementById(&apos;result-display&apos;);
        let codesData = null;

        // Fetch the codes JSON when the page loads
        fetch(&apos;/assets/radio_codes.json&apos;)
            .then(response =&gt; response.json())
            .then(data =&gt; {
                codesData = data;
            })
            .catch(err =&gt; {
                console.error(&apos;Error loading codes:&apos;, err);
                result.innerHTML = &apos;&lt;span style=&quot;color:red;&quot;&gt;Error loading code database. Please try again later.&lt;/span&gt;&apos;;
            });

        function lookupCode() {
            if (!codesData) {
                result.innerHTML = &apos;&lt;span style=&quot;color:orange;&quot;&gt;Still loading database, please wait...&lt;/span&gt;&apos;;
                return;
            }
            
            const precode = input.value.trim().toUpperCase();
            if (precode.length !== 4) {
                result.innerHTML = &apos;&lt;span style=&quot;color:red; font-size: 16px;&quot;&gt;Please enter a valid 4-character pre-code (e.g., A123).&lt;/span&gt;&apos;;
                return;
            }

            const code = codesData[precode];
            if (code) {
                result.innerHTML = `Your unlock code is: &lt;span style=&quot;color:green; font-size: 24px;&quot;&gt;${code}&lt;/span&gt;`;
            } else {
                result.innerHTML = &apos;&lt;span style=&quot;color:red; font-size: 16px;&quot;&gt;Code not found for this pre-code. Please check it and try again.&lt;/span&gt;&apos;;
            }
        }

        btn.addEventListener(&apos;click&apos;, lookupCode);
        input.addEventListener(&apos;keypress&apos;, function(e) {
            if (e.key === &apos;Enter&apos;) lookupCode();
        });
    });
&lt;/script&gt;

&lt;h3 id=&quot;raw-data&quot;&gt;Raw Data&lt;/h3&gt;

&lt;p&gt;If you prefer to view or download the raw data yourself, you can download the full database of codes in JSON format here: &lt;a href=&quot;/assets/radio_codes.json&quot;&gt;radio_codes.json&lt;/a&gt;. Alternatively, you can view the original compiled list on &lt;a href=&quot;https://github.com/pyrat/renault-radio-code-list&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
</description>
        
          <description>&lt;div style=&quot;display: flex; justify-content: center; gap: 40px; margin-bottom: 30px; align-items: center;&quot;&gt;
  &lt;img src=&quot;/assets/images/dacia-logo.png&quot; alt=&quot;Dacia Logo&quot; style=&quot;height: 60px; width: auto;&quot; /&gt;
  &lt;img src=&quot;/assets/images/renault-logo.png&quot; alt=&quot;Renault Logo&quot; style=&quot;height: 80px; width: auto;&quot; /&gt;
&lt;/div&gt;

&lt;p&gt;If your Dacia or Renault has lost power or had its battery disconnected, you might find your radio asking for an unlock code. Instead of paying a dealership to unlock it, you can find the code yourself using our lookup tool below.&lt;/p&gt;

&lt;h3 id=&quot;how-to-find-your-pre-code&quot;&gt;How to find your pre-code&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Remove the Radio:&lt;/strong&gt; You will usually need radio removal keys (or sometimes just a couple of small screwdrivers or pens) to gently pull the unit out of the dashboard.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Find the Sticker:&lt;/strong&gt; On the back or side of the radio, there will be a sticker with various barcodes and serial numbers.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Identify the Pre-Code:&lt;/strong&gt; Look for a long serial number. The “pre-code” is always the &lt;strong&gt;last four characters&lt;/strong&gt; of this serial number. It consists of &lt;strong&gt;one letter followed by three numbers&lt;/strong&gt; (for example, &lt;code&gt;A123&lt;/code&gt; or &lt;code&gt;V482&lt;/code&gt;). Sometimes it is written separately, often prefixed by “T0” (e.g., &lt;code&gt;T0A123&lt;/code&gt;).&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;radio-code-lookup-tool&quot;&gt;Radio Code Lookup Tool&lt;/h3&gt;

&lt;p&gt;Enter your 4-character pre-code (e.g., A123) in the box below to instantly get your unlock code.&lt;/p&gt;

&lt;div class=&quot;radio-lookup-container&quot; style=&quot;background: #f4f4f4; padding: 20px; border-radius: 8px; margin: 20px 0; text-align: center;&quot;&gt;
    &lt;input type=&quot;text&quot; id=&quot;precode-input&quot; placeholder=&quot;e.g. A123&quot; maxlength=&quot;4&quot; style=&quot;padding: 10px; font-size: 16px; width: 150px; text-transform: uppercase;&quot; /&gt;
    &lt;button id=&quot;lookup-btn&quot; style=&quot;padding: 10px 20px; font-size: 16px; cursor: pointer; background: #007bff; color: white; border: none; border-radius: 4px;&quot;&gt;Get Code&lt;/button&gt;
    &lt;div id=&quot;result-display&quot; style=&quot;margin-top: 15px; font-size: 20px; font-weight: bold; min-height: 30px;&quot;&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
    document.addEventListener(&quot;DOMContentLoaded&quot;, function() {
        const btn = document.getElementById(&apos;lookup-btn&apos;);
        const input = document.getElementById(&apos;precode-input&apos;);
        const result = document.getElementById(&apos;result-display&apos;);
        let codesData = null;

        // Fetch the codes JSON when the page loads
        fetch(&apos;/assets/radio_codes.json&apos;)
            .then(response =&gt; response.json())
            .then(data =&gt; {
                codesData = data;
            })
            .catch(err =&gt; {
                console.error(&apos;Error loading codes:&apos;, err);
                result.innerHTML = &apos;&lt;span style=&quot;color:red;&quot;&gt;Error loading code database. Please try again later.&lt;/span&gt;&apos;;
            });

        function lookupCode() {
            if (!codesData) {
                result.innerHTML = &apos;&lt;span style=&quot;color:orange;&quot;&gt;Still loading database, please wait...&lt;/span&gt;&apos;;
                return;
            }
            
            const precode = input.value.trim().toUpperCase();
            if (precode.length !== 4) {
                result.innerHTML = &apos;&lt;span style=&quot;color:red; font-size: 16px;&quot;&gt;Please enter a valid 4-character pre-code (e.g., A123).&lt;/span&gt;&apos;;
                return;
            }

            const code = codesData[precode];
            if (code) {
                result.innerHTML = `Your unlock code is: &lt;span style=&quot;color:green; font-size: 24px;&quot;&gt;${code}&lt;/span&gt;`;
            } else {
                result.innerHTML = &apos;&lt;span style=&quot;color:red; font-size: 16px;&quot;&gt;Code not found for this pre-code. Please check it and try again.&lt;/span&gt;&apos;;
            }
        }

        btn.addEventListener(&apos;click&apos;, lookupCode);
        input.addEventListener(&apos;keypress&apos;, function(e) {
            if (e.key === &apos;Enter&apos;) lookupCode();
        });
    });
&lt;/script&gt;

&lt;h3 id=&quot;raw-data&quot;&gt;Raw Data&lt;/h3&gt;

&lt;p&gt;If you prefer to view or download the raw data yourself, you can download the full database of codes in JSON format here: &lt;a href=&quot;/assets/radio_codes.json&quot;&gt;radio_codes.json&lt;/a&gt;. Alternatively, you can view the original compiled list on &lt;a href=&quot;https://github.com/pyrat/renault-radio-code-list&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
</description>
        
        <pubDate>Sat, 21 Mar 2026 16:00:00 +0100</pubDate>
        <link>https://axb.no/2026/03/21/dacia-and-renault-radio-codes/</link>
        <guid isPermaLink="true">https://axb.no/2026/03/21/dacia-and-renault-radio-codes/</guid>
        
        
      </item>
      
    
      
      <item>
        <title>plum binding template</title>
        <description>&lt;p&gt;&lt;img src=&quot;https://s3.amazonaws.com/excitedmedia/guide-s-heel-roof-240.jpg&quot; alt=&quot;Plum bindings&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Here is a link to a plum binding template that I have found. Useful when drilling your own ski bindings.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://s3.amazonaws.com/excitedmedia/1220_guide-race.pdf&quot;&gt;Plum Binding Template&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        
          <description>&lt;p&gt;&lt;img src=&quot;https://s3.amazonaws.com/excitedmedia/guide-s-heel-roof-240.jpg&quot; alt=&quot;Plum bindings&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Here is a link to a plum binding template that I have found. Useful when drilling your own ski bindings.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://s3.amazonaws.com/excitedmedia/1220_guide-race.pdf&quot;&gt;Plum Binding Template&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        
        <pubDate>Tue, 04 Feb 2025 20:03:00 +0100</pubDate>
        <link>https://axb.no/2025/02/04/plum-binding-template/</link>
        <guid isPermaLink="true">https://axb.no/2025/02/04/plum-binding-template/</guid>
        
        
      </item>
      
    
      
      <item>
        <title>Flexit UNI 3 Manuals</title>
        <description>&lt;p&gt;&lt;img src=&quot;/assets/img/grafik-uni3.webp&quot; alt=&quot;Flexit UNI 3&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Here are a couple of Flexit UNI 3 manuals that I have found:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://s3.amazonaws.com/excitedmedia/man_110738en_3439.pdf&quot;&gt;Flexit UNI 3 Installation Manual&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://s3.amazonaws.com/excitedmedia/fdv_110737no_3428.pdf&quot;&gt;Flexit UNI 3 User Manual&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        
          <description>&lt;p&gt;&lt;img src=&quot;/assets/img/grafik-uni3.webp&quot; alt=&quot;Flexit UNI 3&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Here are a couple of Flexit UNI 3 manuals that I have found:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://s3.amazonaws.com/excitedmedia/man_110738en_3439.pdf&quot;&gt;Flexit UNI 3 Installation Manual&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://s3.amazonaws.com/excitedmedia/fdv_110737no_3428.pdf&quot;&gt;Flexit UNI 3 User Manual&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        
        <pubDate>Mon, 09 Dec 2024 22:26:00 +0100</pubDate>
        <link>https://axb.no/2024/12/09/flexit-uni-3-manuals/</link>
        <guid isPermaLink="true">https://axb.no/2024/12/09/flexit-uni-3-manuals/</guid>
        
        
      </item>
      
    
      
      <item>
        <title>jotul f-305 parts diagram</title>
        <description>&lt;p&gt;&lt;img src=&quot;/assets/img/jotul.jpg&quot; alt=&quot;jotul f-305&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Here is a parts diagram for the Jotul F-305. - &lt;a href=&quot;https://s3.amazonaws.com/excitedmedia/jotul-f-305-parts.pdf&quot;&gt;Download the diagram&lt;/a&gt;&lt;/p&gt;
</description>
        
          <description>&lt;p&gt;&lt;img src=&quot;/assets/img/jotul.jpg&quot; alt=&quot;jotul f-305&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Here is a parts diagram for the Jotul F-305. - &lt;a href=&quot;https://s3.amazonaws.com/excitedmedia/jotul-f-305-parts.pdf&quot;&gt;Download the diagram&lt;/a&gt;&lt;/p&gt;
</description>
        
        <pubDate>Wed, 30 Oct 2024 22:15:00 +0100</pubDate>
        <link>https://axb.no/2024/10/30/jotul-f-305-parts-diagram/</link>
        <guid isPermaLink="true">https://axb.no/2024/10/30/jotul-f-305-parts-diagram/</guid>
        
        
      </item>
      
    
      
      <item>
        <title>dacia duster manual</title>
        <description>&lt;p&gt;&lt;img src=&quot;/assets/img/duster.jpg&quot; alt=&quot;dacia duster&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Here is a link to a manual from 2013 for the duster. The oil capacity is 4.5 liters for the 1.5 dci engine.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://s3.amazonaws.com/excitedmedia/duster2013.pdf&quot;&gt;Download the manual&lt;/a&gt;&lt;/p&gt;
</description>
        
          <description>&lt;p&gt;&lt;img src=&quot;/assets/img/duster.jpg&quot; alt=&quot;dacia duster&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Here is a link to a manual from 2013 for the duster. The oil capacity is 4.5 liters for the 1.5 dci engine.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://s3.amazonaws.com/excitedmedia/duster2013.pdf&quot;&gt;Download the manual&lt;/a&gt;&lt;/p&gt;
</description>
        
        <pubDate>Tue, 29 Oct 2024 21:30:00 +0100</pubDate>
        <link>https://axb.no/2024/10/29/dacia-duster-manual/</link>
        <guid isPermaLink="true">https://axb.no/2024/10/29/dacia-duster-manual/</guid>
        
        
      </item>
      
    
      
      <item>
        <title>Introducing oslo.vision</title>
        <description>&lt;p&gt;&lt;img src=&quot;https://oslo.vision/images/blog/headers/header1.png&quot; alt=&quot;oslo.vision&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I would like to introduce a new project I have been working on for the past few months: &lt;a href=&quot;https://oslo.vision&quot;&gt;oslo.vision&lt;/a&gt;. This is a web application which allows businesses and individuals to create and share datasets for the training of computer vision models. The platform is designed to be user-friendly and accessible to people with minimal prior experience in machine learning.&lt;/p&gt;

&lt;p&gt;I have been working on this project with a very small group of developers and designers, and we are excited to finally share it with the world. We believe that oslo.vision has the potential to revolutionize the way that computer vision models are trained and deployed, and we are eager to see how it will be used by the community.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://oslo.vision/figures/annotate.png&quot; alt=&quot;annotate datasets&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;modern-rails-ecosystem&quot;&gt;Modern rails ecosystem&lt;/h2&gt;

&lt;p&gt;Despite python being a favorite language for machine learning, we decided to build oslo.vision using Ruby on Rails. We believe that the modern Rails ecosystem is well-suited to the development of web applications, and we have been very happy with the tools and libraries that are available to us.&lt;/p&gt;

&lt;p&gt;Things like #nobuild, stimulus, solid_queue, kamal-deploy and stripe are a breath of fresh air and a pleasure to work with. We have been able to move quickly and efficiently, and we are confident that we will be able to continue to iterate fast and improve the platform in the future.&lt;/p&gt;
</description>
        
          <description>&lt;p&gt;&lt;img src=&quot;https://oslo.vision/images/blog/headers/header1.png&quot; alt=&quot;oslo.vision&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I would like to introduce a new project I have been working on for the past few months: &lt;a href=&quot;https://oslo.vision&quot;&gt;oslo.vision&lt;/a&gt;. This is a web application which allows businesses and individuals to create and share datasets for the training of computer vision models. The platform is designed to be user-friendly and accessible to people with minimal prior experience in machine learning.&lt;/p&gt;

&lt;p&gt;I have been working on this project with a very small group of developers and designers, and we are excited to finally share it with the world. We believe that oslo.vision has the potential to revolutionize the way that computer vision models are trained and deployed, and we are eager to see how it will be used by the community.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://oslo.vision/figures/annotate.png&quot; alt=&quot;annotate datasets&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;modern-rails-ecosystem&quot;&gt;Modern rails ecosystem&lt;/h2&gt;

&lt;p&gt;Despite python being a favorite language for machine learning, we decided to build oslo.vision using Ruby on Rails. We believe that the modern Rails ecosystem is well-suited to the development of web applications, and we have been very happy with the tools and libraries that are available to us.&lt;/p&gt;

&lt;p&gt;Things like #nobuild, stimulus, solid_queue, kamal-deploy and stripe are a breath of fresh air and a pleasure to work with. We have been able to move quickly and efficiently, and we are confident that we will be able to continue to iterate fast and improve the platform in the future.&lt;/p&gt;
</description>
        
        <pubDate>Mon, 21 Oct 2024 20:34:00 +0200</pubDate>
        <link>https://axb.no/2024/10/21/introducing-oslo-vision/</link>
        <guid isPermaLink="true">https://axb.no/2024/10/21/introducing-oslo-vision/</guid>
        
        
      </item>
      
    
      
      <item>
        <title>Raspberry PI as a web server setup guide</title>
        <description>&lt;p&gt;&lt;img src=&quot;https://www.devils-heaven.com/wp-content/uploads/2013/08/Raspberry_Pi_Logo.svg_.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;Raspberry PIs are cheap. Static site generators result in sites which are easy to serve. Lets encrypt offers free &lt;span class=&quot;caps&quot;&gt;SSL&lt;/span&gt; certificates and a great tool for managing them. Cloudflare has an &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; which can be used for dynamic dns, which is also free. £35 for one off website hosting with &lt;span class=&quot;caps&quot;&gt;SSL&lt;/span&gt; is pretty cool. Note: You can use Netlify which offers hosting of your static site for free with &lt;span class=&quot;caps&quot;&gt;SSL&lt;/span&gt; included. This is likely a good choice for a &amp;#8220;real&amp;#8221; website but if you have a pi lying around this is a fun little project.&lt;/p&gt;
&lt;p&gt;Set a static IP on the PI to allow a port forwarding rule to be setup which will survive server reboots.&lt;/p&gt;
&lt;p&gt;Open /etc/dhcpd.conf&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&gt;&lt;/span&gt;interface&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;eth0
static&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;ip_address&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;192&lt;/span&gt;.168.2.13/24
static&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;routers&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;192&lt;/span&gt;.168.2.1
static&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;domain_name_servers&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;.0.0.1&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;pre&gt;sudo reboot&lt;/pre&gt;
&lt;p&gt;Now setup 2 port forwarding rules on your router. One for port 80 and one for port 443. Normally your router will have a web interface where you can configure such things.&lt;/p&gt;
&lt;p&gt;Install Nginx to serve your website. Its a relatively lightweight webserver unlike the more traditional apache.&lt;/p&gt;
&lt;pre&gt;
sudo apt update
sudo apt install -y nginx
&lt;/pre&gt;
&lt;p&gt;Link your site to the default&lt;/p&gt;
&lt;pre&gt;sudo ln -s /home/user/yoursite /var/www/html&lt;/pre&gt;
&lt;p&gt;Install docker&lt;/p&gt;
&lt;pre&gt;
sudo apt-get install apt-transport-https ca-certificates software-properties-common -y
curl -fsSL get.docker.com -o get-docker.sh &amp;amp;&amp;amp; sh get-docker.sh
sudo usermod -aG docker pi
&lt;/pre&gt;
&lt;p&gt;Add the following to /etc/sources.list&lt;/p&gt;
&lt;pre&gt;
deb https://download.docker.com/linux/raspbian/ stretch stable
&lt;/pre&gt;

&lt;pre&gt;
sudo apt-get update
sudo apt-get upgrade

systemctl start docker.service
&lt;/pre&gt;
&lt;p&gt;To check it is installed correctly.&lt;/p&gt;
&lt;pre&gt;
docker info
&lt;/pre&gt;
&lt;p&gt;Move your domain to cloudflare. This process might take 24-48 hours and initially involves opening an account, adding your domain, and then&lt;/p&gt;
&lt;p&gt;Install cloudflare dynamic dns updater and run it via docker.&lt;/p&gt;
&lt;p&gt;https://github.com/oznu/docker-cloudflare-ddns&lt;/p&gt;
&lt;p&gt;Setup certbot&lt;/p&gt;
&lt;p&gt;You need to also delete /etc/pip.conf as it will break lets encypt install process.&lt;/p&gt;
&lt;p&gt;https://certbot.eff.org/lets-encrypt/pip-nginx&lt;/p&gt;
&lt;p&gt;Open 80 and 443 on your router and setup port forwarding to your raspberry pi. Dont expect lightning performance but it is indeed a capable tool for serving static content. Who needs the &amp;#8216;cloud&amp;#8217;?!&lt;/p&gt;</description>
        
          <description>&lt;p&gt;&lt;img src=&quot;https://www.devils-heaven.com/wp-content/uploads/2013/08/Raspberry_Pi_Logo.svg_.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;Raspberry PIs are cheap. Static site generators result in sites which are easy to serve. Lets encrypt offers free &lt;span class=&quot;caps&quot;&gt;SSL&lt;/span&gt; certificates and a great tool for managing them. Cloudflare has an &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; which can be used for dynamic dns, which is also free. £35 for one off website hosting with &lt;span class=&quot;caps&quot;&gt;SSL&lt;/span&gt; is pretty cool. Note: You can use Netlify which offers hosting of your static site for free with &lt;span class=&quot;caps&quot;&gt;SSL&lt;/span&gt; included. This is likely a good choice for a &amp;#8220;real&amp;#8221; website but if you have a pi lying around this is a fun little project.&lt;/p&gt;
&lt;p&gt;Set a static IP on the PI to allow a port forwarding rule to be setup which will survive server reboots.&lt;/p&gt;
&lt;p&gt;Open /etc/dhcpd.conf&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&gt;&lt;/span&gt;interface&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;eth0
static&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;ip_address&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;192&lt;/span&gt;.168.2.13/24
static&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;routers&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;192&lt;/span&gt;.168.2.1
static&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;domain_name_servers&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;.0.0.1&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;pre&gt;sudo reboot&lt;/pre&gt;
&lt;p&gt;Now setup 2 port forwarding rules on your router. One for port 80 and one for port 443. Normally your router will have a web interface where you can configure such things.&lt;/p&gt;
&lt;p&gt;Install Nginx to serve your website. Its a relatively lightweight webserver unlike the more traditional apache.&lt;/p&gt;
&lt;pre&gt;
sudo apt update
sudo apt install -y nginx
&lt;/pre&gt;
&lt;p&gt;Link your site to the default&lt;/p&gt;
&lt;pre&gt;sudo ln -s /home/user/yoursite /var/www/html&lt;/pre&gt;
&lt;p&gt;Install docker&lt;/p&gt;
&lt;pre&gt;
sudo apt-get install apt-transport-https ca-certificates software-properties-common -y
curl -fsSL get.docker.com -o get-docker.sh &amp;amp;&amp;amp; sh get-docker.sh
sudo usermod -aG docker pi
&lt;/pre&gt;
&lt;p&gt;Add the following to /etc/sources.list&lt;/p&gt;
&lt;pre&gt;
deb https://download.docker.com/linux/raspbian/ stretch stable
&lt;/pre&gt;

&lt;pre&gt;
sudo apt-get update
sudo apt-get upgrade

systemctl start docker.service
&lt;/pre&gt;
&lt;p&gt;To check it is installed correctly.&lt;/p&gt;
&lt;pre&gt;
docker info
&lt;/pre&gt;
&lt;p&gt;Move your domain to cloudflare. This process might take 24-48 hours and initially involves opening an account, adding your domain, and then&lt;/p&gt;
&lt;p&gt;Install cloudflare dynamic dns updater and run it via docker.&lt;/p&gt;
&lt;p&gt;https://github.com/oznu/docker-cloudflare-ddns&lt;/p&gt;
&lt;p&gt;Setup certbot&lt;/p&gt;
&lt;p&gt;You need to also delete /etc/pip.conf as it will break lets encypt install process.&lt;/p&gt;
&lt;p&gt;https://certbot.eff.org/lets-encrypt/pip-nginx&lt;/p&gt;
&lt;p&gt;Open 80 and 443 on your router and setup port forwarding to your raspberry pi. Dont expect lightning performance but it is indeed a capable tool for serving static content. Who needs the &amp;#8216;cloud&amp;#8217;?!&lt;/p&gt;</description>
        
        <pubDate>Sun, 29 Sep 2019 00:00:00 +0200</pubDate>
        <link>https://axb.no/2019/09/29/raspberry-pi-web-server-ssh/</link>
        <guid isPermaLink="true">https://axb.no/2019/09/29/raspberry-pi-web-server-ssh/</guid>
        
        
      </item>
      
    
      
      <item>
        <title>SSH Port Forwarding VPS</title>
        <description>&lt;p&gt;&lt;img src=&quot;/assets/img/45921485964_f6e98b9021_z.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;When developing on a remote server you often need to connect to services running on it from your local machine (db guis / web browser / paw). One option is to open ports in the firewall and connect directly. The downside of this is that often services running in a development environment are unsecured. eg. redis.&lt;/p&gt;
&lt;p&gt;A more secure solution is to forward local ports on you local machine to ports on the remote server. The syntax of this is always confusing are there are both local and remote ports involved. Most of the time you need ssh local port forwarding. Generally I use .ssh/config to setup the ssh connection. This allows commandline options to also be used.&lt;/p&gt;
&lt;p&gt;eg.&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&gt;&lt;/span&gt;ssh&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-L&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;9090&lt;/span&gt;:localhost:5432&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;skopphornet&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;p&gt;This will allow you to connect to port 9090 on your local machine and this will in turn connect you to the postgres instance on the remote server &lt;strong&gt;skopphornet&lt;/strong&gt; tunnelled securely through the ssh session.&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&gt;&lt;/span&gt;psql&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-h&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;localhost&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-p&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;9090&lt;/span&gt;&amp;lt;/pre&amp;gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;</description>
        
          <description>&lt;p&gt;&lt;img src=&quot;/assets/img/45921485964_f6e98b9021_z.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;When developing on a remote server you often need to connect to services running on it from your local machine (db guis / web browser / paw). One option is to open ports in the firewall and connect directly. The downside of this is that often services running in a development environment are unsecured. eg. redis.&lt;/p&gt;
&lt;p&gt;A more secure solution is to forward local ports on you local machine to ports on the remote server. The syntax of this is always confusing are there are both local and remote ports involved. Most of the time you need ssh local port forwarding. Generally I use .ssh/config to setup the ssh connection. This allows commandline options to also be used.&lt;/p&gt;
&lt;p&gt;eg.&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&gt;&lt;/span&gt;ssh&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-L&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;9090&lt;/span&gt;:localhost:5432&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;skopphornet&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;p&gt;This will allow you to connect to port 9090 on your local machine and this will in turn connect you to the postgres instance on the remote server &lt;strong&gt;skopphornet&lt;/strong&gt; tunnelled securely through the ssh session.&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&gt;&lt;/span&gt;psql&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-h&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;localhost&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-p&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;9090&lt;/span&gt;&amp;lt;/pre&amp;gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;</description>
        
        <pubDate>Thu, 06 Jun 2019 00:00:00 +0200</pubDate>
        <link>https://axb.no/2019/06/06/ssh-port-forwarding-local/</link>
        <guid isPermaLink="true">https://axb.no/2019/06/06/ssh-port-forwarding-local/</guid>
        
        
      </item>
      
    
      
      <item>
        <title>VPS Server for Docker Development</title>
        <description>&lt;p&gt;Wow its been a long time. Going to start sharing some rough code snippets again. Mainly for personal reference!&lt;/p&gt;
&lt;p&gt;We develop a lot with docker compose for local development nowadays and as the cluster has grown in size its easier for my poor mac mini to not do &lt;span class=&quot;caps&quot;&gt;CPU&lt;/span&gt; intensive tasks.&lt;/p&gt;
&lt;p&gt;Therefore I have started developing on a &lt;span class=&quot;caps&quot;&gt;VPS&lt;/span&gt;! That is until I have my own beefy server at home / new mac mini. Below is a gist embed which include iptables config and a rough script for setting up the &lt;span class=&quot;caps&quot;&gt;VPS&lt;/span&gt; (Ubuntu 16.04)&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/pyrat/95b18f561697ea7750cce48ce9f90ca3.js&quot;&gt;&lt;/script&gt;</description>
        
          <description>&lt;p&gt;Wow its been a long time. Going to start sharing some rough code snippets again. Mainly for personal reference!&lt;/p&gt;
&lt;p&gt;We develop a lot with docker compose for local development nowadays and as the cluster has grown in size its easier for my poor mac mini to not do &lt;span class=&quot;caps&quot;&gt;CPU&lt;/span&gt; intensive tasks.&lt;/p&gt;
&lt;p&gt;Therefore I have started developing on a &lt;span class=&quot;caps&quot;&gt;VPS&lt;/span&gt;! That is until I have my own beefy server at home / new mac mini. Below is a gist embed which include iptables config and a rough script for setting up the &lt;span class=&quot;caps&quot;&gt;VPS&lt;/span&gt; (Ubuntu 16.04)&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/pyrat/95b18f561697ea7750cce48ce9f90ca3.js&quot;&gt;&lt;/script&gt;</description>
        
        <pubDate>Tue, 02 Apr 2019 00:00:00 +0200</pubDate>
        <link>https://axb.no/2019/04/02/vps-server-docker/</link>
        <guid isPermaLink="true">https://axb.no/2019/04/02/vps-server-docker/</guid>
        
        
      </item>
      
    
      
      <item>
        <title>Nissan Patrol GU GR Y61 Workshop Manual</title>
        <description>&lt;p&gt;&lt;img src=&quot;http://s3.caradvice.com.au/thumb/770/382/wp-content/uploads/2016/02/Y61-Nissan-Patrol-2.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Here is a link to the workshop manual for a Nissan Patrol Y61&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://s3.amazonaws.com/excitedmedia/104-1998-Nissan-Patrol-GU-Y61-Service-Manual.zip&quot;&gt;Workshop Manual&lt;/a&gt;&lt;/p&gt;</description>
        
          <description>&lt;p&gt;&lt;img src=&quot;http://s3.caradvice.com.au/thumb/770/382/wp-content/uploads/2016/02/Y61-Nissan-Patrol-2.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Here is a link to the workshop manual for a Nissan Patrol Y61&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://s3.amazonaws.com/excitedmedia/104-1998-Nissan-Patrol-GU-Y61-Service-Manual.zip&quot;&gt;Workshop Manual&lt;/a&gt;&lt;/p&gt;</description>
        
        <pubDate>Tue, 27 Dec 2016 00:00:00 +0100</pubDate>
        <link>https://axb.no/2016/12/27/nissan-patrol-gu-gr-y61-manual/</link>
        <guid isPermaLink="true">https://axb.no/2016/12/27/nissan-patrol-gu-gr-y61-manual/</guid>
        
        
      </item>
      
    
  </channel>
</rss>
