<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>orizuru</title>
    <link href="https://orizuru.neocities.org/atom.xml" rel="self" type="application/atom+xml"/>
    <link href="https://orizuru.neocities.org"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2023-08-11T00:00:00+00:00</updated>
    <id>https://orizuru.neocities.org/atom.xml</id>
    <entry xml:lang="en">
        <title>OpenAI&#x27;s data collection</title>
        <published>2023-08-11T00:00:00+00:00</published>
        <updated>2023-08-11T00:00:00+00:00</updated>
        <author>
          <name>Unknown</name>
        </author>
        <link rel="alternate" href="https://orizuru.neocities.org/blog/openai-gptbot/" type="text/html"/>
        <id>https://orizuru.neocities.org/blog/openai-gptbot/</id>
        
        <content type="html">&lt;p&gt;To the surprise of no-one, OpenAI has been &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;platform.openai.com&#x2F;docs&#x2F;gptbot&quot;&gt;crawling the web&lt;&#x2F;a&gt; for content to train their Large Language Models (LLMs).&lt;&#x2F;p&gt;
&lt;p&gt;While LLMs have opened up a world of possibilities, like with every other technology, not all of them will be good. So, for the time being, I’ll be adding the following lines to my website’s &lt;code&gt;robots.txt&lt;&#x2F;code&gt; (and I encourage you to do the same):&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#2b303b;color:#c0c5ce;&quot;&gt;&lt;code&gt;&lt;span&gt;User-agent: GPTBot
&lt;&#x2F;span&gt;&lt;span&gt;Disallow: &#x2F;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Even disregarding the controversies that OpenAI has been involved in (e.g. the fact that they are not as open as their name implies), I feel like we don’t fully understand what this brave new world has in store for us.&lt;&#x2F;p&gt;
&lt;p&gt;When large data collection became widespread, we let that Pandora’s box opened for years. Which allowed companies like Facebook and Google to collect vast amounts of data, the consequences of which we’re still dealing with today.&lt;&#x2F;p&gt;
&lt;p&gt;We should learn from the mistakes of the past, and let public policy catch up with the tech this time around.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Filter out results from your web searches</title>
        <published>2023-08-09T00:00:00+00:00</published>
        <updated>2023-08-09T00:00:00+00:00</updated>
        <author>
          <name>Unknown</name>
        </author>
        <link rel="alternate" href="https://orizuru.neocities.org/blog/hostname-replace/" type="text/html"/>
        <id>https://orizuru.neocities.org/blog/hostname-replace/</id>
        
        <content type="html">&lt;p&gt;Let’s face it, searching for information on the web has been going downhill for a while.&lt;&#x2F;p&gt;
&lt;p&gt;You used to be able to search for information using your favourite search engine and get what you were looking for. But I guess in the age of AI-generated content and SEO-riddled websites, that’s no longer the case.&lt;&#x2F;p&gt;
&lt;p&gt;As I described in a &lt;a href=&quot;&#x2F;blog&#x2F;searxng&quot;&gt;previous post&lt;&#x2F;a&gt;, I run a metasearch engine instance instead of directly “googling” for information. In case you don’t know what that means (and don’t feel like reading my previous post): I use an app that sends my searches to multiple search engines at the same time, and retrieves the aggregated results back to me. This allows me to (hopefully) have access to less biased information, and to reduce my reliance on Google. However, this still won’t spare me from useless websites, scam websites, or awful “modern” interfaces that the website owners decided to shove down our throats (looking at you Reddit).&lt;&#x2F;p&gt;
&lt;p&gt;Luckily, &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;searxng&#x2F;searxng&quot;&gt;SearXNG&lt;&#x2F;a&gt; (my metasearch engine of choice) has a builtin plugin which allows me to either &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.searxng.org&#x2F;admin&#x2F;plugins.html&quot;&gt;filter out or redirect domains&lt;&#x2F;a&gt;. All I need to do is to change my SearXNG &lt;code&gt;settings.yml&lt;&#x2F;code&gt; file to enable it by default:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;yaml&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-yaml &quot;&gt;&lt;code class=&quot;language-yaml&quot; data-lang=&quot;yaml&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;enabled_plugins&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;  - &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;Hostname replace&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Then define the filter rules on the same file:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;yaml&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-yaml &quot;&gt;&lt;code class=&quot;language-yaml&quot; data-lang=&quot;yaml&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;hostname_replace&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# Filter out
&lt;&#x2F;span&gt;&lt;span&gt;  &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;badwebsite\.com&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;false
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# Redirect
&lt;&#x2F;span&gt;&lt;span&gt;  &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;(.*\.)?reddit\.com$&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;: &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;old.reddit.com&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;And that’s it! Just need to restart the docker container, and I’ll have a much more pleasant browsing experience.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span&gt; restart searxng
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If you want know how to set-up SearXNG check out my &lt;a href=&quot;&#x2F;blog&#x2F;searxng&quot;&gt;previous post&lt;&#x2F;a&gt;, and if you need a comprehensive list of junk websites, you can always have a look at what some relevant open-source projects use, for example:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;firebog.net&#x2F;&quot;&gt;The Big Blocklist Collection&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;letsblockit&#x2F;letsblockit&#x2F;tree&#x2F;main&#x2F;data&#x2F;filters&#x2F;presets&#x2F;search-results&quot;&gt;Let’s Block It!&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;quenhus&#x2F;uBlock-Origin-dev-filter&#x2F;tree&#x2F;main&#x2F;data&quot;&gt;uBlock-Origin-dev-filter&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Happy browsing! 🙂&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Why use just Google, when you can combine the power of multiple search engines?</title>
        <published>2023-02-03T00:00:00+00:00</published>
        <updated>2023-02-03T00:00:00+00:00</updated>
        <author>
          <name>Unknown</name>
        </author>
        <link rel="alternate" href="https://orizuru.neocities.org/blog/searxng/" type="text/html"/>
        <id>https://orizuru.neocities.org/blog/searxng/</id>
        
        <content type="html">&lt;p&gt;There is this idea expressed in the book &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;The_Wisdom_of_Crowds&quot;&gt;The Wisdom of Crowds&lt;&#x2F;a&gt;, which states that aggregating the information from a large group tends to yield better decisions than the ones taken by a single member of the group (as long as the group is diverse enough and each member is independent). There are some discussions regarding the conditions in which this holds, but there’s still some nugget of truth in there: looking through a problem from a diverse set of perspectives is beneficial.&lt;&#x2F;p&gt;
&lt;p&gt;Which leads leads me to: search engines.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.statista.com&#x2F;statistics&#x2F;216573&#x2F;worldwide-market-share-of-search-engines&#x2F;&quot;&gt;Depending&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.oberlo.co.uk&#x2F;statistics&#x2F;search-engine-market-share&quot;&gt;on&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.similarweb.com&#x2F;engines&#x2F;&quot;&gt;the&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.webfx.com&#x2F;blog&#x2F;seo&#x2F;2019-search-market-share&#x2F;&quot;&gt;source&lt;&#x2F;a&gt;, you’ll get slightly different values for the current market share of Google, but the general consensus is that it seems to be around 90%. This is concerning (to say the least), since the world is trusting a single member to dictate what’s relevant and&#x2F;or true. Yes, Google aggregates the results from different sources, but the company is still responsible for designing the algorithm that decides which sources are displayed at the top (or displayed at all).&lt;&#x2F;p&gt;
&lt;p&gt;Even if you don’t really care about the possible consequences of concentrating all this power in a single company, you can still look at this issue from a pure self-interest perspective (which turns it into an opportunity). In the current competitive information age, having access to more varied sources of information than your peers can be an advantage. You may not notice it at first, but every so often you’ll find a website that was not as good at playing the google &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Search_engine_optimization&quot;&gt;SEO&lt;&#x2F;a&gt; game, but happens to have the information or the solution to the problem that you were looking for. Exposing yourself to more variety will give you an edge.&lt;&#x2F;p&gt;
&lt;p&gt;My point is not “don’t use Google”, but rather “why use &lt;em&gt;only&lt;&#x2F;em&gt; Google?”. The fact is, Google is amazing at what they do, but there’s nothing stopping you from enhancing your search results with more sources, in other words: &lt;strong&gt;to create your own wise crowd&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Which leads me to: &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Metasearch_engine&quot;&gt;&lt;em&gt;metasearch engines&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;A metasearch engine is basically a search engine of search engines. It’s a piece of software that sends your query to multiple search engines, aggregates the results, and presents them to you.&lt;&#x2F;p&gt;
&lt;p&gt;In this post, I’ll show you how you can run your own metasearch engine for free. More specifically, &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.searxng.org&#x2F;&quot;&gt;SearXNG&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;blog&#x2F;metasearch.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;SearXNG is a fork of &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;searx.github.io&#x2F;searx&#x2F;&quot;&gt;Searx&lt;&#x2F;a&gt;, with a &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;searxng&#x2F;searxng#differences-to-searx&quot;&gt;few improvements&lt;&#x2F;a&gt; which makes it (in my opinion) easier to set-up.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;setting-up-searxng&quot;&gt;Setting up SearXNG&lt;&#x2F;h2&gt;
&lt;p&gt;The first step is to install &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.docker.com&#x2F;&quot;&gt;docker&lt;&#x2F;a&gt;. Make sure that you follow the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.docker.com&#x2F;engine&#x2F;install&#x2F;linux-postinstall&#x2F;&quot;&gt;post-installation&lt;&#x2F;a&gt; steps as well, so that you don’t have to run docker with &lt;code&gt;sudo&lt;&#x2F;code&gt;. After you’re done, create a directory where you’re going to store the startup scripts (or &lt;code&gt;cd&lt;&#x2F;code&gt; into the one you already use for your personal scripts):&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;cd &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;~&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;mkdir&lt;&#x2F;span&gt;&lt;span&gt; scripts
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span&gt; scripts
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Inside your scripts directory, create a new script called &lt;code&gt;start_searxng&lt;&#x2F;code&gt;, open it, and paste the following:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;#!&#x2F;bin&#x2F;sh
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;mkdir -p &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;HOME&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;searxng
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span&gt; pull searxng&#x2F;searxng
&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span&gt; run&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; -d --rm &lt;&#x2F;span&gt;&lt;span&gt;\
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;              -d -p&lt;&#x2F;span&gt;&lt;span&gt; 8080:8080 \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;              -v &lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;HOME&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;}&#x2F;searxng:&#x2F;etc&#x2F;searxng&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;              -e &lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;BASE_URL=http:&#x2F;&#x2F;localhost:8080&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; \
&lt;&#x2F;span&gt;&lt;span&gt;              searxng&#x2F;searxng
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Don’t forget to make the script executable&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;chmod&lt;&#x2F;span&gt;&lt;span&gt; +x start_searxng
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;And run it:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;.&#x2F;start_searxng
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If you now open your browser and go to &lt;code&gt;localhost:8080&lt;&#x2F;code&gt;, you should be able to see the SearXNG page.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;blog&#x2F;searxng.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;It’s that easy. You’re running SearXNG now!&lt;&#x2F;p&gt;
&lt;p&gt;You can customize your preferences, and pick which search engines you’d like to use.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;blog&#x2F;searxng_engines.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Be aware that your queries will be slower the more engines you add (specially if they are slow and&#x2F;or unreliable). So, you’ll have to balance between diversity and speed.&lt;&#x2F;p&gt;
&lt;p&gt;You can also see that you have various search categories, including “science” (i.e. scientific papers) and “files” (i.e. torrents), which you can customize as well.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;setting-it-up-in-the-search-bar-optional&quot;&gt;Setting it up in the search bar (optional)&lt;&#x2F;h2&gt;
&lt;p&gt;Another thing you may want to configure, is to have your browser use SearXNG when you type a search in the address bar,  instead of Google. This will depend on your browser.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;chrome-based-browsers&quot;&gt;Chrome-based browsers&lt;&#x2F;h3&gt;
&lt;p&gt;For chrome-based browsers (which include Brave), you want to do the following:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Go to the settings: &lt;code&gt;chromium:&#x2F;&#x2F;settings&#x2F;searchEngines&lt;&#x2F;code&gt; (replace &lt;code&gt;chromium&lt;&#x2F;code&gt; with &lt;code&gt;brave&lt;&#x2F;code&gt;, &lt;code&gt;chrome&lt;&#x2F;code&gt;, etc).&lt;&#x2F;li&gt;
&lt;li&gt;Go into the “Search engines” section.&lt;&#x2F;li&gt;
&lt;li&gt;Add a new search engine.&lt;&#x2F;li&gt;
&lt;li&gt;Give it a name.&lt;&#x2F;li&gt;
&lt;li&gt;In the  “URL with %s in place of query” field, fill it out with the following: &lt;code&gt;http:&#x2F;&#x2F;localhost:8080&#x2F;search?q=%s&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Set it as the default search engine.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;firefox-based-browsers&quot;&gt;Firefox-based browsers&lt;&#x2F;h3&gt;
&lt;p&gt;For Firefox-based browsers (which include LibreWolf), the procedure is the following:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Go into the settings: &lt;code&gt;about:preferences#search&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Select the “Add search bar in toolbar” option (i.e. select the option to split the search bar from the address bar).&lt;&#x2F;li&gt;
&lt;li&gt;Open &lt;code&gt;localhost:8080&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;On the search bar, the magnifying glass icon should have a green “+” symbol.&lt;&#x2F;li&gt;
&lt;li&gt;Click on the icon.&lt;&#x2F;li&gt;
&lt;li&gt;You should see an SearXNG icon with the same “+” green icon.&lt;&#x2F;li&gt;
&lt;li&gt;Click on it. SearXNG is now on your search engines.&lt;&#x2F;li&gt;
&lt;li&gt;Go back to &lt;code&gt;about:preferences#search&lt;&#x2F;code&gt;, and set it as default.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;final-questions-you-might-have&quot;&gt;Final questions you might have&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;What if I want to use this on the go, while on my phone?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;This is where the “for free” part of running your own metasearch engine stops. If you want to do this, you will usually have to buy a domain name and  pay for hosting. If there’s interest, I might write a post in the future with a step-by-step guide. But for now, you should at least be able to play around with your new metasearch engine, and see if this is something that you’re willing to pay a few dollars per month to have available everywhere you go.&lt;&#x2F;p&gt;
&lt;p&gt;If you’re already familiar with how to host your own services, you should be able to easily deploy the docker containers yourself. SearXNG provides a &lt;code&gt;docker-compose&lt;&#x2F;code&gt; &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;searxng&#x2F;searxng-docker#how-to-use-it&quot;&gt;yaml file&lt;&#x2F;a&gt; that will make your life much easier.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Are there any kind people running SearXNG instances that I could use for free?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;searx.space&#x2F;&quot;&gt;There certainly are&lt;&#x2F;a&gt;, but to be honest, I wouldn’t use them. You have no idea what a random internet stranger is running, they could be logging your search history. You can check what kind of code you’re running on your machine, but you can’t check theirs.&lt;&#x2F;p&gt;
&lt;p&gt;As with most computer-related things, I’d rather have more control. But you’re free to decide what’s best for you.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>How to host your own website on the darkweb</title>
        <published>2023-01-25T00:00:00+00:00</published>
        <updated>2023-01-25T00:00:00+00:00</updated>
        <author>
          <name>Unknown</name>
        </author>
        <link rel="alternate" href="https://orizuru.neocities.org/blog/host-i2p-site/" type="text/html"/>
        <id>https://orizuru.neocities.org/blog/host-i2p-site/</id>
        
        <content type="html">&lt;p&gt;In my &lt;a href=&quot;&#x2F;blog&#x2F;browse-i2p&quot;&gt;previous post&lt;&#x2F;a&gt;, I explained how to set up a Raspberry Pi on your home network to act as an I2P router, allowing you to browse anonymous sites (and contribute to the network at the same time).&lt;&#x2F;p&gt;
&lt;p&gt;If you’re not familiar with I2P, or how to set up an I2P router. Please checkout my previous post, as this one starts where the other one left off.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;why-bother-hosting-a-website-on-i2p&quot;&gt;Why bother hosting a website on I2P?&lt;&#x2F;h2&gt;
&lt;p&gt;I could give you the whole spiel about the importance of censorship resistant systems, freedom of information, decentralisation of the web, etc. But the truth is: I did it because I was bored, and this was fun. So, why not?&lt;&#x2F;p&gt;
&lt;p&gt;You certainly won’t get as much visibility when compared with a website on the clearnet. But you can always have a copy of your personal website on both the clearnet and I2P. However, be aware that speed that you get on I2P is &lt;em&gt;really&lt;&#x2F;em&gt; slow, so keep it light. Who needs anything more than HTML and CSS anyway?&lt;&#x2F;p&gt;
&lt;p&gt;This is the solution that I found to host it. Do let me know if you think it can be improved!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;step-1-make-a-website-and-host-it-on-your-raspberry-pi&quot;&gt;Step 1 - Make a website and host it on your Raspberry Pi&lt;&#x2F;h2&gt;
&lt;p&gt;The first step is to make a website. Log into the Raspberry Pi, and create something simple.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;cd &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;~&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;echo &lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;&amp;lt;h1&amp;gt;Hello World!&amp;lt;&#x2F;h1&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &amp;gt;&amp;gt; index.html
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Now, you need to make it visible to anyone on your home network. For this part, you’ll want to have both &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.docker.com&#x2F;&quot;&gt;docker&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.docker.com&#x2F;compose&#x2F;install&#x2F;&quot;&gt;docker-compose&lt;&#x2F;a&gt; installed. Also, make sure that you follow the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.docker.com&#x2F;engine&#x2F;install&#x2F;linux-postinstall&#x2F;&quot;&gt;post-installation&lt;&#x2F;a&gt; steps as well, so that you don’t have to run docker with &lt;code&gt;sudo&lt;&#x2F;code&gt;, and that docker starts when the Raspberry Pi boots up.&lt;&#x2F;p&gt;
&lt;p&gt;To host the website, you’ll want to use a webserver like &lt;code&gt;nginx&lt;&#x2F;code&gt; . But to make things easier, you can use it inside a docker container.&lt;&#x2F;p&gt;
&lt;p&gt;Start by creating a directory inside your home called &lt;code&gt;nginx&lt;&#x2F;code&gt; and go into it (you can give it another name, as long as you keep things consistent).&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;mkdir ~&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;nginx
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;cd &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;~&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;nginx
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Then, create a directory to keep the website in:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;mkdir&lt;&#x2F;span&gt;&lt;span&gt; website
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;mv ~&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;index.html website&#x2F;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Now that’s in place, you want to create a docker container running &lt;code&gt;nginx&lt;&#x2F;code&gt;, and tell it where to find your website.&lt;&#x2F;p&gt;
&lt;p&gt;You could just use &lt;code&gt;docker run&lt;&#x2F;code&gt; for this, but docker-compose also allows you to run multi-container applications. One could argue this is a bit overkill, but there is one little feature which I quite like.&lt;&#x2F;p&gt;
&lt;p&gt;Create a new file named &lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt; inside &lt;code&gt;~&#x2F;nginx&lt;&#x2F;code&gt;, and paste the following inside:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;yaml&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-yaml &quot;&gt;&lt;code class=&quot;language-yaml&quot; data-lang=&quot;yaml&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;version&lt;&#x2F;span&gt;&lt;span&gt;: &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;services&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;app&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;image&lt;&#x2F;span&gt;&lt;span&gt;: &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;nginx:latest&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;restart&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;always
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;ports&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;      - &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;80:80&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;volumes&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;      - &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;~&#x2F;nginx&#x2F;website:&#x2F;usr&#x2F;share&#x2F;nginx&#x2F;html
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;watchtower&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;image&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;containrrr&#x2F;watchtower
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;restart&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;always
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;volumes&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;      - &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;&#x2F;var&#x2F;run&#x2F;docker.sock:&#x2F;var&#x2F;run&#x2F;docker.sock
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This will tell docker-compose to launch a multi-container application with 2 containers. The first one (&lt;code&gt;app&lt;&#x2F;code&gt;), will be a webserver with the following characteristics:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;it’s running the latest &lt;code&gt;nginx&lt;&#x2F;code&gt; image&lt;&#x2F;li&gt;
&lt;li&gt;it always restarts the container if it stops&lt;&#x2F;li&gt;
&lt;li&gt;it forwards port &lt;code&gt;80&lt;&#x2F;code&gt; in the host (the Raspberry Pi), to port &lt;code&gt;80&lt;&#x2F;code&gt; in the container&lt;&#x2F;li&gt;
&lt;li&gt;it mounts the path &lt;code&gt;~&#x2F;nginx&#x2F;website&lt;&#x2F;code&gt; in the Raspberry Pi, to the the default path used by &lt;code&gt;nginx&lt;&#x2F;code&gt; to read the website from (&lt;code&gt;&#x2F;usr&#x2F;share&#x2F;nginx&#x2F;html&lt;&#x2F;code&gt;).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;That last point is important. It means that whatever you put inside &lt;code&gt;~&#x2F;nginx&#x2F;website&#x2F;&lt;&#x2F;code&gt; will be read by the docker container running &lt;code&gt;nginx&lt;&#x2F;code&gt;, and will be served as your website. Therefore, if you want to update it, you just need to change the files inside &lt;code&gt;~&#x2F;nginx&#x2F;website&#x2F;&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;OK that’s pretty obvious, but what’s watchtower?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;This is neat little solution that automatically updates &lt;code&gt;app&lt;&#x2F;code&gt; every time a new version of &lt;code&gt;nginx:latest&lt;&#x2F;code&gt; is pushed to Docker Hub. In other words, if a newer version is available, watchtower pulls the latest version, shuts-down the currently running container (i.e. &lt;code&gt;app&lt;&#x2F;code&gt;), and launches a new one running the latest version. Have a look at the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;containrrr.dev&#x2F;watchtower&#x2F;&quot;&gt;documentation for more details&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Once the &lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt; file is saved, all you have to do is launch it:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;cd &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;~&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;nginx&#x2F;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span&gt; compose up&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; -d
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;You can now open a browser from another machine on your network, and give it the internal IP address of the Raspberry Pi.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;firefox &lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;raspberry-pi-internal-ip-address&amp;gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;You should be able to see your website. If this does not work, something went wrong with the webserver. Try to pinpoint the problem before proceeding.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Wait, how do I find this address?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;From your Raspberry Pi, you can run the command below to get the address of the interfaces (e.g. if the Raspberry Pi is using the wifi, look at the &lt;code&gt;inet&lt;&#x2F;code&gt; field under the &lt;code&gt;wlan0&lt;&#x2F;code&gt; section):&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;ifconfig -a
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If you want to find it from the machine where you’re opening the browser, you can scan your network to find it:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span&gt; nmap&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; -sn&lt;&#x2F;span&gt;&lt;span&gt; 192.168.1.0&#x2F;24  
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;I won’t go into detail on how &lt;code&gt;nmap&lt;&#x2F;code&gt; works, as it’s outside of the scope of this tutorial.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;step-2-make-the-website-accessible-to-the-rest-of-the-i2p-network&quot;&gt;Step 2 - Make the website accessible to the rest of the I2P network&lt;&#x2F;h2&gt;
&lt;p&gt;As mentioned in the introduction, at this point, you should have &lt;code&gt;i2pd&lt;&#x2F;code&gt; configured in the same way as described in my &lt;a href=&quot;&#x2F;blog&#x2F;browse-i2p&quot;&gt;previous post&lt;&#x2F;a&gt;. I’m assuming that’s the case for you.&lt;&#x2F;p&gt;
&lt;p&gt;Now that you can see the site from a different machine on your network, it’s time to make it visible on i2p. For that, you’re going to need to change the &lt;code&gt;tunnels.conf&lt;&#x2F;code&gt; file. It’s usually on &lt;code&gt;~&#x2F;.i2pd&#x2F;tunnels.conf&lt;&#x2F;code&gt; , but that might not be the case for you.&lt;&#x2F;p&gt;
&lt;p&gt;If you access the i2pd webconsole (&lt;code&gt;http:&#x2F;&#x2F;127.0.0.1:7070&#x2F;&lt;&#x2F;code&gt;), you should see a &lt;code&gt;Data path&lt;&#x2F;code&gt; field on the main page (in my case, it says &lt;code&gt;&#x2F;var&#x2F;lib&#x2F;i2pd&lt;&#x2F;code&gt;). That’s the directory where you can find the &lt;code&gt;tunnels.conf&lt;&#x2F;code&gt; file. Open that file (you might need to use &lt;code&gt;sudo&lt;&#x2F;code&gt;), and &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;i2pd.readthedocs.io&#x2F;en&#x2F;latest&#x2F;tutorials&#x2F;http&#x2F;#host-anonymous-website&quot;&gt;add the following to the bottom&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;ini&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-ini &quot;&gt;&lt;code class=&quot;language-ini&quot; data-lang=&quot;ini&quot;&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;[anon-website]
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;type &lt;&#x2F;span&gt;&lt;span&gt;= http
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;host &lt;&#x2F;span&gt;&lt;span&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;127.0.0.1
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;port &lt;&#x2F;span&gt;&lt;span&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;80
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;keys &lt;&#x2F;span&gt;&lt;span&gt;= anon-website.dat
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Restart i2pd:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span&gt; systemctl restart i2pd.service
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Open the webconsole, and go to the tunnels page (&lt;code&gt;http:&#x2F;&#x2F;127.0.0.1:7070&#x2F;?page=i2p_tunnels&lt;&#x2F;code&gt;), you should see a subheading saying &lt;code&gt;anon-website&lt;&#x2F;code&gt; followed by a long string with &lt;code&gt;*.b32.i2p:80&lt;&#x2F;code&gt; at the end. That’s the address to the website (you should be able to open it in the browser after a while).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;step-3-optional-get-a-human-readable-address-for-your-fancy-new-website&quot;&gt;Step 3 (Optional) - Get a human-readable address for your fancy new website&lt;&#x2F;h2&gt;
&lt;p&gt;Congratulations! You are now hosting your own website on the darkweb.&lt;&#x2F;p&gt;
&lt;p&gt;But that long string is rather ugly, wouldn’t it be nice to have a nice human-readable address?&lt;&#x2F;p&gt;
&lt;p&gt;To do that, go into the webconsole &amp;gt; I2P tunnels &amp;gt; anon-website. On this page, click on “Address registration line” and fill out which domain you’d like. If the generation is successful, it should take you to another page, asking to add a small description. Submit it, and wait a bit until the new address works (it could be a couple of days, so don’t stand there refreshing in despair).&lt;&#x2F;p&gt;
&lt;p&gt;You shouldn’t need anything else. But if at any point you need to generate an authentication string, you’ll need to use i2pd-tools, in particular &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;PurpleI2P&#x2F;i2pd-tools#regaddr&quot;&gt;readdr&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;.&#x2F;regaddr&lt;&#x2F;span&gt;&lt;span&gt; anon-website.dat &amp;lt;your-domain&amp;gt;.i2p &amp;gt; auth_string.txt
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;cat&lt;&#x2F;span&gt;&lt;span&gt; auth_string.txt
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The &lt;code&gt;anon-website.dat&lt;&#x2F;code&gt; file can be found in the same directory as the &lt;code&gt;tunnels.conf&lt;&#x2F;code&gt; file. Follow the instructions on the project’s repo on how to compile i2pd-tools.&lt;&#x2F;p&gt;
&lt;p&gt;After a few days, you should be able to see the website being announced on &lt;code&gt;planet.i2p&lt;&#x2F;code&gt; and &lt;code&gt;identiguy.i2p&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;And that’s it! Enjoy your own piece of virtual real estate on the darkweb.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>How to browse I2P from a Raspberry Pi</title>
        <published>2023-01-16T00:00:00+00:00</published>
        <updated>2023-01-16T00:00:00+00:00</updated>
        <author>
          <name>Unknown</name>
        </author>
        <link rel="alternate" href="https://orizuru.neocities.org/blog/browse-i2p/" type="text/html"/>
        <id>https://orizuru.neocities.org/blog/browse-i2p/</id>
        
        <content type="html">&lt;p&gt;In this post, I’ll outline how I have set up a Raspberry Pi I had laying around the house to act as an I2P node, allowing me not only to browse I2P, but to help the network as well.&lt;&#x2F;p&gt;
&lt;p&gt;I’m not claiming this is the best way to do it. In fact, if you have any ideas on how to make it better, please let me know! But it’s probably a good starting point if you’re planing to play around with anonymous networks.&lt;&#x2F;p&gt;
&lt;p&gt;I’m assuming that you are familiar with the Linux command line, and have a Raspberry Pi already running on your home network. If there is interest in any of those topics, I can write some posts about them in the future.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Before you proceed&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Please be aware that there are things on the darkweb that you’d rather not see, or are down right illegal and reprehensible. Fortunately, I have not run into any of them. I have been using I2P to browse random blogs and tinkering with the technology, but you may not be as lucky. Proceed at your own risk.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;a-few-questions-you-might-have-before-we-start&quot;&gt;A few questions you might have before we start&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;What is I2P?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;I2P is a network layer, that allows anonymous and encrypted peer-to-peer communication. It’s similar to tor, but it won’t allow one to browse websites on the clearnet (at least, not directly). You can think of I2P as its own separate internet, where the sun always shines&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;p&gt;For a more detailed comparison, check out &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;geti2p.net&#x2F;en&#x2F;comparison&#x2F;tor&quot;&gt;the official website&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Why a Raspberry Pi? Can’t I just install it on a regular computer? I have an old laptop I’m not using.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;You can, but you probably don’t want to.&lt;&#x2F;p&gt;
&lt;p&gt;Another difference between tor and I2P is that each node also contributes to the network (even the people just browsing), while tor has dedicated machines acting as relays. In other words, you don’t just browse the network, but you contribute to it as well, by being one of the nodes which traffic flows through.&lt;&#x2F;p&gt;
&lt;p&gt;This means that when you connect to I2P, you won’t be able to browse any sites at first, as your node is not integrated with the network yet. It can take several hours until you start seeing some sites. Therefore, you want to keep it connected for long periods of time (ideally, 24&#x2F;7). With the current energy prices, you may want to avoid doing this on a regular computer.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;I don’t have a Raspberry Pi, but I do have a server that I already use for something else. Can I run it there?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;You certainly can!&lt;&#x2F;p&gt;
&lt;p&gt;I haven’t tried it yet. So I’ll focus on a Raspberry Pi for now.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;setting-up&quot;&gt;Setting up&lt;&#x2F;h2&gt;
&lt;p&gt;You can get the java version on &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;geti2p.net&#x2F;en&#x2F;&quot;&gt;the official website&lt;&#x2F;a&gt;. However, I’ve found it to be unnecessarily heavy on my puny Raspberry Pi, so I switched to &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;i2pd.website&#x2F;&quot;&gt;&lt;code&gt;i2pd&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;. Even though it comes with less features out of the box (e.g. it does not include torrent or email capabilities built in), it’s written in C++, and is much lighter.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;installing-i2pd-and-running-it&quot;&gt;Installing &lt;code&gt;i2pd&lt;&#x2F;code&gt; and running it&lt;&#x2F;h3&gt;
&lt;p&gt;On a Debian system, you can install it by &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;i2pd.readthedocs.io&#x2F;en&#x2F;latest&#x2F;user-guide&#x2F;install&#x2F;#debian&quot;&gt;running the following&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span&gt; apt-get install apt-transport-https
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;wget -q -O&lt;&#x2F;span&gt;&lt;span&gt; - https:&#x2F;&#x2F;repo.i2pd.xyz&#x2F;.help&#x2F;add_repo | &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span&gt; bash&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; -s&lt;&#x2F;span&gt;&lt;span&gt; -
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span&gt; apt-get update
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span&gt; apt-get install i2pd
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;To start it, you can simply run:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;i2pd
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;However, you probably want to &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;i2pd.readthedocs.io&#x2F;en&#x2F;latest&#x2F;user-guide&#x2F;run&#x2F;#systemd-unit&quot;&gt;start it in the background every time the Raspberry Pi boots up&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span&gt; systemctl enable i2pd.service &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# enable i2pd autostart
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span&gt; systemctl disable i2pd.service &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# disable i2pd autostart
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;browsing-i2p&quot;&gt;Browsing I2P&lt;&#x2F;h3&gt;
&lt;p&gt;Great! You have i2pd up and running now. But how can you browse I2P websites (also known as eepsites)?&lt;&#x2F;p&gt;
&lt;p&gt;Unlike tor, i2pd does not ship with a dedicated browser, you have to configure your own browser to use it.&lt;&#x2F;p&gt;
&lt;p&gt;I prefer to have a separate browser just for I2P. So I installed &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;librewolf.net&#x2F;&quot;&gt;librewolf&lt;&#x2F;a&gt; and configured the connection settings as follows:
&lt;img src=&quot;&#x2F;blog&#x2F;librewolf_i2p.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Once that’s done, you should be able to see your i2pd console by going to &lt;code&gt;http:&#x2F;&#x2F;127.0.0.1:7070&#x2F;&lt;&#x2F;code&gt; on librewolf.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;browsing-on-other-computers-in-your-home&quot;&gt;Browsing on other computers in your home&lt;&#x2F;h3&gt;
&lt;p&gt;So, you’ve got your Raspberry Pi set up, but it’s &lt;em&gt;all the way over there&lt;&#x2F;em&gt;, and you’re pretty comfy sitting on the couch with your laptop. What can you do?&lt;&#x2F;p&gt;
&lt;p&gt;Well, that’s pretty easy. All you have to do is to is run this on the computer you wish to browse I2P on:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;ssh -fTNL&lt;&#x2F;span&gt;&lt;span&gt; 4444:127.0.0.1:4444&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; -L&lt;&#x2F;span&gt;&lt;span&gt; 7070:127.0.0.1:7070 &amp;lt;rpi-username&amp;gt;@&amp;lt;rpi-local-ip-address&amp;gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;You can now browse from anywhere inside your house, as long as you are on the same network as the Raspberry Pi.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;where-can-i-find-sites-to-visit&quot;&gt;Where can I find sites to visit?&lt;&#x2F;h2&gt;
&lt;p&gt;Unfortunately, the amount of sites available on I2P is fairly small, even compared with something like tor hidden services. However, you can find a big list of them here (notice the “http”, not “https”): http:&#x2F;&#x2F;identiguy.i2p. There are also search engines you can use, e.g. http:&#x2F;&#x2F;legwork.i2p.&lt;&#x2F;p&gt;
&lt;p&gt;For an RSS feed of the latest things happening on I2P, check out http:&#x2F;&#x2F;planet.i2p. Or maybe you’d like to browse some quality blogs like this one: http:&#x2F;&#x2F;orizuru.i2p (a bit of a shameless plug 🙂).&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Wait, how do you host your own blog on I2P?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;It’s actually pretty easy, and you can do it on the same Raspberry Pi. But I’ll leave that tutorial for another time.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;EDIT (2023-01-26)&lt;&#x2F;strong&gt;: Part 2 of this post is &lt;a href=&quot;&#x2F;blog&#x2F;host-i2p-site&quot;&gt;now available&lt;&#x2F;a&gt;. It will teach you how to host a website on I2P.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;When trying to stay anonymous on the internet. Do not talk about anything that could be used to find out your location &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;thetinhat.com&#x2F;tutorials&#x2F;darknets&#x2F;i2ptips.html&quot;&gt;including the weather&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Random software I find on the internet. Part 1: age</title>
        <published>2022-11-12T00:00:00+00:00</published>
        <updated>2022-11-12T00:00:00+00:00</updated>
        <author>
          <name>Unknown</name>
        </author>
        <link rel="alternate" href="https://orizuru.neocities.org/blog/age/" type="text/html"/>
        <id>https://orizuru.neocities.org/blog/age/</id>
        
        <content type="html">&lt;p&gt;&lt;strong&gt;WARNING #1: I’m not aware if this software has been properly audited. I am also not endorsing its use. My only intent is to share a project which I found interesting. As with every piece of technology (specially with encryption software), be sensible with the amount of trust you put into it.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;WARNING #2: Any keys shown in this post are insecure, and should never be used.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;While perusing some image boards a few months ago (don’t judge me, there’s some hidden gems out there), I came across a thread where people were exchanging encrypted messages (in this case, invite codes to an email server) using a program called &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;FiloSottile&#x2F;age&quot;&gt;&lt;code&gt;age&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;. It was quite interesting to see people exchanging direct private messages anonymously in an open public forum, without using any messaging system with accounts and passwords.&lt;&#x2F;p&gt;
&lt;p&gt;The program itself is a minimalist encryption tool and library written in Go (an alternative Rust implementation is &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;str4d&#x2F;rage&quot;&gt;also available&lt;&#x2F;a&gt;). To generate a public-private key pair, you just need to call &lt;code&gt;age-keygen -o&lt;&#x2F;code&gt; and give it the filename where you wish to save the private key. Much simpler and quicker than GPG.&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#2b303b;color:#c0c5ce;&quot;&gt;&lt;code&gt;&lt;span&gt;~ $ age-keygen -o key.txt
&lt;&#x2F;span&gt;&lt;span&gt;Public key: age1qjzggcf9jwu5ux9ctfggeghr5rcfxdnw74kvd06ruzdgpxxwputqs4pul5
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The public key shown above can then be given to the person who’s going to be sending you encrypted data. If you want to write the encrypted output in &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Privacy-Enhanced_Mail&quot;&gt;PEM format&lt;&#x2F;a&gt;, use the &lt;code&gt;-a&lt;&#x2F;code&gt; flag (this is not mandatory, but it’s necessary to print it to the screen). As with any good unix utility, you can use “&lt;code&gt;|&lt;&#x2F;code&gt;” to pipe the output of &lt;code&gt;echo&lt;&#x2F;code&gt; into the input of &lt;code&gt;age&lt;&#x2F;code&gt;. The &lt;code&gt;-r&lt;&#x2F;code&gt; flag denotes the &lt;em&gt;recipient&lt;&#x2F;em&gt; of the message (i.e. the public key).&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#2b303b;color:#c0c5ce;&quot;&gt;&lt;code&gt;&lt;span&gt;~ $ echo &amp;quot;This is a test&amp;quot; |
&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt; age -r age1qjzggcf9jwu5ux9ctfggeghr5rcfxdnw74kvd06ruzdgpxxwputqs4pul5 -a
&lt;&#x2F;span&gt;&lt;span&gt;-----BEGIN AGE ENCRYPTED FILE-----
&lt;&#x2F;span&gt;&lt;span&gt;YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBFNGVJUmhOdGpxUTNvWG9E
&lt;&#x2F;span&gt;&lt;span&gt;V2xNeXhGRm9xSFdqN2lDcndEWTdkTUZrckY4ClM5S01pcEVWMTc5RW85cUtGM2sx
&lt;&#x2F;span&gt;&lt;span&gt;SHV0bFhXa256QnlURGpJZTUvYmozNUEKLS0tIEVsaGxhRFozeWNNdWtFbUg4U1JZ
&lt;&#x2F;span&gt;&lt;span&gt;Y0xkMGxlY1hpODBVenFVSWhxaUxFcDQK2WgZ4pEQbUya&#x2F;MGgMvuWVkGxZYe4cnrT
&lt;&#x2F;span&gt;&lt;span&gt;ThjB+1RHHbk92bpAUAo0wy41pOjYGbQ=
&lt;&#x2F;span&gt;&lt;span&gt;-----END AGE ENCRYPTED FILE-----
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The file with the private key can then be used to decrypt the message, recovering the original text.&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#2b303b;color:#c0c5ce;&quot;&gt;&lt;code&gt;&lt;span&gt;~ $ echo &amp;quot;This is a test&amp;quot; |
&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt; age -r age1qjzggcf9jwu5ux9ctfggeghr5rcfxdnw74kvd06ruzdgpxxwputqs4pul5 -a |
&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt; age -d -i key.txt
&lt;&#x2F;span&gt;&lt;span&gt;This is a test
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;You can also use &lt;code&gt;age&lt;&#x2F;code&gt; with files, not just text.&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#2b303b;color:#c0c5ce;&quot;&gt;&lt;code&gt;&lt;span&gt;~ $ age -r age1qjzggcf9jwu5ux9ctfggeghr5rcfxdnw74kvd06ruzdgpxxwputqs4pul5 -o image.png.age image.png
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The example above takes an image as input (&lt;code&gt;image.png&lt;&#x2F;code&gt;) and outputs an encrypted file (&lt;code&gt;image.png.age&lt;&#x2F;code&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;The &lt;code&gt;-r&lt;&#x2F;code&gt; flag can also be used multiple times, to encrypt for multiple recipients.&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#2b303b;color:#c0c5ce;&quot;&gt;&lt;code&gt;&lt;span&gt;~ $ age -r key1.txt -r key2.txt -o image.png.age image.png
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;There are lots of other features, such as: specifying multiple recipients in a text file (using the &lt;code&gt;-R&lt;&#x2F;code&gt; flag), password-protect the private key file, encrypt &#x2F; decrypt using ssh public keys, encrypt &#x2F; decrypt using yubi keys, etc. Have a look at &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;htmlpreview.github.io&#x2F;?https:&#x2F;&#x2F;github.com&#x2F;FiloSottile&#x2F;age&#x2F;blob&#x2F;main&#x2F;doc&#x2F;age.1.html&quot;&gt;the full documentation&lt;&#x2F;a&gt; for more details.&lt;&#x2F;p&gt;
&lt;p&gt;Despite all of this, it does not support things like signing (which GPG does). This is by design, as that would introduce more complexity to it. But there’s a bit of nuance here, so I’d recommend reading more about it &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;words.filippo.io&#x2F;dispatches&#x2F;age-authentication&#x2F;&quot;&gt;from one of the authors&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;As you might imagine, &lt;code&gt;age&lt;&#x2F;code&gt; was probably developed with higher goals in mind than shit-posting on imageboards. It has indeed better applications, like dealing with secrets in &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;major.io&#x2F;2022&#x2F;04&#x2F;19&#x2F;encrypted-gitops-secrets-with-flux-and-age&#x2F;&quot;&gt;gitops&lt;&#x2F;a&gt;. This actually interests me, and I might dig deeper into it in the future.&lt;&#x2F;p&gt;
&lt;p&gt;I guess the moral of the story is that you can learn new things from unexpected places, and in roundabout ways. So keep your eyes open!&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My (semi-)automated backup script</title>
        <published>2022-11-08T00:00:00+00:00</published>
        <updated>2022-11-08T00:00:00+00:00</updated>
        <author>
          <name>Unknown</name>
        </author>
        <link rel="alternate" href="https://orizuru.neocities.org/blog/zip/" type="text/html"/>
        <id>https://orizuru.neocities.org/blog/zip/</id>
        
        <content type="html">&lt;p&gt;In the age of cloud file storage, people often put too much faith into companies like Google, Apple, and Dropbox to keep their important files safe. Even ignoring the possible privacy&#x2F;security concerns, you’re still trusting them to not cut off your access for some reason beyond your control. Thus, you should seriously consider periodically backing up your important files to an external physical device.&lt;&#x2F;p&gt;
&lt;p&gt;I backup my files on a monthly basis, so having to &lt;code&gt;Ctrl-c&lt;&#x2F;code&gt;&#x2F;&lt;code&gt;Ctrl-v&lt;&#x2F;code&gt; a bunch of times is not ideal. Fortunately, I can now avoid this with a simple script:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;sh&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-sh &quot;&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;#!&#x2F;bin&#x2F;sh
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;[ &lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; != 1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;]&lt;&#x2F;span&gt;&lt;span&gt;; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;then
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;printf &lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;ERROR! No path to backup directory provided!\n&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39; &amp;gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;2
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;exit&lt;&#x2F;span&gt;&lt;span&gt; 1
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;fi
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;DATE&lt;&#x2F;span&gt;&lt;span&gt;=$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;date&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;%Y-%m-%d&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;cd &lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;HOME&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;crontab -l &lt;&#x2F;span&gt;&lt;span&gt;&amp;gt; crontab.txt
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;zip -9 -r &lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;DATE&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;.zip&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;.ssh&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;crontab.txt&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;rm&lt;&#x2F;span&gt;&lt;span&gt; crontab.txt
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;zip -9 -r &lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;DATE&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;.zip&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; \
&lt;&#x2F;span&gt;&lt;span&gt;    &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;browsing&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; \
&lt;&#x2F;span&gt;&lt;span&gt;    &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;code&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; \
&lt;&#x2F;span&gt;&lt;span&gt;    &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;vimwiki&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;    -x &lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;code&#x2F;**&#x2F;target&#x2F;*&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;    -x &lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;code&#x2F;**&#x2F;.vscode&#x2F;*&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;    -x &lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;code&#x2F;**&#x2F;build&#x2F;*&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;    -x &lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;code&#x2F;**&#x2F;*.swp&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; \
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;    -x &lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;*&#x2F;.git&#x2F;*&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The script compresses the files that I want recursively (&lt;code&gt;-r&lt;&#x2F;code&gt;) with the maximum compression setting (&lt;code&gt;-9&lt;&#x2F;code&gt;), and ignores some directories (&lt;code&gt;-x&lt;&#x2F;code&gt;) that contain version control information and binaries build from code I’ve worked on. This is then put in the directory passed to the script and named with the current date (&lt;code&gt;$1$DATE.zip&lt;&#x2F;code&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;The backup directory is inside a pen-drive that’s been encrypted with &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Linux_Unified_Key_Setup&quot;&gt;LUKS&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;limitations&quot;&gt;Limitations&lt;&#x2F;h3&gt;
&lt;p&gt;Although the script automates most of the process, there are still a few things that I have to do manually:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;I’ve got to plug-in the pen-drive and decrypt it.&lt;&#x2F;li&gt;
&lt;li&gt;The &lt;code&gt;browsing&#x2F;&lt;&#x2F;code&gt; directory contains a copy of the RSS feeds that I follow (exported manually from &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;feedly.com&#x2F;&quot;&gt;Feedly&lt;&#x2F;a&gt;), and the bookmarks manually exported from my browser (&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;brave.com&#x2F;&quot;&gt;brave&lt;&#x2F;a&gt;).&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Point 1 does not bother me, but point 2 definitely makes me itch.&lt;&#x2F;p&gt;
&lt;p&gt;I might eventually move to a self-hosted solution for my RSS reader needs (maybe &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;tt-rss.org&#x2F;&quot;&gt;Tiny Tiny RSS&lt;&#x2F;a&gt;). It’s more involved, so it makes sense that it requires extra work. However, not being able to export my bookmarks from brave using the command line is seriously frustrating.&lt;&#x2F;p&gt;
&lt;p&gt;From a bit of research, I’ve found that the bookmarks are stored in &lt;code&gt;~&#x2F;.config&#x2F;BraveSoftware&#x2F;Brave-Browser&#x2F;Default&#x2F;Bookmarks&lt;&#x2F;code&gt;, but they are not in the HTML format exported by brave. At some point, I might just write some hacky script to convert between the two.&lt;&#x2F;p&gt;
&lt;p&gt;If you happen to have a better solution, do please &lt;a href=&quot;&#x2F;about#contact&quot;&gt;let me know&lt;&#x2F;a&gt;. 🙂&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Watching YouTube offline, with no ads and&#x2F;or shilling</title>
        <published>2022-05-26T00:00:00+00:00</published>
        <updated>2022-05-26T00:00:00+00:00</updated>
        <author>
          <name>Unknown</name>
        </author>
        <link rel="alternate" href="https://orizuru.neocities.org/blog/yt-dlp/" type="text/html"/>
        <id>https://orizuru.neocities.org/blog/yt-dlp/</id>
        
        <content type="html">&lt;p&gt;If you live in the current year, you probably consume a lot of content from YouTube.&lt;&#x2F;p&gt;
&lt;p&gt;During all this consumption, have you ever stopped and think how much of your time is wasted on ads and&#x2F;or listening to &lt;code&gt;&amp;lt;insert today&#x27;s sponsor&amp;gt;&lt;&#x2F;code&gt;? Fear not, I’m about to save you hours&#x2F;days of your life (depending on how much time you’re glued to the screen every day).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;the-essential-addons-to-surf-the-web-these-days&quot;&gt;The essential addons to surf the web these days&lt;&#x2F;h3&gt;
&lt;p&gt;I’m assuming that you’re already familiar with &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;gorhill&#x2F;uBlock&quot;&gt;uBlock Origin&lt;&#x2F;a&gt;. It’s probably one of the most popular addons, and an absolute necessity to browse the internet these days (not just YouTube), as it blocks pretty much all the ads. One exception being, the sponsored sections that youtubers put in their videos.&lt;&#x2F;p&gt;
&lt;p&gt;If you cut off all the sponsor &#x2F; self-promotion &#x2F; “like and subscribe” sections, you’d save quite a bit of time. Luckily, there’s an addon for that as well: &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ajayyy&#x2F;SponsorBlock&quot;&gt;SponsorBlock&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;This addon allows regular users to tag sections of the video which belong to categories like the ones mentioned above, and share those tags with the other SponsorBlock users. You can then set the addon’s options to skip the types of sections you’re not interested in.&lt;&#x2F;p&gt;
&lt;p&gt;There’s no need to submit tags yourself, but after using it for a while, I found myself tagging videos that I’m watching (if the video has no tags yet).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;taking-it-one-step-further-offline&quot;&gt;Taking it one step further: offline&lt;&#x2F;h3&gt;
&lt;p&gt;Offline?! Who the hell watches videos offline these days?&lt;&#x2F;p&gt;
&lt;p&gt;Lots of people.&lt;&#x2F;p&gt;
&lt;p&gt;Not everyone has a fast and reliable internet connection that allows them to watch videos in 1080p. Also, even if you do have fast&#x2F;reliable internet and home, think of the times you find yourself without an internet connection (e.g. on a train or a plane). In those situations, it might be a good to catch up with the YouTube videos you were planing to watch; being that lectures or clickbaity gamer videos.&lt;&#x2F;p&gt;
&lt;p&gt;You might already be familiar with &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ytdl-org&#x2F;youtube-dl&#x2F;&quot;&gt;youtube-dl&lt;&#x2F;a&gt;. It allows one to download videos from youtube, it ran into a few legal issues, &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.blog&#x2F;2020-11-16-standing-up-for-developers-youtube-dl-is-back&#x2F;&quot;&gt;but it’s back now&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
&lt;p&gt;However, during youtube-dl’s absence, a fork was created: &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;yt-dlp&#x2F;yt-dlp&quot;&gt;yt-dlp&lt;&#x2F;a&gt;. This introduced some cool new features, including using &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.sponsor.ajay.app&#x2F;w&#x2F;API_Docs&quot;&gt;SponsorBlock’s API&lt;&#x2F;a&gt; to &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;yt-dlp&#x2F;yt-dlp#sponsorblock-options&quot;&gt;tag&#x2F;filter categories in the video&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;So, putting it all together, you can use yt-dlp to download youtube videos stripped down from all the nonsense, and watch them whenever you feel like it.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>More ranting about useless keys</title>
        <published>2022-04-21T00:00:00+00:00</published>
        <updated>2022-04-21T00:00:00+00:00</updated>
        <author>
          <name>Unknown</name>
        </author>
        <link rel="alternate" href="https://orizuru.neocities.org/blog/insert-key/" type="text/html"/>
        <id>https://orizuru.neocities.org/blog/insert-key/</id>
        
        <content type="html">&lt;p&gt;Quick follow-up on &lt;a href=&quot;&#x2F;blog&#x2F;caps-lock&quot;&gt;my previous rant about useless keys&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;When was the last time you used the &lt;code&gt;Insert&lt;&#x2F;code&gt; key? Probably when you accidentally pressed it instead of the &lt;code&gt;Delete&lt;&#x2F;code&gt; key.&lt;&#x2F;p&gt;
&lt;p&gt;Fear not! You can now get rid of it as well, just by running:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;xmodmap -e &lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;keycode 118 =&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Add it to your startup scripts, and immediately experience a boost to your quality of life. You’re welcome.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My website building workflow</title>
        <published>2022-03-27T00:00:00+00:00</published>
        <updated>2022-03-27T00:00:00+00:00</updated>
        <author>
          <name>Unknown</name>
        </author>
        <link rel="alternate" href="https://orizuru.neocities.org/blog/website-building/" type="text/html"/>
        <id>https://orizuru.neocities.org/blog/website-building/</id>
        
        <content type="html">&lt;p&gt;This website has not existed for long, but I feel like I should share how I build it.&lt;&#x2F;p&gt;
&lt;p&gt;As mentioned on the &lt;a href=&quot;&#x2F;blog&#x2F;intro&quot;&gt;intro post&lt;&#x2F;a&gt;, I’m using a static website engine written in Rust called &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;&quot;&gt;zola&lt;&#x2F;a&gt;. It builds a website based on a bunch of markdown files (one for each page), and stores the final result in a directory called &lt;code&gt;public&#x2F;&lt;&#x2F;code&gt;, along with any files that you might have (e.g. images).&lt;&#x2F;p&gt;
&lt;p&gt;I’m a pretty big proponent of getting rid of bloat, so the default output is just not good enough. However, what people consider bloat is relative (one man’s bloat is another man’s essential feature), so I’ll stick with a definition we can all agree on: any data that does not change the users’ experience, and just drags down performance.&lt;&#x2F;p&gt;
&lt;p&gt;One very easy way of getting rid of useless website data is to just minify &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Minification_(programming)&quot;&gt;minify&lt;&#x2F;a&gt; the HTML, which zola supports by setting &lt;code&gt;minify_html = true&lt;&#x2F;code&gt; in the &lt;code&gt;config.toml&lt;&#x2F;code&gt; file.&lt;&#x2F;p&gt;
&lt;p&gt;Another way of reducing the amount of data (and to increase privacy as well), is to get rid of metadata in your files. For this task, I use &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;0xacab.org&#x2F;jvoisin&#x2F;mat2&quot;&gt;&lt;code&gt;mat2&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;; which is able to clean the metadata from a variety of filetypes, including: images, audio, video, etc.&lt;&#x2F;p&gt;
&lt;p&gt;To bring all of this together, I have a very simple script that is run to build the release version of this website:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# Build website
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;zola&lt;&#x2F;span&gt;&lt;span&gt; build
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# Clean all metadata from images that are going to be uploaded
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;mat2 --inplace &lt;&#x2F;span&gt;&lt;span&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;find&lt;&#x2F;span&gt;&lt;span&gt; public&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; -type&lt;&#x2F;span&gt;&lt;span&gt; f&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; -exec&lt;&#x2F;span&gt;&lt;span&gt; file {} &lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;\; &lt;&#x2F;span&gt;&lt;span&gt;| &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;awk -F&lt;&#x2F;span&gt;&lt;span&gt;: &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;{ if ($2 ~&#x2F;[Ii]mage|EPS&#x2F;) print $1}&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The first line is pretty self-explanatory.&lt;&#x2F;p&gt;
&lt;p&gt;The second line lists all the files in the &lt;code&gt;public&#x2F;&lt;&#x2F;code&gt; directory (&lt;code&gt;find public&#x2F; -type f -exec file {} \;&lt;&#x2F;code&gt;), filters out just the paths to images (&lt;code&gt;awk -F: &#x27;{ if ($2 ~&#x2F;[Ii]mage|EPS&#x2F;) print $1}&#x27;&lt;&#x2F;code&gt;), and then passes those as inputs to &lt;code&gt;mat2&lt;&#x2F;code&gt;, which proceeds to clean the metadata inplace.&lt;&#x2F;p&gt;
&lt;p&gt;Hopefully you can take some ideas on how to make your own website lighter, without changing a single thing regarding its appearance, or the quality of the images.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Death to Caps Lock</title>
        <published>2022-03-16T00:00:00+00:00</published>
        <updated>2022-03-16T00:00:00+00:00</updated>
        <author>
          <name>Unknown</name>
        </author>
        <link rel="alternate" href="https://orizuru.neocities.org/blog/caps-lock/" type="text/html"/>
        <id>https://orizuru.neocities.org/blog/caps-lock/</id>
        
        <content type="html">&lt;p&gt;Take a moment to recall when was the last time you used the Caps Lock key.&lt;&#x2F;p&gt;
&lt;p&gt;Do you remember?&lt;&#x2F;p&gt;
&lt;p&gt;Unless you’re a boomer posting on Facebook about things you have no knowledge about, then the answer should be “when I accidentally touched it, and then had to backspace and re-write a whole sentence”.&lt;&#x2F;p&gt;
&lt;p&gt;It’s a legacy key from &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Caps_Lock#History&quot;&gt;mechanical typewriters&lt;&#x2F;a&gt;, back in the days when you might need a row of upper case letters to define a title. But with today’s cutting edge technological advances like different sized fonts, &lt;strong&gt;bold&lt;&#x2F;strong&gt;, and &lt;em&gt;italic&lt;&#x2F;em&gt;; it’s time for it to die.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;making-this-key-actually-useful&quot;&gt;Making this key actually useful&lt;&#x2F;h3&gt;
&lt;p&gt;In this day and age, it makes no sense for Caps Lock to occupy such a valuable piece of keyboard real estate (or to exist at all). So every machine that I own has the Caps Lock remapped as an extra &lt;code&gt;Ctrl&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Just think about it, how many times do you use the control key per day? You probably use it to copy (&lt;code&gt;Ctrl+c&lt;&#x2F;code&gt;), paste (&lt;code&gt;Ctrl+v&lt;&#x2F;code&gt;), save (&lt;code&gt;Ctrl+s&lt;&#x2F;code&gt;), select all (&lt;code&gt;Ctrl+a&lt;&#x2F;code&gt;), open a tab (&lt;code&gt;Ctrl+t&lt;&#x2F;code&gt;), close a tab (&lt;code&gt;Ctrl+w&lt;&#x2F;code&gt;), etc. All these require you to bend the left little finger awkwardly downwards, and it’s the cause of the mythical &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Emacs#Emacs_pinky&quot;&gt;“Emacs pinky”&lt;&#x2F;a&gt; injury.&lt;&#x2F;p&gt;
&lt;p&gt;If you are using Linux with Gnome, you can just install gnome tweaks:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; sudo apt-get install gnome-tweaks
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;And enable the remap option on “Keyboard &amp;amp; Mouse” &amp;gt; “Additional Layout Options”&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;blog&#x2F;caps-lock-settings.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;If you want a more general solution, you can change &lt;code&gt;.Xmodmap&lt;&#x2F;code&gt; to do it, but I’m not sure this works anymore. I still have an old config around, but can’t vouch for it anymore, so I won’t be posting it. Still happy to provide it for anyone who &lt;a href=&quot;&#x2F;about#contact&quot;&gt;contacts me&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;As for Windows and Mac users, can’t help you there. I’ve only done it on a Windows machine years ago, so my knowledge might be outdated. Nevertheless, a search engine is your friend, and this option should be available on your OS.&lt;&#x2F;p&gt;
&lt;p&gt;Now go forth, and enjoy your newly found productivity. Your little finger will thank you.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Getting Things Done (GTD) and taskwarrior</title>
        <published>2022-03-11T00:00:00+00:00</published>
        <updated>2022-03-11T00:00:00+00:00</updated>
        <author>
          <name>Unknown</name>
        </author>
        <link rel="alternate" href="https://orizuru.neocities.org/blog/taskwarrior/" type="text/html"/>
        <id>https://orizuru.neocities.org/blog/taskwarrior/</id>
        
        <content type="html">&lt;p&gt;I’m a firm believer in trying out different approaches that may help me be more organised, as that usually means that I can get a lot more output with the same (or even less) input.&lt;&#x2F;p&gt;
&lt;p&gt;If you’re struggling to get yourself on track, I highly recommend having a look at the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Getting_Things_Done&quot;&gt;Getting Things Done&lt;&#x2F;a&gt; (GTD) method.&lt;&#x2F;p&gt;
&lt;p&gt;This won’t be a guide on GTD, there are plenty of guides on the internet on how to do it (you don’t even need to read the book to get the basics). So, I’m going to assume that you’re already familiar with it. If you’re not, do spend a couple of minutes googling it, it’s definitely worth your time.&lt;&#x2F;p&gt;
&lt;p&gt;One of the advantages of the GTD method is that it’s not reliant on one particular app, or even on a computer at all; you can implement it with just pen and paper. The whole system can also be split into several components: an archive, a calendar, a to-do list, etc. So if you decide to build your GTD system in digital form, you can apply the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Unix_philosophy&quot;&gt;Unix philosophy&lt;&#x2F;a&gt; to choose which piece of software to use for each component.&lt;&#x2F;p&gt;
&lt;p&gt;For the to-do list component, I’ve chosen &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;taskwarrior.org&#x2F;&quot;&gt;taskwarrior&lt;&#x2F;a&gt;. It does one thing, and it does it well. It also works on the command line, and saves the data in plaintext format, which for me are &lt;strong&gt;huge&lt;&#x2F;strong&gt; advantages. Since I always have one or more terminals open while at work, this means that I can just brain-dump a task and quickly get back to what I was doing.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; task add Write first draft of report due:Friday wait:Wednesday priority:H project:work.secretproject
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The command above should be pretty straightforward: “Add a task called ‘Write first draft of report’ under project.subproject “work.secretproject”; the task is due on Friday, set priority to High, and wait until Wednesday before you show it on my task list“. A few important details with this:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;You didn’t have to use all these fields, you just needed a task description. I added them for illustration purposes.&lt;&#x2F;li&gt;
&lt;li&gt;Both Wednesday and Friday will be the future Wednesday and Friday closest in time.&lt;&#x2F;li&gt;
&lt;li&gt;The time will be the start of those days, i.e. midnight (00:00:00).&lt;&#x2F;li&gt;
&lt;li&gt;You can abbreviate the &lt;code&gt;priority&lt;&#x2F;code&gt; command to &lt;code&gt;pri&lt;&#x2F;code&gt; and &lt;code&gt;project&lt;&#x2F;code&gt; to &lt;code&gt;pro&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;You can use relative time.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;What does this all mean?&lt;&#x2F;p&gt;
&lt;p&gt;Well, let’s say that the task is due on Friday at 5pm, and you just want to be reminded of it 2 days before. You could write it like this:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; task add Write first draft of report due:Friday+17h wait:due-2d pri:H pro:work.secretproject
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If you then listed all the tasks with the command &lt;code&gt;task all&lt;&#x2F;code&gt; (not just &lt;code&gt;task&lt;&#x2F;code&gt;, otherwise you won’t get tasks that are waiting), you’d get something like this:&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#2b303b;color:#c0c5ce;&quot;&gt;&lt;code&gt;&lt;span&gt;ID St UUID     Age  P Project Wait Due        Description
&lt;&#x2F;span&gt;&lt;span&gt;1  W  7b5dde37 1min H work    4d   2022-03-18 Write first draft of report
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The fields listed above are:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ID&lt;&#x2F;code&gt; - which you can use to apply operations to the task, such as: &lt;code&gt;modify&lt;&#x2F;code&gt;, &lt;code&gt;annotate&lt;&#x2F;code&gt;, &lt;code&gt;done&lt;&#x2F;code&gt;, &lt;code&gt;delete&lt;&#x2F;code&gt;, etc. The &lt;code&gt;ID&lt;&#x2F;code&gt; will change as you complete tasks.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;St&lt;&#x2F;code&gt; - status. In this case &lt;code&gt;W&lt;&#x2F;code&gt; for “waiting”.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;UUID&lt;&#x2F;code&gt; - unique identifier, used for more advanced stuff. Unlike the &lt;code&gt;ID&lt;&#x2F;code&gt;, this never changes.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;Age&lt;&#x2F;code&gt; - how old the task is.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;P&lt;&#x2F;code&gt; - priority.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;Project&lt;&#x2F;code&gt; - self-explanatory.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;Wait&lt;&#x2F;code&gt; - how long until it appears on your main to-do list. In other words, how long until it appears when you run the command &lt;code&gt;task&lt;&#x2F;code&gt; instead of &lt;code&gt;task all&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;Due&lt;&#x2F;code&gt; - self-explanatory.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;Description&lt;&#x2F;code&gt; - self-explanatory.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;One of the coolest features of taskwarrior is that it uses things like the age, due date, priority, projects, and tags (not covered on this post), to set the &lt;code&gt;Urgency&lt;&#x2F;code&gt; of a task. In other words, when you type &lt;code&gt;task&lt;&#x2F;code&gt;, it will print a task list ordered based on how urgent they are, not on how old they are. Of course, as any program worth its salt, all of the factors that affect the urgency can be &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;taskwarrior.org&#x2F;docs&#x2F;urgency.html&quot;&gt;configured in the &lt;code&gt;.taskrc&lt;&#x2F;code&gt; file&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;This post does not even scratch the surface of what you can do with it. There are tons of other features worth mentioning, such as: queries, reports, task dependencies, contexts, etc. But I’ll leave you to explore the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;taskwarrior.org&#x2F;docs&#x2F;&quot;&gt;documentation&lt;&#x2F;a&gt;, or watch this &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=tijnc65soEI&quot;&gt;talk by one of the developers&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;As mentioned above, taskwarrior does one thing, and does it well. So extra features like time tracking, multiline task notes, weekly reviews, etc., does require you to link separate programs to taskwarrior. I may write a few more detailed posts in the future on how I added these in.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Intro</title>
        <published>2022-03-09T00:00:00+00:00</published>
        <updated>2022-03-09T00:00:00+00:00</updated>
        <author>
          <name>Unknown</name>
        </author>
        <link rel="alternate" href="https://orizuru.neocities.org/blog/intro/" type="text/html"/>
        <id>https://orizuru.neocities.org/blog/intro/</id>
        
        <content type="html">&lt;p&gt;Welcome to my little corner on the internet.&lt;&#x2F;p&gt;
&lt;p&gt;This will be attempt #1362 to restart a personal website &#x2F; blog. For now, it will be pretty bare-bones, at least until I figure out how &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;&quot;&gt;zola&lt;&#x2F;a&gt; works. All the cool kids are using Rust and static site generators, so why not combine both?&lt;&#x2F;p&gt;
&lt;p&gt;I’d rather build up from a minimalist starting point, than to take one of the thousand themes already available. Which might not be smart, but I enjoy the control it gives me.&lt;&#x2F;p&gt;
&lt;p&gt;If you’re reading this several years from now, and the website is bloated with a tons of javascript: I apologize. But also, that means that attempt #1362 was the one that stuck.&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
