all repos — birabittoh.github.io @ 56641958e50713ed23779fb76308a53b097d5859

My current website, built with Zola.

Deploy birabittoh/birabittoh.github.io to birabittoh/birabittoh.github.io:gh-pages
GitHub Actions github-actions-bot@users.noreply.github.com
Mon, 14 Oct 2024 09:15:07 +0000
commit

56641958e50713ed23779fb76308a53b097d5859

A 404.html

@@ -0,0 +1,1 @@

+<!doctype html><title>404 Not Found</title><h1>404 Not Found</h1>
A CNAME

@@ -0,0 +1,1 @@

+birabittoh.is-a.dev
A about/index.html

@@ -0,0 +1,1 @@

+<!doctype html><html lang=en><head><meta charset=UTF-8><meta content="IE=edge" http-equiv=X-UA-Compatible><meta content="text/html; charset=UTF-8" http-equiv=content-type><meta content="width=device-width,initial-scale=1,user-scalable=no" name=viewport><meta content="index, follow" name=robots><title>About me</title><meta content="About me" name=title><meta content="Tech and privacy ramblings from a random italian dude." name=description><meta content=website property=og:type><meta content=https://birabittoh.github.io/about/ property=og:url><meta content=BiRabittoh property=og:site_name><meta content="About me" property=og:title><meta content="Tech and privacy ramblings from a random italian dude." property=og:description><meta content=summary_large_image property=twitter:card><meta content=https://birabittoh.github.io/about/ property=twitter:url><meta content="About me" property=twitter:title><meta content="Tech and privacy ramblings from a random italian dude." property=twitter:description><link href=https://birabittoh.github.io/about/ rel=canonical><link href=https://birabittoh.github.io/atom.xml rel=alternate title=RSS type=application/atom+xml><link href=https://birabittoh.github.io/css/style.css rel=stylesheet><body><div class=wrapper><header><nav class=navBar><a href=/>/home/</a><a href=/about>/about/</a><a href=/links>/links/</a><a href=/blog>/blog/</a><div class=themeSwitch><button class="themeButton light" onclick="setTheme('light')" title="Light mode">◐</button><button class="themeButton dark" onclick="setTheme('dark')" title="Dark mode">◑</button></div><script>const setTheme=a=>{document.documentElement.className=a;localStorage.setItem(`theme`,a)};const getTheme=()=>{const a=localStorage.getItem(`theme`);const b=a?a:`dark`;setTheme(b)};getTheme()</script></nav><h1>About me</h1></header><main><img src=/img/me.jpg style=margin-inline:auto;margin-bottom:10px;display:block><p>Italian, born in 1998, programming since 2016. I enjoy art in every form.<p><em>BiRabittoh</em> comes from the Japanese pronunciation of “B-Rabbit”, as said in Pandora Hearts, which was the first anime I ever watched on the internet.<p>I mostly like singleplayer games, although I have spent a good chunk of my life on <a href=https://osu.ppy.sh/ rel=noopener target=_blank>osu!</a> and <a href=https://deadbydaylight.com/ rel=noopener target=_blank>Dead by Daylight</a>.<p>Rhythm games and JRPGs are my cup of tea, but I also like collect-a-thon platformers and any kind of experimental indie game. I’m also in love with Nintendo games: I have played and loved every mainline Mario and Zelda title.<p>My favorite games of all time, in no particular order, are <a href=https://www.nintendo.co.jp/n08/a3uj/index.html rel=noopener target=_blank>MOTHER 3</a>, <a href=https://www.jp.square-enix.com/dqsp/dq5/en/ rel=noopener target=_blank>Dragon Quest V</a> and <a href=https://www.mobiusdigitalgames.com/outer-wilds.html rel=noopener target=_blank>Outer Wilds</a>.<p>As far as music goes, I only listen to a few authors. My favorites are Tally Hall, Tame Impala and early Twenty One Pilots.<p>I don’t watch a lot of movies and TV shows, sadly. Breaking Bad definitely kept me hooked, but I didn’t watch Better Call Saul yet.<p>A guilty pleasure of mine is anime that doesn’t take itself too seriously: I absolutely loved JoJo’s Bizarre Adventures and Tengen Toppa Gurren Lagann, as well as One Punch Man (S1).</main><footer><p class=tagsData><hr><div class=footContainer><div class=footLeft><p>Licensed under <a rel="noopener noreferrer" href=https://fr.wikipedia.org/wiki/Licence_MIT target=_blank>MIT</a><br> Built with <a rel="noopener noreferrer" href=https://www.getzola.org target=_blank>Zola</a> using <a rel="noopener noreferrer" href=https://github.com/BiRabittoh/anemone target=_blank>anemone</a> theme & <a rel="noopener noreferrer" href=https://github.com/Speyll/veqev target=_blank>veqev</a> colors.<br></div><div class=footRight><a href=https://wobble.town/visit/528 target=_blank><img class="footGif noStyle" alt=footGif loading=lazy src=https://wobble.town/visit/528/wobble.gif></a><a rel="noopener noreferrer" title="Subscribe via RSS for updates." class=metaData href=https://birabittoh.github.io/atom.xml target=_blank>RSS</a></div></div></footer></div>
A atom.xml

@@ -0,0 +1,638 @@

+<?xml version="1.0" encoding="UTF-8"?> +<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"> + <title>BiRabittoh</title> + <subtitle>Tech and privacy ramblings from a random italian dude.</subtitle> + <link rel="self" type="application/atom+xml" href="https://birabittoh.github.io/atom.xml"/> + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/"/> + <generator uri="https://www.getzola.org/">Zola</generator> + <updated>2023-07-16T00:00:00+00:00</updated> + <id>https://birabittoh.github.io/atom.xml</id> + <entry xml:lang="en"> + <title>Self-hosting Extravaganza</title> + <published>2023-07-16T00:00:00+00:00</published> + <updated>2023-07-16T00:00:00+00:00</updated> + + <author> + <name> + + BiRabittoh + + </name> + </author> + + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/blog/self-host/"/> + <id>https://birabittoh.github.io/blog/self-host/</id> + + <content type="html" xml:base="https://birabittoh.github.io/blog/self-host/">&lt;p&gt;Lately, more and more companies are putting their services behind paywalls, usage limits and closed APIs. Some examples are &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nitter.it&#x2F;elonmusk&#x2F;status&#x2F;1675187969420828672&quot;&gt;Twitter&lt;&#x2F;a&gt; limiting the number of tweets a non-paying user can read, &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.redditinc.com&#x2F;blog&#x2F;2023apiupdates&quot;&gt;Reddit&lt;&#x2F;a&gt; increasing their API price to an extent that’s unbearable for any normal individual and &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;libreddit.kavin.rocks&#x2F;r&#x2F;youtube&#x2F;comments&#x2F;14kmd07&#x2F;youtube_cracking_down_on_if_youre_not_paying_them&#x2F;&quot;&gt;YouTube&lt;&#x2F;a&gt; starting to block their service towards anyone using an adblock extension.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;there-must-be-a-better-way&quot;&gt;There must be a better way&lt;&#x2F;h2&gt; +&lt;p&gt;Luckily, I’ve been interested in &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mendel5&#x2F;alternative-front-ends&quot;&gt;alternative front-ends&lt;&#x2F;a&gt; for a while. These services allow you to get the same (or better) functionality as their corporate counterpart without giving away any of your information in return. Some of these even offer their own free APIs.&lt;&#x2F;p&gt; +&lt;p&gt;Here’s my favorite instances with respect to the service they provide:&lt;&#x2F;p&gt; +&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Service&lt;&#x2F;th&gt;&lt;th&gt;PC&lt;&#x2F;th&gt;&lt;th&gt;Mobile&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt; +&lt;tr&gt;&lt;td&gt;YouTube&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;y.com.sb&#x2F;&quot;&gt;Invidious&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;apt.izzysoft.de&#x2F;fdroid&#x2F;index&#x2F;apk&#x2F;org.polymorphicshade.newpipe&quot;&gt;NewPipe&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;Twitter&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nitter.it&quot;&gt;Nitter&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;apt.izzysoft.de&#x2F;fdroid&#x2F;index&#x2F;apk&#x2F;org.ca.squawker&quot;&gt;Squawker&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;Reddit&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;libreddit.kavin.rocks&quot;&gt;LibReddit&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;libreddit.kavin.rocks&quot;&gt;LibReddit&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;Medium&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;scribe.rip&quot;&gt;Scribe&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;scribe.rip&#x2F;&quot;&gt;Scribe&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt; +&lt;h2 id=&quot;drawbacks&quot;&gt;Drawbacks&lt;&#x2F;h2&gt; +&lt;p&gt;Of course, this is not a perfect solution. There are a lot of problems to be discussed.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;privacy&quot;&gt;Privacy&lt;&#x2F;h3&gt; +&lt;p&gt;First and foremost, these instances do not make any profit. This is not a problem until you really think about it. Can you really trust a random developer offering a (paid) service for thousands of users out of their own kindness? +The answer is “probably yes”, but are you willing to take this risk?&lt;&#x2F;p&gt; +&lt;p&gt;Instance admins could easily edit the upstream source code to make it so they can track their users indefinetly and sell usage data without them even realizing. +This is a given if you use any “normal” (not self-hosted) service, but the difference is big companies are &lt;em&gt;required&lt;&#x2F;em&gt; by GDPR to protect collected user data in a certain way and keep them for a maximum set amount of time.&lt;&#x2F;p&gt; +&lt;p&gt;The same cannot be assured for individuals who apparently don’t even make a profit for what they’re doing.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;scaling&quot;&gt;Scaling&lt;&#x2F;h3&gt; +&lt;p&gt;This buzzword has become a meme in the programming world, but it’s been shown how important it is to consider when dealing with large userbases that can grow exponentially without any warning.&lt;&#x2F;p&gt; +&lt;p&gt;Think about the amount of users who migrated to Mastodon immediately after Elon Musk acquired Twitter. Instance admins were used to having a couple hundred users, so hundred of thousands of new signups made a lot of popular instances slow down or even temporarily shut down while they migrated to new (and more expensive) hardware.&lt;&#x2F;p&gt; +&lt;p&gt;Anything public you use can be subject to this phenomenon, leading to poor user experience, as you’ll be one of the many people wondering why your feed takes one minute to load.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;fine-i-ll-do-it-myself&quot;&gt;Fine, I’ll do it myself&lt;&#x2F;h2&gt; +&lt;p&gt;Since joining the world of minimalism, I had always considered Docker as a bloated way to run multiple virtual machines. I read about people complaining that even simple Python scripts were providing &lt;code&gt;Dockerfile&lt;&#x2F;code&gt; and &lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt; files and I started seeing it as a bloaty way to achieve the same result.&lt;&#x2F;p&gt; +&lt;p&gt;Whenever I wanted to host anything by myself, I used to SSH into my VPS with password authentication (!!!) and expose a public port for each service (!!!). +I used my public IP address to log into my services, so I had to resort to sending cleartext passwords through HTTP (!!!) since TLS was not an option.&lt;&#x2F;p&gt; +&lt;p&gt;Of course, this is possibly the most insecure way to host services on a public server, but I felt that was “secure enough” and nobody would ever be interested in hacking me (!!! × ∞).&lt;&#x2F;p&gt; +&lt;p&gt;Nonetheless, I used to &lt;code&gt;cat &#x2F;var&#x2F;log&#x2F;auth.log&lt;&#x2F;code&gt; to see all the failed login attempts, and pray that nobody actually got my password right. +Nowadays, I look back and laugh at my previous config; at least I’m (almost) sure that nobody actually managed to get in.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;the-right-way&quot;&gt;The right way&lt;&#x2F;h2&gt; +&lt;p&gt;Since I started my new job, I also began experimenting with Docker and found out it’s not as bad as I thought it’d be. I will now let my previous config serve as the perfect example of how NOT to secure your VPS correctly for any self-hosting configuration.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;ditch-password-authentication&quot;&gt;Ditch password authentication&lt;&#x2F;h3&gt; +&lt;p&gt;First of all, password authentication. You’ll be a lot safer as soon as you disable it.&lt;&#x2F;p&gt; +&lt;p&gt;Having it enabled means you’re vulnerable to dictionary and bruteforce attacks. Also, if some new vulnerability is published, the password field is one more way the attacker could send a malicious string to get inside (see &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;scribe.rip&#x2F;geekculture&#x2F;the-log4j-incident-explained-ed0ce6d36df2&quot;&gt;the log4j incident&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt; +&lt;p&gt;A better way of logging into your VPS is through public key authentication.&lt;&#x2F;p&gt; +&lt;p&gt;First, generate a key on your own PC:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;ssh-keygen -t ed25519 -a 100 +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;This will create two files: &lt;code&gt;~&#x2F;.ssh&#x2F;id_ed25519.pub&lt;&#x2F;code&gt; and &lt;code&gt;~&#x2F;.ssh&#x2F;id_ed25519&lt;&#x2F;code&gt;&lt;&#x2F;p&gt; +&lt;p&gt;Now, use the following command to copy your key over to the VPS:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;ssh-copy-id -i ~&amp;#x2F;.ssh&amp;#x2F;id_ed25519 &amp;lt;user&amp;gt;@&amp;lt;host&amp;gt; +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;At this point, if everything went correctly, just add or change the following line in &lt;code&gt;&#x2F;etc&#x2F;ssh&#x2F;sshd_config&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;PasswordAuthentication no +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;At this point, you should be able to log into your VPS without the need to input your password, which is more secure as well as more convenient.&lt;&#x2F;p&gt; +&lt;p&gt;I keep the content of my public and private ssh key files saved as secure notes in my BitWarden account, so I can take them to any PC I want to access my VPS from. +People say this is bad practice (you should only have a key for each host), but I personally feel like it’s not that big of a deal compared to the security mess I had going on before.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;containerize-your-applications&quot;&gt;Containerize your applications&lt;&#x2F;h3&gt; +&lt;p&gt;Now that you have a safe way to SSH into your machine, you can start hosting your own services.&lt;&#x2F;p&gt; +&lt;p&gt;First, some terminology:&lt;&#x2F;p&gt; +&lt;ul&gt; +&lt;li&gt;&lt;code&gt;Dockerfile&lt;&#x2F;code&gt; files are like a list of ingredients. They contain every dependency needed to build a minimal operating system dedicated to running a program. They’re used to build images.&lt;&#x2F;li&gt; +&lt;li&gt;&lt;code&gt;Images&lt;&#x2F;code&gt; are like recipes. You can create some yourself from a Dockerfile or download them from an external repository. They can be instantiated as containers.&lt;&#x2F;li&gt; +&lt;li&gt;&lt;code&gt;Containers&lt;&#x2F;code&gt; are like courses. You can instantiate multiple equal courses from the same image and you can actually eat (use) them! They can be managed through &lt;code&gt;docker-compose&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt; +&lt;li&gt;&lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt; files are like menus. They’re a convenient way to instantiate and deinstantiate multiple containers in a specific and reproducible configuration. If you’re not a developer, you’ll be mainly working on these files.&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;p&gt;To get started with Docker, install &lt;code&gt;docker&lt;&#x2F;code&gt; and &lt;code&gt;docker-compose&lt;&#x2F;code&gt; via your package manager of choice. If you want an easy start, you can follow &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.invidious.io&#x2F;installation&#x2F;#docker-compose-method-production&quot;&gt;this guide&lt;&#x2F;a&gt; to host our own Invidious instance.&lt;&#x2F;p&gt; +&lt;p&gt;It’s not that hard, but you might need to read the official &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.docker.com&#x2F;compose&#x2F;&quot;&gt;Docker Compose documentation&lt;&#x2F;a&gt; if something doesn’t go as planned.&lt;&#x2F;p&gt; +&lt;p&gt;My advice is to generate an &lt;code&gt;hmac_key&lt;&#x2F;code&gt; using &lt;code&gt;pwgen 20 1&lt;&#x2F;code&gt; or &lt;code&gt;openssl rand -hex 20&lt;&#x2F;code&gt; and insert it in the correct spot inside &lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;Also, remove the &lt;code&gt;127.0.0.1:&lt;&#x2F;code&gt; part in the &lt;code&gt;ports&lt;&#x2F;code&gt; section since we don’t have a reverse proxy set up (yet).&lt;&#x2F;p&gt; +&lt;p&gt;After you’re done configuring, you can type &lt;code&gt;docker-compose up -d&lt;&#x2F;code&gt; to pull all required images and instantiate your containers, and &lt;code&gt;docker-compose down&lt;&#x2F;code&gt; if you want to stop and remove everything.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;use-a-reverse-proxy&quot;&gt;Use a reverse proxy&lt;&#x2F;h3&gt; +&lt;p&gt;If you’ve followed that guide correctly, you should now have two containers that communicate through a network. You can find out their names by running &lt;code&gt;docker ps -a&lt;&#x2F;code&gt;. Take note of the name of your main invidious container, which will be referred as &lt;code&gt;invidious&lt;&#x2F;code&gt; for the rest of this guide.&lt;&#x2F;p&gt; +&lt;p&gt;Problem is, you’re still using an IP address and communicating in cleartext through HTTP! This means your ISP can read every single detail in every single request you make.&lt;&#x2F;p&gt; +&lt;p&gt;Luckily, there is a way to get a cool domain name for free that also happens to include free and auto-generated TLS certificates.&lt;&#x2F;p&gt; +&lt;p&gt;First, create an account on &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.duckdns.org&#x2F;&quot;&gt;DuckDNS&lt;&#x2F;a&gt; and set up a free domain.&lt;&#x2F;p&gt; +&lt;p&gt;Just make a new directory near the one you used for Invidious and create a new &lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;mkdir swag +cd swag +nano docker-compose.yml +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;You can paste and edit accordingly the lines in &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.linuxserver.io&#x2F;general&#x2F;swag#creating-a-swag-container&quot;&gt;this guide&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;For example, instead of &lt;code&gt;DNSPLUGIN=cloudflare&lt;&#x2F;code&gt; you should have &lt;code&gt;DNSPLUGIN=duckdns&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;When you’re done, start your container with &lt;code&gt;docker-compose up -d&lt;&#x2F;code&gt;. This will create the config folder in &lt;code&gt;&#x2F;etc&#x2F;config&#x2F;swag&lt;&#x2F;code&gt; as well as a new network called &lt;code&gt;swag_default&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;Now we need to create a custom subdomain for Invidious. You can do it by creating the following file: &lt;code&gt;&#x2F;etc&#x2F;config&#x2F;swag&#x2F;nginx&#x2F;proxy-confs&#x2F;invidious.subdomain.conf&lt;&#x2F;code&gt; with this content:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;server { + listen 443 ssl http2; + listen [::]:443 ssl http2; + + server_name y.*; + + include &amp;#x2F;config&amp;#x2F;nginx&amp;#x2F;ssl.conf; + + client_max_body_size 0; + + location &amp;#x2F; { + include &amp;#x2F;config&amp;#x2F;nginx&amp;#x2F;proxy.conf; + include &amp;#x2F;config&amp;#x2F;nginx&amp;#x2F;resolver.conf; + set $upstream_app invidious; + set $upstream_port 3000; + set $upstream_proto http; + proxy_pass $upstream_proto:&amp;#x2F;&amp;#x2F;$upstream_app:$upstream_port; + } +} +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Where:&lt;&#x2F;p&gt; +&lt;ul&gt; +&lt;li&gt;&lt;code&gt;server_name yt.*&lt;&#x2F;code&gt;: &lt;code&gt;yt&lt;&#x2F;code&gt; is the subdomain of choice;&lt;&#x2F;li&gt; +&lt;li&gt;&lt;code&gt;set $upstream_app invidious;&lt;&#x2F;code&gt;: &lt;code&gt;invidious&lt;&#x2F;code&gt; is the name of the main Invidious container;&lt;&#x2F;li&gt; +&lt;li&gt;&lt;code&gt;set $upstream_port 3000;&lt;&#x2F;code&gt;: &lt;code&gt;3000&lt;&#x2F;code&gt; is the Invidious port.&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;p&gt;There’s one last step remaining. Invidious and Swag are two separate containers, so they cannot communicate unless they’re connected to the same network. You can connect Invidious to Swag’s network with the following command, where &lt;code&gt;invidious&lt;&#x2F;code&gt; is the name of your main Invidious container.&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;docker network connect swag_default invidious +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Finally, you can visit https:&#x2F;&#x2F;yt.&amp;lt;your-domain&amp;gt;.duckdns.org&#x2F; and check if you can access Invidious through HTTPS.&lt;&#x2F;p&gt; +&lt;p&gt;Note: now that you have a reverse proxy set up, you can remove your &lt;code&gt;ports:&lt;&#x2F;code&gt; section entirely from Invidious’ &lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt;. +You can do this because the containers are communicating internally to the &lt;code&gt;swag_default&lt;&#x2F;code&gt; network, without the need to expose any ports to the outside. +After you’re done, remember to reload your configuration by running &lt;code&gt;docker-compose restart&lt;&#x2F;code&gt; in your Invidious folder.&lt;&#x2F;p&gt; +&lt;p&gt;Ideally, the only container with exposed ports in your VPS should be Swag exposing ports 80 (HTTP) and 443 (HTTPS).&lt;&#x2F;p&gt; +&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt; +&lt;p&gt;Self-hosting is not easy. It’s been my &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.froth.zone&#x2F;wiki&#x2F;Camino_de_Santiago&quot;&gt;Camino de Santiago&lt;&#x2F;a&gt;: a long path of redemption for the sins I have committed in my young age. +Even if I made a lot of mistakes, in the end I’ve learned a lot about dev-ops and cybersecurity, as well as precious skills that proved themselves useful for my engineering job.&lt;&#x2F;p&gt; +&lt;p&gt;You can find a full list of self-hostable services &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;awesome-selfhosted&#x2F;awesome-selfhosted&quot;&gt;here&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt; +</content> + + </entry> + <entry xml:lang="en"> + <title>Modernizing XFCE</title> + <published>2023-02-05T00:00:00+00:00</published> + <updated>2023-02-05T00:00:00+00:00</updated> + + <author> + <name> + + BiRabittoh + + </name> + </author> + + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/blog/void-xfce/"/> + <id>https://birabittoh.github.io/blog/void-xfce/</id> + + <content type="html" xml:base="https://birabittoh.github.io/blog/void-xfce/">&lt;p&gt;This article is more of a memo for myself. Since I often re-install Linux systems, I spend a lot of time doing repetitive tasks and often forget some steps, which leads me to waste even more time figuring out what’s wrong.&lt;&#x2F;p&gt; +&lt;p&gt;These instructions allow you to get a fully functional and modern-looking XFCE desktop on a fresh install of &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;voidlinux.org&#x2F;&quot;&gt;Void Linux&lt;&#x2F;a&gt; (even though they can be adapted to work in any distro).&lt;&#x2F;p&gt; +&lt;h2 id=&quot;initial-system-update&quot;&gt;Initial system update&lt;&#x2F;h2&gt; +&lt;p&gt;First thing I tried was to update the system, but the ISO was quite old. I had to update &lt;code&gt;xbps&lt;&#x2F;code&gt; before anything else:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;sudo xbps-install -Su xbps +sudo xbps-install -Su +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;h2 id=&quot;avoid-session-saving&quot;&gt;Avoid session saving&lt;&#x2F;h2&gt; +&lt;p&gt;One thing I hate about XFCE is its fixation to save sessions. A lot of times I get my session saved and restored even with all settings turned off.&lt;&#x2F;p&gt; +&lt;p&gt;A quick and easy solution to disable session saving entirely is just to create an empty file in place of the &lt;code&gt;sessions&lt;&#x2F;code&gt; directory.&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;rm ~&amp;#x2F;.cache&amp;#x2F;sessions -rf +touch ~&amp;#x2F;.cache&amp;#x2F;sessions +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;This way, even with everything turned on, XFCE fails create a folder with that name and everything works (or doesn’t, in this case) like a charm.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;change-that-shell&quot;&gt;Change that shell&lt;&#x2F;h2&gt; +&lt;p&gt;Your shell is the main tool you use to communicate with your system, so it makes sense to replace &lt;code&gt;bash&lt;&#x2F;code&gt; with something more modern and feature-rich.&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;sudo xbps-install -S zsh zsh-completions curl +chsh -s &amp;#x2F;bin&amp;#x2F;zsh +zsh +curl -fsSL https:&amp;#x2F;&amp;#x2F;raw.githubusercontent.com&amp;#x2F;zimfw&amp;#x2F;install&amp;#x2F;master&amp;#x2F;install.zsh | zsh +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;h2 id=&quot;get-some-good-sound-quality&quot;&gt;Get some good sound quality&lt;&#x2F;h2&gt; +&lt;p&gt;I don’t like &lt;code&gt;pulseaudio&lt;&#x2F;code&gt;. Let’s replace it with &lt;code&gt;pipewire&lt;&#x2F;code&gt; and &lt;code&gt;wireplumber&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;su +xbps-install pipewire wireplumber +mkdir -p &amp;#x2F;etc&amp;#x2F;pipewire&amp;#x2F;pipewire.conf.d +sed &amp;#x27;&amp;#x2F;path.*=.*pipewire-media-session&amp;#x2F;s&amp;#x2F;{&amp;#x2F;#{&amp;#x2F;&amp;#x27; \ +&amp;#x2F;usr&amp;#x2F;share&amp;#x2F;pipewire&amp;#x2F;pipewire.conf &amp;gt; &amp;#x2F;etc&amp;#x2F;pipewire&amp;#x2F;pipewire.conf +echo &amp;#x27;context.exec = [ { path = &amp;quot;&amp;#x2F;usr&amp;#x2F;bin&amp;#x2F;wireplumber&amp;quot; args = &amp;quot;&amp;quot; } ]&amp;#x27; \ +&amp;gt; &amp;#x2F;etc&amp;#x2F;pipewire&amp;#x2F;pipewire.conf.d&amp;#x2F;10-wireplumber.conf +ln -s &amp;#x2F;usr&amp;#x2F;share&amp;#x2F;applications&amp;#x2F;pipewire* &amp;#x2F;etc&amp;#x2F;xdg&amp;#x2F;autostart +xbps-remove pulseaudio alsa-plugins-pulseaudio +reboot +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;h2 id=&quot;make-firefox-more-secure&quot;&gt;Make Firefox more secure&lt;&#x2F;h2&gt; +&lt;p&gt;I like Firefox as a browser, but it doesn’t come with sane defaults as far as privacy’s concerned.&lt;&#x2F;p&gt; +&lt;p&gt;First, visit &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ffprofile.com&#x2F;&quot;&gt;Firefox Profilemaker&lt;&#x2F;a&gt; and create a customized &lt;code&gt;profile.zip&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;Then, extract your zip file to the correct destination:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;sudo xbps-install zip unzip p7zip xarchiver thunar-archive-plugin +unzip -o ~&amp;#x2F;Downloads&amp;#x2F;profile.zip -d ~&amp;#x2F;.mozilla&amp;#x2F;firefox&amp;#x2F;xxxx.default-default&amp;#x2F; +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Some useful extensions I always install are:&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;addons.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;addon&#x2F;bitwarden-password-manager&quot;&gt;Bitwarden&lt;&#x2F;a&gt;, a password manager;&lt;&#x2F;li&gt; +&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;addon&#x2F;decentraleyes&quot;&gt;Decentraleyes&lt;&#x2F;a&gt;, to serve common JS libraries locally;&lt;&#x2F;li&gt; +&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;addon&#x2F;istilldontcareaboutcookies&quot;&gt;I still don’t care about cookies&lt;&#x2F;a&gt;, to hide and auto-reject cookie warnings;&lt;&#x2F;li&gt; +&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;addon&#x2F;libredirect&quot;&gt;LibRedirect&lt;&#x2F;a&gt;, a redirector for &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mendel5&#x2F;alternative-front-ends&quot;&gt;alternative front-ends&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;addons.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;addon&#x2F;sponsorblock&quot;&gt;SponsorBlock&lt;&#x2F;a&gt;, to skip YouTube sponsorships automagically;&lt;&#x2F;li&gt; +&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;addon&#x2F;ublock-origin&quot;&gt;uBlock Origin&lt;&#x2F;a&gt;, the best ad-blocker.&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;h2 id=&quot;customize-your-de&quot;&gt;Customize your DE&lt;&#x2F;h2&gt; +&lt;p&gt;Install the last required packages for desktop usability:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;sudo xbps-install -S vpm xfce4-whiskermenu-plugin xfce4-clipman-plugin \ +xfce4-pulseaudio-plugin xfce4-screenshooter xclip micro neovim mpv yt-dlp +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Remove orphaned and cached packages:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;sudo xbps-remove -Oo +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Now, open XFCE’s Settings Manager and set the following options:&lt;&#x2F;p&gt; +&lt;ul&gt; +&lt;li&gt;Appearance → Style → Choose “Adwaita-dark”&lt;&#x2F;li&gt; +&lt;li&gt;Desktop → Background → &lt;em&gt;&amp;lt;Choose your favorite wallpaper&amp;gt;&lt;&#x2F;em&gt;&lt;&#x2F;li&gt; +&lt;li&gt;Desktop → Icons → Set “Icon type” to “None”&lt;&#x2F;li&gt; +&lt;li&gt;Panel → &lt;em&gt;&amp;lt;Customize your panels&amp;gt;&lt;&#x2F;em&gt;&lt;&#x2F;li&gt; +&lt;li&gt;Screensaver → Disable “Enable Screensaver”&lt;&#x2F;li&gt; +&lt;li&gt;Text Editor Settings → Enable: +&lt;ul&gt; +&lt;li&gt;“Show line numbers”,&lt;&#x2F;li&gt; +&lt;li&gt;“Highlight matching brackets”,&lt;&#x2F;li&gt; +&lt;li&gt;“Wrap long lines”&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;&#x2F;li&gt; +&lt;li&gt;Window Manager → Style → Button layout → Remove “Shade” button from title bar&lt;&#x2F;li&gt; +&lt;li&gt;Window Manager → Advanced → Windows snapping → Enable “To other windows”&lt;&#x2F;li&gt; +&lt;li&gt;Window Manager → Advanced → Wrap workspaces when reaching the screen edge → Disable “With a dragged window”&lt;&#x2F;li&gt; +&lt;li&gt;Window Manager Tweaks → Cycling → Enable: +&lt;ul&gt; +&lt;li&gt;“Cycle through minimized windows in most recently used order”,&lt;&#x2F;li&gt; +&lt;li&gt;“Cycle through windows on all workspaces”,&lt;&#x2F;li&gt; +&lt;li&gt;“Raise windows while cycling”&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;&#x2F;li&gt; +&lt;li&gt;Window Manager Tweaks → Accessibility → Disable: +&lt;ul&gt; +&lt;li&gt;“Raise windows when any mouse button is pressed”,&lt;&#x2F;li&gt; +&lt;li&gt;“Use mouse wheel on title bar to roll up the window”&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;&#x2F;li&gt; +&lt;li&gt;Window Manager Tweaks → Accessibility → Enable “Notify of urgency by making window’s decoration blink”&lt;&#x2F;li&gt; +&lt;li&gt;Window Manager Tweaks → Compositor → Enable “Show shadows under popup windows”&lt;&#x2F;li&gt; +&lt;li&gt;Xfce Terminal Settings → General → Scrolling → Set “Scrollbar is” to “Disabled”&lt;&#x2F;li&gt; +&lt;li&gt;Xfce Terminal Settings → Appearance → +&lt;ul&gt; +&lt;li&gt;enable “Use system font”,&lt;&#x2F;li&gt; +&lt;li&gt;set “Background” to “Transparent background”,&lt;&#x2F;li&gt; +&lt;li&gt;set Opacity to 0.80;&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;&#x2F;li&gt; +&lt;li&gt;Xfce Terminal Settings → Colors → Presets → Choose “Tango”&lt;&#x2F;li&gt; +&lt;li&gt;Keyboard → Behavior → Enable “Restore num lock state on startup”&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;h2 id=&quot;shortcuts&quot;&gt;Shortcuts&lt;&#x2F;h2&gt; +&lt;p&gt;Finally, set the following shortcuts:&lt;&#x2F;p&gt; +&lt;ul&gt; +&lt;li&gt;Keyboard → Application Shortcuts&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Command&lt;&#x2F;th&gt;&lt;th&gt;Shortcut&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt; +&lt;tr&gt;&lt;td&gt;&lt;code&gt;exo-open --launch TerminalEmulator&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;Super&lt;&#x2F;code&gt; + &lt;code&gt;Return&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;&lt;code&gt;xfce4-popup-whiskermenu&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;Super&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;&lt;code&gt;xfce4-screenshooter --clipboard --region&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;Shift&lt;&#x2F;code&gt; + &lt;code&gt;Super&lt;&#x2F;code&gt; + &lt;code&gt;S&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;&lt;code&gt;xfce4-screenshooter --clipboard --window&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;Super&lt;&#x2F;code&gt; + &lt;code&gt;S&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;&lt;code&gt;xfce4-screenshooter --clipboard --fullscreen&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;Print&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;&lt;code&gt;sh -c &#x27;xclip -selection clipboard -t image&#x2F;png -o &amp;gt; &quot;$HOME&#x2F;Pictures&#x2F;$(date +%Y-%m-%d_%T).png&quot;&#x27;&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;Shift&lt;&#x2F;code&gt; + &lt;code&gt;Super&lt;&#x2F;code&gt; + &lt;code&gt;V&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;&lt;code&gt;xflock4&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;Super&lt;&#x2F;code&gt; + &lt;code&gt;L&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;&lt;code&gt;loginctl suspend&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;Shift&lt;&#x2F;code&gt; + &lt;code&gt;Super&lt;&#x2F;code&gt; + &lt;code&gt;L&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt; +</content> + + </entry> + <entry xml:lang="en"> + <title>Update your mirrors!</title> + <published>2023-01-29T00:00:00+00:00</published> + <updated>2023-01-29T00:00:00+00:00</updated> + + <author> + <name> + + BiRabittoh + + </name> + </author> + + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/blog/reflector/"/> + <id>https://birabittoh.github.io/blog/reflector/</id> + + <content type="html" xml:base="https://birabittoh.github.io/blog/reflector/">&lt;p&gt;Nah, I’m not talking about &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.bathshack.com&#x2F;blog&#x2F;bluetooth-mirrors-everything-you-need-to-know-before-you-buy&#x2F;&quot;&gt;bluetooth mirrors&lt;&#x2F;a&gt;. Mirrors are what powers all distros: they’re a (de)centralized solution for downloading pre-compiled binaries and scripts for your operating system.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;suspicion&quot;&gt;Suspicion&lt;&#x2F;h2&gt; +&lt;p&gt;I like always having the most current version of packages, so I usually update my system several times a day. When, after a day, I ran &lt;code&gt;sudo pacman -Syu&lt;&#x2F;code&gt; and it reported the system being up to date, I was pretty weirded out.&lt;&#x2F;p&gt; +&lt;p&gt;Another day passed, and the system was still up to date. It was not a connection problem, I was connecting to my mirrors and they were reporting absolutely zero updates for my system.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;problem&quot;&gt;Problem&lt;&#x2F;h2&gt; +&lt;p&gt;At the third day of stagnation, I was sure something was up. I looked up the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;archlinux.org&#x2F;mirrors&#x2F;status&#x2F;&quot;&gt;Mirror Status&lt;&#x2F;a&gt; page on ArchLinux’s website and saw that loads of mirrors were out of sync.&lt;&#x2F;p&gt; +&lt;p&gt;I had never touched my mirrorlist before, it was just generated by the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;archlinux&#x2F;archinstall&quot;&gt;archinstall&lt;&#x2F;a&gt; script a few months ago; a lot of Arch-based distros by default ship tools to update your mirrorlist, but I honestly thought I’d never need that.&lt;&#x2F;p&gt; +&lt;p&gt;Pacman’s mirrorlist is located in &lt;code&gt;&#x2F;etc&#x2F;pacman.d&#x2F;mirrorlist&lt;&#x2F;code&gt;. You can filter out uncommented lines with this command:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;grep -v &amp;quot;^#&amp;quot; &amp;#x2F;etc&amp;#x2F;pacman.d&amp;#x2F;mirrorlist +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;And check the actual status of your mirror(s) on the Mirror Status page linked above.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;solution&quot;&gt;Solution&lt;&#x2F;h2&gt; +&lt;p&gt;This will overwrite your mirrorlist, so you’re advised to make a backup before proceeding:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;sudo cp &amp;#x2F;etc&amp;#x2F;pacman.d&amp;#x2F;mirrorlist &amp;#x2F;etc&amp;#x2F;pacman.d&amp;#x2F;mirrorlist.bak +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;I decided to use &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;xyne.dev&#x2F;projects&#x2F;reflector&#x2F;&quot;&gt;reflector&lt;&#x2F;a&gt; to fix this problem. I didn’t want to have to deal with this again, so I enabled the provided systemd timer.&lt;&#x2F;p&gt; +&lt;p&gt;First, install it.&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;sudo pacman -S reflector +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Then, edit &lt;code&gt;&#x2F;etc&#x2F;xdg&#x2F;reflector&#x2F;reflector.conf&lt;&#x2F;code&gt;. I only needed to edit the &lt;code&gt;--country&lt;&#x2F;code&gt; parameter and select countries next to the one where I reside; you can list available countries by running &lt;code&gt;reflector --list-countries&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;--save &amp;#x2F;etc&amp;#x2F;pacman.d&amp;#x2F;mirrorlist +--protocol https +--country Italy,Switzerland,France,Germany,Austria +--latest 5 +--sort age +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Finally, start the service and check if it worked.&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;sudo systemctl start reflector.service +cat &amp;#x2F;etc&amp;#x2F;pacman.d&amp;#x2F;mirrorlist +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;If everything went smoothly, enable reflector’s timer so it runs weekly.&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;sudo systemctl enable reflector.timer +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Done!&lt;&#x2F;p&gt; +&lt;p&gt;Now, by default pacman &lt;em&gt;does&lt;&#x2F;em&gt; update its mirrorlist. It creates a file called &lt;code&gt;mirrorlist.pacnew&lt;&#x2F;code&gt; and it expects you to pick your favorite mirrors each time its generated. You can disable this (now unneeded) behavior by uncommenting and setting &lt;code&gt;NoExtract&lt;&#x2F;code&gt; in &lt;code&gt;&#x2F;etc&#x2F;pacman.conf&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;... +NoExtract = &amp;#x2F;etc&amp;#x2F;pacman.d&amp;#x2F;mirrorlist + +# Misc options +Color +ILoveCandy +ParallelDownloads = 3 +... +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +</content> + + </entry> + <entry xml:lang="en"> + <title>The AI takeover is near?</title> + <published>2022-09-21T00:00:00+00:00</published> + <updated>2022-09-21T00:00:00+00:00</updated> + + <author> + <name> + + BiRabittoh + + </name> + </author> + + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/blog/ai-art-contest/"/> + <id>https://birabittoh.github.io/blog/ai-art-contest/</id> + + <content type="html" xml:base="https://birabittoh.github.io/blog/ai-art-contest/">&lt;h2 id=&quot;context&quot;&gt;Context&lt;&#x2F;h2&gt; +&lt;p&gt;August 29, 2022. +The Colorado State Fair gives out prizes for various art categories in a contest. Let’s have a look at &lt;em&gt;Théâtre D’opéra Spatial&lt;&#x2F;em&gt;, the winner for category no.5: &lt;em&gt;Digital Arts &#x2F; Digitally-Manipulated Photography&lt;&#x2F;em&gt; (&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;coloradostatefair.com&#x2F;wp-content&#x2F;uploads&#x2F;2022&#x2F;08&#x2F;2022-Fine-Arts-First-Second-Third.pdf&quot;&gt;leaderboard&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt; +&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.tuttotech.net&#x2F;wp-content&#x2F;uploads&#x2F;2022&#x2F;09&#x2F;Intelligenza-artificiale-quadro-1.jpg&quot; alt=&quot;Théâtre D’opéra Spatial&quot; &#x2F;&gt;&lt;&#x2F;p&gt; +&lt;p&gt;That same day, a heated debate started on Twitter (as if that weren’t the norm there). That’s because the winner of this art contest used Midjourney, a popular AI image generator, to generate their entry.&lt;&#x2F;p&gt; +&lt;blockquote&gt; +&lt;p&gt;We’re watching the death of artistry unfold right before our eyes — if creative jobs aren’t safe from machines, then even high-skilled jobs are in danger of becoming obsolete&lt;&#x2F;p&gt; +&lt;&#x2F;blockquote&gt; +&lt;p&gt;Source: &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nitter.it&#x2F;omnimorpho&#x2F;status&#x2F;1564782875072872450&quot;&gt;@OmniMorpho&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;the-debate&quot;&gt;The debate&lt;&#x2F;h2&gt; +&lt;p&gt;While you could argue that the effort the creator (Jason M. Allen) put in was minuscule in comparison to the years of study and preparation an artist needs to undertake, I don’t think that actually matters when it comes to winning a competition or making an artpiece in general.&lt;&#x2F;p&gt; +&lt;p&gt;First of all, &lt;em&gt;art is totally subjective&lt;&#x2F;em&gt;. I could spend 5 seconds drawing a stick figure in MSPaint and have a contemporary art critique tell me it’s garbage, while people from another age might see a complaint towards modern, lifeless technology. This feels like a hyperbole, but I don’t think it’s that far from reality.&lt;&#x2F;p&gt; +&lt;p&gt;In 1961 Italian artist Piero Manzoni put his &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Artist%27s_Shit&quot;&gt;literal feces&lt;&#x2F;a&gt; in 90 cans and sold them as an artpiece. He also created a “magic base”, in the sense that you could put anything or anyone on it and that would become an artpiece in itself.&lt;&#x2F;p&gt; +&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;upload.wikimedia.org&#x2F;wikipedia&#x2F;commons&#x2F;c&#x2F;c2&#x2F;Piero_Manzoni_-_Merda_D%27artista_%281961%29_-_panoramio.jpg&quot; alt=&quot;Merda d’artista&quot; &#x2F;&gt;&lt;&#x2F;p&gt; +&lt;p&gt;He created this because he saw &lt;em&gt;art as a relic of the artist&lt;&#x2F;em&gt;. Any object or even person can become an art piece if an artist puts his sign on it. But how do you become an artist? By making something that makes people discuss, something new and innovative that nobody ever thought about doing before. That’s what Mr. Allen did and that’s why I think he deserves his price.&lt;&#x2F;p&gt; +&lt;p&gt;Before photography was invented, artists generally strove to make their painting as realistic as possible. As soon as people were able to cheaply make perfect copies of reality, artists began experimenting with new techniques, things that a camera could never do. Allen showed everyone how technology just reached a new milestone, introducing a new need for artists to innovate and create something exclusive to their abilities. Something an AI can’t reproduce. Yet.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;a-slight-hole-in-this-argument&quot;&gt;A slight hole in this argument&lt;&#x2F;h2&gt; +&lt;p&gt;But wait. The competition judges did not know he used an AI to make his art piece. So how could they have considered it innovative and revolutionary?&lt;&#x2F;p&gt; +&lt;p&gt;If you take a look at the 2nd and 3rd entries of the contest, you’ll see they’re clearly made by humans and clearly have a symbolic value. This does not apply to Allen’s entry, which is just VERY good looking. If I were a judge, I would not have chosen Allen’s work to win the competition, but again, &lt;em&gt;art is subjective&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;I tried to find out more about the criteria for the evaluation of this contest’s entries and I found this:&lt;&#x2F;p&gt; +&lt;blockquote&gt; +&lt;p&gt;“And there should be no lagging or hanging back by anybody who has anything worth exhibiting”&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;coloradostatefair.com&#x2F;competitions&#x2F;general-entry-fine-arts&#x2F;fine-arts-exhibition&#x2F;&quot;&gt;Source&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;Also, they wrote this about the “under 18” art showcase:&lt;&#x2F;p&gt; +&lt;blockquote&gt; +&lt;p&gt;Art must be original in painting, drawing, sculpture, ceramics, photography, jewelry, and more! Have fun, be creative, enter to win.&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;coloradostatefair.com&#x2F;competitions&#x2F;general-entry-fine-arts&#x2F;amateur-art-2&#x2F;&quot;&gt;Source&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt; +&lt;p&gt;Whichever way you put it, Théâtre D’opéra Spatial deserves to be called an art piece. The judges apparently valued aesthetics more than symbolic meaning, and their opinion cannot be logically disputed. Everyone gives a value to an artpiece based on their personal studies and experiences.&lt;&#x2F;p&gt; +&lt;p&gt;Now, knowing about the tools he used, we know Allen did something that nobody ever thought (or managed) to do before. If he hadn’t won that contest, this debate would never have started, but he did. That’s what makes him an artist and, consequently, his creation a work of art.&lt;&#x2F;p&gt; +</content> + + </entry> + <entry xml:lang="en"> + <title>My opinion on FOMO</title> + <published>2022-03-06T00:00:00+00:00</published> + <updated>2022-03-06T00:00:00+00:00</updated> + + <author> + <name> + + BiRabittoh + + </name> + </author> + + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/blog/fomo/"/> + <id>https://birabittoh.github.io/blog/fomo/</id> + + <content type="html" xml:base="https://birabittoh.github.io/blog/fomo/">&lt;h2 id=&quot;what-are-you-even-talking-about&quot;&gt;What are you even talking about&lt;&#x2F;h2&gt; +&lt;p&gt;Let me preface this by saying I know nothing about psychology and behavioral studies, so anything you read here is just my personal opinion.&lt;&#x2F;p&gt; +&lt;p&gt;Let’s start with defining FOMO, to make sure we’re all on the same spectrum.&lt;&#x2F;p&gt; +&lt;blockquote&gt; +&lt;p&gt;Fear of missing out (FOMO) is the feeling of apprehension that one is either not in the know or missing out on information, events, experiences, or life decisions that could make one’s life better.&lt;&#x2F;p&gt; +&lt;&#x2F;blockquote&gt; +&lt;p&gt;Source: &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Fear_of_missing_out&quot;&gt;Wikipedia&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;The Fear Of Missing Out is what drives modern society; It keeps us hooked to mainstream social media and drives newbie investors towards obvious rugpulls.&lt;&#x2F;p&gt; +&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.sciencedirect.com&#x2F;science&#x2F;article&#x2F;abs&#x2F;pii&#x2F;S0747563213000800&quot;&gt;Studies&lt;&#x2F;a&gt; have correlated it to various negative behaviors, like social media addiction and even distracted driving.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;am-i-affected-by-this&quot;&gt;Am I affected by this?&lt;&#x2F;h2&gt; +&lt;p&gt;Probably. As long as you have a friend group and an account on any mainstream social network, yes you are. +It’s the feeling that drives you to check out your friends’ Stories on Instagram, the dread you feel when somebody else reaches a life goal before you do, the fear that pushes people to buy limited-time merchandise before it runs out of stock.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;my-experience&quot;&gt;My experience&lt;&#x2F;h2&gt; +&lt;p&gt;FOMO has been a constant for my entire life and just now I’m trying to write this as a way to think critically about it and try to avoid being pushed by stupid instincts. I’ve come to realize that Discord is the thing that slows down my productivity the most: as soon as I enter a voice chat with my friend, I stop being productive in any capacity and I’m also uncapable of resuming for the whole day.&lt;&#x2F;p&gt; +&lt;p&gt;Even after I turn off my PC, I still think about what my friends are doing and what I’m missing out on, be it a Gartic Phone round or any stupid discussion I might have had on there. The biggest problem is, it’s entirely subconscious. I often find myself uncapable of concentrating and don’t know what’s the cause of it; I’ve been eliminating elements one by one to find out the cause of this and turns out that distancing myself totally from social media AND Discord actually solves it.&lt;&#x2F;p&gt; +&lt;p&gt;It’s not immediate either, it took a few days for me but your mileage may vary depending on a lot of factors. Of course, I plan on restoring my online presence after I have graduated but it’s useful to know what exactly was causing me to waste all of my time for months.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;any-solutions&quot;&gt;Any solutions?&lt;&#x2F;h2&gt; +&lt;p&gt;I think you should evaluate possible solutions yourself, as FOMO is strictly dependant on your personality and experiences. You could try eliminating or replacing parts of your habits regularly, like I did, to find out if something is more destructive than you might initially think.&lt;&#x2F;p&gt; +&lt;p&gt;As I was researching this, I found out about JOMO. It stands for “Joy Of Missing Out” and it’s the exact opposite thing. +Embracing JOMO means you dedicate a few hours of the day to yourself and stop worrying about how your friends are doing at life and which continent gets invaded next.&lt;&#x2F;p&gt; +&lt;p&gt;Modern society does not wait for anybody, there’s nothing wrong in taking a break and focusing on yourself. You can always catch up later.&lt;&#x2F;p&gt; +&lt;ul&gt; +&lt;li&gt;&lt;a href=&quot;gopher:&#x2F;&#x2F;republic.circumlunar.space:70&#x2F;0&#x2F;~katolaz&#x2F;phlog&#x2F;20190219_fomo.txt&quot;&gt;Another interesting article about FOMO&lt;&#x2F;a&gt;, on Gopher;&lt;&#x2F;li&gt; +&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gopherproxy.vern.cc&#x2F;gopher&#x2F;republic.circumlunar.space:70&#x2F;0&#x2F;~katolaz&#x2F;phlog&#x2F;20190219_fomo.txt&quot;&gt;Same article&lt;&#x2F;a&gt;, but proxied to be viewed on modern browsers.&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +</content> + + </entry> + <entry xml:lang="en"> + <title>Data volatility</title> + <published>2022-01-14T00:00:00+00:00</published> + <updated>2022-01-14T00:00:00+00:00</updated> + + <author> + <name> + + BiRabittoh + + </name> + </author> + + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/blog/data-volatility/"/> + <id>https://birabittoh.github.io/blog/data-volatility/</id> + + <content type="html" xml:base="https://birabittoh.github.io/blog/data-volatility/">&lt;p&gt;I tried to access my domain at smol.pub yesterday and I noticed the service went down. Fear started rushing through my veins as I noticed I would have to choose another platform and, most importantly, write everything back from scratch since I don’t have a backup. This made me think about the importance of always having a backup stored somewhere.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;why-though&quot;&gt;Why though&lt;&#x2F;h2&gt; +&lt;p&gt;Creating a backup of your important data is crucial. On a daily basis, people discover vulnerabilities that allow remote code execution on any host machine. Try to imagine what would happen if someone ran a ransomware program on your PC. Would you be safe?&lt;&#x2F;p&gt; +&lt;p&gt;This genuinely feels like fearmongery, but it’s something that can seriously happen: you can be attacked by someone that specifically targets you. If you run Windows, you might be part of a botnet (think about all of the unsigned EXE files you’ve run since you installed the OS). What happens when someone doesn’t need your machine anymore? Well, that person might try and squeeze some money from you by holding your files hostage.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;cloud-backups&quot;&gt;Cloud backups&lt;&#x2F;h2&gt; +&lt;p&gt;Most people define cloud storage as follows:&lt;&#x2F;p&gt; +&lt;blockquote&gt; +&lt;p&gt;Cloud storage is a way for businesses and consumers to save data securely online so that it can be accessed anytime from any location and easily shared with those who are granted permission. Cloud storage also offers a way to back up data to facilitate recovery off-site.&lt;&#x2F;p&gt; +&lt;&#x2F;blockquote&gt; +&lt;p&gt;Source: &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.investopedia.com&#x2F;terms&#x2F;c&#x2F;cloud-storage.asp&quot;&gt;Investopedia&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;In reality, cloud storage is no more than some dude’s computer.&lt;&#x2F;p&gt; +&lt;p&gt;As soon as you upload your personal data to any service, you’re trusting it to store it in a safe and private way. If that software is not open source, you’re basically asking to get spied on.&lt;&#x2F;p&gt; +&lt;p&gt;Most people do not care about that, that’s why cloud storage solutions are very popular and basically enabled by default on any device you might buy nowadays.&lt;&#x2F;p&gt; +&lt;p&gt;I personally use cloud storage but I would never actually upload anything I actually care about on it… +If you have to choose, I have a few suggestions.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;don-t-trust-non-encrypted-solutions&quot;&gt;Don’t trust non-encrypted solutions&lt;&#x2F;h3&gt; +&lt;p&gt;Everybody has a Google account nowadays. If you forget your password, there is a way to recover it and get access to everything inside, including your Google Drive contents. As long as there is a password that can be changed or reset, your files are NOT encrypted and fully visible to anyone who has access to the Drive servers (Google or any other government agency that might want to take a peek). +Most cloud solutions work like this, and it’s actually frightening how many people trust megacorporations to have all of their private information available unencrypted.&lt;&#x2F;p&gt; +&lt;p&gt;One encrypted solution I use is mega.nz. +While I can’t be sure that the mega team isn’t spying on me, at least they’re hiding it well if they do. +Mega includes an encryption key with your account, which is not tied to your login information. +This means that if you lose your key, you also lost all of your files, there is absolutely no way to get them back, even if you change your account password.&lt;&#x2F;p&gt; +&lt;p&gt;Now, Mega is not open source, so you can never be sure that there isn’t any backdoor, or that keys aren’t stored together with your personal information, but at least it’s something.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;encrypt-your-data-yourself&quot;&gt;Encrypt your data yourself&lt;&#x2F;h3&gt; +&lt;p&gt;If you really need to trust Google, Apple or Amazon with your files, you can encrypt your files locally with the gpg command. This way, feds and big tech are going to need another password to actually access your private files.&lt;&#x2F;p&gt; +&lt;p&gt;It’s really easy, just two commands mainly.&lt;&#x2F;p&gt; +&lt;p&gt;Encrypt:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;gpg -c --cipher-algo AES256 secret.file +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Decrypt:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;gpg segret.file.gpg +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;If you need to encrypt a folder, you can compress it first:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;tar -cf output.tar.gz secret-folder +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Then encrypt your output.tar.gz archive as if it was a single file.&lt;&#x2F;p&gt; +&lt;p&gt;After decrypting it, you can extract your archive through this command:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;tar -xf output.tar.gz +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Check out Mental Outlaw’s &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;invidio.us&#x2F;M0O7vhvQW30&quot;&gt;video&lt;&#x2F;a&gt; about this very topic.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;local-backups&quot;&gt;Local backups&lt;&#x2F;h2&gt; +&lt;p&gt;This is the best way to backup your data. +You don’t need to encrypt it if you have full physical access to your data, but you would still be vulnerable if it gets lost or stolen, so it’s always better to keep it encrypted and safe.&lt;&#x2F;p&gt; +&lt;p&gt;Of course, if you have a backup hard drive always plugged in your PC, it’s not really secure at all, since one could remotely execute a ransomware that encrypts everything in your PC, including all drives both internal and external, so you would get your backup encrypted with the original files voiding everything you’ve done.&lt;&#x2F;p&gt; +&lt;p&gt;This is why you should keep a GNU&#x2F;Linux device that only serves backup purposes and is turned OFF most of the time. As long as no current runs through your CPU, your files are safe. You should only turn it on once a month and copy everything important over, so you have a safe and offline backup.&lt;&#x2F;p&gt; +&lt;p&gt;You could also use a USB stick or external hard drive, as long as you only plug them in your PC when necessary.&lt;&#x2F;p&gt; +</content> + + </entry> + <entry xml:lang="en"> + <title>You should probably use Linux</title> + <published>2021-04-29T00:00:00+00:00</published> + <updated>2021-04-29T00:00:00+00:00</updated> + + <author> + <name> + + BiRabittoh + + </name> + </author> + + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/blog/you-should-use-linux/"/> + <id>https://birabittoh.github.io/blog/you-should-use-linux/</id> + + <content type="html" xml:base="https://birabittoh.github.io/blog/you-should-use-linux/">&lt;h2 id=&quot;why-are-you-writing-this&quot;&gt;Why are you writing this?&lt;&#x2F;h2&gt; +&lt;p&gt;As you probably know, I like using free software (free as in &lt;em&gt;freedom&lt;&#x2F;em&gt;, not free of charge). Most people see users with this mentality as a group of paranoid psychopaths who circlejerk about their custom systems. While that’s in part true, there’s much more to it.&lt;&#x2F;p&gt; +&lt;p&gt;I often get asked by Windows or MacOS users about why they should think about switching to a GNU&#x2F;Linux OS (which I’ll be referring to as Linux); I’m just going to address everything here so I don’t have to repeat it to everyone who asks.&lt;&#x2F;p&gt; +&lt;p&gt;I’ll try to address every aspect where Linux is objectively better than the competition, then look at some reasons you &lt;em&gt;could&lt;&#x2F;em&gt; have to stick to Windows or, like I did, set up a dual boot.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;what-is-free-software&quot;&gt;What is free software?&lt;&#x2F;h2&gt; +&lt;p&gt;First of all, let’s read the official definition for it.&lt;&#x2F;p&gt; +&lt;blockquote&gt; +&lt;p&gt;A program is free software if the program’s users have the four essential freedoms: +0. The freedom to run the program as you wish, for any purpose.&lt;&#x2F;p&gt; +&lt;ol&gt; +&lt;li&gt;The freedom to study how the program works, and change it so it does your computing as you wish.&lt;&#x2F;li&gt; +&lt;li&gt;The freedom to redistribute copies so you can help others.&lt;&#x2F;li&gt; +&lt;li&gt;The freedom to distribute copies of your modified versions to others. By doing this you can give the whole community a chance to benefit from your changes. +A program is free software if it gives users adequately all of these freedoms.&lt;&#x2F;li&gt; +&lt;&#x2F;ol&gt; +&lt;&#x2F;blockquote&gt; +&lt;p&gt;Source: &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.gnu.org&#x2F;philosophy&#x2F;free-sw.en.html&quot;&gt;Free Software Foundation&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;Let’s examine how this freedom is beneficial.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;linux-is-open&quot;&gt;Linux is open&lt;&#x2F;h3&gt; +&lt;p&gt;Using free software on an open source OS means you always know what’s going on with your PC; if you get curious or have any suspects you can always read the source code (or trust that somebody already did it in your place).&lt;&#x2F;p&gt; +&lt;p&gt;The good thing about Linux is that it doesn’t hide anything from you. Whenever there’s a problem, you can read various logfiles (with different levels of detail) to identify and troubleshoot your problem; it’s also easier to fix problems since you actually know what each program and file does, while troubleshooting in closed-source OSes is like trying to fix a car engine without being able to open the hood.&lt;&#x2F;p&gt; +&lt;p&gt;Some distros, like &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;archlinux.org&#x2F;&quot;&gt;Arch Linux&lt;&#x2F;a&gt;, require you to set everything up from scratch; this means you always know exactly which programs you’re installing and their exact function inside the Linux environment. I would only advise this kind of installation to advanced users, but after you do it the first time you’ll certainly learn a lot about how a Linux OS actually works.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;linux-is-secure&quot;&gt;Linux is secure&lt;&#x2F;h3&gt; +&lt;p&gt;Every single FOSS-oriented website makes this point, I’m just going to re-iterate it just to be sure. +The source code being publicly available doesn’t make software less secure. In fact, it’s way more secure since more people can work on it and fix security flaws. +&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Security_through_obscurity&quot;&gt;Security through obscurity&lt;&#x2F;a&gt; just doesn’t work. You can see that by looking at the number of security breaches that are found every day on closed-source software.&lt;&#x2F;p&gt; +&lt;p&gt;If you make your software closed-source you’re basically betting you and your small team are able to create a better and more secure code than every single other person in the planet. Of course, this assumption is stupid and irrealistic, that’s why FOSS software will always be faster and more secure than closed-source alternatives.&lt;&#x2F;p&gt; +&lt;p&gt;This goes for every kind of software, including the very operating system code. GNU&#x2F;Linux based operating systems are the most secure choice for every kind of user. +More often than not, you can trust the software programmers without even reading the code yourself: since they’re sharing every single line of code, they probably don’t have anything to hide. If they do include malicious code, someone else will probably have noticed by now, provided you didn’t build and run that software straight from the repo a few minutes after the last commit lol&lt;&#x2F;p&gt; +&lt;p&gt;You can also be safe against external attackers. Linux’s &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gs.statcounter.com&#x2F;os-market-share&#x2F;desktop&#x2F;worldwide&#x2F;#monthly-202012-202012-bar&quot;&gt;market share&lt;&#x2F;a&gt; on desktop and laptop PCs was less than 2% as of January 2021, and those people are probably much more tech-savy than the other OSes’ users… +This means attackers will likely target Windows or OS X users, so you can be safe even without using an antivirus or anything similar (even though there &lt;em&gt;are&lt;&#x2F;em&gt; &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.clamav.net&#x2F;&quot;&gt;choices&lt;&#x2F;a&gt; for that, too).&lt;&#x2F;p&gt; +&lt;h3 id=&quot;linux-is-smarter&quot;&gt;Linux is smarter&lt;&#x2F;h3&gt; +&lt;p&gt;Saying that Linux is for &lt;em&gt;everybody&lt;&#x2F;em&gt; would be a risky take. My point is that you &lt;em&gt;probably&lt;&#x2F;em&gt; could benefit from using a Linux system.&lt;&#x2F;p&gt; +&lt;p&gt;If you’re a programmer, Linux is objectively the best OS you can use. As a programmer, I love using the terminal to do stuff more quickly. I also love the level of integration you can have with the system: a lot of programs are designed with a client&#x2F;server model, which makes them work in complex scenarios as long as you have the time and patience to configure them properly.&lt;&#x2F;p&gt; +&lt;p&gt;While Windows still has to retain compatibility with legacy systems, Linux is much more free to do its own thing. Linux will always be smarter and more modern. Just think about the filesystem structure. +Windows is forced to retain a confusing structure, where you have a ton of (not) hidden folders where programmers can store their necessary data… But there are so many choices and they’re not coherent! If I wanted to create a backup of all my settings and save files, I would have to copy all of these folders:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;C:\ProgramData; C:\Users\username\AppData; C:\Users\username\Documents\my games; +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;And I would still miss all of the informations saved on the awful Windows Registry…&lt;&#x2F;p&gt; +&lt;p&gt;On Linux, you just copy the .config folder in your home directory.&lt;&#x2F;p&gt; +&lt;p&gt;Moreover, in Windows 10 you have two ways of editing system settings: the Control Panel and the Windows Settings. But sometimes editing a setting on one side does NOT reflect on the other! +Windows is literally the most confusing OS you can start with… And people still recommend it to beginners over Linux. It’s just dumb.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;linux-is-versatile&quot;&gt;Linux is versatile&lt;&#x2F;h3&gt; +&lt;p&gt;Now, to the point everybody’s been waiting for. Yes, none of the Adobe programs will run &lt;em&gt;natively&lt;&#x2F;em&gt; on any Linux distro. That means if you’re a creative person and you need those programs on a daily basis, maybe you should consider dual booting…&lt;&#x2F;p&gt; +&lt;p&gt;BUT, steps are being made in two different directions:&lt;&#x2F;p&gt; +&lt;ul&gt; +&lt;li&gt;Valve is working on Proton, which allows the execution of most Windows-only applications and games on any Linux system.&lt;&#x2F;li&gt; +&lt;li&gt;More and more open-source alternatives to closed-source standards are being developed by the day.&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;p&gt;While Proton is interesting, I always prefer to run open source software, especially if we’re talking about programs that are also free of charge: imagine trusting a closed-source software you didn’t pay for.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt; +&lt;p&gt;Ok, now I’m getting repetitive so I’ll just get to the point. +Linux is constantly evolving and it has now become the top choice for a lot of people, so let’s try and consider every use case.&lt;&#x2F;p&gt; +&lt;ul&gt; +&lt;li&gt;If you’re a professional that’s deep in the industry and you need some &lt;em&gt;specific&lt;&#x2F;em&gt; program to run perfectly on your device… Yeah, you should use Windows.&lt;&#x2F;li&gt; +&lt;li&gt;If you’re a power user that’s just used to paid software, maybe consider trying out some open source alternative?&lt;&#x2F;li&gt; +&lt;li&gt;If you’re a gamer, I say you should dual boot. I have a Windows 10 LTSC installation that I use &lt;em&gt;exclusively&lt;&#x2F;em&gt; for gaming. While Proton has made Linux gaming feasable, the experience isn’t always the best, especially if you play games that require millisecond-grade accuracy, like rhythm games or competitive shooters.&lt;&#x2F;li&gt; +&lt;li&gt;If you’re a student or employee, Linux would be perfect for you. You can quickly take notes and do office work without the annoying Windows 10 updates popping up and rebooting your system seemingly at random. Also, any Linux system will probably be more light on resource usage than Windows, so you could take some old hardware you thought would never be using again and actually make something useful with it.&lt;&#x2F;li&gt; +&lt;li&gt;If you work in the programming or engineering field, then what are you waiting for? You should try out a Linux OS as soon as possible, and not in a virtual machine. A lot of my friends said they didn’t like Linux because it felt slow… While running on a VM… Duh? Try it out on real hardware so you can feel its superiority.&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;p&gt;Well, I can’t possibly cover &lt;em&gt;every&lt;&#x2F;em&gt; profession and use-case, but I hope I was clear about those I managed to list above. +I’m going to conclude this article with some interesting links about Linux and FOSS you definitely should check out.&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;islinuxabout.xyz&#x2F;&quot;&gt;Is Linux About…?&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;usermod.net&#x2F;why-use-linux&#x2F;&quot;&gt;usermod.net - Why use Linux?&lt;&#x2F;a&gt;&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +</content> + + </entry> + <entry xml:lang="en"> + <title>Modern web bloat</title> + <published>2021-04-09T00:00:00+00:00</published> + <updated>2021-04-09T00:00:00+00:00</updated> + + <author> + <name> + + BiRabittoh + + </name> + </author> + + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/blog/modern-web-bloat/"/> + <id>https://birabittoh.github.io/blog/modern-web-bloat/</id> + + <content type="html" xml:base="https://birabittoh.github.io/blog/modern-web-bloat/">&lt;p&gt;This is it. My first blog post; I suppose this officially makes be a boomer.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;inspiration&quot;&gt;Inspiration&lt;&#x2F;h2&gt; +&lt;p&gt;Some time ago I stumbled upon a &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;invidio.us&#x2F;cvDyQUpaFf4&quot;&gt;video&lt;&#x2F;a&gt;, where the popular Linux influencer &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;lukesmith.xyz&quot;&gt;Luke Smith&lt;&#x2F;a&gt; talked about the effort of looking up a Chicken Parmesan recipe in 2021 without having any adblock or privacy extensions enabled.&lt;&#x2F;p&gt; +&lt;p&gt;That’s because most modern websites take a lot of time to load framework files, ads and trackers. While that’s kinda functional, I think we should change our habits and start making simple websites again.&lt;&#x2F;p&gt; +&lt;p&gt;Yeah, this looks like a first world problem and it probably is, but it’s not as subtle as you think. I’m actually convinced that the internet could actually benefit from this way of thinking, and that’s what I’m going to talk about.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;the-problem&quot;&gt;The problem&lt;&#x2F;h2&gt; +&lt;p&gt;In the early days of the internet, it was common for webpages to be written using only HTML, so we had very ugly but functional websites.&lt;&#x2F;p&gt; +&lt;p&gt;As technology went on, sites needed to get more modern-looking and interactive; that’s why CSS and JavaScript were introduced into the mix, allowing for dynamic websites that could actually change based on user input. +As of nowadays, a lot more stuff went into the mix, to the point where the browser is now the most common program we use in our OS: you can, in fact, use it for doing things that 15+ years ago required external programs, like:&lt;&#x2F;p&gt; +&lt;ul&gt; +&lt;li&gt;playing music and video,&lt;&#x2F;li&gt; +&lt;li&gt;reading PDF files,&lt;&#x2F;li&gt; +&lt;li&gt;doing office work,&lt;&#x2F;li&gt; +&lt;li&gt;checking e-mail,&lt;&#x2F;li&gt; +&lt;li&gt;cloud storage,&lt;&#x2F;li&gt; +&lt;li&gt;etc…&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;p&gt;I guess people just find it more comfortable if they can do everything with a single program, and they’re not to blame for that. This IS the easiest approach for unexperienced people: just have a program that does everything, instead of having to learn how to use a bunch of different software.&lt;&#x2F;p&gt; +&lt;p&gt;This plethora of uses is possible today because of the existence of various libraries and frameworks that simplify JavaScript and CSS and make them easier to develop complicated websites with. +This is good for basic web users who just want functional websites, and great for developers since they can easily code advanced functions inside the browser, which makes them work in every OS.&lt;&#x2F;p&gt; +&lt;p&gt;Sadly, this brings us to the problem: any modern website has become a burden for any browser to load, since our browser needs to download and parse through each library and often fill the page content as you scroll through. +In his video, Luke Smith found that a simple Chicken Parmesan recipe would take up to 5-10 megabytes, which doesn’t sound like a lot, but it actually is.&lt;&#x2F;p&gt; +&lt;p&gt;It’s easier to understand it if you think about it with video-games; any game on 16-bit consoles and earlier, including full-fledged 30+ hour adventures like Final Fantasy 6 and Chrono Trigger, weighs less than one single recipe page (as stated &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blogs.umass.edu&#x2F;Techbytes&#x2F;2014&#x2F;02&#x2F;10&#x2F;history-of-gaming-storage&#x2F;#attachment_2827&quot;&gt;here&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt; +&lt;h2 id=&quot;the-solution&quot;&gt;The solution&lt;&#x2F;h2&gt; +&lt;p&gt;Well, I don’t think this “problem” is getting solved soon, as new frameworks for web development are constantly being introduced. Sadly, it’s a one-way train, but if you’re a web-dev you could actually make a difference yourself!&lt;&#x2F;p&gt; +&lt;p&gt;I mean, this can not apply to all websites. Some of them just NEED to be as responsive and interactive as they are; most of them actually just became bloated at a certain time period (probably mid-2000s) when having a flashy website was cool and different from what everyone else had. +Nowadays you can make a difference by using plain HTML and CSS for your website: this ensures your pages will load instantly and be compatible even with the oldest of browsers! +If you like this philosophy, you can check out other projects that aim for a simpler and faster web, like these ones:&lt;&#x2F;p&gt; +&lt;ul&gt; +&lt;li&gt;&lt;a href=&quot;&#x2F;&#x2F;gemini.circumlunar.space&#x2F;&quot;&gt;gemini:&#x2F;&#x2F;&lt;&#x2F;a&gt;: a new, purposefully limited, internet protocol;&lt;&#x2F;li&gt; +&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;based.cooking&#x2F;&quot;&gt;based.cooking&lt;&#x2F;a&gt;: a modern recipe website based on user collaboration via GitHub;&lt;&#x2F;li&gt; +&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiby.me&#x2F;&quot;&gt;wiby.me&lt;&#x2F;a&gt;: a search engine that aims to only index classic style webpages.&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +</content> + + </entry> +</feed>
A blog/ai-art-contest/index.html

@@ -0,0 +1,1 @@

+<!doctype html><html lang=en><head><meta charset=UTF-8><meta content="IE=edge" http-equiv=X-UA-Compatible><meta content="text/html; charset=UTF-8" http-equiv=content-type><meta content="width=device-width,initial-scale=1,user-scalable=no" name=viewport><meta content="index, follow" name=robots><title>The AI takeover is near?</title><meta content="The AI takeover is near?" name=title><meta content="Tech and privacy ramblings from a random italian dude." name=description><meta content=website property=og:type><meta content=https://birabittoh.github.io/blog/ai-art-contest/ property=og:url><meta content=BiRabittoh property=og:site_name><meta content="The AI takeover is near?" property=og:title><meta content="Tech and privacy ramblings from a random italian dude." property=og:description><meta content=summary_large_image property=twitter:card><meta content=https://birabittoh.github.io/blog/ai-art-contest/ property=twitter:url><meta content="The AI takeover is near?" property=twitter:title><meta content="Tech and privacy ramblings from a random italian dude." property=twitter:description><link href=https://birabittoh.github.io/blog/ai-art-contest/ rel=canonical><link href=https://birabittoh.github.io/atom.xml rel=alternate title=RSS type=application/atom+xml><link href=https://birabittoh.github.io/css/style.css rel=stylesheet><body><div class=wrapper><header><nav class=navBar><a href=/>/home/</a><a href=/about>/about/</a><a href=/links>/links/</a><a href=/blog>/blog/</a><div class=themeSwitch><button class="themeButton light" onclick="setTheme('light')" title="Light mode">◐</button><button class="themeButton dark" onclick="setTheme('dark')" title="Dark mode">◑</button></div><script>const setTheme=a=>{document.documentElement.className=a;localStorage.setItem(`theme`,a)};const getTheme=()=>{const a=localStorage.getItem(`theme`);const b=a?a:`dark`;setTheme(b)};getTheme()</script></nav><div><a href=..>..</a>/<span class=metaData>ai-art-contest</span></div><time datetime=2022-09-21>Published on: <span class=metaData>2022-09-21</span></time><h1>The AI takeover is near?</h1></header><main><h2 id=context>Context</h2><p>August 29, 2022. The Colorado State Fair gives out prizes for various art categories in a contest. Let’s have a look at <em>Théâtre D’opéra Spatial</em>, the winner for category no.5: <em>Digital Arts / Digitally-Manipulated Photography</em> (<a href=https://coloradostatefair.com/wp-content/uploads/2022/08/2022-Fine-Arts-First-Second-Third.pdf rel=noopener target=_blank>leaderboard</a>).<p><img alt="Théâtre D’opéra Spatial" src=https://www.tuttotech.net/wp-content/uploads/2022/09/Intelligenza-artificiale-quadro-1.jpg><p>That same day, a heated debate started on Twitter (as if that weren’t the norm there). That’s because the winner of this art contest used Midjourney, a popular AI image generator, to generate their entry.<blockquote><p>We’re watching the death of artistry unfold right before our eyes — if creative jobs aren’t safe from machines, then even high-skilled jobs are in danger of becoming obsolete</blockquote><p>Source: <a href=https://nitter.it/omnimorpho/status/1564782875072872450 rel=noopener target=_blank>@OmniMorpho</a>.<h2 id=the-debate>The debate</h2><p>While you could argue that the effort the creator (Jason M. Allen) put in was minuscule in comparison to the years of study and preparation an artist needs to undertake, I don’t think that actually matters when it comes to winning a competition or making an artpiece in general.<p>First of all, <em>art is totally subjective</em>. I could spend 5 seconds drawing a stick figure in MSPaint and have a contemporary art critique tell me it’s garbage, while people from another age might see a complaint towards modern, lifeless technology. This feels like a hyperbole, but I don’t think it’s that far from reality.<p>In 1961 Italian artist Piero Manzoni put his <a href=https://en.wikipedia.org/wiki/Artist%27s_Shit rel=noopener target=_blank>literal feces</a> in 90 cans and sold them as an artpiece. He also created a “magic base”, in the sense that you could put anything or anyone on it and that would become an artpiece in itself.<p><img alt="Merda d’artista" src=https://upload.wikimedia.org/wikipedia/commons/c/c2/Piero_Manzoni_-_Merda_D%27artista_%281961%29_-_panoramio.jpg><p>He created this because he saw <em>art as a relic of the artist</em>. Any object or even person can become an art piece if an artist puts his sign on it. But how do you become an artist? By making something that makes people discuss, something new and innovative that nobody ever thought about doing before. That’s what Mr. Allen did and that’s why I think he deserves his price.<p>Before photography was invented, artists generally strove to make their painting as realistic as possible. As soon as people were able to cheaply make perfect copies of reality, artists began experimenting with new techniques, things that a camera could never do. Allen showed everyone how technology just reached a new milestone, introducing a new need for artists to innovate and create something exclusive to their abilities. Something an AI can’t reproduce. Yet.<h2 id=a-slight-hole-in-this-argument>A slight hole in this argument</h2><p>But wait. The competition judges did not know he used an AI to make his art piece. So how could they have considered it innovative and revolutionary?<p>If you take a look at the 2nd and 3rd entries of the contest, you’ll see they’re clearly made by humans and clearly have a symbolic value. This does not apply to Allen’s entry, which is just VERY good looking. If I were a judge, I would not have chosen Allen’s work to win the competition, but again, <em>art is subjective</em>.<p>I tried to find out more about the criteria for the evaluation of this contest’s entries and I found this:<blockquote><p>“And there should be no lagging or hanging back by anybody who has anything worth exhibiting”</blockquote><p><a href=https://coloradostatefair.com/competitions/general-entry-fine-arts/fine-arts-exhibition/ rel=noopener target=_blank>Source</a>.<p>Also, they wrote this about the “under 18” art showcase:<blockquote><p>Art must be original in painting, drawing, sculpture, ceramics, photography, jewelry, and more! Have fun, be creative, enter to win.</blockquote><p><a href=https://coloradostatefair.com/competitions/general-entry-fine-arts/amateur-art-2/ rel=noopener target=_blank>Source</a>.<h2 id=conclusion>Conclusion</h2><p>Whichever way you put it, Théâtre D’opéra Spatial deserves to be called an art piece. The judges apparently valued aesthetics more than symbolic meaning, and their opinion cannot be logically disputed. Everyone gives a value to an artpiece based on their personal studies and experiences.<p>Now, knowing about the tools he used, we know Allen did something that nobody ever thought (or managed) to do before. If he hadn’t won that contest, this debate would never have started, but he did. That’s what makes him an artist and, consequently, his creation a work of art.</main><footer><p class=tagsData><a href=/tags/ai>#ai</a> <a href=/tags/art>#art</a><hr><div class=footContainer><div class=footLeft><p>Licensed under <a rel="noopener noreferrer" href=https://fr.wikipedia.org/wiki/Licence_MIT target=_blank>MIT</a><br> Built with <a rel="noopener noreferrer" href=https://www.getzola.org target=_blank>Zola</a> using <a rel="noopener noreferrer" href=https://github.com/BiRabittoh/anemone target=_blank>anemone</a> theme & <a rel="noopener noreferrer" href=https://github.com/Speyll/veqev target=_blank>veqev</a> colors.<br></div><div class=footRight><a href=https://wobble.town/visit/528 target=_blank><img class="footGif noStyle" alt=footGif loading=lazy src=https://wobble.town/visit/528/wobble.gif></a><a rel="noopener noreferrer" title="Subscribe via RSS for updates." class=metaData href=https://birabittoh.github.io/atom.xml target=_blank>RSS</a></div></div></footer></div>
A blog/data-volatility/index.html

@@ -0,0 +1,5 @@

+<!doctype html><html lang=en><head><meta charset=UTF-8><meta content="IE=edge" http-equiv=X-UA-Compatible><meta content="text/html; charset=UTF-8" http-equiv=content-type><meta content="width=device-width,initial-scale=1,user-scalable=no" name=viewport><meta content="index, follow" name=robots><title>Data volatility</title><meta content="Data volatility" name=title><meta content="Tech and privacy ramblings from a random italian dude." name=description><meta content=website property=og:type><meta content=https://birabittoh.github.io/blog/data-volatility/ property=og:url><meta content=BiRabittoh property=og:site_name><meta content="Data volatility" property=og:title><meta content="Tech and privacy ramblings from a random italian dude." property=og:description><meta content=summary_large_image property=twitter:card><meta content=https://birabittoh.github.io/blog/data-volatility/ property=twitter:url><meta content="Data volatility" property=twitter:title><meta content="Tech and privacy ramblings from a random italian dude." property=twitter:description><link href=https://birabittoh.github.io/blog/data-volatility/ rel=canonical><link href=https://birabittoh.github.io/atom.xml rel=alternate title=RSS type=application/atom+xml><link href=https://birabittoh.github.io/css/style.css rel=stylesheet><body><div class=wrapper><header><nav class=navBar><a href=/>/home/</a><a href=/about>/about/</a><a href=/links>/links/</a><a href=/blog>/blog/</a><div class=themeSwitch><button class="themeButton light" onclick="setTheme('light')" title="Light mode">◐</button><button class="themeButton dark" onclick="setTheme('dark')" title="Dark mode">◑</button></div><script>const setTheme=a=>{document.documentElement.className=a;localStorage.setItem(`theme`,a)};const getTheme=()=>{const a=localStorage.getItem(`theme`);const b=a?a:`dark`;setTheme(b)};getTheme()</script></nav><div><a href=..>..</a>/<span class=metaData>data-volatility</span></div><time datetime=2022-01-14>Published on: <span class=metaData>2022-01-14</span></time><h1>Data volatility</h1></header><main><p>I tried to access my domain at smol.pub yesterday and I noticed the service went down. Fear started rushing through my veins as I noticed I would have to choose another platform and, most importantly, write everything back from scratch since I don’t have a backup. This made me think about the importance of always having a backup stored somewhere.<h2 id=why-though>Why though</h2><p>Creating a backup of your important data is crucial. On a daily basis, people discover vulnerabilities that allow remote code execution on any host machine. Try to imagine what would happen if someone ran a ransomware program on your PC. Would you be safe?<p>This genuinely feels like fearmongery, but it’s something that can seriously happen: you can be attacked by someone that specifically targets you. If you run Windows, you might be part of a botnet (think about all of the unsigned EXE files you’ve run since you installed the OS). What happens when someone doesn’t need your machine anymore? Well, that person might try and squeeze some money from you by holding your files hostage.<h2 id=cloud-backups>Cloud backups</h2><p>Most people define cloud storage as follows:<blockquote><p>Cloud storage is a way for businesses and consumers to save data securely online so that it can be accessed anytime from any location and easily shared with those who are granted permission. Cloud storage also offers a way to back up data to facilitate recovery off-site.</blockquote><p>Source: <a href=https://www.investopedia.com/terms/c/cloud-storage.asp rel=noopener target=_blank>Investopedia</a>.<p>In reality, cloud storage is no more than some dude’s computer.<p>As soon as you upload your personal data to any service, you’re trusting it to store it in a safe and private way. If that software is not open source, you’re basically asking to get spied on.<p>Most people do not care about that, that’s why cloud storage solutions are very popular and basically enabled by default on any device you might buy nowadays.<p>I personally use cloud storage but I would never actually upload anything I actually care about on it… If you have to choose, I have a few suggestions.<h3 id=don-t-trust-non-encrypted-solutions>Don’t trust non-encrypted solutions</h3><p>Everybody has a Google account nowadays. If you forget your password, there is a way to recover it and get access to everything inside, including your Google Drive contents. As long as there is a password that can be changed or reset, your files are NOT encrypted and fully visible to anyone who has access to the Drive servers (Google or any other government agency that might want to take a peek). Most cloud solutions work like this, and it’s actually frightening how many people trust megacorporations to have all of their private information available unencrypted.<p>One encrypted solution I use is mega.nz. While I can’t be sure that the mega team isn’t spying on me, at least they’re hiding it well if they do. Mega includes an encryption key with your account, which is not tied to your login information. This means that if you lose your key, you also lost all of your files, there is absolutely no way to get them back, even if you change your account password.<p>Now, Mega is not open source, so you can never be sure that there isn’t any backdoor, or that keys aren’t stored together with your personal information, but at least it’s something.<h3 id=encrypt-your-data-yourself>Encrypt your data yourself</h3><p>If you really need to trust Google, Apple or Amazon with your files, you can encrypt your files locally with the gpg command. This way, feds and big tech are going to need another password to actually access your private files.<p>It’s really easy, just two commands mainly.<p>Encrypt:<pre><code>gpg -c --cipher-algo AES256 secret.file +</code></pre><p>Decrypt:<pre><code>gpg segret.file.gpg +</code></pre><p>If you need to encrypt a folder, you can compress it first:<pre><code>tar -cf output.tar.gz secret-folder +</code></pre><p>Then encrypt your output.tar.gz archive as if it was a single file.<p>After decrypting it, you can extract your archive through this command:<pre><code>tar -xf output.tar.gz +</code></pre><p>Check out Mental Outlaw’s <a href=https://invidio.us/M0O7vhvQW30 rel=noopener target=_blank>video</a> about this very topic.<h2 id=local-backups>Local backups</h2><p>This is the best way to backup your data. You don’t need to encrypt it if you have full physical access to your data, but you would still be vulnerable if it gets lost or stolen, so it’s always better to keep it encrypted and safe.<p>Of course, if you have a backup hard drive always plugged in your PC, it’s not really secure at all, since one could remotely execute a ransomware that encrypts everything in your PC, including all drives both internal and external, so you would get your backup encrypted with the original files voiding everything you’ve done.<p>This is why you should keep a GNU/Linux device that only serves backup purposes and is turned OFF most of the time. As long as no current runs through your CPU, your files are safe. You should only turn it on once a month and copy everything important over, so you have a safe and offline backup.<p>You could also use a USB stick or external hard drive, as long as you only plug them in your PC when necessary.</main><footer><p class=tagsData><a href=/tags/advice>#advice</a> <a href=/tags/foss>#foss</a> <a href=/tags/privacy>#privacy</a><hr><div class=footContainer><div class=footLeft><p>Licensed under <a rel="noopener noreferrer" href=https://fr.wikipedia.org/wiki/Licence_MIT target=_blank>MIT</a><br> Built with <a rel="noopener noreferrer" href=https://www.getzola.org target=_blank>Zola</a> using <a rel="noopener noreferrer" href=https://github.com/BiRabittoh/anemone target=_blank>anemone</a> theme & <a rel="noopener noreferrer" href=https://github.com/Speyll/veqev target=_blank>veqev</a> colors.<br></div><div class=footRight><a href=https://wobble.town/visit/528 target=_blank><img class="footGif noStyle" alt=footGif loading=lazy src=https://wobble.town/visit/528/wobble.gif></a><a rel="noopener noreferrer" title="Subscribe via RSS for updates." class=metaData href=https://birabittoh.github.io/atom.xml target=_blank>RSS</a></div></div></footer></div>
A blog/fomo/index.html

@@ -0,0 +1,1 @@

+<!doctype html><html lang=en><head><meta charset=UTF-8><meta content="IE=edge" http-equiv=X-UA-Compatible><meta content="text/html; charset=UTF-8" http-equiv=content-type><meta content="width=device-width,initial-scale=1,user-scalable=no" name=viewport><meta content="index, follow" name=robots><title>My opinion on FOMO</title><meta content="My opinion on FOMO" name=title><meta content="Tech and privacy ramblings from a random italian dude." name=description><meta content=website property=og:type><meta content=https://birabittoh.github.io/blog/fomo/ property=og:url><meta content=BiRabittoh property=og:site_name><meta content="My opinion on FOMO" property=og:title><meta content="Tech and privacy ramblings from a random italian dude." property=og:description><meta content=summary_large_image property=twitter:card><meta content=https://birabittoh.github.io/blog/fomo/ property=twitter:url><meta content="My opinion on FOMO" property=twitter:title><meta content="Tech and privacy ramblings from a random italian dude." property=twitter:description><link href=https://birabittoh.github.io/blog/fomo/ rel=canonical><link href=https://birabittoh.github.io/atom.xml rel=alternate title=RSS type=application/atom+xml><link href=https://birabittoh.github.io/css/style.css rel=stylesheet><body><div class=wrapper><header><nav class=navBar><a href=/>/home/</a><a href=/about>/about/</a><a href=/links>/links/</a><a href=/blog>/blog/</a><div class=themeSwitch><button class="themeButton light" onclick="setTheme('light')" title="Light mode">◐</button><button class="themeButton dark" onclick="setTheme('dark')" title="Dark mode">◑</button></div><script>const setTheme=a=>{document.documentElement.className=a;localStorage.setItem(`theme`,a)};const getTheme=()=>{const a=localStorage.getItem(`theme`);const b=a?a:`dark`;setTheme(b)};getTheme()</script></nav><div><a href=..>..</a>/<span class=metaData>fomo</span></div><time datetime=2022-03-06>Published on: <span class=metaData>2022-03-06</span></time><h1>My opinion on FOMO</h1></header><main><h2 id=what-are-you-even-talking-about>What are you even talking about</h2><p>Let me preface this by saying I know nothing about psychology and behavioral studies, so anything you read here is just my personal opinion.<p>Let’s start with defining FOMO, to make sure we’re all on the same spectrum.<blockquote><p>Fear of missing out (FOMO) is the feeling of apprehension that one is either not in the know or missing out on information, events, experiences, or life decisions that could make one’s life better.</blockquote><p>Source: <a href=https://en.wikipedia.org/wiki/Fear_of_missing_out rel=noopener target=_blank>Wikipedia</a>.<p>The Fear Of Missing Out is what drives modern society; It keeps us hooked to mainstream social media and drives newbie investors towards obvious rugpulls.<p><a href=https://www.sciencedirect.com/science/article/abs/pii/S0747563213000800 rel=noopener target=_blank>Studies</a> have correlated it to various negative behaviors, like social media addiction and even distracted driving.<h2 id=am-i-affected-by-this>Am I affected by this?</h2><p>Probably. As long as you have a friend group and an account on any mainstream social network, yes you are. It’s the feeling that drives you to check out your friends’ Stories on Instagram, the dread you feel when somebody else reaches a life goal before you do, the fear that pushes people to buy limited-time merchandise before it runs out of stock.<h2 id=my-experience>My experience</h2><p>FOMO has been a constant for my entire life and just now I’m trying to write this as a way to think critically about it and try to avoid being pushed by stupid instincts. I’ve come to realize that Discord is the thing that slows down my productivity the most: as soon as I enter a voice chat with my friend, I stop being productive in any capacity and I’m also uncapable of resuming for the whole day.<p>Even after I turn off my PC, I still think about what my friends are doing and what I’m missing out on, be it a Gartic Phone round or any stupid discussion I might have had on there. The biggest problem is, it’s entirely subconscious. I often find myself uncapable of concentrating and don’t know what’s the cause of it; I’ve been eliminating elements one by one to find out the cause of this and turns out that distancing myself totally from social media AND Discord actually solves it.<p>It’s not immediate either, it took a few days for me but your mileage may vary depending on a lot of factors. Of course, I plan on restoring my online presence after I have graduated but it’s useful to know what exactly was causing me to waste all of my time for months.<h2 id=any-solutions>Any solutions?</h2><p>I think you should evaluate possible solutions yourself, as FOMO is strictly dependant on your personality and experiences. You could try eliminating or replacing parts of your habits regularly, like I did, to find out if something is more destructive than you might initially think.<p>As I was researching this, I found out about JOMO. It stands for “Joy Of Missing Out” and it’s the exact opposite thing. Embracing JOMO means you dedicate a few hours of the day to yourself and stop worrying about how your friends are doing at life and which continent gets invaded next.<p>Modern society does not wait for anybody, there’s nothing wrong in taking a break and focusing on yourself. You can always catch up later.<ul><li><a href=gopher://republic.circumlunar.space:70/0/~katolaz/phlog/20190219_fomo.txt>Another interesting article about FOMO</a>, on Gopher;<li><a href=https://gopherproxy.vern.cc/gopher/republic.circumlunar.space:70/0/~katolaz/phlog/20190219_fomo.txt rel=noopener target=_blank>Same article</a>, but proxied to be viewed on modern browsers.</ul></main><footer><p class=tagsData><a href=/tags/advice>#advice</a> <a href=/tags/minimalism>#minimalism</a><hr><div class=footContainer><div class=footLeft><p>Licensed under <a rel="noopener noreferrer" href=https://fr.wikipedia.org/wiki/Licence_MIT target=_blank>MIT</a><br> Built with <a rel="noopener noreferrer" href=https://www.getzola.org target=_blank>Zola</a> using <a rel="noopener noreferrer" href=https://github.com/BiRabittoh/anemone target=_blank>anemone</a> theme & <a rel="noopener noreferrer" href=https://github.com/Speyll/veqev target=_blank>veqev</a> colors.<br></div><div class=footRight><a href=https://wobble.town/visit/528 target=_blank><img class="footGif noStyle" alt=footGif loading=lazy src=https://wobble.town/visit/528/wobble.gif></a><a rel="noopener noreferrer" title="Subscribe via RSS for updates." class=metaData href=https://birabittoh.github.io/atom.xml target=_blank>RSS</a></div></div></footer></div>
A blog/index.html

@@ -0,0 +1,1 @@

+<!doctype html><html lang=en><head><meta charset=UTF-8><meta content="IE=edge" http-equiv=X-UA-Compatible><meta content="text/html; charset=UTF-8" http-equiv=content-type><meta content="width=device-width,initial-scale=1,user-scalable=no" name=viewport><meta content="index, follow" name=robots><title>Blog posts</title><meta content="Blog posts" name=title><meta content="Tech and privacy ramblings from a random italian dude." name=description><meta content=website property=og:type><meta content=https://birabittoh.github.io/blog/ property=og:url><meta content=BiRabittoh property=og:site_name><meta content="Blog posts" property=og:title><meta content="Tech and privacy ramblings from a random italian dude." property=og:description><meta content=summary_large_image property=twitter:card><meta content=https://birabittoh.github.io/blog/ property=twitter:url><meta content="Blog posts" property=twitter:title><meta content="Tech and privacy ramblings from a random italian dude." property=twitter:description><link href=https://birabittoh.github.io/blog/ rel=canonical><link href=https://birabittoh.github.io/atom.xml rel=alternate title=RSS type=application/atom+xml><link href=https://birabittoh.github.io/css/style.css rel=stylesheet><body><div class=wrapper><header><nav class=navBar><a href=/>/home/</a><a href=/about>/about/</a><a href=/links>/links/</a><a href=/blog>/blog/</a><div class=themeSwitch><button class="themeButton light" onclick="setTheme('light')" title="Light mode">◐</button><button class="themeButton dark" onclick="setTheme('dark')" title="Dark mode">◑</button></div><script>const setTheme=a=>{document.documentElement.className=a;localStorage.setItem(`theme`,a)};const getTheme=()=>{const a=localStorage.getItem(`theme`);const b=a?a:`dark`;setTheme(b)};getTheme()</script></nav><h1>Blog posts</h1></header><main><ul><li style=margin-bottom:20px><a href=https://birabittoh.github.io/blog/self-host/>Self-hosting Extravaganza</a> <div style=text-align:right>[ <a class=tag href=/tags/advice>#advice</a><a class=tag href=/tags/foss>#foss</a><a class=tag href=/tags/privacy>#privacy</a> ]</div><li style=margin-bottom:20px><a href=https://birabittoh.github.io/blog/void-xfce/>Modernizing XFCE</a> <div style=text-align:right>[ <a class=tag href=/tags/advice>#advice</a><a class=tag href=/tags/foss>#foss</a> ]</div><li style=margin-bottom:20px><a href=https://birabittoh.github.io/blog/reflector/>Update your mirrors!</a> <div style=text-align:right>[ <a class=tag href=/tags/advice>#advice</a><a class=tag href=/tags/foss>#foss</a> ]</div><li style=margin-bottom:20px><a href=https://birabittoh.github.io/blog/ai-art-contest/>The AI takeover is near?</a> <div style=text-align:right>[ <a class=tag href=/tags/ai>#ai</a><a class=tag href=/tags/art>#art</a> ]</div><li style=margin-bottom:20px><a href=https://birabittoh.github.io/blog/fomo/>My opinion on FOMO</a> <div style=text-align:right>[ <a class=tag href=/tags/advice>#advice</a><a class=tag href=/tags/minimalism>#minimalism</a> ]</div><li style=margin-bottom:20px><a href=https://birabittoh.github.io/blog/data-volatility/>Data volatility</a> <div style=text-align:right>[ <a class=tag href=/tags/advice>#advice</a><a class=tag href=/tags/foss>#foss</a><a class=tag href=/tags/privacy>#privacy</a> ]</div><li style=margin-bottom:20px><a href=https://birabittoh.github.io/blog/you-should-use-linux/>You should probably use Linux</a> <div style=text-align:right>[ <a class=tag href=/tags/advice>#advice</a><a class=tag href=/tags/foss>#foss</a><a class=tag href=/tags/privacy>#privacy</a> ]</div><li style=margin-bottom:20px><a href=https://birabittoh.github.io/blog/modern-web-bloat/>Modern web bloat</a> <div style=text-align:right>[ <a class=tag href=/tags/foss>#foss</a><a class=tag href=/tags/minimalism>#minimalism</a> ]</div></ul><div class=metaData>  1 / 1  </div></main><footer><hr><div class=footContainer><div class=footLeft><p>Licensed under <a rel="noopener noreferrer" href=https://fr.wikipedia.org/wiki/Licence_MIT target=_blank>MIT</a><br> Built with <a rel="noopener noreferrer" href=https://www.getzola.org target=_blank>Zola</a> using <a rel="noopener noreferrer" href=https://github.com/BiRabittoh/anemone target=_blank>anemone</a> theme & <a rel="noopener noreferrer" href=https://github.com/Speyll/veqev target=_blank>veqev</a> colors.<br></div><div class=footRight><a href=https://wobble.town/visit/528 target=_blank><img class="footGif noStyle" alt=footGif loading=lazy src=https://wobble.town/visit/528/wobble.gif></a><a rel="noopener noreferrer" title="Subscribe via RSS for updates." class=metaData href=https://birabittoh.github.io/atom.xml target=_blank>RSS</a></div></div></footer></div>
A blog/modern-web-bloat/index.html

@@ -0,0 +1,1 @@

+<!doctype html><html lang=en><head><meta charset=UTF-8><meta content="IE=edge" http-equiv=X-UA-Compatible><meta content="text/html; charset=UTF-8" http-equiv=content-type><meta content="width=device-width,initial-scale=1,user-scalable=no" name=viewport><meta content="index, follow" name=robots><title>Modern web bloat</title><meta content="Modern web bloat" name=title><meta content="Tech and privacy ramblings from a random italian dude." name=description><meta content=website property=og:type><meta content=https://birabittoh.github.io/blog/modern-web-bloat/ property=og:url><meta content=BiRabittoh property=og:site_name><meta content="Modern web bloat" property=og:title><meta content="Tech and privacy ramblings from a random italian dude." property=og:description><meta content=summary_large_image property=twitter:card><meta content=https://birabittoh.github.io/blog/modern-web-bloat/ property=twitter:url><meta content="Modern web bloat" property=twitter:title><meta content="Tech and privacy ramblings from a random italian dude." property=twitter:description><link href=https://birabittoh.github.io/blog/modern-web-bloat/ rel=canonical><link href=https://birabittoh.github.io/atom.xml rel=alternate title=RSS type=application/atom+xml><link href=https://birabittoh.github.io/css/style.css rel=stylesheet><body><div class=wrapper><header><nav class=navBar><a href=/>/home/</a><a href=/about>/about/</a><a href=/links>/links/</a><a href=/blog>/blog/</a><div class=themeSwitch><button class="themeButton light" onclick="setTheme('light')" title="Light mode">◐</button><button class="themeButton dark" onclick="setTheme('dark')" title="Dark mode">◑</button></div><script>const setTheme=a=>{document.documentElement.className=a;localStorage.setItem(`theme`,a)};const getTheme=()=>{const a=localStorage.getItem(`theme`);const b=a?a:`dark`;setTheme(b)};getTheme()</script></nav><div><a href=..>..</a>/<span class=metaData>modern-web-bloat</span></div><time datetime=2021-04-09>Published on: <span class=metaData>2021-04-09</span></time><h1>Modern web bloat</h1></header><main><p>This is it. My first blog post; I suppose this officially makes be a boomer.<h2 id=inspiration>Inspiration</h2><p>Some time ago I stumbled upon a <a href=https://invidio.us/cvDyQUpaFf4 rel=noopener target=_blank>video</a>, where the popular Linux influencer <a href=https://lukesmith.xyz rel=noopener target=_blank>Luke Smith</a> talked about the effort of looking up a Chicken Parmesan recipe in 2021 without having any adblock or privacy extensions enabled.<p>That’s because most modern websites take a lot of time to load framework files, ads and trackers. While that’s kinda functional, I think we should change our habits and start making simple websites again.<p>Yeah, this looks like a first world problem and it probably is, but it’s not as subtle as you think. I’m actually convinced that the internet could actually benefit from this way of thinking, and that’s what I’m going to talk about.<h2 id=the-problem>The problem</h2><p>In the early days of the internet, it was common for webpages to be written using only HTML, so we had very ugly but functional websites.<p>As technology went on, sites needed to get more modern-looking and interactive; that’s why CSS and JavaScript were introduced into the mix, allowing for dynamic websites that could actually change based on user input. As of nowadays, a lot more stuff went into the mix, to the point where the browser is now the most common program we use in our OS: you can, in fact, use it for doing things that 15+ years ago required external programs, like:<ul><li>playing music and video,<li>reading PDF files,<li>doing office work,<li>checking e-mail,<li>cloud storage,<li>etc…</ul><p>I guess people just find it more comfortable if they can do everything with a single program, and they’re not to blame for that. This IS the easiest approach for unexperienced people: just have a program that does everything, instead of having to learn how to use a bunch of different software.<p>This plethora of uses is possible today because of the existence of various libraries and frameworks that simplify JavaScript and CSS and make them easier to develop complicated websites with. This is good for basic web users who just want functional websites, and great for developers since they can easily code advanced functions inside the browser, which makes them work in every OS.<p>Sadly, this brings us to the problem: any modern website has become a burden for any browser to load, since our browser needs to download and parse through each library and often fill the page content as you scroll through. In his video, Luke Smith found that a simple Chicken Parmesan recipe would take up to 5-10 megabytes, which doesn’t sound like a lot, but it actually is.<p>It’s easier to understand it if you think about it with video-games; any game on 16-bit consoles and earlier, including full-fledged 30+ hour adventures like Final Fantasy 6 and Chrono Trigger, weighs less than one single recipe page (as stated <a href=https://blogs.umass.edu/Techbytes/2014/02/10/history-of-gaming-storage/#attachment_2827 rel=noopener target=_blank>here</a>).<h2 id=the-solution>The solution</h2><p>Well, I don’t think this “problem” is getting solved soon, as new frameworks for web development are constantly being introduced. Sadly, it’s a one-way train, but if you’re a web-dev you could actually make a difference yourself!<p>I mean, this can not apply to all websites. Some of them just NEED to be as responsive and interactive as they are; most of them actually just became bloated at a certain time period (probably mid-2000s) when having a flashy website was cool and different from what everyone else had. Nowadays you can make a difference by using plain HTML and CSS for your website: this ensures your pages will load instantly and be compatible even with the oldest of browsers! If you like this philosophy, you can check out other projects that aim for a simpler and faster web, like these ones:<ul><li><a href=//gemini.circumlunar.space/>gemini://</a>: a new, purposefully limited, internet protocol;<li><a href=https://based.cooking/ rel=noopener target=_blank>based.cooking</a>: a modern recipe website based on user collaboration via GitHub;<li><a href=https://wiby.me/ rel=noopener target=_blank>wiby.me</a>: a search engine that aims to only index classic style webpages.</ul></main><footer><p class=tagsData><a href=/tags/foss>#foss</a> <a href=/tags/minimalism>#minimalism</a><hr><div class=footContainer><div class=footLeft><p>Licensed under <a rel="noopener noreferrer" href=https://fr.wikipedia.org/wiki/Licence_MIT target=_blank>MIT</a><br> Built with <a rel="noopener noreferrer" href=https://www.getzola.org target=_blank>Zola</a> using <a rel="noopener noreferrer" href=https://github.com/BiRabittoh/anemone target=_blank>anemone</a> theme & <a rel="noopener noreferrer" href=https://github.com/Speyll/veqev target=_blank>veqev</a> colors.<br></div><div class=footRight><a href=https://wobble.town/visit/528 target=_blank><img class="footGif noStyle" alt=footGif loading=lazy src=https://wobble.town/visit/528/wobble.gif></a><a rel="noopener noreferrer" title="Subscribe via RSS for updates." class=metaData href=https://birabittoh.github.io/atom.xml target=_blank>RSS</a></div></div></footer></div>
A blog/page/1/index.html

@@ -0,0 +1,1 @@

+<!doctype html><meta charset=utf-8><link href=https://birabittoh.github.io/blog/ rel=canonical><meta content="0; url=https://birabittoh.github.io/blog/" http-equiv=refresh><title>Redirect</title><p><a href=https://birabittoh.github.io/blog/>Click here</a> to be redirected.
A blog/reflector/index.html

@@ -0,0 +1,20 @@

+<!doctype html><html lang=en><head><meta charset=UTF-8><meta content="IE=edge" http-equiv=X-UA-Compatible><meta content="text/html; charset=UTF-8" http-equiv=content-type><meta content="width=device-width,initial-scale=1,user-scalable=no" name=viewport><meta content="index, follow" name=robots><title>Update your mirrors!</title><meta content="Update your mirrors!" name=title><meta content="Tech and privacy ramblings from a random italian dude." name=description><meta content=website property=og:type><meta content=https://birabittoh.github.io/blog/reflector/ property=og:url><meta content=BiRabittoh property=og:site_name><meta content="Update your mirrors!" property=og:title><meta content="Tech and privacy ramblings from a random italian dude." property=og:description><meta content=summary_large_image property=twitter:card><meta content=https://birabittoh.github.io/blog/reflector/ property=twitter:url><meta content="Update your mirrors!" property=twitter:title><meta content="Tech and privacy ramblings from a random italian dude." property=twitter:description><link href=https://birabittoh.github.io/blog/reflector/ rel=canonical><link href=https://birabittoh.github.io/atom.xml rel=alternate title=RSS type=application/atom+xml><link href=https://birabittoh.github.io/css/style.css rel=stylesheet><body><div class=wrapper><header><nav class=navBar><a href=/>/home/</a><a href=/about>/about/</a><a href=/links>/links/</a><a href=/blog>/blog/</a><div class=themeSwitch><button class="themeButton light" onclick="setTheme('light')" title="Light mode">◐</button><button class="themeButton dark" onclick="setTheme('dark')" title="Dark mode">◑</button></div><script>const setTheme=a=>{document.documentElement.className=a;localStorage.setItem(`theme`,a)};const getTheme=()=>{const a=localStorage.getItem(`theme`);const b=a?a:`dark`;setTheme(b)};getTheme()</script></nav><div><a href=..>..</a>/<span class=metaData>reflector</span></div><time datetime=2023-01-29>Published on: <span class=metaData>2023-01-29</span></time><h1>Update your mirrors!</h1></header><main><p>Nah, I’m not talking about <a href=https://www.bathshack.com/blog/bluetooth-mirrors-everything-you-need-to-know-before-you-buy/ rel=noopener target=_blank>bluetooth mirrors</a>. Mirrors are what powers all distros: they’re a (de)centralized solution for downloading pre-compiled binaries and scripts for your operating system.<h2 id=suspicion>Suspicion</h2><p>I like always having the most current version of packages, so I usually update my system several times a day. When, after a day, I ran <code>sudo pacman -Syu</code> and it reported the system being up to date, I was pretty weirded out.<p>Another day passed, and the system was still up to date. It was not a connection problem, I was connecting to my mirrors and they were reporting absolutely zero updates for my system.<h2 id=problem>Problem</h2><p>At the third day of stagnation, I was sure something was up. I looked up the <a href=https://archlinux.org/mirrors/status/ rel=noopener target=_blank>Mirror Status</a> page on ArchLinux’s website and saw that loads of mirrors were out of sync.<p>I had never touched my mirrorlist before, it was just generated by the <a href=https://github.com/archlinux/archinstall rel=noopener target=_blank>archinstall</a> script a few months ago; a lot of Arch-based distros by default ship tools to update your mirrorlist, but I honestly thought I’d never need that.<p>Pacman’s mirrorlist is located in <code>/etc/pacman.d/mirrorlist</code>. You can filter out uncommented lines with this command:<pre><code>grep -v "^#" /etc/pacman.d/mirrorlist +</code></pre><p>And check the actual status of your mirror(s) on the Mirror Status page linked above.<h2 id=solution>Solution</h2><p>This will overwrite your mirrorlist, so you’re advised to make a backup before proceeding:<pre><code>sudo cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak +</code></pre><p>I decided to use <a href=https://xyne.dev/projects/reflector/ rel=noopener target=_blank>reflector</a> to fix this problem. I didn’t want to have to deal with this again, so I enabled the provided systemd timer.<p>First, install it.<pre><code>sudo pacman -S reflector +</code></pre><p>Then, edit <code>/etc/xdg/reflector/reflector.conf</code>. I only needed to edit the <code>--country</code> parameter and select countries next to the one where I reside; you can list available countries by running <code>reflector --list-countries</code>.<pre><code>--save /etc/pacman.d/mirrorlist +--protocol https +--country Italy,Switzerland,France,Germany,Austria +--latest 5 +--sort age +</code></pre><p>Finally, start the service and check if it worked.<pre><code>sudo systemctl start reflector.service +cat /etc/pacman.d/mirrorlist +</code></pre><p>If everything went smoothly, enable reflector’s timer so it runs weekly.<pre><code>sudo systemctl enable reflector.timer +</code></pre><p>Done!<p>Now, by default pacman <em>does</em> update its mirrorlist. It creates a file called <code>mirrorlist.pacnew</code> and it expects you to pick your favorite mirrors each time its generated. You can disable this (now unneeded) behavior by uncommenting and setting <code>NoExtract</code> in <code>/etc/pacman.conf</code>:<pre><code>... +NoExtract = /etc/pacman.d/mirrorlist + +# Misc options +Color +ILoveCandy +ParallelDownloads = 3 +... +</code></pre></main><footer><p class=tagsData><a href=/tags/advice>#advice</a> <a href=/tags/foss>#foss</a><hr><div class=footContainer><div class=footLeft><p>Licensed under <a rel="noopener noreferrer" href=https://fr.wikipedia.org/wiki/Licence_MIT target=_blank>MIT</a><br> Built with <a rel="noopener noreferrer" href=https://www.getzola.org target=_blank>Zola</a> using <a rel="noopener noreferrer" href=https://github.com/BiRabittoh/anemone target=_blank>anemone</a> theme & <a rel="noopener noreferrer" href=https://github.com/Speyll/veqev target=_blank>veqev</a> colors.<br></div><div class=footRight><a href=https://wobble.town/visit/528 target=_blank><img class="footGif noStyle" alt=footGif loading=lazy src=https://wobble.town/visit/528/wobble.gif></a><a rel="noopener noreferrer" title="Subscribe via RSS for updates." class=metaData href=https://birabittoh.github.io/atom.xml target=_blank>RSS</a></div></div></footer></div>
A blog/self-host/index.html

@@ -0,0 +1,27 @@

+<!doctype html><html lang=en><head><meta charset=UTF-8><meta content="IE=edge" http-equiv=X-UA-Compatible><meta content="text/html; charset=UTF-8" http-equiv=content-type><meta content="width=device-width,initial-scale=1,user-scalable=no" name=viewport><meta content="index, follow" name=robots><title>Self-hosting Extravaganza</title><meta content="Self-hosting Extravaganza" name=title><meta content="Tech and privacy ramblings from a random italian dude." name=description><meta content=website property=og:type><meta content=https://birabittoh.github.io/blog/self-host/ property=og:url><meta content=BiRabittoh property=og:site_name><meta content="Self-hosting Extravaganza" property=og:title><meta content="Tech and privacy ramblings from a random italian dude." property=og:description><meta content=summary_large_image property=twitter:card><meta content=https://birabittoh.github.io/blog/self-host/ property=twitter:url><meta content="Self-hosting Extravaganza" property=twitter:title><meta content="Tech and privacy ramblings from a random italian dude." property=twitter:description><link href=https://birabittoh.github.io/blog/self-host/ rel=canonical><link href=https://birabittoh.github.io/atom.xml rel=alternate title=RSS type=application/atom+xml><link href=https://birabittoh.github.io/css/style.css rel=stylesheet><body><div class=wrapper><header><nav class=navBar><a href=/>/home/</a><a href=/about>/about/</a><a href=/links>/links/</a><a href=/blog>/blog/</a><div class=themeSwitch><button class="themeButton light" onclick="setTheme('light')" title="Light mode">◐</button><button class="themeButton dark" onclick="setTheme('dark')" title="Dark mode">◑</button></div><script>const setTheme=a=>{document.documentElement.className=a;localStorage.setItem(`theme`,a)};const getTheme=()=>{const a=localStorage.getItem(`theme`);const b=a?a:`dark`;setTheme(b)};getTheme()</script></nav><div><a href=..>..</a>/<span class=metaData>self-host</span></div><time datetime=2023-07-16>Published on: <span class=metaData>2023-07-16</span></time><h1>Self-hosting Extravaganza</h1></header><main><p>Lately, more and more companies are putting their services behind paywalls, usage limits and closed APIs. Some examples are <a href=https://nitter.it/elonmusk/status/1675187969420828672 rel=noopener target=_blank>Twitter</a> limiting the number of tweets a non-paying user can read, <a href=https://www.redditinc.com/blog/2023apiupdates rel=noopener target=_blank>Reddit</a> increasing their API price to an extent that’s unbearable for any normal individual and <a href=https://libreddit.kavin.rocks/r/youtube/comments/14kmd07/youtube_cracking_down_on_if_youre_not_paying_them/ rel=noopener target=_blank>YouTube</a> starting to block their service towards anyone using an adblock extension.<h2 id=there-must-be-a-better-way>There must be a better way</h2><p>Luckily, I’ve been interested in <a href=https://github.com/mendel5/alternative-front-ends rel=noopener target=_blank>alternative front-ends</a> for a while. These services allow you to get the same (or better) functionality as their corporate counterpart without giving away any of your information in return. Some of these even offer their own free APIs.<p>Here’s my favorite instances with respect to the service they provide:<table><thead><tr><th>Service<th>PC<th>Mobile<tbody><tr><td>YouTube<td><a href=https://y.com.sb/ rel=noopener target=_blank>Invidious</a><td><a href=https://apt.izzysoft.de/fdroid/index/apk/org.polymorphicshade.newpipe rel=noopener target=_blank>NewPipe</a><tr><td>Twitter<td><a href=https://nitter.it rel=noopener target=_blank>Nitter</a><td><a href=https://apt.izzysoft.de/fdroid/index/apk/org.ca.squawker rel=noopener target=_blank>Squawker</a><tr><td>Reddit<td><a href=https://libreddit.kavin.rocks rel=noopener target=_blank>LibReddit</a><td><a href=https://libreddit.kavin.rocks rel=noopener target=_blank>LibReddit</a><tr><td>Medium<td><a href=https://scribe.rip rel=noopener target=_blank>Scribe</a><td><a href=https://scribe.rip/ rel=noopener target=_blank>Scribe</a></table><h2 id=drawbacks>Drawbacks</h2><p>Of course, this is not a perfect solution. There are a lot of problems to be discussed.<h3 id=privacy>Privacy</h3><p>First and foremost, these instances do not make any profit. This is not a problem until you really think about it. Can you really trust a random developer offering a (paid) service for thousands of users out of their own kindness? The answer is “probably yes”, but are you willing to take this risk?<p>Instance admins could easily edit the upstream source code to make it so they can track their users indefinetly and sell usage data without them even realizing. This is a given if you use any “normal” (not self-hosted) service, but the difference is big companies are <em>required</em> by GDPR to protect collected user data in a certain way and keep them for a maximum set amount of time.<p>The same cannot be assured for individuals who apparently don’t even make a profit for what they’re doing.<h3 id=scaling>Scaling</h3><p>This buzzword has become a meme in the programming world, but it’s been shown how important it is to consider when dealing with large userbases that can grow exponentially without any warning.<p>Think about the amount of users who migrated to Mastodon immediately after Elon Musk acquired Twitter. Instance admins were used to having a couple hundred users, so hundred of thousands of new signups made a lot of popular instances slow down or even temporarily shut down while they migrated to new (and more expensive) hardware.<p>Anything public you use can be subject to this phenomenon, leading to poor user experience, as you’ll be one of the many people wondering why your feed takes one minute to load.<h2 id=fine-i-ll-do-it-myself>Fine, I’ll do it myself</h2><p>Since joining the world of minimalism, I had always considered Docker as a bloated way to run multiple virtual machines. I read about people complaining that even simple Python scripts were providing <code>Dockerfile</code> and <code>docker-compose.yml</code> files and I started seeing it as a bloaty way to achieve the same result.<p>Whenever I wanted to host anything by myself, I used to SSH into my VPS with password authentication (!!!) and expose a public port for each service (!!!). I used my public IP address to log into my services, so I had to resort to sending cleartext passwords through HTTP (!!!) since TLS was not an option.<p>Of course, this is possibly the most insecure way to host services on a public server, but I felt that was “secure enough” and nobody would ever be interested in hacking me (!!! × ∞).<p>Nonetheless, I used to <code>cat /var/log/auth.log</code> to see all the failed login attempts, and pray that nobody actually got my password right. Nowadays, I look back and laugh at my previous config; at least I’m (almost) sure that nobody actually managed to get in.<h2 id=the-right-way>The right way</h2><p>Since I started my new job, I also began experimenting with Docker and found out it’s not as bad as I thought it’d be. I will now let my previous config serve as the perfect example of how NOT to secure your VPS correctly for any self-hosting configuration.<h3 id=ditch-password-authentication>Ditch password authentication</h3><p>First of all, password authentication. You’ll be a lot safer as soon as you disable it.<p>Having it enabled means you’re vulnerable to dictionary and bruteforce attacks. Also, if some new vulnerability is published, the password field is one more way the attacker could send a malicious string to get inside (see <a href=https://scribe.rip/geekculture/the-log4j-incident-explained-ed0ce6d36df2 rel=noopener target=_blank>the log4j incident</a>).<p>A better way of logging into your VPS is through public key authentication.<p>First, generate a key on your own PC:<pre><code>ssh-keygen -t ed25519 -a 100 +</code></pre><p>This will create two files: <code>~/.ssh/id_ed25519.pub</code> and <code>~/.ssh/id_ed25519</code><p>Now, use the following command to copy your key over to the VPS:<pre><code>ssh-copy-id -i ~/.ssh/id_ed25519 &LTuser>@&LThost> +</code></pre><p>At this point, if everything went correctly, just add or change the following line in <code>/etc/ssh/sshd_config</code>:<pre><code>PasswordAuthentication no +</code></pre><p>At this point, you should be able to log into your VPS without the need to input your password, which is more secure as well as more convenient.<p>I keep the content of my public and private ssh key files saved as secure notes in my BitWarden account, so I can take them to any PC I want to access my VPS from. People say this is bad practice (you should only have a key for each host), but I personally feel like it’s not that big of a deal compared to the security mess I had going on before.<h3 id=containerize-your-applications>Containerize your applications</h3><p>Now that you have a safe way to SSH into your machine, you can start hosting your own services.<p>First, some terminology:<ul><li><code>Dockerfile</code> files are like a list of ingredients. They contain every dependency needed to build a minimal operating system dedicated to running a program. They’re used to build images.<li><code>Images</code> are like recipes. You can create some yourself from a Dockerfile or download them from an external repository. They can be instantiated as containers.<li><code>Containers</code> are like courses. You can instantiate multiple equal courses from the same image and you can actually eat (use) them! They can be managed through <code>docker-compose</code>.<li><code>docker-compose.yml</code> files are like menus. They’re a convenient way to instantiate and deinstantiate multiple containers in a specific and reproducible configuration. If you’re not a developer, you’ll be mainly working on these files.</ul><p>To get started with Docker, install <code>docker</code> and <code>docker-compose</code> via your package manager of choice. If you want an easy start, you can follow <a href=https://docs.invidious.io/installation/#docker-compose-method-production rel=noopener target=_blank>this guide</a> to host our own Invidious instance.<p>It’s not that hard, but you might need to read the official <a href=https://docs.docker.com/compose/ rel=noopener target=_blank>Docker Compose documentation</a> if something doesn’t go as planned.<p>My advice is to generate an <code>hmac_key</code> using <code>pwgen 20 1</code> or <code>openssl rand -hex 20</code> and insert it in the correct spot inside <code>docker-compose.yml</code>.<p>Also, remove the <code>127.0.0.1:</code> part in the <code>ports</code> section since we don’t have a reverse proxy set up (yet).<p>After you’re done configuring, you can type <code>docker-compose up -d</code> to pull all required images and instantiate your containers, and <code>docker-compose down</code> if you want to stop and remove everything.<h3 id=use-a-reverse-proxy>Use a reverse proxy</h3><p>If you’ve followed that guide correctly, you should now have two containers that communicate through a network. You can find out their names by running <code>docker ps -a</code>. Take note of the name of your main invidious container, which will be referred as <code>invidious</code> for the rest of this guide.<p>Problem is, you’re still using an IP address and communicating in cleartext through HTTP! This means your ISP can read every single detail in every single request you make.<p>Luckily, there is a way to get a cool domain name for free that also happens to include free and auto-generated TLS certificates.<p>First, create an account on <a href=https://www.duckdns.org/ rel=noopener target=_blank>DuckDNS</a> and set up a free domain.<p>Just make a new directory near the one you used for Invidious and create a new <code>docker-compose.yml</code>:<pre><code>mkdir swag +cd swag +nano docker-compose.yml +</code></pre><p>You can paste and edit accordingly the lines in <a href=https://docs.linuxserver.io/general/swag#creating-a-swag-container rel=noopener target=_blank>this guide</a>.<p>For example, instead of <code>DNSPLUGIN=cloudflare</code> you should have <code>DNSPLUGIN=duckdns</code>.<p>When you’re done, start your container with <code>docker-compose up -d</code>. This will create the config folder in <code>/etc/config/swag</code> as well as a new network called <code>swag_default</code>.<p>Now we need to create a custom subdomain for Invidious. You can do it by creating the following file: <code>/etc/config/swag/nginx/proxy-confs/invidious.subdomain.conf</code> with this content:<pre><code>server { + listen 443 ssl http2; + listen [::]:443 ssl http2; + + server_name y.*; + + include /config/nginx/ssl.conf; + + client_max_body_size 0; + + location / { + include /config/nginx/proxy.conf; + include /config/nginx/resolver.conf; + set $upstream_app invidious; + set $upstream_port 3000; + set $upstream_proto http; + proxy_pass $upstream_proto://$upstream_app:$upstream_port; + } +} +</code></pre><p>Where:<ul><li><code>server_name yt.*</code>: <code>yt</code> is the subdomain of choice;<li><code>set $upstream_app invidious;</code>: <code>invidious</code> is the name of the main Invidious container;<li><code>set $upstream_port 3000;</code>: <code>3000</code> is the Invidious port.</ul><p>There’s one last step remaining. Invidious and Swag are two separate containers, so they cannot communicate unless they’re connected to the same network. You can connect Invidious to Swag’s network with the following command, where <code>invidious</code> is the name of your main Invidious container.<pre><code>docker network connect swag_default invidious +</code></pre><p>Finally, you can visit https://yt.&LTyour-domain>.duckdns.org/ and check if you can access Invidious through HTTPS.<p>Note: now that you have a reverse proxy set up, you can remove your <code>ports:</code> section entirely from Invidious’ <code>docker-compose.yml</code>. You can do this because the containers are communicating internally to the <code>swag_default</code> network, without the need to expose any ports to the outside. After you’re done, remember to reload your configuration by running <code>docker-compose restart</code> in your Invidious folder.<p>Ideally, the only container with exposed ports in your VPS should be Swag exposing ports 80 (HTTP) and 443 (HTTPS).<h2 id=conclusion>Conclusion</h2><p>Self-hosting is not easy. It’s been my <a href=https://wiki.froth.zone/wiki/Camino_de_Santiago rel=noopener target=_blank>Camino de Santiago</a>: a long path of redemption for the sins I have committed in my young age. Even if I made a lot of mistakes, in the end I’ve learned a lot about dev-ops and cybersecurity, as well as precious skills that proved themselves useful for my engineering job.<p>You can find a full list of self-hostable services <a href=https://github.com/awesome-selfhosted/awesome-selfhosted rel=noopener target=_blank>here</a>!</main><footer><p class=tagsData><a href=/tags/advice>#advice</a> <a href=/tags/foss>#foss</a> <a href=/tags/privacy>#privacy</a><hr><div class=footContainer><div class=footLeft><p>Licensed under <a rel="noopener noreferrer" href=https://fr.wikipedia.org/wiki/Licence_MIT target=_blank>MIT</a><br> Built with <a rel="noopener noreferrer" href=https://www.getzola.org target=_blank>Zola</a> using <a rel="noopener noreferrer" href=https://github.com/BiRabittoh/anemone target=_blank>anemone</a> theme & <a rel="noopener noreferrer" href=https://github.com/Speyll/veqev target=_blank>veqev</a> colors.<br></div><div class=footRight><a href=https://wobble.town/visit/528 target=_blank><img class="footGif noStyle" alt=footGif loading=lazy src=https://wobble.town/visit/528/wobble.gif></a><a rel="noopener noreferrer" title="Subscribe via RSS for updates." class=metaData href=https://birabittoh.github.io/atom.xml target=_blank>RSS</a></div></div></footer></div>
A blog/void-xfce/index.html

@@ -0,0 +1,24 @@

+<!doctype html><html lang=en><head><meta charset=UTF-8><meta content="IE=edge" http-equiv=X-UA-Compatible><meta content="text/html; charset=UTF-8" http-equiv=content-type><meta content="width=device-width,initial-scale=1,user-scalable=no" name=viewport><meta content="index, follow" name=robots><title>Modernizing XFCE</title><meta content="Modernizing XFCE" name=title><meta content="Tech and privacy ramblings from a random italian dude." name=description><meta content=website property=og:type><meta content=https://birabittoh.github.io/blog/void-xfce/ property=og:url><meta content=BiRabittoh property=og:site_name><meta content="Modernizing XFCE" property=og:title><meta content="Tech and privacy ramblings from a random italian dude." property=og:description><meta content=summary_large_image property=twitter:card><meta content=https://birabittoh.github.io/blog/void-xfce/ property=twitter:url><meta content="Modernizing XFCE" property=twitter:title><meta content="Tech and privacy ramblings from a random italian dude." property=twitter:description><link href=https://birabittoh.github.io/blog/void-xfce/ rel=canonical><link href=https://birabittoh.github.io/atom.xml rel=alternate title=RSS type=application/atom+xml><link href=https://birabittoh.github.io/css/style.css rel=stylesheet><body><div class=wrapper><header><nav class=navBar><a href=/>/home/</a><a href=/about>/about/</a><a href=/links>/links/</a><a href=/blog>/blog/</a><div class=themeSwitch><button class="themeButton light" onclick="setTheme('light')" title="Light mode">◐</button><button class="themeButton dark" onclick="setTheme('dark')" title="Dark mode">◑</button></div><script>const setTheme=a=>{document.documentElement.className=a;localStorage.setItem(`theme`,a)};const getTheme=()=>{const a=localStorage.getItem(`theme`);const b=a?a:`dark`;setTheme(b)};getTheme()</script></nav><div><a href=..>..</a>/<span class=metaData>void-xfce</span></div><time datetime=2023-02-05>Published on: <span class=metaData>2023-02-05</span></time><h1>Modernizing XFCE</h1></header><main><p>This article is more of a memo for myself. Since I often re-install Linux systems, I spend a lot of time doing repetitive tasks and often forget some steps, which leads me to waste even more time figuring out what’s wrong.<p>These instructions allow you to get a fully functional and modern-looking XFCE desktop on a fresh install of <a href=https://voidlinux.org/ rel=noopener target=_blank>Void Linux</a> (even though they can be adapted to work in any distro).<h2 id=initial-system-update>Initial system update</h2><p>First thing I tried was to update the system, but the ISO was quite old. I had to update <code>xbps</code> before anything else:<pre><code>sudo xbps-install -Su xbps +sudo xbps-install -Su +</code></pre><h2 id=avoid-session-saving>Avoid session saving</h2><p>One thing I hate about XFCE is its fixation to save sessions. A lot of times I get my session saved and restored even with all settings turned off.<p>A quick and easy solution to disable session saving entirely is just to create an empty file in place of the <code>sessions</code> directory.<pre><code>rm ~/.cache/sessions -rf +touch ~/.cache/sessions +</code></pre><p>This way, even with everything turned on, XFCE fails create a folder with that name and everything works (or doesn’t, in this case) like a charm.<h2 id=change-that-shell>Change that shell</h2><p>Your shell is the main tool you use to communicate with your system, so it makes sense to replace <code>bash</code> with something more modern and feature-rich.<pre><code>sudo xbps-install -S zsh zsh-completions curl +chsh -s /bin/zsh +zsh +curl -fsSL https://raw.githubusercontent.com/zimfw/install/master/install.zsh | zsh +</code></pre><h2 id=get-some-good-sound-quality>Get some good sound quality</h2><p>I don’t like <code>pulseaudio</code>. Let’s replace it with <code>pipewire</code> and <code>wireplumber</code>.<pre><code>su +xbps-install pipewire wireplumber +mkdir -p /etc/pipewire/pipewire.conf.d +sed '/path.*=.*pipewire-media-session/s/{/#{/' \ +/usr/share/pipewire/pipewire.conf > /etc/pipewire/pipewire.conf +echo 'context.exec = [ { path = "/usr/bin/wireplumber" args = "" } ]' \ +> /etc/pipewire/pipewire.conf.d/10-wireplumber.conf +ln -s /usr/share/applications/pipewire* /etc/xdg/autostart +xbps-remove pulseaudio alsa-plugins-pulseaudio +reboot +</code></pre><h2 id=make-firefox-more-secure>Make Firefox more secure</h2><p>I like Firefox as a browser, but it doesn’t come with sane defaults as far as privacy’s concerned.<p>First, visit <a href=https://ffprofile.com/ rel=noopener target=_blank>Firefox Profilemaker</a> and create a customized <code>profile.zip</code>.<p>Then, extract your zip file to the correct destination:<pre><code>sudo xbps-install zip unzip p7zip xarchiver thunar-archive-plugin +unzip -o ~/Downloads/profile.zip -d ~/.mozilla/firefox/xxxx.default-default/ +</code></pre><p>Some useful extensions I always install are:<ul><li><a href=https://addons.mozilla.org/en-US/firefox/addon/bitwarden-password-manager rel=noopener target=_blank>Bitwarden</a>, a password manager;<li><a href=https://addons.mozilla.org/en-US/firefox/addon/decentraleyes rel=noopener target=_blank>Decentraleyes</a>, to serve common JS libraries locally;<li><a href=https://addons.mozilla.org/en-US/firefox/addon/istilldontcareaboutcookies rel=noopener target=_blank>I still don’t care about cookies</a>, to hide and auto-reject cookie warnings;<li><a href=https://addons.mozilla.org/en-US/firefox/addon/libredirect rel=noopener target=_blank>LibRedirect</a>, a redirector for <a href=https://github.com/mendel5/alternative-front-ends rel=noopener target=_blank>alternative front-ends</a>;<li><a href=https://addons.mozilla.org/en-US/firefox/addon/sponsorblock rel=noopener target=_blank>SponsorBlock</a>, to skip YouTube sponsorships automagically;<li><a href=https://addons.mozilla.org/en-US/firefox/addon/ublock-origin rel=noopener target=_blank>uBlock Origin</a>, the best ad-blocker.</ul><h2 id=customize-your-de>Customize your DE</h2><p>Install the last required packages for desktop usability:<pre><code>sudo xbps-install -S vpm xfce4-whiskermenu-plugin xfce4-clipman-plugin \ +xfce4-pulseaudio-plugin xfce4-screenshooter xclip micro neovim mpv yt-dlp +</code></pre><p>Remove orphaned and cached packages:<pre><code>sudo xbps-remove -Oo +</code></pre><p>Now, open XFCE’s Settings Manager and set the following options:<ul><li>Appearance → Style → Choose “Adwaita-dark”<li>Desktop → Background → <em>&LTChoose your favorite wallpaper></em><li>Desktop → Icons → Set “Icon type” to “None”<li>Panel → <em>&LTCustomize your panels></em><li>Screensaver → Disable “Enable Screensaver”<li>Text Editor Settings → Enable: <ul><li>“Show line numbers”,<li>“Highlight matching brackets”,<li>“Wrap long lines”</ul><li>Window Manager → Style → Button layout → Remove “Shade” button from title bar<li>Window Manager → Advanced → Windows snapping → Enable “To other windows”<li>Window Manager → Advanced → Wrap workspaces when reaching the screen edge → Disable “With a dragged window”<li>Window Manager Tweaks → Cycling → Enable: <ul><li>“Cycle through minimized windows in most recently used order”,<li>“Cycle through windows on all workspaces”,<li>“Raise windows while cycling”</ul><li>Window Manager Tweaks → Accessibility → Disable: <ul><li>“Raise windows when any mouse button is pressed”,<li>“Use mouse wheel on title bar to roll up the window”</ul><li>Window Manager Tweaks → Accessibility → Enable “Notify of urgency by making window’s decoration blink”<li>Window Manager Tweaks → Compositor → Enable “Show shadows under popup windows”<li>Xfce Terminal Settings → General → Scrolling → Set “Scrollbar is” to “Disabled”<li>Xfce Terminal Settings → Appearance → <ul><li>enable “Use system font”,<li>set “Background” to “Transparent background”,<li>set Opacity to 0.80;</ul><li>Xfce Terminal Settings → Colors → Presets → Choose “Tango”<li>Keyboard → Behavior → Enable “Restore num lock state on startup”</ul><h2 id=shortcuts>Shortcuts</h2><p>Finally, set the following shortcuts:<ul><li>Keyboard → Application Shortcuts</ul><table><thead><tr><th>Command<th>Shortcut<tbody><tr><td><code>exo-open --launch TerminalEmulator</code><td><code>Super</code> + <code>Return</code><tr><td><code>xfce4-popup-whiskermenu</code><td><code>Super</code><tr><td><code>xfce4-screenshooter --clipboard --region</code><td><code>Shift</code> + <code>Super</code> + <code>S</code><tr><td><code>xfce4-screenshooter --clipboard --window</code><td><code>Super</code> + <code>S</code><tr><td><code>xfce4-screenshooter --clipboard --fullscreen</code><td><code>Print</code><tr><td><code>sh -c 'xclip -selection clipboard -t image/png -o > "$HOME/Pictures/$(date +%Y-%m-%d_%T).png"'</code><td><code>Shift</code> + <code>Super</code> + <code>V</code><tr><td><code>xflock4</code><td><code>Super</code> + <code>L</code><tr><td><code>loginctl suspend</code><td><code>Shift</code> + <code>Super</code> + <code>L</code></table></main><footer><p class=tagsData><a href=/tags/advice>#advice</a> <a href=/tags/foss>#foss</a><hr><div class=footContainer><div class=footLeft><p>Licensed under <a rel="noopener noreferrer" href=https://fr.wikipedia.org/wiki/Licence_MIT target=_blank>MIT</a><br> Built with <a rel="noopener noreferrer" href=https://www.getzola.org target=_blank>Zola</a> using <a rel="noopener noreferrer" href=https://github.com/BiRabittoh/anemone target=_blank>anemone</a> theme & <a rel="noopener noreferrer" href=https://github.com/Speyll/veqev target=_blank>veqev</a> colors.<br></div><div class=footRight><a href=https://wobble.town/visit/528 target=_blank><img class="footGif noStyle" alt=footGif loading=lazy src=https://wobble.town/visit/528/wobble.gif></a><a rel="noopener noreferrer" title="Subscribe via RSS for updates." class=metaData href=https://birabittoh.github.io/atom.xml target=_blank>RSS</a></div></div></footer></div>
A blog/you-should-use-linux/index.html

@@ -0,0 +1,2 @@

+<!doctype html><html lang=en><head><meta charset=UTF-8><meta content="IE=edge" http-equiv=X-UA-Compatible><meta content="text/html; charset=UTF-8" http-equiv=content-type><meta content="width=device-width,initial-scale=1,user-scalable=no" name=viewport><meta content="index, follow" name=robots><title>You should probably use Linux</title><meta content="You should probably use Linux" name=title><meta content="Tech and privacy ramblings from a random italian dude." name=description><meta content=website property=og:type><meta content=https://birabittoh.github.io/blog/you-should-use-linux/ property=og:url><meta content=BiRabittoh property=og:site_name><meta content="You should probably use Linux" property=og:title><meta content="Tech and privacy ramblings from a random italian dude." property=og:description><meta content=summary_large_image property=twitter:card><meta content=https://birabittoh.github.io/blog/you-should-use-linux/ property=twitter:url><meta content="You should probably use Linux" property=twitter:title><meta content="Tech and privacy ramblings from a random italian dude." property=twitter:description><link href=https://birabittoh.github.io/blog/you-should-use-linux/ rel=canonical><link href=https://birabittoh.github.io/atom.xml rel=alternate title=RSS type=application/atom+xml><link href=https://birabittoh.github.io/css/style.css rel=stylesheet><body><div class=wrapper><header><nav class=navBar><a href=/>/home/</a><a href=/about>/about/</a><a href=/links>/links/</a><a href=/blog>/blog/</a><div class=themeSwitch><button class="themeButton light" onclick="setTheme('light')" title="Light mode">◐</button><button class="themeButton dark" onclick="setTheme('dark')" title="Dark mode">◑</button></div><script>const setTheme=a=>{document.documentElement.className=a;localStorage.setItem(`theme`,a)};const getTheme=()=>{const a=localStorage.getItem(`theme`);const b=a?a:`dark`;setTheme(b)};getTheme()</script></nav><div><a href=..>..</a>/<span class=metaData>you-should-use-linux</span></div><time datetime=2021-04-29>Published on: <span class=metaData>2021-04-29</span></time><h1>You should probably use Linux</h1></header><main><h2 id=why-are-you-writing-this>Why are you writing this?</h2><p>As you probably know, I like using free software (free as in <em>freedom</em>, not free of charge). Most people see users with this mentality as a group of paranoid psychopaths who circlejerk about their custom systems. While that’s in part true, there’s much more to it.<p>I often get asked by Windows or MacOS users about why they should think about switching to a GNU/Linux OS (which I’ll be referring to as Linux); I’m just going to address everything here so I don’t have to repeat it to everyone who asks.<p>I’ll try to address every aspect where Linux is objectively better than the competition, then look at some reasons you <em>could</em> have to stick to Windows or, like I did, set up a dual boot.<h2 id=what-is-free-software>What is free software?</h2><p>First of all, let’s read the official definition for it.<blockquote><p>A program is free software if the program’s users have the four essential freedoms: 0. The freedom to run the program as you wish, for any purpose.<ol><li>The freedom to study how the program works, and change it so it does your computing as you wish.<li>The freedom to redistribute copies so you can help others.<li>The freedom to distribute copies of your modified versions to others. By doing this you can give the whole community a chance to benefit from your changes. A program is free software if it gives users adequately all of these freedoms.</ol></blockquote><p>Source: <a href=https://www.gnu.org/philosophy/free-sw.en.html rel=noopener target=_blank>Free Software Foundation</a>.<p>Let’s examine how this freedom is beneficial.<h3 id=linux-is-open>Linux is open</h3><p>Using free software on an open source OS means you always know what’s going on with your PC; if you get curious or have any suspects you can always read the source code (or trust that somebody already did it in your place).<p>The good thing about Linux is that it doesn’t hide anything from you. Whenever there’s a problem, you can read various logfiles (with different levels of detail) to identify and troubleshoot your problem; it’s also easier to fix problems since you actually know what each program and file does, while troubleshooting in closed-source OSes is like trying to fix a car engine without being able to open the hood.<p>Some distros, like <a href=https://archlinux.org/ rel=noopener target=_blank>Arch Linux</a>, require you to set everything up from scratch; this means you always know exactly which programs you’re installing and their exact function inside the Linux environment. I would only advise this kind of installation to advanced users, but after you do it the first time you’ll certainly learn a lot about how a Linux OS actually works.<h3 id=linux-is-secure>Linux is secure</h3><p>Every single FOSS-oriented website makes this point, I’m just going to re-iterate it just to be sure. The source code being publicly available doesn’t make software less secure. In fact, it’s way more secure since more people can work on it and fix security flaws. <a href=https://en.wikipedia.org/wiki/Security_through_obscurity rel=noopener target=_blank>Security through obscurity</a> just doesn’t work. You can see that by looking at the number of security breaches that are found every day on closed-source software.<p>If you make your software closed-source you’re basically betting you and your small team are able to create a better and more secure code than every single other person in the planet. Of course, this assumption is stupid and irrealistic, that’s why FOSS software will always be faster and more secure than closed-source alternatives.<p>This goes for every kind of software, including the very operating system code. GNU/Linux based operating systems are the most secure choice for every kind of user. More often than not, you can trust the software programmers without even reading the code yourself: since they’re sharing every single line of code, they probably don’t have anything to hide. If they do include malicious code, someone else will probably have noticed by now, provided you didn’t build and run that software straight from the repo a few minutes after the last commit lol<p>You can also be safe against external attackers. Linux’s <a href=https://gs.statcounter.com/os-market-share/desktop/worldwide/#monthly-202012-202012-bar rel=noopener target=_blank>market share</a> on desktop and laptop PCs was less than 2% as of January 2021, and those people are probably much more tech-savy than the other OSes’ users… This means attackers will likely target Windows or OS X users, so you can be safe even without using an antivirus or anything similar (even though there <em>are</em> <a href=https://www.clamav.net/ rel=noopener target=_blank>choices</a> for that, too).<h3 id=linux-is-smarter>Linux is smarter</h3><p>Saying that Linux is for <em>everybody</em> would be a risky take. My point is that you <em>probably</em> could benefit from using a Linux system.<p>If you’re a programmer, Linux is objectively the best OS you can use. As a programmer, I love using the terminal to do stuff more quickly. I also love the level of integration you can have with the system: a lot of programs are designed with a client/server model, which makes them work in complex scenarios as long as you have the time and patience to configure them properly.<p>While Windows still has to retain compatibility with legacy systems, Linux is much more free to do its own thing. Linux will always be smarter and more modern. Just think about the filesystem structure. Windows is forced to retain a confusing structure, where you have a ton of (not) hidden folders where programmers can store their necessary data… But there are so many choices and they’re not coherent! If I wanted to create a backup of all my settings and save files, I would have to copy all of these folders:<pre><code>C:\ProgramData; C:\Users\username\AppData; C:\Users\username\Documents\my games; +</code></pre><p>And I would still miss all of the informations saved on the awful Windows Registry…<p>On Linux, you just copy the .config folder in your home directory.<p>Moreover, in Windows 10 you have two ways of editing system settings: the Control Panel and the Windows Settings. But sometimes editing a setting on one side does NOT reflect on the other! Windows is literally the most confusing OS you can start with… And people still recommend it to beginners over Linux. It’s just dumb.<h3 id=linux-is-versatile>Linux is versatile</h3><p>Now, to the point everybody’s been waiting for. Yes, none of the Adobe programs will run <em>natively</em> on any Linux distro. That means if you’re a creative person and you need those programs on a daily basis, maybe you should consider dual booting…<p>BUT, steps are being made in two different directions:<ul><li>Valve is working on Proton, which allows the execution of most Windows-only applications and games on any Linux system.<li>More and more open-source alternatives to closed-source standards are being developed by the day.</ul><p>While Proton is interesting, I always prefer to run open source software, especially if we’re talking about programs that are also free of charge: imagine trusting a closed-source software you didn’t pay for.<h2 id=conclusion>Conclusion</h2><p>Ok, now I’m getting repetitive so I’ll just get to the point. Linux is constantly evolving and it has now become the top choice for a lot of people, so let’s try and consider every use case.<ul><li>If you’re a professional that’s deep in the industry and you need some <em>specific</em> program to run perfectly on your device… Yeah, you should use Windows.<li>If you’re a power user that’s just used to paid software, maybe consider trying out some open source alternative?<li>If you’re a gamer, I say you should dual boot. I have a Windows 10 LTSC installation that I use <em>exclusively</em> for gaming. While Proton has made Linux gaming feasable, the experience isn’t always the best, especially if you play games that require millisecond-grade accuracy, like rhythm games or competitive shooters.<li>If you’re a student or employee, Linux would be perfect for you. You can quickly take notes and do office work without the annoying Windows 10 updates popping up and rebooting your system seemingly at random. Also, any Linux system will probably be more light on resource usage than Windows, so you could take some old hardware you thought would never be using again and actually make something useful with it.<li>If you work in the programming or engineering field, then what are you waiting for? You should try out a Linux OS as soon as possible, and not in a virtual machine. A lot of my friends said they didn’t like Linux because it felt slow… While running on a VM… Duh? Try it out on real hardware so you can feel its superiority.</ul><p>Well, I can’t possibly cover <em>every</em> profession and use-case, but I hope I was clear about those I managed to list above. I’m going to conclude this article with some interesting links about Linux and FOSS you definitely should check out.<ul><li><a href=https://islinuxabout.xyz/ rel=noopener target=_blank>Is Linux About…?</a><li><a href=https://usermod.net/why-use-linux/ rel=noopener target=_blank>usermod.net - Why use Linux?</a></ul></main><footer><p class=tagsData><a href=/tags/advice>#advice</a> <a href=/tags/foss>#foss</a> <a href=/tags/privacy>#privacy</a><hr><div class=footContainer><div class=footLeft><p>Licensed under <a rel="noopener noreferrer" href=https://fr.wikipedia.org/wiki/Licence_MIT target=_blank>MIT</a><br> Built with <a rel="noopener noreferrer" href=https://www.getzola.org target=_blank>Zola</a> using <a rel="noopener noreferrer" href=https://github.com/BiRabittoh/anemone target=_blank>anemone</a> theme & <a rel="noopener noreferrer" href=https://github.com/Speyll/veqev target=_blank>veqev</a> colors.<br></div><div class=footRight><a href=https://wobble.town/visit/528 target=_blank><img class="footGif noStyle" alt=footGif loading=lazy src=https://wobble.town/visit/528/wobble.gif></a><a rel="noopener noreferrer" title="Subscribe via RSS for updates." class=metaData href=https://birabittoh.github.io/atom.xml target=_blank>RSS</a></div></div></footer></div>
A css/style.css

@@ -0,0 +1,327 @@

+:root, +:root.light { + --bgColor: #EEEEEE; + --fgColor: #41474E; + --metaColor: #D26878; + --headColor: #; + --linkColor: #5690AF; + --hovColor: #22453F; + --bgSelect: #FFFAE1; + --bgUrl: url(https://i.ibb.co/Qpkrw4V/tile-Light.webp) repeat; + --red: #D26878; + --dimRed: #623039; + --orange: #e08f67; + --dimOrange: #926048; + --yellow: #FFFAE1; + --dimYellow: #D5C5A1; + --green: #56AFA0; + --dimGreen: #22453F; + --blue: #5690AF; + --dimBlue: #223844; + --purple: #9271D6; + --dimPurple: #47356C; + --grey: #CBCDCD; + --dimGrey: #646868 +} + +:root.dark { + --bgColor: #222529; + --fgColor: #D6D6D6; + --metaColor: #78B6AD; + --headColor: #; + --linkColor: #DBD5BC; + --hovColor: #E2AEA2; + --bgSelect: #464949; + --bgUrl: url(https://i.ibb.co/LzrFBFJ/tileDark.webp) repeat; + --red: #CD909B; + --dimRed: #684249; + --orange: #E2AEA2; + --dimOrange: #704941; + --yellow: #DBD5BC; + --dimYellow: #6F6847; + --green: #78B6AD; + --dimGreen: #3E615C; + --blue: #87C9E5; + --dimBlue: #38494F; + --purple: #CEA7DE; + --dimPurple: #5E406A; + --grey: #CBCDCD; + --dimGrey: #464949 +} + +::-moz-selection { + color: var(--bgColor); + background: var(--metaColor) +} + +::selection { + color: var(--bgColor); + background: var(--metaColor) +} + +html { + -webkit-box-sizing: border-box; + box-sizing: border-box; + font-size: 62.5% +} + +body { + font-family: monospace; + font-size: 1.6rem; + line-height: 1.35; + max-width: 64rem; + margin: auto; + padding: 1rem; + overflow-wrap: break-word; + background: var(--bgColor); + color: var(--fgColor); +} + +h1 { + font-size: 2.4rem; + margin: 1rem 1rem 1.5rem 0; + color: var(--bgColor); + background-color: var(--metaColor); + text-align: center; +} + +h1::before { + color: var(--bgColor); + content: '# ' +} + +h2::before, +h3::before, +h4::before, +h5::before, +h6::before { + color: var(--metaColor); + content: '# ' +} + +a { + color: var(--linkColor); +} + +a:focus, +a:hover { + background-color: var(--linkColor); + color: var(--bgColor) +} + +ul { + list-style: none; + margin-top: .5rem; + margin-bottom: .5rem; + line-height: 1.45 +} + +ul li::marker { + content: '» '; + color: var(--metaColor) +} + +ul li:hover::marker { + content: '# '; + font-weight: 700; + color: var(--linkColor) +} + +blockquote { + border-left: 5px solid var(--metaColor); + margin: 1rem; + padding: 0 0 0 1rem +} + +textarea { + border: 2px dotted; + outline: 0; + resize: none; + overflow: auto; + background-color: var(--bgColor) +} + +hr { + border: 1px dashed +} + +img { + max-width: 90%; + height: auto; + margin: .2rem; + padding: .2rem; + border: dashed 2px var(--metaColor); + border-radius: 15px +} + +pre { + color: var(--bgColor); + background-color: var(--fgColor); +} + +p code, +li code, +div code { + color: var(--bgColor); + background-color: var(--fgColor); +} + +iframe { + max-width: 90%; +} + +table { + table-layout: fixed; + width: 100%; + border-collapse: collapse; + border: none; + margin-left: auto; + margin-right: auto; + margin-bottom: 1rem; + line-height: 1.1 +} + +thead th:first-child { + width: 20% +} + +th { + font-weight: 400 +} + +td, +th { + padding: .5rem; + border: dashed 1px var(--metaColor) +} + +footer { + font-size: 1.4rem; + clear: both; + color: var(--footColor) +} + +footer, +td, +th { + text-align: left +} + +.metaData, +.themeButton, +hr, +textarea { + color: var(--metaColor) +} + +.navBar { + margin: .5rem; + margin-bottom: 1rem; + display: flex; + flex-direction: row; + gap: .4rem; + flex-wrap: wrap; + justify-content: flex-end; + align-items: center; + align-content: flex-end +} + +.themeButton { + cursor: pointer; + border: none; + font-size: 1.8rem; + background-color: transparent +} + +.dark .themeButton.dark, +.themeButton.light { + display: none +} + +.dark .themeButton.light { + display: block +} + +.tagsData { + display: flex; + flex-direction: column; + flex-wrap: wrap; + justify-content: flex-end; + align-items: flex-start; + align-content: flex-end +} + +.footnote-definition { + margin: 0 0 0 2rem; +} +.footnote-definition-label { + color: var(--metaColor); +} +.footnote-definition p { + display: inline; + padding: 0 0 0 1rem; +} + +.footContainer, +.footRight { + display: flex; + align-content: center +} + +.footContainer { + flex-direction: row; + flex-wrap: wrap; + justify-content: space-between; + align-items: flex-start +} + +.footRight { + flex-direction: column; + flex-wrap: wrap; + justify-content: center; + align-items: center +} + +.noStyle { + padding: 0; + margin: 0; + border: none; + border-radius: 0 +} + +.textCenter { + text-align: center; +} + +.floatRight { + float: right +} + +.floatLeft { + float: left +} + +#statuscafe { + border: 2px dashed var(--metaColor); + border-radius: 10px; + margin-bottom: 2rem; + padding: 1.4rem; +} + +#statuscafe-content { + margin-left: 1rem +} + +#statuscafe:focus, +#statuscafe:hover { + transform: scale(1.05); + -webkit-transition: .1s ease-in; + -moz-transition: .1s ease-in; + -o-transition: .1s ease-in; + background: var(--bgSelect) +} + +.tag { + margin-left: 5px; + margin-right: 5px; +}
A cv.pdf

          
A index.html

@@ -0,0 +1,1 @@

+<!doctype html><html lang=en><head><meta charset=UTF-8><meta content="IE=edge" http-equiv=X-UA-Compatible><meta content="text/html; charset=UTF-8" http-equiv=content-type><meta content="width=device-width,initial-scale=1,user-scalable=no" name=viewport><meta content="index, follow" name=robots><title>BiRabittoh</title><meta content=BiRabittoh name=title><meta content="Tech and privacy ramblings from a random italian dude." name=description><meta content=website property=og:type><meta content=https://birabittoh.github.io/ property=og:url><meta content=BiRabittoh property=og:site_name><meta content=BiRabittoh property=og:title><meta content="Tech and privacy ramblings from a random italian dude." property=og:description><meta content=summary_large_image property=twitter:card><meta content=https://birabittoh.github.io/ property=twitter:url><meta content=BiRabittoh property=twitter:title><meta content="Tech and privacy ramblings from a random italian dude." property=twitter:description><link href=https://birabittoh.github.io/ rel=canonical><link href=https://birabittoh.github.io/atom.xml rel=alternate title=RSS type=application/atom+xml><link href=https://birabittoh.github.io/css/style.css rel=stylesheet><body><div class=wrapper><header><nav class=navBar><a href=/>/home/</a><a href=/about>/about/</a><a href=/links>/links/</a><a href=/blog>/blog/</a><div class=themeSwitch><button class="themeButton light" onclick="setTheme('light')" title="Light mode">◐</button><button class="themeButton dark" onclick="setTheme('dark')" title="Dark mode">◑</button></div><script>const setTheme=a=>{document.documentElement.className=a;localStorage.setItem(`theme`,a)};const getTheme=()=>{const a=localStorage.getItem(`theme`);const b=a?a:`dark`;setTheme(b)};getTheme()</script></nav></header><main><img src=/img/wayne.gif style=height:200px;display:block><h2 id=status>Status</h2><div id=statuscafe><div id=statuscafe-username></div><blockquote id=statuscafe-content></blockquote></div><script src="https://status.cafe/current-status.js?name=birabittoh" defer></script><p>My latest pic on piclog.blue:<div><img src="https://piclog.blue/latest.php?id=105" alt=piclog.blue></div><h2 id=contact>Contact</h2><ul><li>Email: <a href=mailto:birabittoh@duck.com>birabittoh[at]duck[dot]com</a><li>Code: <a href=https://github.com/BiRabittoh rel=noopener target=_blank>github</a>, <a href=https://git.birabittoh.duckdns.org rel=noopener target=_blank>mirror</a></ul></main><footer><hr><div class=footContainer><div class=footLeft><p>Licensed under <a rel="noopener noreferrer" href=https://fr.wikipedia.org/wiki/Licence_MIT target=_blank>MIT</a><br> Built with <a rel="noopener noreferrer" href=https://www.getzola.org target=_blank>Zola</a> using <a rel="noopener noreferrer" href=https://github.com/BiRabittoh/anemone target=_blank>anemone</a> theme & <a rel="noopener noreferrer" href=https://github.com/Speyll/veqev target=_blank>veqev</a> colors.<br></div><div class=footRight><a href=https://wobble.town/visit/528 target=_blank><img class="footGif noStyle" alt=footGif loading=lazy src=https://wobble.town/visit/528/wobble.gif></a><a rel="noopener noreferrer" title="Subscribe via RSS for updates." class=metaData href=https://birabittoh.github.io/atom.xml target=_blank>RSS</a></div></div></footer></div>
A links/index.html

@@ -0,0 +1,1 @@

+<!doctype html><html lang=en><head><meta charset=UTF-8><meta content="IE=edge" http-equiv=X-UA-Compatible><meta content="text/html; charset=UTF-8" http-equiv=content-type><meta content="width=device-width,initial-scale=1,user-scalable=no" name=viewport><meta content="index, follow" name=robots><title>Cool stuff and people</title><meta content="Cool stuff and people" name=title><meta content="Tech and privacy ramblings from a random italian dude." name=description><meta content=website property=og:type><meta content=https://birabittoh.github.io/links/ property=og:url><meta content=BiRabittoh property=og:site_name><meta content="Cool stuff and people" property=og:title><meta content="Tech and privacy ramblings from a random italian dude." property=og:description><meta content=summary_large_image property=twitter:card><meta content=https://birabittoh.github.io/links/ property=twitter:url><meta content="Cool stuff and people" property=twitter:title><meta content="Tech and privacy ramblings from a random italian dude." property=twitter:description><link href=https://birabittoh.github.io/links/ rel=canonical><link href=https://birabittoh.github.io/atom.xml rel=alternate title=RSS type=application/atom+xml><link href=https://birabittoh.github.io/css/style.css rel=stylesheet><body><div class=wrapper><header><nav class=navBar><a href=/>/home/</a><a href=/about>/about/</a><a href=/links>/links/</a><a href=/blog>/blog/</a><div class=themeSwitch><button class="themeButton light" onclick="setTheme('light')" title="Light mode">◐</button><button class="themeButton dark" onclick="setTheme('dark')" title="Dark mode">◑</button></div><script>const setTheme=a=>{document.documentElement.className=a;localStorage.setItem(`theme`,a)};const getTheme=()=>{const a=localStorage.getItem(`theme`);const b=a?a:`dark`;setTheme(b)};getTheme()</script></nav><h1>Cool stuff and people</h1></header><main><h2 id=tools>Tools</h2><ul><li><a href=https://edna.arslexis.io/ rel=noopener target=_blank>edna</a><li><a href=https://imageoptim.com/online rel=noopener target=_blank>ImageOptim</a></ul><h2 id=websites>Websites</h2><ul><li><a href=https://status.cafe/users/birabittoh rel=noopener target=_blank>status.cafe</a><li><a href="https://piclog.blue/profile.php?id=105" rel=noopener target=_blank>piclog.blue</a><li><a href=https://wobble.town/visit/528 rel=noopener target=_blank>wobble.town</a></ul><h2 id=people>People</h2><ul><li><a href=https://m15o.ichi.city/site/home.html rel=noopener target=_blank>m15o</a><li><a href=https://melonking.net/ rel=noopener target=_blank>melonking</a><li><a href=https://cakey.me/ rel=noopener target=_blank>Cake</a></ul></main><footer><p class=tagsData><hr><div class=footContainer><div class=footLeft><p>Licensed under <a rel="noopener noreferrer" href=https://fr.wikipedia.org/wiki/Licence_MIT target=_blank>MIT</a><br> Built with <a rel="noopener noreferrer" href=https://www.getzola.org target=_blank>Zola</a> using <a rel="noopener noreferrer" href=https://github.com/BiRabittoh/anemone target=_blank>anemone</a> theme & <a rel="noopener noreferrer" href=https://github.com/Speyll/veqev target=_blank>veqev</a> colors.<br></div><div class=footRight><a href=https://wobble.town/visit/528 target=_blank><img class="footGif noStyle" alt=footGif loading=lazy src=https://wobble.town/visit/528/wobble.gif></a><a rel="noopener noreferrer" title="Subscribe via RSS for updates." class=metaData href=https://birabittoh.github.io/atom.xml target=_blank>RSS</a></div></div></footer></div>
A robots.txt

@@ -0,0 +1,4 @@

+User-agent: * +Disallow: +Allow: / +Sitemap: https://birabittoh.github.io/sitemap.xml
A sitemap.xml

@@ -0,0 +1,71 @@

+<?xml version="1.0" encoding="UTF-8"?> +<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> + <url> + <loc>https://birabittoh.github.io/</loc> + </url> + <url> + <loc>https://birabittoh.github.io/about/</loc> + </url> + <url> + <loc>https://birabittoh.github.io/blog/</loc> + </url> + <url> + <loc>https://birabittoh.github.io/blog/ai-art-contest/</loc> + <lastmod>2022-09-21</lastmod> + </url> + <url> + <loc>https://birabittoh.github.io/blog/data-volatility/</loc> + <lastmod>2022-01-14</lastmod> + </url> + <url> + <loc>https://birabittoh.github.io/blog/fomo/</loc> + <lastmod>2022-03-06</lastmod> + </url> + <url> + <loc>https://birabittoh.github.io/blog/modern-web-bloat/</loc> + <lastmod>2021-04-09</lastmod> + </url> + <url> + <loc>https://birabittoh.github.io/blog/page/1/</loc> + </url> + <url> + <loc>https://birabittoh.github.io/blog/reflector/</loc> + <lastmod>2023-01-29</lastmod> + </url> + <url> + <loc>https://birabittoh.github.io/blog/self-host/</loc> + <lastmod>2023-07-16</lastmod> + </url> + <url> + <loc>https://birabittoh.github.io/blog/void-xfce/</loc> + <lastmod>2023-02-05</lastmod> + </url> + <url> + <loc>https://birabittoh.github.io/blog/you-should-use-linux/</loc> + <lastmod>2021-04-29</lastmod> + </url> + <url> + <loc>https://birabittoh.github.io/links/</loc> + </url> + <url> + <loc>https://birabittoh.github.io/tags/</loc> + </url> + <url> + <loc>https://birabittoh.github.io/tags/advice/</loc> + </url> + <url> + <loc>https://birabittoh.github.io/tags/ai/</loc> + </url> + <url> + <loc>https://birabittoh.github.io/tags/art/</loc> + </url> + <url> + <loc>https://birabittoh.github.io/tags/foss/</loc> + </url> + <url> + <loc>https://birabittoh.github.io/tags/minimalism/</loc> + </url> + <url> + <loc>https://birabittoh.github.io/tags/privacy/</loc> + </url> +</urlset>
A tags/advice/atom.xml

@@ -0,0 +1,535 @@

+<?xml version="1.0" encoding="UTF-8"?> +<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"> + <title>BiRabittoh - advice</title> + <subtitle>Tech and privacy ramblings from a random italian dude.</subtitle> + <link rel="self" type="application/atom+xml" href="https://birabittoh.github.io/tags/advice/atom.xml"/> + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/"/> + <generator uri="https://www.getzola.org/">Zola</generator> + <updated>2023-07-16T00:00:00+00:00</updated> + <id>https://birabittoh.github.io/tags/advice/atom.xml</id> + <entry xml:lang="en"> + <title>Self-hosting Extravaganza</title> + <published>2023-07-16T00:00:00+00:00</published> + <updated>2023-07-16T00:00:00+00:00</updated> + + <author> + <name> + + BiRabittoh + + </name> + </author> + + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/blog/self-host/"/> + <id>https://birabittoh.github.io/blog/self-host/</id> + + <content type="html" xml:base="https://birabittoh.github.io/blog/self-host/">&lt;p&gt;Lately, more and more companies are putting their services behind paywalls, usage limits and closed APIs. Some examples are &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nitter.it&#x2F;elonmusk&#x2F;status&#x2F;1675187969420828672&quot;&gt;Twitter&lt;&#x2F;a&gt; limiting the number of tweets a non-paying user can read, &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.redditinc.com&#x2F;blog&#x2F;2023apiupdates&quot;&gt;Reddit&lt;&#x2F;a&gt; increasing their API price to an extent that’s unbearable for any normal individual and &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;libreddit.kavin.rocks&#x2F;r&#x2F;youtube&#x2F;comments&#x2F;14kmd07&#x2F;youtube_cracking_down_on_if_youre_not_paying_them&#x2F;&quot;&gt;YouTube&lt;&#x2F;a&gt; starting to block their service towards anyone using an adblock extension.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;there-must-be-a-better-way&quot;&gt;There must be a better way&lt;&#x2F;h2&gt; +&lt;p&gt;Luckily, I’ve been interested in &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mendel5&#x2F;alternative-front-ends&quot;&gt;alternative front-ends&lt;&#x2F;a&gt; for a while. These services allow you to get the same (or better) functionality as their corporate counterpart without giving away any of your information in return. Some of these even offer their own free APIs.&lt;&#x2F;p&gt; +&lt;p&gt;Here’s my favorite instances with respect to the service they provide:&lt;&#x2F;p&gt; +&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Service&lt;&#x2F;th&gt;&lt;th&gt;PC&lt;&#x2F;th&gt;&lt;th&gt;Mobile&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt; +&lt;tr&gt;&lt;td&gt;YouTube&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;y.com.sb&#x2F;&quot;&gt;Invidious&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;apt.izzysoft.de&#x2F;fdroid&#x2F;index&#x2F;apk&#x2F;org.polymorphicshade.newpipe&quot;&gt;NewPipe&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;Twitter&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nitter.it&quot;&gt;Nitter&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;apt.izzysoft.de&#x2F;fdroid&#x2F;index&#x2F;apk&#x2F;org.ca.squawker&quot;&gt;Squawker&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;Reddit&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;libreddit.kavin.rocks&quot;&gt;LibReddit&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;libreddit.kavin.rocks&quot;&gt;LibReddit&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;Medium&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;scribe.rip&quot;&gt;Scribe&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;scribe.rip&#x2F;&quot;&gt;Scribe&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt; +&lt;h2 id=&quot;drawbacks&quot;&gt;Drawbacks&lt;&#x2F;h2&gt; +&lt;p&gt;Of course, this is not a perfect solution. There are a lot of problems to be discussed.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;privacy&quot;&gt;Privacy&lt;&#x2F;h3&gt; +&lt;p&gt;First and foremost, these instances do not make any profit. This is not a problem until you really think about it. Can you really trust a random developer offering a (paid) service for thousands of users out of their own kindness? +The answer is “probably yes”, but are you willing to take this risk?&lt;&#x2F;p&gt; +&lt;p&gt;Instance admins could easily edit the upstream source code to make it so they can track their users indefinetly and sell usage data without them even realizing. +This is a given if you use any “normal” (not self-hosted) service, but the difference is big companies are &lt;em&gt;required&lt;&#x2F;em&gt; by GDPR to protect collected user data in a certain way and keep them for a maximum set amount of time.&lt;&#x2F;p&gt; +&lt;p&gt;The same cannot be assured for individuals who apparently don’t even make a profit for what they’re doing.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;scaling&quot;&gt;Scaling&lt;&#x2F;h3&gt; +&lt;p&gt;This buzzword has become a meme in the programming world, but it’s been shown how important it is to consider when dealing with large userbases that can grow exponentially without any warning.&lt;&#x2F;p&gt; +&lt;p&gt;Think about the amount of users who migrated to Mastodon immediately after Elon Musk acquired Twitter. Instance admins were used to having a couple hundred users, so hundred of thousands of new signups made a lot of popular instances slow down or even temporarily shut down while they migrated to new (and more expensive) hardware.&lt;&#x2F;p&gt; +&lt;p&gt;Anything public you use can be subject to this phenomenon, leading to poor user experience, as you’ll be one of the many people wondering why your feed takes one minute to load.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;fine-i-ll-do-it-myself&quot;&gt;Fine, I’ll do it myself&lt;&#x2F;h2&gt; +&lt;p&gt;Since joining the world of minimalism, I had always considered Docker as a bloated way to run multiple virtual machines. I read about people complaining that even simple Python scripts were providing &lt;code&gt;Dockerfile&lt;&#x2F;code&gt; and &lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt; files and I started seeing it as a bloaty way to achieve the same result.&lt;&#x2F;p&gt; +&lt;p&gt;Whenever I wanted to host anything by myself, I used to SSH into my VPS with password authentication (!!!) and expose a public port for each service (!!!). +I used my public IP address to log into my services, so I had to resort to sending cleartext passwords through HTTP (!!!) since TLS was not an option.&lt;&#x2F;p&gt; +&lt;p&gt;Of course, this is possibly the most insecure way to host services on a public server, but I felt that was “secure enough” and nobody would ever be interested in hacking me (!!! × ∞).&lt;&#x2F;p&gt; +&lt;p&gt;Nonetheless, I used to &lt;code&gt;cat &#x2F;var&#x2F;log&#x2F;auth.log&lt;&#x2F;code&gt; to see all the failed login attempts, and pray that nobody actually got my password right. +Nowadays, I look back and laugh at my previous config; at least I’m (almost) sure that nobody actually managed to get in.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;the-right-way&quot;&gt;The right way&lt;&#x2F;h2&gt; +&lt;p&gt;Since I started my new job, I also began experimenting with Docker and found out it’s not as bad as I thought it’d be. I will now let my previous config serve as the perfect example of how NOT to secure your VPS correctly for any self-hosting configuration.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;ditch-password-authentication&quot;&gt;Ditch password authentication&lt;&#x2F;h3&gt; +&lt;p&gt;First of all, password authentication. You’ll be a lot safer as soon as you disable it.&lt;&#x2F;p&gt; +&lt;p&gt;Having it enabled means you’re vulnerable to dictionary and bruteforce attacks. Also, if some new vulnerability is published, the password field is one more way the attacker could send a malicious string to get inside (see &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;scribe.rip&#x2F;geekculture&#x2F;the-log4j-incident-explained-ed0ce6d36df2&quot;&gt;the log4j incident&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt; +&lt;p&gt;A better way of logging into your VPS is through public key authentication.&lt;&#x2F;p&gt; +&lt;p&gt;First, generate a key on your own PC:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;ssh-keygen -t ed25519 -a 100 +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;This will create two files: &lt;code&gt;~&#x2F;.ssh&#x2F;id_ed25519.pub&lt;&#x2F;code&gt; and &lt;code&gt;~&#x2F;.ssh&#x2F;id_ed25519&lt;&#x2F;code&gt;&lt;&#x2F;p&gt; +&lt;p&gt;Now, use the following command to copy your key over to the VPS:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;ssh-copy-id -i ~&amp;#x2F;.ssh&amp;#x2F;id_ed25519 &amp;lt;user&amp;gt;@&amp;lt;host&amp;gt; +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;At this point, if everything went correctly, just add or change the following line in &lt;code&gt;&#x2F;etc&#x2F;ssh&#x2F;sshd_config&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;PasswordAuthentication no +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;At this point, you should be able to log into your VPS without the need to input your password, which is more secure as well as more convenient.&lt;&#x2F;p&gt; +&lt;p&gt;I keep the content of my public and private ssh key files saved as secure notes in my BitWarden account, so I can take them to any PC I want to access my VPS from. +People say this is bad practice (you should only have a key for each host), but I personally feel like it’s not that big of a deal compared to the security mess I had going on before.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;containerize-your-applications&quot;&gt;Containerize your applications&lt;&#x2F;h3&gt; +&lt;p&gt;Now that you have a safe way to SSH into your machine, you can start hosting your own services.&lt;&#x2F;p&gt; +&lt;p&gt;First, some terminology:&lt;&#x2F;p&gt; +&lt;ul&gt; +&lt;li&gt;&lt;code&gt;Dockerfile&lt;&#x2F;code&gt; files are like a list of ingredients. They contain every dependency needed to build a minimal operating system dedicated to running a program. They’re used to build images.&lt;&#x2F;li&gt; +&lt;li&gt;&lt;code&gt;Images&lt;&#x2F;code&gt; are like recipes. You can create some yourself from a Dockerfile or download them from an external repository. They can be instantiated as containers.&lt;&#x2F;li&gt; +&lt;li&gt;&lt;code&gt;Containers&lt;&#x2F;code&gt; are like courses. You can instantiate multiple equal courses from the same image and you can actually eat (use) them! They can be managed through &lt;code&gt;docker-compose&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt; +&lt;li&gt;&lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt; files are like menus. They’re a convenient way to instantiate and deinstantiate multiple containers in a specific and reproducible configuration. If you’re not a developer, you’ll be mainly working on these files.&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;p&gt;To get started with Docker, install &lt;code&gt;docker&lt;&#x2F;code&gt; and &lt;code&gt;docker-compose&lt;&#x2F;code&gt; via your package manager of choice. If you want an easy start, you can follow &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.invidious.io&#x2F;installation&#x2F;#docker-compose-method-production&quot;&gt;this guide&lt;&#x2F;a&gt; to host our own Invidious instance.&lt;&#x2F;p&gt; +&lt;p&gt;It’s not that hard, but you might need to read the official &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.docker.com&#x2F;compose&#x2F;&quot;&gt;Docker Compose documentation&lt;&#x2F;a&gt; if something doesn’t go as planned.&lt;&#x2F;p&gt; +&lt;p&gt;My advice is to generate an &lt;code&gt;hmac_key&lt;&#x2F;code&gt; using &lt;code&gt;pwgen 20 1&lt;&#x2F;code&gt; or &lt;code&gt;openssl rand -hex 20&lt;&#x2F;code&gt; and insert it in the correct spot inside &lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;Also, remove the &lt;code&gt;127.0.0.1:&lt;&#x2F;code&gt; part in the &lt;code&gt;ports&lt;&#x2F;code&gt; section since we don’t have a reverse proxy set up (yet).&lt;&#x2F;p&gt; +&lt;p&gt;After you’re done configuring, you can type &lt;code&gt;docker-compose up -d&lt;&#x2F;code&gt; to pull all required images and instantiate your containers, and &lt;code&gt;docker-compose down&lt;&#x2F;code&gt; if you want to stop and remove everything.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;use-a-reverse-proxy&quot;&gt;Use a reverse proxy&lt;&#x2F;h3&gt; +&lt;p&gt;If you’ve followed that guide correctly, you should now have two containers that communicate through a network. You can find out their names by running &lt;code&gt;docker ps -a&lt;&#x2F;code&gt;. Take note of the name of your main invidious container, which will be referred as &lt;code&gt;invidious&lt;&#x2F;code&gt; for the rest of this guide.&lt;&#x2F;p&gt; +&lt;p&gt;Problem is, you’re still using an IP address and communicating in cleartext through HTTP! This means your ISP can read every single detail in every single request you make.&lt;&#x2F;p&gt; +&lt;p&gt;Luckily, there is a way to get a cool domain name for free that also happens to include free and auto-generated TLS certificates.&lt;&#x2F;p&gt; +&lt;p&gt;First, create an account on &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.duckdns.org&#x2F;&quot;&gt;DuckDNS&lt;&#x2F;a&gt; and set up a free domain.&lt;&#x2F;p&gt; +&lt;p&gt;Just make a new directory near the one you used for Invidious and create a new &lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;mkdir swag +cd swag +nano docker-compose.yml +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;You can paste and edit accordingly the lines in &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.linuxserver.io&#x2F;general&#x2F;swag#creating-a-swag-container&quot;&gt;this guide&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;For example, instead of &lt;code&gt;DNSPLUGIN=cloudflare&lt;&#x2F;code&gt; you should have &lt;code&gt;DNSPLUGIN=duckdns&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;When you’re done, start your container with &lt;code&gt;docker-compose up -d&lt;&#x2F;code&gt;. This will create the config folder in &lt;code&gt;&#x2F;etc&#x2F;config&#x2F;swag&lt;&#x2F;code&gt; as well as a new network called &lt;code&gt;swag_default&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;Now we need to create a custom subdomain for Invidious. You can do it by creating the following file: &lt;code&gt;&#x2F;etc&#x2F;config&#x2F;swag&#x2F;nginx&#x2F;proxy-confs&#x2F;invidious.subdomain.conf&lt;&#x2F;code&gt; with this content:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;server { + listen 443 ssl http2; + listen [::]:443 ssl http2; + + server_name y.*; + + include &amp;#x2F;config&amp;#x2F;nginx&amp;#x2F;ssl.conf; + + client_max_body_size 0; + + location &amp;#x2F; { + include &amp;#x2F;config&amp;#x2F;nginx&amp;#x2F;proxy.conf; + include &amp;#x2F;config&amp;#x2F;nginx&amp;#x2F;resolver.conf; + set $upstream_app invidious; + set $upstream_port 3000; + set $upstream_proto http; + proxy_pass $upstream_proto:&amp;#x2F;&amp;#x2F;$upstream_app:$upstream_port; + } +} +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Where:&lt;&#x2F;p&gt; +&lt;ul&gt; +&lt;li&gt;&lt;code&gt;server_name yt.*&lt;&#x2F;code&gt;: &lt;code&gt;yt&lt;&#x2F;code&gt; is the subdomain of choice;&lt;&#x2F;li&gt; +&lt;li&gt;&lt;code&gt;set $upstream_app invidious;&lt;&#x2F;code&gt;: &lt;code&gt;invidious&lt;&#x2F;code&gt; is the name of the main Invidious container;&lt;&#x2F;li&gt; +&lt;li&gt;&lt;code&gt;set $upstream_port 3000;&lt;&#x2F;code&gt;: &lt;code&gt;3000&lt;&#x2F;code&gt; is the Invidious port.&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;p&gt;There’s one last step remaining. Invidious and Swag are two separate containers, so they cannot communicate unless they’re connected to the same network. You can connect Invidious to Swag’s network with the following command, where &lt;code&gt;invidious&lt;&#x2F;code&gt; is the name of your main Invidious container.&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;docker network connect swag_default invidious +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Finally, you can visit https:&#x2F;&#x2F;yt.&amp;lt;your-domain&amp;gt;.duckdns.org&#x2F; and check if you can access Invidious through HTTPS.&lt;&#x2F;p&gt; +&lt;p&gt;Note: now that you have a reverse proxy set up, you can remove your &lt;code&gt;ports:&lt;&#x2F;code&gt; section entirely from Invidious’ &lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt;. +You can do this because the containers are communicating internally to the &lt;code&gt;swag_default&lt;&#x2F;code&gt; network, without the need to expose any ports to the outside. +After you’re done, remember to reload your configuration by running &lt;code&gt;docker-compose restart&lt;&#x2F;code&gt; in your Invidious folder.&lt;&#x2F;p&gt; +&lt;p&gt;Ideally, the only container with exposed ports in your VPS should be Swag exposing ports 80 (HTTP) and 443 (HTTPS).&lt;&#x2F;p&gt; +&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt; +&lt;p&gt;Self-hosting is not easy. It’s been my &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.froth.zone&#x2F;wiki&#x2F;Camino_de_Santiago&quot;&gt;Camino de Santiago&lt;&#x2F;a&gt;: a long path of redemption for the sins I have committed in my young age. +Even if I made a lot of mistakes, in the end I’ve learned a lot about dev-ops and cybersecurity, as well as precious skills that proved themselves useful for my engineering job.&lt;&#x2F;p&gt; +&lt;p&gt;You can find a full list of self-hostable services &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;awesome-selfhosted&#x2F;awesome-selfhosted&quot;&gt;here&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt; +</content> + + </entry> + <entry xml:lang="en"> + <title>Modernizing XFCE</title> + <published>2023-02-05T00:00:00+00:00</published> + <updated>2023-02-05T00:00:00+00:00</updated> + + <author> + <name> + + BiRabittoh + + </name> + </author> + + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/blog/void-xfce/"/> + <id>https://birabittoh.github.io/blog/void-xfce/</id> + + <content type="html" xml:base="https://birabittoh.github.io/blog/void-xfce/">&lt;p&gt;This article is more of a memo for myself. Since I often re-install Linux systems, I spend a lot of time doing repetitive tasks and often forget some steps, which leads me to waste even more time figuring out what’s wrong.&lt;&#x2F;p&gt; +&lt;p&gt;These instructions allow you to get a fully functional and modern-looking XFCE desktop on a fresh install of &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;voidlinux.org&#x2F;&quot;&gt;Void Linux&lt;&#x2F;a&gt; (even though they can be adapted to work in any distro).&lt;&#x2F;p&gt; +&lt;h2 id=&quot;initial-system-update&quot;&gt;Initial system update&lt;&#x2F;h2&gt; +&lt;p&gt;First thing I tried was to update the system, but the ISO was quite old. I had to update &lt;code&gt;xbps&lt;&#x2F;code&gt; before anything else:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;sudo xbps-install -Su xbps +sudo xbps-install -Su +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;h2 id=&quot;avoid-session-saving&quot;&gt;Avoid session saving&lt;&#x2F;h2&gt; +&lt;p&gt;One thing I hate about XFCE is its fixation to save sessions. A lot of times I get my session saved and restored even with all settings turned off.&lt;&#x2F;p&gt; +&lt;p&gt;A quick and easy solution to disable session saving entirely is just to create an empty file in place of the &lt;code&gt;sessions&lt;&#x2F;code&gt; directory.&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;rm ~&amp;#x2F;.cache&amp;#x2F;sessions -rf +touch ~&amp;#x2F;.cache&amp;#x2F;sessions +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;This way, even with everything turned on, XFCE fails create a folder with that name and everything works (or doesn’t, in this case) like a charm.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;change-that-shell&quot;&gt;Change that shell&lt;&#x2F;h2&gt; +&lt;p&gt;Your shell is the main tool you use to communicate with your system, so it makes sense to replace &lt;code&gt;bash&lt;&#x2F;code&gt; with something more modern and feature-rich.&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;sudo xbps-install -S zsh zsh-completions curl +chsh -s &amp;#x2F;bin&amp;#x2F;zsh +zsh +curl -fsSL https:&amp;#x2F;&amp;#x2F;raw.githubusercontent.com&amp;#x2F;zimfw&amp;#x2F;install&amp;#x2F;master&amp;#x2F;install.zsh | zsh +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;h2 id=&quot;get-some-good-sound-quality&quot;&gt;Get some good sound quality&lt;&#x2F;h2&gt; +&lt;p&gt;I don’t like &lt;code&gt;pulseaudio&lt;&#x2F;code&gt;. Let’s replace it with &lt;code&gt;pipewire&lt;&#x2F;code&gt; and &lt;code&gt;wireplumber&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;su +xbps-install pipewire wireplumber +mkdir -p &amp;#x2F;etc&amp;#x2F;pipewire&amp;#x2F;pipewire.conf.d +sed &amp;#x27;&amp;#x2F;path.*=.*pipewire-media-session&amp;#x2F;s&amp;#x2F;{&amp;#x2F;#{&amp;#x2F;&amp;#x27; \ +&amp;#x2F;usr&amp;#x2F;share&amp;#x2F;pipewire&amp;#x2F;pipewire.conf &amp;gt; &amp;#x2F;etc&amp;#x2F;pipewire&amp;#x2F;pipewire.conf +echo &amp;#x27;context.exec = [ { path = &amp;quot;&amp;#x2F;usr&amp;#x2F;bin&amp;#x2F;wireplumber&amp;quot; args = &amp;quot;&amp;quot; } ]&amp;#x27; \ +&amp;gt; &amp;#x2F;etc&amp;#x2F;pipewire&amp;#x2F;pipewire.conf.d&amp;#x2F;10-wireplumber.conf +ln -s &amp;#x2F;usr&amp;#x2F;share&amp;#x2F;applications&amp;#x2F;pipewire* &amp;#x2F;etc&amp;#x2F;xdg&amp;#x2F;autostart +xbps-remove pulseaudio alsa-plugins-pulseaudio +reboot +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;h2 id=&quot;make-firefox-more-secure&quot;&gt;Make Firefox more secure&lt;&#x2F;h2&gt; +&lt;p&gt;I like Firefox as a browser, but it doesn’t come with sane defaults as far as privacy’s concerned.&lt;&#x2F;p&gt; +&lt;p&gt;First, visit &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ffprofile.com&#x2F;&quot;&gt;Firefox Profilemaker&lt;&#x2F;a&gt; and create a customized &lt;code&gt;profile.zip&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;Then, extract your zip file to the correct destination:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;sudo xbps-install zip unzip p7zip xarchiver thunar-archive-plugin +unzip -o ~&amp;#x2F;Downloads&amp;#x2F;profile.zip -d ~&amp;#x2F;.mozilla&amp;#x2F;firefox&amp;#x2F;xxxx.default-default&amp;#x2F; +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Some useful extensions I always install are:&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;addons.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;addon&#x2F;bitwarden-password-manager&quot;&gt;Bitwarden&lt;&#x2F;a&gt;, a password manager;&lt;&#x2F;li&gt; +&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;addon&#x2F;decentraleyes&quot;&gt;Decentraleyes&lt;&#x2F;a&gt;, to serve common JS libraries locally;&lt;&#x2F;li&gt; +&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;addon&#x2F;istilldontcareaboutcookies&quot;&gt;I still don’t care about cookies&lt;&#x2F;a&gt;, to hide and auto-reject cookie warnings;&lt;&#x2F;li&gt; +&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;addon&#x2F;libredirect&quot;&gt;LibRedirect&lt;&#x2F;a&gt;, a redirector for &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mendel5&#x2F;alternative-front-ends&quot;&gt;alternative front-ends&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;addons.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;addon&#x2F;sponsorblock&quot;&gt;SponsorBlock&lt;&#x2F;a&gt;, to skip YouTube sponsorships automagically;&lt;&#x2F;li&gt; +&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;addon&#x2F;ublock-origin&quot;&gt;uBlock Origin&lt;&#x2F;a&gt;, the best ad-blocker.&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;h2 id=&quot;customize-your-de&quot;&gt;Customize your DE&lt;&#x2F;h2&gt; +&lt;p&gt;Install the last required packages for desktop usability:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;sudo xbps-install -S vpm xfce4-whiskermenu-plugin xfce4-clipman-plugin \ +xfce4-pulseaudio-plugin xfce4-screenshooter xclip micro neovim mpv yt-dlp +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Remove orphaned and cached packages:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;sudo xbps-remove -Oo +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Now, open XFCE’s Settings Manager and set the following options:&lt;&#x2F;p&gt; +&lt;ul&gt; +&lt;li&gt;Appearance → Style → Choose “Adwaita-dark”&lt;&#x2F;li&gt; +&lt;li&gt;Desktop → Background → &lt;em&gt;&amp;lt;Choose your favorite wallpaper&amp;gt;&lt;&#x2F;em&gt;&lt;&#x2F;li&gt; +&lt;li&gt;Desktop → Icons → Set “Icon type” to “None”&lt;&#x2F;li&gt; +&lt;li&gt;Panel → &lt;em&gt;&amp;lt;Customize your panels&amp;gt;&lt;&#x2F;em&gt;&lt;&#x2F;li&gt; +&lt;li&gt;Screensaver → Disable “Enable Screensaver”&lt;&#x2F;li&gt; +&lt;li&gt;Text Editor Settings → Enable: +&lt;ul&gt; +&lt;li&gt;“Show line numbers”,&lt;&#x2F;li&gt; +&lt;li&gt;“Highlight matching brackets”,&lt;&#x2F;li&gt; +&lt;li&gt;“Wrap long lines”&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;&#x2F;li&gt; +&lt;li&gt;Window Manager → Style → Button layout → Remove “Shade” button from title bar&lt;&#x2F;li&gt; +&lt;li&gt;Window Manager → Advanced → Windows snapping → Enable “To other windows”&lt;&#x2F;li&gt; +&lt;li&gt;Window Manager → Advanced → Wrap workspaces when reaching the screen edge → Disable “With a dragged window”&lt;&#x2F;li&gt; +&lt;li&gt;Window Manager Tweaks → Cycling → Enable: +&lt;ul&gt; +&lt;li&gt;“Cycle through minimized windows in most recently used order”,&lt;&#x2F;li&gt; +&lt;li&gt;“Cycle through windows on all workspaces”,&lt;&#x2F;li&gt; +&lt;li&gt;“Raise windows while cycling”&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;&#x2F;li&gt; +&lt;li&gt;Window Manager Tweaks → Accessibility → Disable: +&lt;ul&gt; +&lt;li&gt;“Raise windows when any mouse button is pressed”,&lt;&#x2F;li&gt; +&lt;li&gt;“Use mouse wheel on title bar to roll up the window”&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;&#x2F;li&gt; +&lt;li&gt;Window Manager Tweaks → Accessibility → Enable “Notify of urgency by making window’s decoration blink”&lt;&#x2F;li&gt; +&lt;li&gt;Window Manager Tweaks → Compositor → Enable “Show shadows under popup windows”&lt;&#x2F;li&gt; +&lt;li&gt;Xfce Terminal Settings → General → Scrolling → Set “Scrollbar is” to “Disabled”&lt;&#x2F;li&gt; +&lt;li&gt;Xfce Terminal Settings → Appearance → +&lt;ul&gt; +&lt;li&gt;enable “Use system font”,&lt;&#x2F;li&gt; +&lt;li&gt;set “Background” to “Transparent background”,&lt;&#x2F;li&gt; +&lt;li&gt;set Opacity to 0.80;&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;&#x2F;li&gt; +&lt;li&gt;Xfce Terminal Settings → Colors → Presets → Choose “Tango”&lt;&#x2F;li&gt; +&lt;li&gt;Keyboard → Behavior → Enable “Restore num lock state on startup”&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;h2 id=&quot;shortcuts&quot;&gt;Shortcuts&lt;&#x2F;h2&gt; +&lt;p&gt;Finally, set the following shortcuts:&lt;&#x2F;p&gt; +&lt;ul&gt; +&lt;li&gt;Keyboard → Application Shortcuts&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Command&lt;&#x2F;th&gt;&lt;th&gt;Shortcut&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt; +&lt;tr&gt;&lt;td&gt;&lt;code&gt;exo-open --launch TerminalEmulator&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;Super&lt;&#x2F;code&gt; + &lt;code&gt;Return&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;&lt;code&gt;xfce4-popup-whiskermenu&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;Super&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;&lt;code&gt;xfce4-screenshooter --clipboard --region&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;Shift&lt;&#x2F;code&gt; + &lt;code&gt;Super&lt;&#x2F;code&gt; + &lt;code&gt;S&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;&lt;code&gt;xfce4-screenshooter --clipboard --window&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;Super&lt;&#x2F;code&gt; + &lt;code&gt;S&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;&lt;code&gt;xfce4-screenshooter --clipboard --fullscreen&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;Print&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;&lt;code&gt;sh -c &#x27;xclip -selection clipboard -t image&#x2F;png -o &amp;gt; &quot;$HOME&#x2F;Pictures&#x2F;$(date +%Y-%m-%d_%T).png&quot;&#x27;&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;Shift&lt;&#x2F;code&gt; + &lt;code&gt;Super&lt;&#x2F;code&gt; + &lt;code&gt;V&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;&lt;code&gt;xflock4&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;Super&lt;&#x2F;code&gt; + &lt;code&gt;L&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;&lt;code&gt;loginctl suspend&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;Shift&lt;&#x2F;code&gt; + &lt;code&gt;Super&lt;&#x2F;code&gt; + &lt;code&gt;L&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt; +</content> + + </entry> + <entry xml:lang="en"> + <title>Update your mirrors!</title> + <published>2023-01-29T00:00:00+00:00</published> + <updated>2023-01-29T00:00:00+00:00</updated> + + <author> + <name> + + BiRabittoh + + </name> + </author> + + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/blog/reflector/"/> + <id>https://birabittoh.github.io/blog/reflector/</id> + + <content type="html" xml:base="https://birabittoh.github.io/blog/reflector/">&lt;p&gt;Nah, I’m not talking about &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.bathshack.com&#x2F;blog&#x2F;bluetooth-mirrors-everything-you-need-to-know-before-you-buy&#x2F;&quot;&gt;bluetooth mirrors&lt;&#x2F;a&gt;. Mirrors are what powers all distros: they’re a (de)centralized solution for downloading pre-compiled binaries and scripts for your operating system.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;suspicion&quot;&gt;Suspicion&lt;&#x2F;h2&gt; +&lt;p&gt;I like always having the most current version of packages, so I usually update my system several times a day. When, after a day, I ran &lt;code&gt;sudo pacman -Syu&lt;&#x2F;code&gt; and it reported the system being up to date, I was pretty weirded out.&lt;&#x2F;p&gt; +&lt;p&gt;Another day passed, and the system was still up to date. It was not a connection problem, I was connecting to my mirrors and they were reporting absolutely zero updates for my system.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;problem&quot;&gt;Problem&lt;&#x2F;h2&gt; +&lt;p&gt;At the third day of stagnation, I was sure something was up. I looked up the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;archlinux.org&#x2F;mirrors&#x2F;status&#x2F;&quot;&gt;Mirror Status&lt;&#x2F;a&gt; page on ArchLinux’s website and saw that loads of mirrors were out of sync.&lt;&#x2F;p&gt; +&lt;p&gt;I had never touched my mirrorlist before, it was just generated by the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;archlinux&#x2F;archinstall&quot;&gt;archinstall&lt;&#x2F;a&gt; script a few months ago; a lot of Arch-based distros by default ship tools to update your mirrorlist, but I honestly thought I’d never need that.&lt;&#x2F;p&gt; +&lt;p&gt;Pacman’s mirrorlist is located in &lt;code&gt;&#x2F;etc&#x2F;pacman.d&#x2F;mirrorlist&lt;&#x2F;code&gt;. You can filter out uncommented lines with this command:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;grep -v &amp;quot;^#&amp;quot; &amp;#x2F;etc&amp;#x2F;pacman.d&amp;#x2F;mirrorlist +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;And check the actual status of your mirror(s) on the Mirror Status page linked above.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;solution&quot;&gt;Solution&lt;&#x2F;h2&gt; +&lt;p&gt;This will overwrite your mirrorlist, so you’re advised to make a backup before proceeding:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;sudo cp &amp;#x2F;etc&amp;#x2F;pacman.d&amp;#x2F;mirrorlist &amp;#x2F;etc&amp;#x2F;pacman.d&amp;#x2F;mirrorlist.bak +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;I decided to use &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;xyne.dev&#x2F;projects&#x2F;reflector&#x2F;&quot;&gt;reflector&lt;&#x2F;a&gt; to fix this problem. I didn’t want to have to deal with this again, so I enabled the provided systemd timer.&lt;&#x2F;p&gt; +&lt;p&gt;First, install it.&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;sudo pacman -S reflector +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Then, edit &lt;code&gt;&#x2F;etc&#x2F;xdg&#x2F;reflector&#x2F;reflector.conf&lt;&#x2F;code&gt;. I only needed to edit the &lt;code&gt;--country&lt;&#x2F;code&gt; parameter and select countries next to the one where I reside; you can list available countries by running &lt;code&gt;reflector --list-countries&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;--save &amp;#x2F;etc&amp;#x2F;pacman.d&amp;#x2F;mirrorlist +--protocol https +--country Italy,Switzerland,France,Germany,Austria +--latest 5 +--sort age +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Finally, start the service and check if it worked.&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;sudo systemctl start reflector.service +cat &amp;#x2F;etc&amp;#x2F;pacman.d&amp;#x2F;mirrorlist +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;If everything went smoothly, enable reflector’s timer so it runs weekly.&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;sudo systemctl enable reflector.timer +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Done!&lt;&#x2F;p&gt; +&lt;p&gt;Now, by default pacman &lt;em&gt;does&lt;&#x2F;em&gt; update its mirrorlist. It creates a file called &lt;code&gt;mirrorlist.pacnew&lt;&#x2F;code&gt; and it expects you to pick your favorite mirrors each time its generated. You can disable this (now unneeded) behavior by uncommenting and setting &lt;code&gt;NoExtract&lt;&#x2F;code&gt; in &lt;code&gt;&#x2F;etc&#x2F;pacman.conf&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;... +NoExtract = &amp;#x2F;etc&amp;#x2F;pacman.d&amp;#x2F;mirrorlist + +# Misc options +Color +ILoveCandy +ParallelDownloads = 3 +... +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +</content> + + </entry> + <entry xml:lang="en"> + <title>My opinion on FOMO</title> + <published>2022-03-06T00:00:00+00:00</published> + <updated>2022-03-06T00:00:00+00:00</updated> + + <author> + <name> + + BiRabittoh + + </name> + </author> + + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/blog/fomo/"/> + <id>https://birabittoh.github.io/blog/fomo/</id> + + <content type="html" xml:base="https://birabittoh.github.io/blog/fomo/">&lt;h2 id=&quot;what-are-you-even-talking-about&quot;&gt;What are you even talking about&lt;&#x2F;h2&gt; +&lt;p&gt;Let me preface this by saying I know nothing about psychology and behavioral studies, so anything you read here is just my personal opinion.&lt;&#x2F;p&gt; +&lt;p&gt;Let’s start with defining FOMO, to make sure we’re all on the same spectrum.&lt;&#x2F;p&gt; +&lt;blockquote&gt; +&lt;p&gt;Fear of missing out (FOMO) is the feeling of apprehension that one is either not in the know or missing out on information, events, experiences, or life decisions that could make one’s life better.&lt;&#x2F;p&gt; +&lt;&#x2F;blockquote&gt; +&lt;p&gt;Source: &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Fear_of_missing_out&quot;&gt;Wikipedia&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;The Fear Of Missing Out is what drives modern society; It keeps us hooked to mainstream social media and drives newbie investors towards obvious rugpulls.&lt;&#x2F;p&gt; +&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.sciencedirect.com&#x2F;science&#x2F;article&#x2F;abs&#x2F;pii&#x2F;S0747563213000800&quot;&gt;Studies&lt;&#x2F;a&gt; have correlated it to various negative behaviors, like social media addiction and even distracted driving.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;am-i-affected-by-this&quot;&gt;Am I affected by this?&lt;&#x2F;h2&gt; +&lt;p&gt;Probably. As long as you have a friend group and an account on any mainstream social network, yes you are. +It’s the feeling that drives you to check out your friends’ Stories on Instagram, the dread you feel when somebody else reaches a life goal before you do, the fear that pushes people to buy limited-time merchandise before it runs out of stock.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;my-experience&quot;&gt;My experience&lt;&#x2F;h2&gt; +&lt;p&gt;FOMO has been a constant for my entire life and just now I’m trying to write this as a way to think critically about it and try to avoid being pushed by stupid instincts. I’ve come to realize that Discord is the thing that slows down my productivity the most: as soon as I enter a voice chat with my friend, I stop being productive in any capacity and I’m also uncapable of resuming for the whole day.&lt;&#x2F;p&gt; +&lt;p&gt;Even after I turn off my PC, I still think about what my friends are doing and what I’m missing out on, be it a Gartic Phone round or any stupid discussion I might have had on there. The biggest problem is, it’s entirely subconscious. I often find myself uncapable of concentrating and don’t know what’s the cause of it; I’ve been eliminating elements one by one to find out the cause of this and turns out that distancing myself totally from social media AND Discord actually solves it.&lt;&#x2F;p&gt; +&lt;p&gt;It’s not immediate either, it took a few days for me but your mileage may vary depending on a lot of factors. Of course, I plan on restoring my online presence after I have graduated but it’s useful to know what exactly was causing me to waste all of my time for months.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;any-solutions&quot;&gt;Any solutions?&lt;&#x2F;h2&gt; +&lt;p&gt;I think you should evaluate possible solutions yourself, as FOMO is strictly dependant on your personality and experiences. You could try eliminating or replacing parts of your habits regularly, like I did, to find out if something is more destructive than you might initially think.&lt;&#x2F;p&gt; +&lt;p&gt;As I was researching this, I found out about JOMO. It stands for “Joy Of Missing Out” and it’s the exact opposite thing. +Embracing JOMO means you dedicate a few hours of the day to yourself and stop worrying about how your friends are doing at life and which continent gets invaded next.&lt;&#x2F;p&gt; +&lt;p&gt;Modern society does not wait for anybody, there’s nothing wrong in taking a break and focusing on yourself. You can always catch up later.&lt;&#x2F;p&gt; +&lt;ul&gt; +&lt;li&gt;&lt;a href=&quot;gopher:&#x2F;&#x2F;republic.circumlunar.space:70&#x2F;0&#x2F;~katolaz&#x2F;phlog&#x2F;20190219_fomo.txt&quot;&gt;Another interesting article about FOMO&lt;&#x2F;a&gt;, on Gopher;&lt;&#x2F;li&gt; +&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gopherproxy.vern.cc&#x2F;gopher&#x2F;republic.circumlunar.space:70&#x2F;0&#x2F;~katolaz&#x2F;phlog&#x2F;20190219_fomo.txt&quot;&gt;Same article&lt;&#x2F;a&gt;, but proxied to be viewed on modern browsers.&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +</content> + + </entry> + <entry xml:lang="en"> + <title>Data volatility</title> + <published>2022-01-14T00:00:00+00:00</published> + <updated>2022-01-14T00:00:00+00:00</updated> + + <author> + <name> + + BiRabittoh + + </name> + </author> + + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/blog/data-volatility/"/> + <id>https://birabittoh.github.io/blog/data-volatility/</id> + + <content type="html" xml:base="https://birabittoh.github.io/blog/data-volatility/">&lt;p&gt;I tried to access my domain at smol.pub yesterday and I noticed the service went down. Fear started rushing through my veins as I noticed I would have to choose another platform and, most importantly, write everything back from scratch since I don’t have a backup. This made me think about the importance of always having a backup stored somewhere.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;why-though&quot;&gt;Why though&lt;&#x2F;h2&gt; +&lt;p&gt;Creating a backup of your important data is crucial. On a daily basis, people discover vulnerabilities that allow remote code execution on any host machine. Try to imagine what would happen if someone ran a ransomware program on your PC. Would you be safe?&lt;&#x2F;p&gt; +&lt;p&gt;This genuinely feels like fearmongery, but it’s something that can seriously happen: you can be attacked by someone that specifically targets you. If you run Windows, you might be part of a botnet (think about all of the unsigned EXE files you’ve run since you installed the OS). What happens when someone doesn’t need your machine anymore? Well, that person might try and squeeze some money from you by holding your files hostage.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;cloud-backups&quot;&gt;Cloud backups&lt;&#x2F;h2&gt; +&lt;p&gt;Most people define cloud storage as follows:&lt;&#x2F;p&gt; +&lt;blockquote&gt; +&lt;p&gt;Cloud storage is a way for businesses and consumers to save data securely online so that it can be accessed anytime from any location and easily shared with those who are granted permission. Cloud storage also offers a way to back up data to facilitate recovery off-site.&lt;&#x2F;p&gt; +&lt;&#x2F;blockquote&gt; +&lt;p&gt;Source: &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.investopedia.com&#x2F;terms&#x2F;c&#x2F;cloud-storage.asp&quot;&gt;Investopedia&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;In reality, cloud storage is no more than some dude’s computer.&lt;&#x2F;p&gt; +&lt;p&gt;As soon as you upload your personal data to any service, you’re trusting it to store it in a safe and private way. If that software is not open source, you’re basically asking to get spied on.&lt;&#x2F;p&gt; +&lt;p&gt;Most people do not care about that, that’s why cloud storage solutions are very popular and basically enabled by default on any device you might buy nowadays.&lt;&#x2F;p&gt; +&lt;p&gt;I personally use cloud storage but I would never actually upload anything I actually care about on it… +If you have to choose, I have a few suggestions.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;don-t-trust-non-encrypted-solutions&quot;&gt;Don’t trust non-encrypted solutions&lt;&#x2F;h3&gt; +&lt;p&gt;Everybody has a Google account nowadays. If you forget your password, there is a way to recover it and get access to everything inside, including your Google Drive contents. As long as there is a password that can be changed or reset, your files are NOT encrypted and fully visible to anyone who has access to the Drive servers (Google or any other government agency that might want to take a peek). +Most cloud solutions work like this, and it’s actually frightening how many people trust megacorporations to have all of their private information available unencrypted.&lt;&#x2F;p&gt; +&lt;p&gt;One encrypted solution I use is mega.nz. +While I can’t be sure that the mega team isn’t spying on me, at least they’re hiding it well if they do. +Mega includes an encryption key with your account, which is not tied to your login information. +This means that if you lose your key, you also lost all of your files, there is absolutely no way to get them back, even if you change your account password.&lt;&#x2F;p&gt; +&lt;p&gt;Now, Mega is not open source, so you can never be sure that there isn’t any backdoor, or that keys aren’t stored together with your personal information, but at least it’s something.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;encrypt-your-data-yourself&quot;&gt;Encrypt your data yourself&lt;&#x2F;h3&gt; +&lt;p&gt;If you really need to trust Google, Apple or Amazon with your files, you can encrypt your files locally with the gpg command. This way, feds and big tech are going to need another password to actually access your private files.&lt;&#x2F;p&gt; +&lt;p&gt;It’s really easy, just two commands mainly.&lt;&#x2F;p&gt; +&lt;p&gt;Encrypt:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;gpg -c --cipher-algo AES256 secret.file +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Decrypt:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;gpg segret.file.gpg +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;If you need to encrypt a folder, you can compress it first:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;tar -cf output.tar.gz secret-folder +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Then encrypt your output.tar.gz archive as if it was a single file.&lt;&#x2F;p&gt; +&lt;p&gt;After decrypting it, you can extract your archive through this command:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;tar -xf output.tar.gz +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Check out Mental Outlaw’s &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;invidio.us&#x2F;M0O7vhvQW30&quot;&gt;video&lt;&#x2F;a&gt; about this very topic.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;local-backups&quot;&gt;Local backups&lt;&#x2F;h2&gt; +&lt;p&gt;This is the best way to backup your data. +You don’t need to encrypt it if you have full physical access to your data, but you would still be vulnerable if it gets lost or stolen, so it’s always better to keep it encrypted and safe.&lt;&#x2F;p&gt; +&lt;p&gt;Of course, if you have a backup hard drive always plugged in your PC, it’s not really secure at all, since one could remotely execute a ransomware that encrypts everything in your PC, including all drives both internal and external, so you would get your backup encrypted with the original files voiding everything you’ve done.&lt;&#x2F;p&gt; +&lt;p&gt;This is why you should keep a GNU&#x2F;Linux device that only serves backup purposes and is turned OFF most of the time. As long as no current runs through your CPU, your files are safe. You should only turn it on once a month and copy everything important over, so you have a safe and offline backup.&lt;&#x2F;p&gt; +&lt;p&gt;You could also use a USB stick or external hard drive, as long as you only plug them in your PC when necessary.&lt;&#x2F;p&gt; +</content> + + </entry> + <entry xml:lang="en"> + <title>You should probably use Linux</title> + <published>2021-04-29T00:00:00+00:00</published> + <updated>2021-04-29T00:00:00+00:00</updated> + + <author> + <name> + + BiRabittoh + + </name> + </author> + + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/blog/you-should-use-linux/"/> + <id>https://birabittoh.github.io/blog/you-should-use-linux/</id> + + <content type="html" xml:base="https://birabittoh.github.io/blog/you-should-use-linux/">&lt;h2 id=&quot;why-are-you-writing-this&quot;&gt;Why are you writing this?&lt;&#x2F;h2&gt; +&lt;p&gt;As you probably know, I like using free software (free as in &lt;em&gt;freedom&lt;&#x2F;em&gt;, not free of charge). Most people see users with this mentality as a group of paranoid psychopaths who circlejerk about their custom systems. While that’s in part true, there’s much more to it.&lt;&#x2F;p&gt; +&lt;p&gt;I often get asked by Windows or MacOS users about why they should think about switching to a GNU&#x2F;Linux OS (which I’ll be referring to as Linux); I’m just going to address everything here so I don’t have to repeat it to everyone who asks.&lt;&#x2F;p&gt; +&lt;p&gt;I’ll try to address every aspect where Linux is objectively better than the competition, then look at some reasons you &lt;em&gt;could&lt;&#x2F;em&gt; have to stick to Windows or, like I did, set up a dual boot.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;what-is-free-software&quot;&gt;What is free software?&lt;&#x2F;h2&gt; +&lt;p&gt;First of all, let’s read the official definition for it.&lt;&#x2F;p&gt; +&lt;blockquote&gt; +&lt;p&gt;A program is free software if the program’s users have the four essential freedoms: +0. The freedom to run the program as you wish, for any purpose.&lt;&#x2F;p&gt; +&lt;ol&gt; +&lt;li&gt;The freedom to study how the program works, and change it so it does your computing as you wish.&lt;&#x2F;li&gt; +&lt;li&gt;The freedom to redistribute copies so you can help others.&lt;&#x2F;li&gt; +&lt;li&gt;The freedom to distribute copies of your modified versions to others. By doing this you can give the whole community a chance to benefit from your changes. +A program is free software if it gives users adequately all of these freedoms.&lt;&#x2F;li&gt; +&lt;&#x2F;ol&gt; +&lt;&#x2F;blockquote&gt; +&lt;p&gt;Source: &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.gnu.org&#x2F;philosophy&#x2F;free-sw.en.html&quot;&gt;Free Software Foundation&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;Let’s examine how this freedom is beneficial.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;linux-is-open&quot;&gt;Linux is open&lt;&#x2F;h3&gt; +&lt;p&gt;Using free software on an open source OS means you always know what’s going on with your PC; if you get curious or have any suspects you can always read the source code (or trust that somebody already did it in your place).&lt;&#x2F;p&gt; +&lt;p&gt;The good thing about Linux is that it doesn’t hide anything from you. Whenever there’s a problem, you can read various logfiles (with different levels of detail) to identify and troubleshoot your problem; it’s also easier to fix problems since you actually know what each program and file does, while troubleshooting in closed-source OSes is like trying to fix a car engine without being able to open the hood.&lt;&#x2F;p&gt; +&lt;p&gt;Some distros, like &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;archlinux.org&#x2F;&quot;&gt;Arch Linux&lt;&#x2F;a&gt;, require you to set everything up from scratch; this means you always know exactly which programs you’re installing and their exact function inside the Linux environment. I would only advise this kind of installation to advanced users, but after you do it the first time you’ll certainly learn a lot about how a Linux OS actually works.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;linux-is-secure&quot;&gt;Linux is secure&lt;&#x2F;h3&gt; +&lt;p&gt;Every single FOSS-oriented website makes this point, I’m just going to re-iterate it just to be sure. +The source code being publicly available doesn’t make software less secure. In fact, it’s way more secure since more people can work on it and fix security flaws. +&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Security_through_obscurity&quot;&gt;Security through obscurity&lt;&#x2F;a&gt; just doesn’t work. You can see that by looking at the number of security breaches that are found every day on closed-source software.&lt;&#x2F;p&gt; +&lt;p&gt;If you make your software closed-source you’re basically betting you and your small team are able to create a better and more secure code than every single other person in the planet. Of course, this assumption is stupid and irrealistic, that’s why FOSS software will always be faster and more secure than closed-source alternatives.&lt;&#x2F;p&gt; +&lt;p&gt;This goes for every kind of software, including the very operating system code. GNU&#x2F;Linux based operating systems are the most secure choice for every kind of user. +More often than not, you can trust the software programmers without even reading the code yourself: since they’re sharing every single line of code, they probably don’t have anything to hide. If they do include malicious code, someone else will probably have noticed by now, provided you didn’t build and run that software straight from the repo a few minutes after the last commit lol&lt;&#x2F;p&gt; +&lt;p&gt;You can also be safe against external attackers. Linux’s &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gs.statcounter.com&#x2F;os-market-share&#x2F;desktop&#x2F;worldwide&#x2F;#monthly-202012-202012-bar&quot;&gt;market share&lt;&#x2F;a&gt; on desktop and laptop PCs was less than 2% as of January 2021, and those people are probably much more tech-savy than the other OSes’ users… +This means attackers will likely target Windows or OS X users, so you can be safe even without using an antivirus or anything similar (even though there &lt;em&gt;are&lt;&#x2F;em&gt; &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.clamav.net&#x2F;&quot;&gt;choices&lt;&#x2F;a&gt; for that, too).&lt;&#x2F;p&gt; +&lt;h3 id=&quot;linux-is-smarter&quot;&gt;Linux is smarter&lt;&#x2F;h3&gt; +&lt;p&gt;Saying that Linux is for &lt;em&gt;everybody&lt;&#x2F;em&gt; would be a risky take. My point is that you &lt;em&gt;probably&lt;&#x2F;em&gt; could benefit from using a Linux system.&lt;&#x2F;p&gt; +&lt;p&gt;If you’re a programmer, Linux is objectively the best OS you can use. As a programmer, I love using the terminal to do stuff more quickly. I also love the level of integration you can have with the system: a lot of programs are designed with a client&#x2F;server model, which makes them work in complex scenarios as long as you have the time and patience to configure them properly.&lt;&#x2F;p&gt; +&lt;p&gt;While Windows still has to retain compatibility with legacy systems, Linux is much more free to do its own thing. Linux will always be smarter and more modern. Just think about the filesystem structure. +Windows is forced to retain a confusing structure, where you have a ton of (not) hidden folders where programmers can store their necessary data… But there are so many choices and they’re not coherent! If I wanted to create a backup of all my settings and save files, I would have to copy all of these folders:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;C:\ProgramData; C:\Users\username\AppData; C:\Users\username\Documents\my games; +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;And I would still miss all of the informations saved on the awful Windows Registry…&lt;&#x2F;p&gt; +&lt;p&gt;On Linux, you just copy the .config folder in your home directory.&lt;&#x2F;p&gt; +&lt;p&gt;Moreover, in Windows 10 you have two ways of editing system settings: the Control Panel and the Windows Settings. But sometimes editing a setting on one side does NOT reflect on the other! +Windows is literally the most confusing OS you can start with… And people still recommend it to beginners over Linux. It’s just dumb.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;linux-is-versatile&quot;&gt;Linux is versatile&lt;&#x2F;h3&gt; +&lt;p&gt;Now, to the point everybody’s been waiting for. Yes, none of the Adobe programs will run &lt;em&gt;natively&lt;&#x2F;em&gt; on any Linux distro. That means if you’re a creative person and you need those programs on a daily basis, maybe you should consider dual booting…&lt;&#x2F;p&gt; +&lt;p&gt;BUT, steps are being made in two different directions:&lt;&#x2F;p&gt; +&lt;ul&gt; +&lt;li&gt;Valve is working on Proton, which allows the execution of most Windows-only applications and games on any Linux system.&lt;&#x2F;li&gt; +&lt;li&gt;More and more open-source alternatives to closed-source standards are being developed by the day.&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;p&gt;While Proton is interesting, I always prefer to run open source software, especially if we’re talking about programs that are also free of charge: imagine trusting a closed-source software you didn’t pay for.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt; +&lt;p&gt;Ok, now I’m getting repetitive so I’ll just get to the point. +Linux is constantly evolving and it has now become the top choice for a lot of people, so let’s try and consider every use case.&lt;&#x2F;p&gt; +&lt;ul&gt; +&lt;li&gt;If you’re a professional that’s deep in the industry and you need some &lt;em&gt;specific&lt;&#x2F;em&gt; program to run perfectly on your device… Yeah, you should use Windows.&lt;&#x2F;li&gt; +&lt;li&gt;If you’re a power user that’s just used to paid software, maybe consider trying out some open source alternative?&lt;&#x2F;li&gt; +&lt;li&gt;If you’re a gamer, I say you should dual boot. I have a Windows 10 LTSC installation that I use &lt;em&gt;exclusively&lt;&#x2F;em&gt; for gaming. While Proton has made Linux gaming feasable, the experience isn’t always the best, especially if you play games that require millisecond-grade accuracy, like rhythm games or competitive shooters.&lt;&#x2F;li&gt; +&lt;li&gt;If you’re a student or employee, Linux would be perfect for you. You can quickly take notes and do office work without the annoying Windows 10 updates popping up and rebooting your system seemingly at random. Also, any Linux system will probably be more light on resource usage than Windows, so you could take some old hardware you thought would never be using again and actually make something useful with it.&lt;&#x2F;li&gt; +&lt;li&gt;If you work in the programming or engineering field, then what are you waiting for? You should try out a Linux OS as soon as possible, and not in a virtual machine. A lot of my friends said they didn’t like Linux because it felt slow… While running on a VM… Duh? Try it out on real hardware so you can feel its superiority.&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;p&gt;Well, I can’t possibly cover &lt;em&gt;every&lt;&#x2F;em&gt; profession and use-case, but I hope I was clear about those I managed to list above. +I’m going to conclude this article with some interesting links about Linux and FOSS you definitely should check out.&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;islinuxabout.xyz&#x2F;&quot;&gt;Is Linux About…?&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;usermod.net&#x2F;why-use-linux&#x2F;&quot;&gt;usermod.net - Why use Linux?&lt;&#x2F;a&gt;&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +</content> + + </entry> +</feed>
A tags/advice/index.html

@@ -0,0 +1,1 @@

+<!doctype html><html lang=en><head><meta charset=UTF-8><meta content="IE=edge" http-equiv=X-UA-Compatible><meta content="text/html; charset=UTF-8" http-equiv=content-type><meta content="width=device-width,initial-scale=1,user-scalable=no" name=viewport><meta content="index, follow" name=robots><title>BiRabittoh</title><meta content=BiRabittoh name=title><meta content="Tech and privacy ramblings from a random italian dude." name=description><meta content=website property=og:type><meta content=https://birabittoh.github.io/ property=og:url><meta content=BiRabittoh property=og:site_name><meta content=BiRabittoh property=og:title><meta content="Tech and privacy ramblings from a random italian dude." property=og:description><meta content=summary_large_image property=twitter:card><meta content=https://birabittoh.github.io/ property=twitter:url><meta content=BiRabittoh property=twitter:title><meta content="Tech and privacy ramblings from a random italian dude." property=twitter:description><link href=https://birabittoh.github.io/ rel=canonical><link href=https://birabittoh.github.io/atom.xml rel=alternate title=RSS type=application/atom+xml><link href=https://birabittoh.github.io/css/style.css rel=stylesheet><body><div class=wrapper><header><nav class=navBar><a href=/>/home/</a><a href=/about>/about/</a><a href=/links>/links/</a><a href=/blog>/blog/</a><div class=themeSwitch><button class="themeButton light" onclick="setTheme('light')" title="Light mode">◐</button><button class="themeButton dark" onclick="setTheme('dark')" title="Dark mode">◑</button></div><script>const setTheme=a=>{document.documentElement.className=a;localStorage.setItem(`theme`,a)};const getTheme=()=>{const a=localStorage.getItem(`theme`);const b=a?a:`dark`;setTheme(b)};getTheme()</script></nav><h1>advice</h1></header><main><ul><li><a href=https://birabittoh.github.io/blog/self-host/>Self-hosting Extravaganza</a><li><a href=https://birabittoh.github.io/blog/void-xfce/>Modernizing XFCE</a><li><a href=https://birabittoh.github.io/blog/reflector/>Update your mirrors!</a><li><a href=https://birabittoh.github.io/blog/fomo/>My opinion on FOMO</a><li><a href=https://birabittoh.github.io/blog/data-volatility/>Data volatility</a><li><a href=https://birabittoh.github.io/blog/you-should-use-linux/>You should probably use Linux</a></ul></main><footer><hr><div class=footContainer><div class=footLeft><p>Licensed under <a rel="noopener noreferrer" href=https://fr.wikipedia.org/wiki/Licence_MIT target=_blank>MIT</a><br> Built with <a rel="noopener noreferrer" href=https://www.getzola.org target=_blank>Zola</a> using <a rel="noopener noreferrer" href=https://github.com/BiRabittoh/anemone target=_blank>anemone</a> theme & <a rel="noopener noreferrer" href=https://github.com/Speyll/veqev target=_blank>veqev</a> colors.<br></div><div class=footRight><a href=https://wobble.town/visit/528 target=_blank><img class="footGif noStyle" alt=footGif loading=lazy src=https://wobble.town/visit/528/wobble.gif></a><a rel="noopener noreferrer" title="Subscribe via RSS for updates." class=metaData href=https://birabittoh.github.io/atom.xml target=_blank>RSS</a></div></div></footer></div>
A tags/ai/atom.xml

@@ -0,0 +1,61 @@

+<?xml version="1.0" encoding="UTF-8"?> +<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"> + <title>BiRabittoh - ai</title> + <subtitle>Tech and privacy ramblings from a random italian dude.</subtitle> + <link rel="self" type="application/atom+xml" href="https://birabittoh.github.io/tags/ai/atom.xml"/> + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/"/> + <generator uri="https://www.getzola.org/">Zola</generator> + <updated>2022-09-21T00:00:00+00:00</updated> + <id>https://birabittoh.github.io/tags/ai/atom.xml</id> + <entry xml:lang="en"> + <title>The AI takeover is near?</title> + <published>2022-09-21T00:00:00+00:00</published> + <updated>2022-09-21T00:00:00+00:00</updated> + + <author> + <name> + + BiRabittoh + + </name> + </author> + + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/blog/ai-art-contest/"/> + <id>https://birabittoh.github.io/blog/ai-art-contest/</id> + + <content type="html" xml:base="https://birabittoh.github.io/blog/ai-art-contest/">&lt;h2 id=&quot;context&quot;&gt;Context&lt;&#x2F;h2&gt; +&lt;p&gt;August 29, 2022. +The Colorado State Fair gives out prizes for various art categories in a contest. Let’s have a look at &lt;em&gt;Théâtre D’opéra Spatial&lt;&#x2F;em&gt;, the winner for category no.5: &lt;em&gt;Digital Arts &#x2F; Digitally-Manipulated Photography&lt;&#x2F;em&gt; (&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;coloradostatefair.com&#x2F;wp-content&#x2F;uploads&#x2F;2022&#x2F;08&#x2F;2022-Fine-Arts-First-Second-Third.pdf&quot;&gt;leaderboard&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt; +&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.tuttotech.net&#x2F;wp-content&#x2F;uploads&#x2F;2022&#x2F;09&#x2F;Intelligenza-artificiale-quadro-1.jpg&quot; alt=&quot;Théâtre D’opéra Spatial&quot; &#x2F;&gt;&lt;&#x2F;p&gt; +&lt;p&gt;That same day, a heated debate started on Twitter (as if that weren’t the norm there). That’s because the winner of this art contest used Midjourney, a popular AI image generator, to generate their entry.&lt;&#x2F;p&gt; +&lt;blockquote&gt; +&lt;p&gt;We’re watching the death of artistry unfold right before our eyes — if creative jobs aren’t safe from machines, then even high-skilled jobs are in danger of becoming obsolete&lt;&#x2F;p&gt; +&lt;&#x2F;blockquote&gt; +&lt;p&gt;Source: &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nitter.it&#x2F;omnimorpho&#x2F;status&#x2F;1564782875072872450&quot;&gt;@OmniMorpho&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;the-debate&quot;&gt;The debate&lt;&#x2F;h2&gt; +&lt;p&gt;While you could argue that the effort the creator (Jason M. Allen) put in was minuscule in comparison to the years of study and preparation an artist needs to undertake, I don’t think that actually matters when it comes to winning a competition or making an artpiece in general.&lt;&#x2F;p&gt; +&lt;p&gt;First of all, &lt;em&gt;art is totally subjective&lt;&#x2F;em&gt;. I could spend 5 seconds drawing a stick figure in MSPaint and have a contemporary art critique tell me it’s garbage, while people from another age might see a complaint towards modern, lifeless technology. This feels like a hyperbole, but I don’t think it’s that far from reality.&lt;&#x2F;p&gt; +&lt;p&gt;In 1961 Italian artist Piero Manzoni put his &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Artist%27s_Shit&quot;&gt;literal feces&lt;&#x2F;a&gt; in 90 cans and sold them as an artpiece. He also created a “magic base”, in the sense that you could put anything or anyone on it and that would become an artpiece in itself.&lt;&#x2F;p&gt; +&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;upload.wikimedia.org&#x2F;wikipedia&#x2F;commons&#x2F;c&#x2F;c2&#x2F;Piero_Manzoni_-_Merda_D%27artista_%281961%29_-_panoramio.jpg&quot; alt=&quot;Merda d’artista&quot; &#x2F;&gt;&lt;&#x2F;p&gt; +&lt;p&gt;He created this because he saw &lt;em&gt;art as a relic of the artist&lt;&#x2F;em&gt;. Any object or even person can become an art piece if an artist puts his sign on it. But how do you become an artist? By making something that makes people discuss, something new and innovative that nobody ever thought about doing before. That’s what Mr. Allen did and that’s why I think he deserves his price.&lt;&#x2F;p&gt; +&lt;p&gt;Before photography was invented, artists generally strove to make their painting as realistic as possible. As soon as people were able to cheaply make perfect copies of reality, artists began experimenting with new techniques, things that a camera could never do. Allen showed everyone how technology just reached a new milestone, introducing a new need for artists to innovate and create something exclusive to their abilities. Something an AI can’t reproduce. Yet.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;a-slight-hole-in-this-argument&quot;&gt;A slight hole in this argument&lt;&#x2F;h2&gt; +&lt;p&gt;But wait. The competition judges did not know he used an AI to make his art piece. So how could they have considered it innovative and revolutionary?&lt;&#x2F;p&gt; +&lt;p&gt;If you take a look at the 2nd and 3rd entries of the contest, you’ll see they’re clearly made by humans and clearly have a symbolic value. This does not apply to Allen’s entry, which is just VERY good looking. If I were a judge, I would not have chosen Allen’s work to win the competition, but again, &lt;em&gt;art is subjective&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;I tried to find out more about the criteria for the evaluation of this contest’s entries and I found this:&lt;&#x2F;p&gt; +&lt;blockquote&gt; +&lt;p&gt;“And there should be no lagging or hanging back by anybody who has anything worth exhibiting”&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;coloradostatefair.com&#x2F;competitions&#x2F;general-entry-fine-arts&#x2F;fine-arts-exhibition&#x2F;&quot;&gt;Source&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;Also, they wrote this about the “under 18” art showcase:&lt;&#x2F;p&gt; +&lt;blockquote&gt; +&lt;p&gt;Art must be original in painting, drawing, sculpture, ceramics, photography, jewelry, and more! Have fun, be creative, enter to win.&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;coloradostatefair.com&#x2F;competitions&#x2F;general-entry-fine-arts&#x2F;amateur-art-2&#x2F;&quot;&gt;Source&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt; +&lt;p&gt;Whichever way you put it, Théâtre D’opéra Spatial deserves to be called an art piece. The judges apparently valued aesthetics more than symbolic meaning, and their opinion cannot be logically disputed. Everyone gives a value to an artpiece based on their personal studies and experiences.&lt;&#x2F;p&gt; +&lt;p&gt;Now, knowing about the tools he used, we know Allen did something that nobody ever thought (or managed) to do before. If he hadn’t won that contest, this debate would never have started, but he did. That’s what makes him an artist and, consequently, his creation a work of art.&lt;&#x2F;p&gt; +</content> + + </entry> +</feed>
A tags/ai/index.html

@@ -0,0 +1,1 @@

+<!doctype html><html lang=en><head><meta charset=UTF-8><meta content="IE=edge" http-equiv=X-UA-Compatible><meta content="text/html; charset=UTF-8" http-equiv=content-type><meta content="width=device-width,initial-scale=1,user-scalable=no" name=viewport><meta content="index, follow" name=robots><title>BiRabittoh</title><meta content=BiRabittoh name=title><meta content="Tech and privacy ramblings from a random italian dude." name=description><meta content=website property=og:type><meta content=https://birabittoh.github.io/ property=og:url><meta content=BiRabittoh property=og:site_name><meta content=BiRabittoh property=og:title><meta content="Tech and privacy ramblings from a random italian dude." property=og:description><meta content=summary_large_image property=twitter:card><meta content=https://birabittoh.github.io/ property=twitter:url><meta content=BiRabittoh property=twitter:title><meta content="Tech and privacy ramblings from a random italian dude." property=twitter:description><link href=https://birabittoh.github.io/ rel=canonical><link href=https://birabittoh.github.io/atom.xml rel=alternate title=RSS type=application/atom+xml><link href=https://birabittoh.github.io/css/style.css rel=stylesheet><body><div class=wrapper><header><nav class=navBar><a href=/>/home/</a><a href=/about>/about/</a><a href=/links>/links/</a><a href=/blog>/blog/</a><div class=themeSwitch><button class="themeButton light" onclick="setTheme('light')" title="Light mode">◐</button><button class="themeButton dark" onclick="setTheme('dark')" title="Dark mode">◑</button></div><script>const setTheme=a=>{document.documentElement.className=a;localStorage.setItem(`theme`,a)};const getTheme=()=>{const a=localStorage.getItem(`theme`);const b=a?a:`dark`;setTheme(b)};getTheme()</script></nav><h1>ai</h1></header><main><ul><li><a href=https://birabittoh.github.io/blog/ai-art-contest/>The AI takeover is near?</a></ul></main><footer><hr><div class=footContainer><div class=footLeft><p>Licensed under <a rel="noopener noreferrer" href=https://fr.wikipedia.org/wiki/Licence_MIT target=_blank>MIT</a><br> Built with <a rel="noopener noreferrer" href=https://www.getzola.org target=_blank>Zola</a> using <a rel="noopener noreferrer" href=https://github.com/BiRabittoh/anemone target=_blank>anemone</a> theme & <a rel="noopener noreferrer" href=https://github.com/Speyll/veqev target=_blank>veqev</a> colors.<br></div><div class=footRight><a href=https://wobble.town/visit/528 target=_blank><img class="footGif noStyle" alt=footGif loading=lazy src=https://wobble.town/visit/528/wobble.gif></a><a rel="noopener noreferrer" title="Subscribe via RSS for updates." class=metaData href=https://birabittoh.github.io/atom.xml target=_blank>RSS</a></div></div></footer></div>
A tags/art/atom.xml

@@ -0,0 +1,61 @@

+<?xml version="1.0" encoding="UTF-8"?> +<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"> + <title>BiRabittoh - art</title> + <subtitle>Tech and privacy ramblings from a random italian dude.</subtitle> + <link rel="self" type="application/atom+xml" href="https://birabittoh.github.io/tags/art/atom.xml"/> + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/"/> + <generator uri="https://www.getzola.org/">Zola</generator> + <updated>2022-09-21T00:00:00+00:00</updated> + <id>https://birabittoh.github.io/tags/art/atom.xml</id> + <entry xml:lang="en"> + <title>The AI takeover is near?</title> + <published>2022-09-21T00:00:00+00:00</published> + <updated>2022-09-21T00:00:00+00:00</updated> + + <author> + <name> + + BiRabittoh + + </name> + </author> + + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/blog/ai-art-contest/"/> + <id>https://birabittoh.github.io/blog/ai-art-contest/</id> + + <content type="html" xml:base="https://birabittoh.github.io/blog/ai-art-contest/">&lt;h2 id=&quot;context&quot;&gt;Context&lt;&#x2F;h2&gt; +&lt;p&gt;August 29, 2022. +The Colorado State Fair gives out prizes for various art categories in a contest. Let’s have a look at &lt;em&gt;Théâtre D’opéra Spatial&lt;&#x2F;em&gt;, the winner for category no.5: &lt;em&gt;Digital Arts &#x2F; Digitally-Manipulated Photography&lt;&#x2F;em&gt; (&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;coloradostatefair.com&#x2F;wp-content&#x2F;uploads&#x2F;2022&#x2F;08&#x2F;2022-Fine-Arts-First-Second-Third.pdf&quot;&gt;leaderboard&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt; +&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.tuttotech.net&#x2F;wp-content&#x2F;uploads&#x2F;2022&#x2F;09&#x2F;Intelligenza-artificiale-quadro-1.jpg&quot; alt=&quot;Théâtre D’opéra Spatial&quot; &#x2F;&gt;&lt;&#x2F;p&gt; +&lt;p&gt;That same day, a heated debate started on Twitter (as if that weren’t the norm there). That’s because the winner of this art contest used Midjourney, a popular AI image generator, to generate their entry.&lt;&#x2F;p&gt; +&lt;blockquote&gt; +&lt;p&gt;We’re watching the death of artistry unfold right before our eyes — if creative jobs aren’t safe from machines, then even high-skilled jobs are in danger of becoming obsolete&lt;&#x2F;p&gt; +&lt;&#x2F;blockquote&gt; +&lt;p&gt;Source: &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nitter.it&#x2F;omnimorpho&#x2F;status&#x2F;1564782875072872450&quot;&gt;@OmniMorpho&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;the-debate&quot;&gt;The debate&lt;&#x2F;h2&gt; +&lt;p&gt;While you could argue that the effort the creator (Jason M. Allen) put in was minuscule in comparison to the years of study and preparation an artist needs to undertake, I don’t think that actually matters when it comes to winning a competition or making an artpiece in general.&lt;&#x2F;p&gt; +&lt;p&gt;First of all, &lt;em&gt;art is totally subjective&lt;&#x2F;em&gt;. I could spend 5 seconds drawing a stick figure in MSPaint and have a contemporary art critique tell me it’s garbage, while people from another age might see a complaint towards modern, lifeless technology. This feels like a hyperbole, but I don’t think it’s that far from reality.&lt;&#x2F;p&gt; +&lt;p&gt;In 1961 Italian artist Piero Manzoni put his &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Artist%27s_Shit&quot;&gt;literal feces&lt;&#x2F;a&gt; in 90 cans and sold them as an artpiece. He also created a “magic base”, in the sense that you could put anything or anyone on it and that would become an artpiece in itself.&lt;&#x2F;p&gt; +&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;upload.wikimedia.org&#x2F;wikipedia&#x2F;commons&#x2F;c&#x2F;c2&#x2F;Piero_Manzoni_-_Merda_D%27artista_%281961%29_-_panoramio.jpg&quot; alt=&quot;Merda d’artista&quot; &#x2F;&gt;&lt;&#x2F;p&gt; +&lt;p&gt;He created this because he saw &lt;em&gt;art as a relic of the artist&lt;&#x2F;em&gt;. Any object or even person can become an art piece if an artist puts his sign on it. But how do you become an artist? By making something that makes people discuss, something new and innovative that nobody ever thought about doing before. That’s what Mr. Allen did and that’s why I think he deserves his price.&lt;&#x2F;p&gt; +&lt;p&gt;Before photography was invented, artists generally strove to make their painting as realistic as possible. As soon as people were able to cheaply make perfect copies of reality, artists began experimenting with new techniques, things that a camera could never do. Allen showed everyone how technology just reached a new milestone, introducing a new need for artists to innovate and create something exclusive to their abilities. Something an AI can’t reproduce. Yet.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;a-slight-hole-in-this-argument&quot;&gt;A slight hole in this argument&lt;&#x2F;h2&gt; +&lt;p&gt;But wait. The competition judges did not know he used an AI to make his art piece. So how could they have considered it innovative and revolutionary?&lt;&#x2F;p&gt; +&lt;p&gt;If you take a look at the 2nd and 3rd entries of the contest, you’ll see they’re clearly made by humans and clearly have a symbolic value. This does not apply to Allen’s entry, which is just VERY good looking. If I were a judge, I would not have chosen Allen’s work to win the competition, but again, &lt;em&gt;art is subjective&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;I tried to find out more about the criteria for the evaluation of this contest’s entries and I found this:&lt;&#x2F;p&gt; +&lt;blockquote&gt; +&lt;p&gt;“And there should be no lagging or hanging back by anybody who has anything worth exhibiting”&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;coloradostatefair.com&#x2F;competitions&#x2F;general-entry-fine-arts&#x2F;fine-arts-exhibition&#x2F;&quot;&gt;Source&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;Also, they wrote this about the “under 18” art showcase:&lt;&#x2F;p&gt; +&lt;blockquote&gt; +&lt;p&gt;Art must be original in painting, drawing, sculpture, ceramics, photography, jewelry, and more! Have fun, be creative, enter to win.&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;coloradostatefair.com&#x2F;competitions&#x2F;general-entry-fine-arts&#x2F;amateur-art-2&#x2F;&quot;&gt;Source&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt; +&lt;p&gt;Whichever way you put it, Théâtre D’opéra Spatial deserves to be called an art piece. The judges apparently valued aesthetics more than symbolic meaning, and their opinion cannot be logically disputed. Everyone gives a value to an artpiece based on their personal studies and experiences.&lt;&#x2F;p&gt; +&lt;p&gt;Now, knowing about the tools he used, we know Allen did something that nobody ever thought (or managed) to do before. If he hadn’t won that contest, this debate would never have started, but he did. That’s what makes him an artist and, consequently, his creation a work of art.&lt;&#x2F;p&gt; +</content> + + </entry> +</feed>
A tags/art/index.html

@@ -0,0 +1,1 @@

+<!doctype html><html lang=en><head><meta charset=UTF-8><meta content="IE=edge" http-equiv=X-UA-Compatible><meta content="text/html; charset=UTF-8" http-equiv=content-type><meta content="width=device-width,initial-scale=1,user-scalable=no" name=viewport><meta content="index, follow" name=robots><title>BiRabittoh</title><meta content=BiRabittoh name=title><meta content="Tech and privacy ramblings from a random italian dude." name=description><meta content=website property=og:type><meta content=https://birabittoh.github.io/ property=og:url><meta content=BiRabittoh property=og:site_name><meta content=BiRabittoh property=og:title><meta content="Tech and privacy ramblings from a random italian dude." property=og:description><meta content=summary_large_image property=twitter:card><meta content=https://birabittoh.github.io/ property=twitter:url><meta content=BiRabittoh property=twitter:title><meta content="Tech and privacy ramblings from a random italian dude." property=twitter:description><link href=https://birabittoh.github.io/ rel=canonical><link href=https://birabittoh.github.io/atom.xml rel=alternate title=RSS type=application/atom+xml><link href=https://birabittoh.github.io/css/style.css rel=stylesheet><body><div class=wrapper><header><nav class=navBar><a href=/>/home/</a><a href=/about>/about/</a><a href=/links>/links/</a><a href=/blog>/blog/</a><div class=themeSwitch><button class="themeButton light" onclick="setTheme('light')" title="Light mode">◐</button><button class="themeButton dark" onclick="setTheme('dark')" title="Dark mode">◑</button></div><script>const setTheme=a=>{document.documentElement.className=a;localStorage.setItem(`theme`,a)};const getTheme=()=>{const a=localStorage.getItem(`theme`);const b=a?a:`dark`;setTheme(b)};getTheme()</script></nav><h1>art</h1></header><main><ul><li><a href=https://birabittoh.github.io/blog/ai-art-contest/>The AI takeover is near?</a></ul></main><footer><hr><div class=footContainer><div class=footLeft><p>Licensed under <a rel="noopener noreferrer" href=https://fr.wikipedia.org/wiki/Licence_MIT target=_blank>MIT</a><br> Built with <a rel="noopener noreferrer" href=https://www.getzola.org target=_blank>Zola</a> using <a rel="noopener noreferrer" href=https://github.com/BiRabittoh/anemone target=_blank>anemone</a> theme & <a rel="noopener noreferrer" href=https://github.com/Speyll/veqev target=_blank>veqev</a> colors.<br></div><div class=footRight><a href=https://wobble.town/visit/528 target=_blank><img class="footGif noStyle" alt=footGif loading=lazy src=https://wobble.town/visit/528/wobble.gif></a><a rel="noopener noreferrer" title="Subscribe via RSS for updates." class=metaData href=https://birabittoh.github.io/atom.xml target=_blank>RSS</a></div></div></footer></div>
A tags/foss/atom.xml

@@ -0,0 +1,543 @@

+<?xml version="1.0" encoding="UTF-8"?> +<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"> + <title>BiRabittoh - foss</title> + <subtitle>Tech and privacy ramblings from a random italian dude.</subtitle> + <link rel="self" type="application/atom+xml" href="https://birabittoh.github.io/tags/foss/atom.xml"/> + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/"/> + <generator uri="https://www.getzola.org/">Zola</generator> + <updated>2023-07-16T00:00:00+00:00</updated> + <id>https://birabittoh.github.io/tags/foss/atom.xml</id> + <entry xml:lang="en"> + <title>Self-hosting Extravaganza</title> + <published>2023-07-16T00:00:00+00:00</published> + <updated>2023-07-16T00:00:00+00:00</updated> + + <author> + <name> + + BiRabittoh + + </name> + </author> + + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/blog/self-host/"/> + <id>https://birabittoh.github.io/blog/self-host/</id> + + <content type="html" xml:base="https://birabittoh.github.io/blog/self-host/">&lt;p&gt;Lately, more and more companies are putting their services behind paywalls, usage limits and closed APIs. Some examples are &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nitter.it&#x2F;elonmusk&#x2F;status&#x2F;1675187969420828672&quot;&gt;Twitter&lt;&#x2F;a&gt; limiting the number of tweets a non-paying user can read, &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.redditinc.com&#x2F;blog&#x2F;2023apiupdates&quot;&gt;Reddit&lt;&#x2F;a&gt; increasing their API price to an extent that’s unbearable for any normal individual and &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;libreddit.kavin.rocks&#x2F;r&#x2F;youtube&#x2F;comments&#x2F;14kmd07&#x2F;youtube_cracking_down_on_if_youre_not_paying_them&#x2F;&quot;&gt;YouTube&lt;&#x2F;a&gt; starting to block their service towards anyone using an adblock extension.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;there-must-be-a-better-way&quot;&gt;There must be a better way&lt;&#x2F;h2&gt; +&lt;p&gt;Luckily, I’ve been interested in &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mendel5&#x2F;alternative-front-ends&quot;&gt;alternative front-ends&lt;&#x2F;a&gt; for a while. These services allow you to get the same (or better) functionality as their corporate counterpart without giving away any of your information in return. Some of these even offer their own free APIs.&lt;&#x2F;p&gt; +&lt;p&gt;Here’s my favorite instances with respect to the service they provide:&lt;&#x2F;p&gt; +&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Service&lt;&#x2F;th&gt;&lt;th&gt;PC&lt;&#x2F;th&gt;&lt;th&gt;Mobile&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt; +&lt;tr&gt;&lt;td&gt;YouTube&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;y.com.sb&#x2F;&quot;&gt;Invidious&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;apt.izzysoft.de&#x2F;fdroid&#x2F;index&#x2F;apk&#x2F;org.polymorphicshade.newpipe&quot;&gt;NewPipe&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;Twitter&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nitter.it&quot;&gt;Nitter&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;apt.izzysoft.de&#x2F;fdroid&#x2F;index&#x2F;apk&#x2F;org.ca.squawker&quot;&gt;Squawker&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;Reddit&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;libreddit.kavin.rocks&quot;&gt;LibReddit&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;libreddit.kavin.rocks&quot;&gt;LibReddit&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;Medium&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;scribe.rip&quot;&gt;Scribe&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;scribe.rip&#x2F;&quot;&gt;Scribe&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt; +&lt;h2 id=&quot;drawbacks&quot;&gt;Drawbacks&lt;&#x2F;h2&gt; +&lt;p&gt;Of course, this is not a perfect solution. There are a lot of problems to be discussed.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;privacy&quot;&gt;Privacy&lt;&#x2F;h3&gt; +&lt;p&gt;First and foremost, these instances do not make any profit. This is not a problem until you really think about it. Can you really trust a random developer offering a (paid) service for thousands of users out of their own kindness? +The answer is “probably yes”, but are you willing to take this risk?&lt;&#x2F;p&gt; +&lt;p&gt;Instance admins could easily edit the upstream source code to make it so they can track their users indefinetly and sell usage data without them even realizing. +This is a given if you use any “normal” (not self-hosted) service, but the difference is big companies are &lt;em&gt;required&lt;&#x2F;em&gt; by GDPR to protect collected user data in a certain way and keep them for a maximum set amount of time.&lt;&#x2F;p&gt; +&lt;p&gt;The same cannot be assured for individuals who apparently don’t even make a profit for what they’re doing.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;scaling&quot;&gt;Scaling&lt;&#x2F;h3&gt; +&lt;p&gt;This buzzword has become a meme in the programming world, but it’s been shown how important it is to consider when dealing with large userbases that can grow exponentially without any warning.&lt;&#x2F;p&gt; +&lt;p&gt;Think about the amount of users who migrated to Mastodon immediately after Elon Musk acquired Twitter. Instance admins were used to having a couple hundred users, so hundred of thousands of new signups made a lot of popular instances slow down or even temporarily shut down while they migrated to new (and more expensive) hardware.&lt;&#x2F;p&gt; +&lt;p&gt;Anything public you use can be subject to this phenomenon, leading to poor user experience, as you’ll be one of the many people wondering why your feed takes one minute to load.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;fine-i-ll-do-it-myself&quot;&gt;Fine, I’ll do it myself&lt;&#x2F;h2&gt; +&lt;p&gt;Since joining the world of minimalism, I had always considered Docker as a bloated way to run multiple virtual machines. I read about people complaining that even simple Python scripts were providing &lt;code&gt;Dockerfile&lt;&#x2F;code&gt; and &lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt; files and I started seeing it as a bloaty way to achieve the same result.&lt;&#x2F;p&gt; +&lt;p&gt;Whenever I wanted to host anything by myself, I used to SSH into my VPS with password authentication (!!!) and expose a public port for each service (!!!). +I used my public IP address to log into my services, so I had to resort to sending cleartext passwords through HTTP (!!!) since TLS was not an option.&lt;&#x2F;p&gt; +&lt;p&gt;Of course, this is possibly the most insecure way to host services on a public server, but I felt that was “secure enough” and nobody would ever be interested in hacking me (!!! × ∞).&lt;&#x2F;p&gt; +&lt;p&gt;Nonetheless, I used to &lt;code&gt;cat &#x2F;var&#x2F;log&#x2F;auth.log&lt;&#x2F;code&gt; to see all the failed login attempts, and pray that nobody actually got my password right. +Nowadays, I look back and laugh at my previous config; at least I’m (almost) sure that nobody actually managed to get in.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;the-right-way&quot;&gt;The right way&lt;&#x2F;h2&gt; +&lt;p&gt;Since I started my new job, I also began experimenting with Docker and found out it’s not as bad as I thought it’d be. I will now let my previous config serve as the perfect example of how NOT to secure your VPS correctly for any self-hosting configuration.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;ditch-password-authentication&quot;&gt;Ditch password authentication&lt;&#x2F;h3&gt; +&lt;p&gt;First of all, password authentication. You’ll be a lot safer as soon as you disable it.&lt;&#x2F;p&gt; +&lt;p&gt;Having it enabled means you’re vulnerable to dictionary and bruteforce attacks. Also, if some new vulnerability is published, the password field is one more way the attacker could send a malicious string to get inside (see &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;scribe.rip&#x2F;geekculture&#x2F;the-log4j-incident-explained-ed0ce6d36df2&quot;&gt;the log4j incident&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt; +&lt;p&gt;A better way of logging into your VPS is through public key authentication.&lt;&#x2F;p&gt; +&lt;p&gt;First, generate a key on your own PC:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;ssh-keygen -t ed25519 -a 100 +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;This will create two files: &lt;code&gt;~&#x2F;.ssh&#x2F;id_ed25519.pub&lt;&#x2F;code&gt; and &lt;code&gt;~&#x2F;.ssh&#x2F;id_ed25519&lt;&#x2F;code&gt;&lt;&#x2F;p&gt; +&lt;p&gt;Now, use the following command to copy your key over to the VPS:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;ssh-copy-id -i ~&amp;#x2F;.ssh&amp;#x2F;id_ed25519 &amp;lt;user&amp;gt;@&amp;lt;host&amp;gt; +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;At this point, if everything went correctly, just add or change the following line in &lt;code&gt;&#x2F;etc&#x2F;ssh&#x2F;sshd_config&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;PasswordAuthentication no +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;At this point, you should be able to log into your VPS without the need to input your password, which is more secure as well as more convenient.&lt;&#x2F;p&gt; +&lt;p&gt;I keep the content of my public and private ssh key files saved as secure notes in my BitWarden account, so I can take them to any PC I want to access my VPS from. +People say this is bad practice (you should only have a key for each host), but I personally feel like it’s not that big of a deal compared to the security mess I had going on before.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;containerize-your-applications&quot;&gt;Containerize your applications&lt;&#x2F;h3&gt; +&lt;p&gt;Now that you have a safe way to SSH into your machine, you can start hosting your own services.&lt;&#x2F;p&gt; +&lt;p&gt;First, some terminology:&lt;&#x2F;p&gt; +&lt;ul&gt; +&lt;li&gt;&lt;code&gt;Dockerfile&lt;&#x2F;code&gt; files are like a list of ingredients. They contain every dependency needed to build a minimal operating system dedicated to running a program. They’re used to build images.&lt;&#x2F;li&gt; +&lt;li&gt;&lt;code&gt;Images&lt;&#x2F;code&gt; are like recipes. You can create some yourself from a Dockerfile or download them from an external repository. They can be instantiated as containers.&lt;&#x2F;li&gt; +&lt;li&gt;&lt;code&gt;Containers&lt;&#x2F;code&gt; are like courses. You can instantiate multiple equal courses from the same image and you can actually eat (use) them! They can be managed through &lt;code&gt;docker-compose&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt; +&lt;li&gt;&lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt; files are like menus. They’re a convenient way to instantiate and deinstantiate multiple containers in a specific and reproducible configuration. If you’re not a developer, you’ll be mainly working on these files.&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;p&gt;To get started with Docker, install &lt;code&gt;docker&lt;&#x2F;code&gt; and &lt;code&gt;docker-compose&lt;&#x2F;code&gt; via your package manager of choice. If you want an easy start, you can follow &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.invidious.io&#x2F;installation&#x2F;#docker-compose-method-production&quot;&gt;this guide&lt;&#x2F;a&gt; to host our own Invidious instance.&lt;&#x2F;p&gt; +&lt;p&gt;It’s not that hard, but you might need to read the official &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.docker.com&#x2F;compose&#x2F;&quot;&gt;Docker Compose documentation&lt;&#x2F;a&gt; if something doesn’t go as planned.&lt;&#x2F;p&gt; +&lt;p&gt;My advice is to generate an &lt;code&gt;hmac_key&lt;&#x2F;code&gt; using &lt;code&gt;pwgen 20 1&lt;&#x2F;code&gt; or &lt;code&gt;openssl rand -hex 20&lt;&#x2F;code&gt; and insert it in the correct spot inside &lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;Also, remove the &lt;code&gt;127.0.0.1:&lt;&#x2F;code&gt; part in the &lt;code&gt;ports&lt;&#x2F;code&gt; section since we don’t have a reverse proxy set up (yet).&lt;&#x2F;p&gt; +&lt;p&gt;After you’re done configuring, you can type &lt;code&gt;docker-compose up -d&lt;&#x2F;code&gt; to pull all required images and instantiate your containers, and &lt;code&gt;docker-compose down&lt;&#x2F;code&gt; if you want to stop and remove everything.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;use-a-reverse-proxy&quot;&gt;Use a reverse proxy&lt;&#x2F;h3&gt; +&lt;p&gt;If you’ve followed that guide correctly, you should now have two containers that communicate through a network. You can find out their names by running &lt;code&gt;docker ps -a&lt;&#x2F;code&gt;. Take note of the name of your main invidious container, which will be referred as &lt;code&gt;invidious&lt;&#x2F;code&gt; for the rest of this guide.&lt;&#x2F;p&gt; +&lt;p&gt;Problem is, you’re still using an IP address and communicating in cleartext through HTTP! This means your ISP can read every single detail in every single request you make.&lt;&#x2F;p&gt; +&lt;p&gt;Luckily, there is a way to get a cool domain name for free that also happens to include free and auto-generated TLS certificates.&lt;&#x2F;p&gt; +&lt;p&gt;First, create an account on &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.duckdns.org&#x2F;&quot;&gt;DuckDNS&lt;&#x2F;a&gt; and set up a free domain.&lt;&#x2F;p&gt; +&lt;p&gt;Just make a new directory near the one you used for Invidious and create a new &lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;mkdir swag +cd swag +nano docker-compose.yml +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;You can paste and edit accordingly the lines in &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.linuxserver.io&#x2F;general&#x2F;swag#creating-a-swag-container&quot;&gt;this guide&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;For example, instead of &lt;code&gt;DNSPLUGIN=cloudflare&lt;&#x2F;code&gt; you should have &lt;code&gt;DNSPLUGIN=duckdns&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;When you’re done, start your container with &lt;code&gt;docker-compose up -d&lt;&#x2F;code&gt;. This will create the config folder in &lt;code&gt;&#x2F;etc&#x2F;config&#x2F;swag&lt;&#x2F;code&gt; as well as a new network called &lt;code&gt;swag_default&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;Now we need to create a custom subdomain for Invidious. You can do it by creating the following file: &lt;code&gt;&#x2F;etc&#x2F;config&#x2F;swag&#x2F;nginx&#x2F;proxy-confs&#x2F;invidious.subdomain.conf&lt;&#x2F;code&gt; with this content:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;server { + listen 443 ssl http2; + listen [::]:443 ssl http2; + + server_name y.*; + + include &amp;#x2F;config&amp;#x2F;nginx&amp;#x2F;ssl.conf; + + client_max_body_size 0; + + location &amp;#x2F; { + include &amp;#x2F;config&amp;#x2F;nginx&amp;#x2F;proxy.conf; + include &amp;#x2F;config&amp;#x2F;nginx&amp;#x2F;resolver.conf; + set $upstream_app invidious; + set $upstream_port 3000; + set $upstream_proto http; + proxy_pass $upstream_proto:&amp;#x2F;&amp;#x2F;$upstream_app:$upstream_port; + } +} +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Where:&lt;&#x2F;p&gt; +&lt;ul&gt; +&lt;li&gt;&lt;code&gt;server_name yt.*&lt;&#x2F;code&gt;: &lt;code&gt;yt&lt;&#x2F;code&gt; is the subdomain of choice;&lt;&#x2F;li&gt; +&lt;li&gt;&lt;code&gt;set $upstream_app invidious;&lt;&#x2F;code&gt;: &lt;code&gt;invidious&lt;&#x2F;code&gt; is the name of the main Invidious container;&lt;&#x2F;li&gt; +&lt;li&gt;&lt;code&gt;set $upstream_port 3000;&lt;&#x2F;code&gt;: &lt;code&gt;3000&lt;&#x2F;code&gt; is the Invidious port.&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;p&gt;There’s one last step remaining. Invidious and Swag are two separate containers, so they cannot communicate unless they’re connected to the same network. You can connect Invidious to Swag’s network with the following command, where &lt;code&gt;invidious&lt;&#x2F;code&gt; is the name of your main Invidious container.&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;docker network connect swag_default invidious +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Finally, you can visit https:&#x2F;&#x2F;yt.&amp;lt;your-domain&amp;gt;.duckdns.org&#x2F; and check if you can access Invidious through HTTPS.&lt;&#x2F;p&gt; +&lt;p&gt;Note: now that you have a reverse proxy set up, you can remove your &lt;code&gt;ports:&lt;&#x2F;code&gt; section entirely from Invidious’ &lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt;. +You can do this because the containers are communicating internally to the &lt;code&gt;swag_default&lt;&#x2F;code&gt; network, without the need to expose any ports to the outside. +After you’re done, remember to reload your configuration by running &lt;code&gt;docker-compose restart&lt;&#x2F;code&gt; in your Invidious folder.&lt;&#x2F;p&gt; +&lt;p&gt;Ideally, the only container with exposed ports in your VPS should be Swag exposing ports 80 (HTTP) and 443 (HTTPS).&lt;&#x2F;p&gt; +&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt; +&lt;p&gt;Self-hosting is not easy. It’s been my &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.froth.zone&#x2F;wiki&#x2F;Camino_de_Santiago&quot;&gt;Camino de Santiago&lt;&#x2F;a&gt;: a long path of redemption for the sins I have committed in my young age. +Even if I made a lot of mistakes, in the end I’ve learned a lot about dev-ops and cybersecurity, as well as precious skills that proved themselves useful for my engineering job.&lt;&#x2F;p&gt; +&lt;p&gt;You can find a full list of self-hostable services &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;awesome-selfhosted&#x2F;awesome-selfhosted&quot;&gt;here&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt; +</content> + + </entry> + <entry xml:lang="en"> + <title>Modernizing XFCE</title> + <published>2023-02-05T00:00:00+00:00</published> + <updated>2023-02-05T00:00:00+00:00</updated> + + <author> + <name> + + BiRabittoh + + </name> + </author> + + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/blog/void-xfce/"/> + <id>https://birabittoh.github.io/blog/void-xfce/</id> + + <content type="html" xml:base="https://birabittoh.github.io/blog/void-xfce/">&lt;p&gt;This article is more of a memo for myself. Since I often re-install Linux systems, I spend a lot of time doing repetitive tasks and often forget some steps, which leads me to waste even more time figuring out what’s wrong.&lt;&#x2F;p&gt; +&lt;p&gt;These instructions allow you to get a fully functional and modern-looking XFCE desktop on a fresh install of &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;voidlinux.org&#x2F;&quot;&gt;Void Linux&lt;&#x2F;a&gt; (even though they can be adapted to work in any distro).&lt;&#x2F;p&gt; +&lt;h2 id=&quot;initial-system-update&quot;&gt;Initial system update&lt;&#x2F;h2&gt; +&lt;p&gt;First thing I tried was to update the system, but the ISO was quite old. I had to update &lt;code&gt;xbps&lt;&#x2F;code&gt; before anything else:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;sudo xbps-install -Su xbps +sudo xbps-install -Su +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;h2 id=&quot;avoid-session-saving&quot;&gt;Avoid session saving&lt;&#x2F;h2&gt; +&lt;p&gt;One thing I hate about XFCE is its fixation to save sessions. A lot of times I get my session saved and restored even with all settings turned off.&lt;&#x2F;p&gt; +&lt;p&gt;A quick and easy solution to disable session saving entirely is just to create an empty file in place of the &lt;code&gt;sessions&lt;&#x2F;code&gt; directory.&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;rm ~&amp;#x2F;.cache&amp;#x2F;sessions -rf +touch ~&amp;#x2F;.cache&amp;#x2F;sessions +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;This way, even with everything turned on, XFCE fails create a folder with that name and everything works (or doesn’t, in this case) like a charm.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;change-that-shell&quot;&gt;Change that shell&lt;&#x2F;h2&gt; +&lt;p&gt;Your shell is the main tool you use to communicate with your system, so it makes sense to replace &lt;code&gt;bash&lt;&#x2F;code&gt; with something more modern and feature-rich.&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;sudo xbps-install -S zsh zsh-completions curl +chsh -s &amp;#x2F;bin&amp;#x2F;zsh +zsh +curl -fsSL https:&amp;#x2F;&amp;#x2F;raw.githubusercontent.com&amp;#x2F;zimfw&amp;#x2F;install&amp;#x2F;master&amp;#x2F;install.zsh | zsh +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;h2 id=&quot;get-some-good-sound-quality&quot;&gt;Get some good sound quality&lt;&#x2F;h2&gt; +&lt;p&gt;I don’t like &lt;code&gt;pulseaudio&lt;&#x2F;code&gt;. Let’s replace it with &lt;code&gt;pipewire&lt;&#x2F;code&gt; and &lt;code&gt;wireplumber&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;su +xbps-install pipewire wireplumber +mkdir -p &amp;#x2F;etc&amp;#x2F;pipewire&amp;#x2F;pipewire.conf.d +sed &amp;#x27;&amp;#x2F;path.*=.*pipewire-media-session&amp;#x2F;s&amp;#x2F;{&amp;#x2F;#{&amp;#x2F;&amp;#x27; \ +&amp;#x2F;usr&amp;#x2F;share&amp;#x2F;pipewire&amp;#x2F;pipewire.conf &amp;gt; &amp;#x2F;etc&amp;#x2F;pipewire&amp;#x2F;pipewire.conf +echo &amp;#x27;context.exec = [ { path = &amp;quot;&amp;#x2F;usr&amp;#x2F;bin&amp;#x2F;wireplumber&amp;quot; args = &amp;quot;&amp;quot; } ]&amp;#x27; \ +&amp;gt; &amp;#x2F;etc&amp;#x2F;pipewire&amp;#x2F;pipewire.conf.d&amp;#x2F;10-wireplumber.conf +ln -s &amp;#x2F;usr&amp;#x2F;share&amp;#x2F;applications&amp;#x2F;pipewire* &amp;#x2F;etc&amp;#x2F;xdg&amp;#x2F;autostart +xbps-remove pulseaudio alsa-plugins-pulseaudio +reboot +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;h2 id=&quot;make-firefox-more-secure&quot;&gt;Make Firefox more secure&lt;&#x2F;h2&gt; +&lt;p&gt;I like Firefox as a browser, but it doesn’t come with sane defaults as far as privacy’s concerned.&lt;&#x2F;p&gt; +&lt;p&gt;First, visit &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ffprofile.com&#x2F;&quot;&gt;Firefox Profilemaker&lt;&#x2F;a&gt; and create a customized &lt;code&gt;profile.zip&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;Then, extract your zip file to the correct destination:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;sudo xbps-install zip unzip p7zip xarchiver thunar-archive-plugin +unzip -o ~&amp;#x2F;Downloads&amp;#x2F;profile.zip -d ~&amp;#x2F;.mozilla&amp;#x2F;firefox&amp;#x2F;xxxx.default-default&amp;#x2F; +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Some useful extensions I always install are:&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;addons.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;addon&#x2F;bitwarden-password-manager&quot;&gt;Bitwarden&lt;&#x2F;a&gt;, a password manager;&lt;&#x2F;li&gt; +&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;addon&#x2F;decentraleyes&quot;&gt;Decentraleyes&lt;&#x2F;a&gt;, to serve common JS libraries locally;&lt;&#x2F;li&gt; +&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;addon&#x2F;istilldontcareaboutcookies&quot;&gt;I still don’t care about cookies&lt;&#x2F;a&gt;, to hide and auto-reject cookie warnings;&lt;&#x2F;li&gt; +&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;addon&#x2F;libredirect&quot;&gt;LibRedirect&lt;&#x2F;a&gt;, a redirector for &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mendel5&#x2F;alternative-front-ends&quot;&gt;alternative front-ends&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;addons.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;addon&#x2F;sponsorblock&quot;&gt;SponsorBlock&lt;&#x2F;a&gt;, to skip YouTube sponsorships automagically;&lt;&#x2F;li&gt; +&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;addon&#x2F;ublock-origin&quot;&gt;uBlock Origin&lt;&#x2F;a&gt;, the best ad-blocker.&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;h2 id=&quot;customize-your-de&quot;&gt;Customize your DE&lt;&#x2F;h2&gt; +&lt;p&gt;Install the last required packages for desktop usability:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;sudo xbps-install -S vpm xfce4-whiskermenu-plugin xfce4-clipman-plugin \ +xfce4-pulseaudio-plugin xfce4-screenshooter xclip micro neovim mpv yt-dlp +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Remove orphaned and cached packages:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;sudo xbps-remove -Oo +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Now, open XFCE’s Settings Manager and set the following options:&lt;&#x2F;p&gt; +&lt;ul&gt; +&lt;li&gt;Appearance → Style → Choose “Adwaita-dark”&lt;&#x2F;li&gt; +&lt;li&gt;Desktop → Background → &lt;em&gt;&amp;lt;Choose your favorite wallpaper&amp;gt;&lt;&#x2F;em&gt;&lt;&#x2F;li&gt; +&lt;li&gt;Desktop → Icons → Set “Icon type” to “None”&lt;&#x2F;li&gt; +&lt;li&gt;Panel → &lt;em&gt;&amp;lt;Customize your panels&amp;gt;&lt;&#x2F;em&gt;&lt;&#x2F;li&gt; +&lt;li&gt;Screensaver → Disable “Enable Screensaver”&lt;&#x2F;li&gt; +&lt;li&gt;Text Editor Settings → Enable: +&lt;ul&gt; +&lt;li&gt;“Show line numbers”,&lt;&#x2F;li&gt; +&lt;li&gt;“Highlight matching brackets”,&lt;&#x2F;li&gt; +&lt;li&gt;“Wrap long lines”&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;&#x2F;li&gt; +&lt;li&gt;Window Manager → Style → Button layout → Remove “Shade” button from title bar&lt;&#x2F;li&gt; +&lt;li&gt;Window Manager → Advanced → Windows snapping → Enable “To other windows”&lt;&#x2F;li&gt; +&lt;li&gt;Window Manager → Advanced → Wrap workspaces when reaching the screen edge → Disable “With a dragged window”&lt;&#x2F;li&gt; +&lt;li&gt;Window Manager Tweaks → Cycling → Enable: +&lt;ul&gt; +&lt;li&gt;“Cycle through minimized windows in most recently used order”,&lt;&#x2F;li&gt; +&lt;li&gt;“Cycle through windows on all workspaces”,&lt;&#x2F;li&gt; +&lt;li&gt;“Raise windows while cycling”&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;&#x2F;li&gt; +&lt;li&gt;Window Manager Tweaks → Accessibility → Disable: +&lt;ul&gt; +&lt;li&gt;“Raise windows when any mouse button is pressed”,&lt;&#x2F;li&gt; +&lt;li&gt;“Use mouse wheel on title bar to roll up the window”&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;&#x2F;li&gt; +&lt;li&gt;Window Manager Tweaks → Accessibility → Enable “Notify of urgency by making window’s decoration blink”&lt;&#x2F;li&gt; +&lt;li&gt;Window Manager Tweaks → Compositor → Enable “Show shadows under popup windows”&lt;&#x2F;li&gt; +&lt;li&gt;Xfce Terminal Settings → General → Scrolling → Set “Scrollbar is” to “Disabled”&lt;&#x2F;li&gt; +&lt;li&gt;Xfce Terminal Settings → Appearance → +&lt;ul&gt; +&lt;li&gt;enable “Use system font”,&lt;&#x2F;li&gt; +&lt;li&gt;set “Background” to “Transparent background”,&lt;&#x2F;li&gt; +&lt;li&gt;set Opacity to 0.80;&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;&#x2F;li&gt; +&lt;li&gt;Xfce Terminal Settings → Colors → Presets → Choose “Tango”&lt;&#x2F;li&gt; +&lt;li&gt;Keyboard → Behavior → Enable “Restore num lock state on startup”&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;h2 id=&quot;shortcuts&quot;&gt;Shortcuts&lt;&#x2F;h2&gt; +&lt;p&gt;Finally, set the following shortcuts:&lt;&#x2F;p&gt; +&lt;ul&gt; +&lt;li&gt;Keyboard → Application Shortcuts&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Command&lt;&#x2F;th&gt;&lt;th&gt;Shortcut&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt; +&lt;tr&gt;&lt;td&gt;&lt;code&gt;exo-open --launch TerminalEmulator&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;Super&lt;&#x2F;code&gt; + &lt;code&gt;Return&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;&lt;code&gt;xfce4-popup-whiskermenu&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;Super&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;&lt;code&gt;xfce4-screenshooter --clipboard --region&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;Shift&lt;&#x2F;code&gt; + &lt;code&gt;Super&lt;&#x2F;code&gt; + &lt;code&gt;S&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;&lt;code&gt;xfce4-screenshooter --clipboard --window&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;Super&lt;&#x2F;code&gt; + &lt;code&gt;S&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;&lt;code&gt;xfce4-screenshooter --clipboard --fullscreen&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;Print&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;&lt;code&gt;sh -c &#x27;xclip -selection clipboard -t image&#x2F;png -o &amp;gt; &quot;$HOME&#x2F;Pictures&#x2F;$(date +%Y-%m-%d_%T).png&quot;&#x27;&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;Shift&lt;&#x2F;code&gt; + &lt;code&gt;Super&lt;&#x2F;code&gt; + &lt;code&gt;V&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;&lt;code&gt;xflock4&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;Super&lt;&#x2F;code&gt; + &lt;code&gt;L&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;&lt;code&gt;loginctl suspend&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;Shift&lt;&#x2F;code&gt; + &lt;code&gt;Super&lt;&#x2F;code&gt; + &lt;code&gt;L&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt; +</content> + + </entry> + <entry xml:lang="en"> + <title>Update your mirrors!</title> + <published>2023-01-29T00:00:00+00:00</published> + <updated>2023-01-29T00:00:00+00:00</updated> + + <author> + <name> + + BiRabittoh + + </name> + </author> + + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/blog/reflector/"/> + <id>https://birabittoh.github.io/blog/reflector/</id> + + <content type="html" xml:base="https://birabittoh.github.io/blog/reflector/">&lt;p&gt;Nah, I’m not talking about &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.bathshack.com&#x2F;blog&#x2F;bluetooth-mirrors-everything-you-need-to-know-before-you-buy&#x2F;&quot;&gt;bluetooth mirrors&lt;&#x2F;a&gt;. Mirrors are what powers all distros: they’re a (de)centralized solution for downloading pre-compiled binaries and scripts for your operating system.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;suspicion&quot;&gt;Suspicion&lt;&#x2F;h2&gt; +&lt;p&gt;I like always having the most current version of packages, so I usually update my system several times a day. When, after a day, I ran &lt;code&gt;sudo pacman -Syu&lt;&#x2F;code&gt; and it reported the system being up to date, I was pretty weirded out.&lt;&#x2F;p&gt; +&lt;p&gt;Another day passed, and the system was still up to date. It was not a connection problem, I was connecting to my mirrors and they were reporting absolutely zero updates for my system.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;problem&quot;&gt;Problem&lt;&#x2F;h2&gt; +&lt;p&gt;At the third day of stagnation, I was sure something was up. I looked up the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;archlinux.org&#x2F;mirrors&#x2F;status&#x2F;&quot;&gt;Mirror Status&lt;&#x2F;a&gt; page on ArchLinux’s website and saw that loads of mirrors were out of sync.&lt;&#x2F;p&gt; +&lt;p&gt;I had never touched my mirrorlist before, it was just generated by the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;archlinux&#x2F;archinstall&quot;&gt;archinstall&lt;&#x2F;a&gt; script a few months ago; a lot of Arch-based distros by default ship tools to update your mirrorlist, but I honestly thought I’d never need that.&lt;&#x2F;p&gt; +&lt;p&gt;Pacman’s mirrorlist is located in &lt;code&gt;&#x2F;etc&#x2F;pacman.d&#x2F;mirrorlist&lt;&#x2F;code&gt;. You can filter out uncommented lines with this command:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;grep -v &amp;quot;^#&amp;quot; &amp;#x2F;etc&amp;#x2F;pacman.d&amp;#x2F;mirrorlist +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;And check the actual status of your mirror(s) on the Mirror Status page linked above.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;solution&quot;&gt;Solution&lt;&#x2F;h2&gt; +&lt;p&gt;This will overwrite your mirrorlist, so you’re advised to make a backup before proceeding:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;sudo cp &amp;#x2F;etc&amp;#x2F;pacman.d&amp;#x2F;mirrorlist &amp;#x2F;etc&amp;#x2F;pacman.d&amp;#x2F;mirrorlist.bak +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;I decided to use &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;xyne.dev&#x2F;projects&#x2F;reflector&#x2F;&quot;&gt;reflector&lt;&#x2F;a&gt; to fix this problem. I didn’t want to have to deal with this again, so I enabled the provided systemd timer.&lt;&#x2F;p&gt; +&lt;p&gt;First, install it.&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;sudo pacman -S reflector +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Then, edit &lt;code&gt;&#x2F;etc&#x2F;xdg&#x2F;reflector&#x2F;reflector.conf&lt;&#x2F;code&gt;. I only needed to edit the &lt;code&gt;--country&lt;&#x2F;code&gt; parameter and select countries next to the one where I reside; you can list available countries by running &lt;code&gt;reflector --list-countries&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;--save &amp;#x2F;etc&amp;#x2F;pacman.d&amp;#x2F;mirrorlist +--protocol https +--country Italy,Switzerland,France,Germany,Austria +--latest 5 +--sort age +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Finally, start the service and check if it worked.&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;sudo systemctl start reflector.service +cat &amp;#x2F;etc&amp;#x2F;pacman.d&amp;#x2F;mirrorlist +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;If everything went smoothly, enable reflector’s timer so it runs weekly.&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;sudo systemctl enable reflector.timer +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Done!&lt;&#x2F;p&gt; +&lt;p&gt;Now, by default pacman &lt;em&gt;does&lt;&#x2F;em&gt; update its mirrorlist. It creates a file called &lt;code&gt;mirrorlist.pacnew&lt;&#x2F;code&gt; and it expects you to pick your favorite mirrors each time its generated. You can disable this (now unneeded) behavior by uncommenting and setting &lt;code&gt;NoExtract&lt;&#x2F;code&gt; in &lt;code&gt;&#x2F;etc&#x2F;pacman.conf&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;... +NoExtract = &amp;#x2F;etc&amp;#x2F;pacman.d&amp;#x2F;mirrorlist + +# Misc options +Color +ILoveCandy +ParallelDownloads = 3 +... +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +</content> + + </entry> + <entry xml:lang="en"> + <title>Data volatility</title> + <published>2022-01-14T00:00:00+00:00</published> + <updated>2022-01-14T00:00:00+00:00</updated> + + <author> + <name> + + BiRabittoh + + </name> + </author> + + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/blog/data-volatility/"/> + <id>https://birabittoh.github.io/blog/data-volatility/</id> + + <content type="html" xml:base="https://birabittoh.github.io/blog/data-volatility/">&lt;p&gt;I tried to access my domain at smol.pub yesterday and I noticed the service went down. Fear started rushing through my veins as I noticed I would have to choose another platform and, most importantly, write everything back from scratch since I don’t have a backup. This made me think about the importance of always having a backup stored somewhere.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;why-though&quot;&gt;Why though&lt;&#x2F;h2&gt; +&lt;p&gt;Creating a backup of your important data is crucial. On a daily basis, people discover vulnerabilities that allow remote code execution on any host machine. Try to imagine what would happen if someone ran a ransomware program on your PC. Would you be safe?&lt;&#x2F;p&gt; +&lt;p&gt;This genuinely feels like fearmongery, but it’s something that can seriously happen: you can be attacked by someone that specifically targets you. If you run Windows, you might be part of a botnet (think about all of the unsigned EXE files you’ve run since you installed the OS). What happens when someone doesn’t need your machine anymore? Well, that person might try and squeeze some money from you by holding your files hostage.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;cloud-backups&quot;&gt;Cloud backups&lt;&#x2F;h2&gt; +&lt;p&gt;Most people define cloud storage as follows:&lt;&#x2F;p&gt; +&lt;blockquote&gt; +&lt;p&gt;Cloud storage is a way for businesses and consumers to save data securely online so that it can be accessed anytime from any location and easily shared with those who are granted permission. Cloud storage also offers a way to back up data to facilitate recovery off-site.&lt;&#x2F;p&gt; +&lt;&#x2F;blockquote&gt; +&lt;p&gt;Source: &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.investopedia.com&#x2F;terms&#x2F;c&#x2F;cloud-storage.asp&quot;&gt;Investopedia&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;In reality, cloud storage is no more than some dude’s computer.&lt;&#x2F;p&gt; +&lt;p&gt;As soon as you upload your personal data to any service, you’re trusting it to store it in a safe and private way. If that software is not open source, you’re basically asking to get spied on.&lt;&#x2F;p&gt; +&lt;p&gt;Most people do not care about that, that’s why cloud storage solutions are very popular and basically enabled by default on any device you might buy nowadays.&lt;&#x2F;p&gt; +&lt;p&gt;I personally use cloud storage but I would never actually upload anything I actually care about on it… +If you have to choose, I have a few suggestions.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;don-t-trust-non-encrypted-solutions&quot;&gt;Don’t trust non-encrypted solutions&lt;&#x2F;h3&gt; +&lt;p&gt;Everybody has a Google account nowadays. If you forget your password, there is a way to recover it and get access to everything inside, including your Google Drive contents. As long as there is a password that can be changed or reset, your files are NOT encrypted and fully visible to anyone who has access to the Drive servers (Google or any other government agency that might want to take a peek). +Most cloud solutions work like this, and it’s actually frightening how many people trust megacorporations to have all of their private information available unencrypted.&lt;&#x2F;p&gt; +&lt;p&gt;One encrypted solution I use is mega.nz. +While I can’t be sure that the mega team isn’t spying on me, at least they’re hiding it well if they do. +Mega includes an encryption key with your account, which is not tied to your login information. +This means that if you lose your key, you also lost all of your files, there is absolutely no way to get them back, even if you change your account password.&lt;&#x2F;p&gt; +&lt;p&gt;Now, Mega is not open source, so you can never be sure that there isn’t any backdoor, or that keys aren’t stored together with your personal information, but at least it’s something.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;encrypt-your-data-yourself&quot;&gt;Encrypt your data yourself&lt;&#x2F;h3&gt; +&lt;p&gt;If you really need to trust Google, Apple or Amazon with your files, you can encrypt your files locally with the gpg command. This way, feds and big tech are going to need another password to actually access your private files.&lt;&#x2F;p&gt; +&lt;p&gt;It’s really easy, just two commands mainly.&lt;&#x2F;p&gt; +&lt;p&gt;Encrypt:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;gpg -c --cipher-algo AES256 secret.file +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Decrypt:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;gpg segret.file.gpg +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;If you need to encrypt a folder, you can compress it first:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;tar -cf output.tar.gz secret-folder +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Then encrypt your output.tar.gz archive as if it was a single file.&lt;&#x2F;p&gt; +&lt;p&gt;After decrypting it, you can extract your archive through this command:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;tar -xf output.tar.gz +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Check out Mental Outlaw’s &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;invidio.us&#x2F;M0O7vhvQW30&quot;&gt;video&lt;&#x2F;a&gt; about this very topic.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;local-backups&quot;&gt;Local backups&lt;&#x2F;h2&gt; +&lt;p&gt;This is the best way to backup your data. +You don’t need to encrypt it if you have full physical access to your data, but you would still be vulnerable if it gets lost or stolen, so it’s always better to keep it encrypted and safe.&lt;&#x2F;p&gt; +&lt;p&gt;Of course, if you have a backup hard drive always plugged in your PC, it’s not really secure at all, since one could remotely execute a ransomware that encrypts everything in your PC, including all drives both internal and external, so you would get your backup encrypted with the original files voiding everything you’ve done.&lt;&#x2F;p&gt; +&lt;p&gt;This is why you should keep a GNU&#x2F;Linux device that only serves backup purposes and is turned OFF most of the time. As long as no current runs through your CPU, your files are safe. You should only turn it on once a month and copy everything important over, so you have a safe and offline backup.&lt;&#x2F;p&gt; +&lt;p&gt;You could also use a USB stick or external hard drive, as long as you only plug them in your PC when necessary.&lt;&#x2F;p&gt; +</content> + + </entry> + <entry xml:lang="en"> + <title>You should probably use Linux</title> + <published>2021-04-29T00:00:00+00:00</published> + <updated>2021-04-29T00:00:00+00:00</updated> + + <author> + <name> + + BiRabittoh + + </name> + </author> + + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/blog/you-should-use-linux/"/> + <id>https://birabittoh.github.io/blog/you-should-use-linux/</id> + + <content type="html" xml:base="https://birabittoh.github.io/blog/you-should-use-linux/">&lt;h2 id=&quot;why-are-you-writing-this&quot;&gt;Why are you writing this?&lt;&#x2F;h2&gt; +&lt;p&gt;As you probably know, I like using free software (free as in &lt;em&gt;freedom&lt;&#x2F;em&gt;, not free of charge). Most people see users with this mentality as a group of paranoid psychopaths who circlejerk about their custom systems. While that’s in part true, there’s much more to it.&lt;&#x2F;p&gt; +&lt;p&gt;I often get asked by Windows or MacOS users about why they should think about switching to a GNU&#x2F;Linux OS (which I’ll be referring to as Linux); I’m just going to address everything here so I don’t have to repeat it to everyone who asks.&lt;&#x2F;p&gt; +&lt;p&gt;I’ll try to address every aspect where Linux is objectively better than the competition, then look at some reasons you &lt;em&gt;could&lt;&#x2F;em&gt; have to stick to Windows or, like I did, set up a dual boot.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;what-is-free-software&quot;&gt;What is free software?&lt;&#x2F;h2&gt; +&lt;p&gt;First of all, let’s read the official definition for it.&lt;&#x2F;p&gt; +&lt;blockquote&gt; +&lt;p&gt;A program is free software if the program’s users have the four essential freedoms: +0. The freedom to run the program as you wish, for any purpose.&lt;&#x2F;p&gt; +&lt;ol&gt; +&lt;li&gt;The freedom to study how the program works, and change it so it does your computing as you wish.&lt;&#x2F;li&gt; +&lt;li&gt;The freedom to redistribute copies so you can help others.&lt;&#x2F;li&gt; +&lt;li&gt;The freedom to distribute copies of your modified versions to others. By doing this you can give the whole community a chance to benefit from your changes. +A program is free software if it gives users adequately all of these freedoms.&lt;&#x2F;li&gt; +&lt;&#x2F;ol&gt; +&lt;&#x2F;blockquote&gt; +&lt;p&gt;Source: &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.gnu.org&#x2F;philosophy&#x2F;free-sw.en.html&quot;&gt;Free Software Foundation&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;Let’s examine how this freedom is beneficial.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;linux-is-open&quot;&gt;Linux is open&lt;&#x2F;h3&gt; +&lt;p&gt;Using free software on an open source OS means you always know what’s going on with your PC; if you get curious or have any suspects you can always read the source code (or trust that somebody already did it in your place).&lt;&#x2F;p&gt; +&lt;p&gt;The good thing about Linux is that it doesn’t hide anything from you. Whenever there’s a problem, you can read various logfiles (with different levels of detail) to identify and troubleshoot your problem; it’s also easier to fix problems since you actually know what each program and file does, while troubleshooting in closed-source OSes is like trying to fix a car engine without being able to open the hood.&lt;&#x2F;p&gt; +&lt;p&gt;Some distros, like &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;archlinux.org&#x2F;&quot;&gt;Arch Linux&lt;&#x2F;a&gt;, require you to set everything up from scratch; this means you always know exactly which programs you’re installing and their exact function inside the Linux environment. I would only advise this kind of installation to advanced users, but after you do it the first time you’ll certainly learn a lot about how a Linux OS actually works.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;linux-is-secure&quot;&gt;Linux is secure&lt;&#x2F;h3&gt; +&lt;p&gt;Every single FOSS-oriented website makes this point, I’m just going to re-iterate it just to be sure. +The source code being publicly available doesn’t make software less secure. In fact, it’s way more secure since more people can work on it and fix security flaws. +&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Security_through_obscurity&quot;&gt;Security through obscurity&lt;&#x2F;a&gt; just doesn’t work. You can see that by looking at the number of security breaches that are found every day on closed-source software.&lt;&#x2F;p&gt; +&lt;p&gt;If you make your software closed-source you’re basically betting you and your small team are able to create a better and more secure code than every single other person in the planet. Of course, this assumption is stupid and irrealistic, that’s why FOSS software will always be faster and more secure than closed-source alternatives.&lt;&#x2F;p&gt; +&lt;p&gt;This goes for every kind of software, including the very operating system code. GNU&#x2F;Linux based operating systems are the most secure choice for every kind of user. +More often than not, you can trust the software programmers without even reading the code yourself: since they’re sharing every single line of code, they probably don’t have anything to hide. If they do include malicious code, someone else will probably have noticed by now, provided you didn’t build and run that software straight from the repo a few minutes after the last commit lol&lt;&#x2F;p&gt; +&lt;p&gt;You can also be safe against external attackers. Linux’s &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gs.statcounter.com&#x2F;os-market-share&#x2F;desktop&#x2F;worldwide&#x2F;#monthly-202012-202012-bar&quot;&gt;market share&lt;&#x2F;a&gt; on desktop and laptop PCs was less than 2% as of January 2021, and those people are probably much more tech-savy than the other OSes’ users… +This means attackers will likely target Windows or OS X users, so you can be safe even without using an antivirus or anything similar (even though there &lt;em&gt;are&lt;&#x2F;em&gt; &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.clamav.net&#x2F;&quot;&gt;choices&lt;&#x2F;a&gt; for that, too).&lt;&#x2F;p&gt; +&lt;h3 id=&quot;linux-is-smarter&quot;&gt;Linux is smarter&lt;&#x2F;h3&gt; +&lt;p&gt;Saying that Linux is for &lt;em&gt;everybody&lt;&#x2F;em&gt; would be a risky take. My point is that you &lt;em&gt;probably&lt;&#x2F;em&gt; could benefit from using a Linux system.&lt;&#x2F;p&gt; +&lt;p&gt;If you’re a programmer, Linux is objectively the best OS you can use. As a programmer, I love using the terminal to do stuff more quickly. I also love the level of integration you can have with the system: a lot of programs are designed with a client&#x2F;server model, which makes them work in complex scenarios as long as you have the time and patience to configure them properly.&lt;&#x2F;p&gt; +&lt;p&gt;While Windows still has to retain compatibility with legacy systems, Linux is much more free to do its own thing. Linux will always be smarter and more modern. Just think about the filesystem structure. +Windows is forced to retain a confusing structure, where you have a ton of (not) hidden folders where programmers can store their necessary data… But there are so many choices and they’re not coherent! If I wanted to create a backup of all my settings and save files, I would have to copy all of these folders:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;C:\ProgramData; C:\Users\username\AppData; C:\Users\username\Documents\my games; +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;And I would still miss all of the informations saved on the awful Windows Registry…&lt;&#x2F;p&gt; +&lt;p&gt;On Linux, you just copy the .config folder in your home directory.&lt;&#x2F;p&gt; +&lt;p&gt;Moreover, in Windows 10 you have two ways of editing system settings: the Control Panel and the Windows Settings. But sometimes editing a setting on one side does NOT reflect on the other! +Windows is literally the most confusing OS you can start with… And people still recommend it to beginners over Linux. It’s just dumb.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;linux-is-versatile&quot;&gt;Linux is versatile&lt;&#x2F;h3&gt; +&lt;p&gt;Now, to the point everybody’s been waiting for. Yes, none of the Adobe programs will run &lt;em&gt;natively&lt;&#x2F;em&gt; on any Linux distro. That means if you’re a creative person and you need those programs on a daily basis, maybe you should consider dual booting…&lt;&#x2F;p&gt; +&lt;p&gt;BUT, steps are being made in two different directions:&lt;&#x2F;p&gt; +&lt;ul&gt; +&lt;li&gt;Valve is working on Proton, which allows the execution of most Windows-only applications and games on any Linux system.&lt;&#x2F;li&gt; +&lt;li&gt;More and more open-source alternatives to closed-source standards are being developed by the day.&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;p&gt;While Proton is interesting, I always prefer to run open source software, especially if we’re talking about programs that are also free of charge: imagine trusting a closed-source software you didn’t pay for.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt; +&lt;p&gt;Ok, now I’m getting repetitive so I’ll just get to the point. +Linux is constantly evolving and it has now become the top choice for a lot of people, so let’s try and consider every use case.&lt;&#x2F;p&gt; +&lt;ul&gt; +&lt;li&gt;If you’re a professional that’s deep in the industry and you need some &lt;em&gt;specific&lt;&#x2F;em&gt; program to run perfectly on your device… Yeah, you should use Windows.&lt;&#x2F;li&gt; +&lt;li&gt;If you’re a power user that’s just used to paid software, maybe consider trying out some open source alternative?&lt;&#x2F;li&gt; +&lt;li&gt;If you’re a gamer, I say you should dual boot. I have a Windows 10 LTSC installation that I use &lt;em&gt;exclusively&lt;&#x2F;em&gt; for gaming. While Proton has made Linux gaming feasable, the experience isn’t always the best, especially if you play games that require millisecond-grade accuracy, like rhythm games or competitive shooters.&lt;&#x2F;li&gt; +&lt;li&gt;If you’re a student or employee, Linux would be perfect for you. You can quickly take notes and do office work without the annoying Windows 10 updates popping up and rebooting your system seemingly at random. Also, any Linux system will probably be more light on resource usage than Windows, so you could take some old hardware you thought would never be using again and actually make something useful with it.&lt;&#x2F;li&gt; +&lt;li&gt;If you work in the programming or engineering field, then what are you waiting for? You should try out a Linux OS as soon as possible, and not in a virtual machine. A lot of my friends said they didn’t like Linux because it felt slow… While running on a VM… Duh? Try it out on real hardware so you can feel its superiority.&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;p&gt;Well, I can’t possibly cover &lt;em&gt;every&lt;&#x2F;em&gt; profession and use-case, but I hope I was clear about those I managed to list above. +I’m going to conclude this article with some interesting links about Linux and FOSS you definitely should check out.&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;islinuxabout.xyz&#x2F;&quot;&gt;Is Linux About…?&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;usermod.net&#x2F;why-use-linux&#x2F;&quot;&gt;usermod.net - Why use Linux?&lt;&#x2F;a&gt;&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +</content> + + </entry> + <entry xml:lang="en"> + <title>Modern web bloat</title> + <published>2021-04-09T00:00:00+00:00</published> + <updated>2021-04-09T00:00:00+00:00</updated> + + <author> + <name> + + BiRabittoh + + </name> + </author> + + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/blog/modern-web-bloat/"/> + <id>https://birabittoh.github.io/blog/modern-web-bloat/</id> + + <content type="html" xml:base="https://birabittoh.github.io/blog/modern-web-bloat/">&lt;p&gt;This is it. My first blog post; I suppose this officially makes be a boomer.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;inspiration&quot;&gt;Inspiration&lt;&#x2F;h2&gt; +&lt;p&gt;Some time ago I stumbled upon a &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;invidio.us&#x2F;cvDyQUpaFf4&quot;&gt;video&lt;&#x2F;a&gt;, where the popular Linux influencer &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;lukesmith.xyz&quot;&gt;Luke Smith&lt;&#x2F;a&gt; talked about the effort of looking up a Chicken Parmesan recipe in 2021 without having any adblock or privacy extensions enabled.&lt;&#x2F;p&gt; +&lt;p&gt;That’s because most modern websites take a lot of time to load framework files, ads and trackers. While that’s kinda functional, I think we should change our habits and start making simple websites again.&lt;&#x2F;p&gt; +&lt;p&gt;Yeah, this looks like a first world problem and it probably is, but it’s not as subtle as you think. I’m actually convinced that the internet could actually benefit from this way of thinking, and that’s what I’m going to talk about.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;the-problem&quot;&gt;The problem&lt;&#x2F;h2&gt; +&lt;p&gt;In the early days of the internet, it was common for webpages to be written using only HTML, so we had very ugly but functional websites.&lt;&#x2F;p&gt; +&lt;p&gt;As technology went on, sites needed to get more modern-looking and interactive; that’s why CSS and JavaScript were introduced into the mix, allowing for dynamic websites that could actually change based on user input. +As of nowadays, a lot more stuff went into the mix, to the point where the browser is now the most common program we use in our OS: you can, in fact, use it for doing things that 15+ years ago required external programs, like:&lt;&#x2F;p&gt; +&lt;ul&gt; +&lt;li&gt;playing music and video,&lt;&#x2F;li&gt; +&lt;li&gt;reading PDF files,&lt;&#x2F;li&gt; +&lt;li&gt;doing office work,&lt;&#x2F;li&gt; +&lt;li&gt;checking e-mail,&lt;&#x2F;li&gt; +&lt;li&gt;cloud storage,&lt;&#x2F;li&gt; +&lt;li&gt;etc…&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;p&gt;I guess people just find it more comfortable if they can do everything with a single program, and they’re not to blame for that. This IS the easiest approach for unexperienced people: just have a program that does everything, instead of having to learn how to use a bunch of different software.&lt;&#x2F;p&gt; +&lt;p&gt;This plethora of uses is possible today because of the existence of various libraries and frameworks that simplify JavaScript and CSS and make them easier to develop complicated websites with. +This is good for basic web users who just want functional websites, and great for developers since they can easily code advanced functions inside the browser, which makes them work in every OS.&lt;&#x2F;p&gt; +&lt;p&gt;Sadly, this brings us to the problem: any modern website has become a burden for any browser to load, since our browser needs to download and parse through each library and often fill the page content as you scroll through. +In his video, Luke Smith found that a simple Chicken Parmesan recipe would take up to 5-10 megabytes, which doesn’t sound like a lot, but it actually is.&lt;&#x2F;p&gt; +&lt;p&gt;It’s easier to understand it if you think about it with video-games; any game on 16-bit consoles and earlier, including full-fledged 30+ hour adventures like Final Fantasy 6 and Chrono Trigger, weighs less than one single recipe page (as stated &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blogs.umass.edu&#x2F;Techbytes&#x2F;2014&#x2F;02&#x2F;10&#x2F;history-of-gaming-storage&#x2F;#attachment_2827&quot;&gt;here&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt; +&lt;h2 id=&quot;the-solution&quot;&gt;The solution&lt;&#x2F;h2&gt; +&lt;p&gt;Well, I don’t think this “problem” is getting solved soon, as new frameworks for web development are constantly being introduced. Sadly, it’s a one-way train, but if you’re a web-dev you could actually make a difference yourself!&lt;&#x2F;p&gt; +&lt;p&gt;I mean, this can not apply to all websites. Some of them just NEED to be as responsive and interactive as they are; most of them actually just became bloated at a certain time period (probably mid-2000s) when having a flashy website was cool and different from what everyone else had. +Nowadays you can make a difference by using plain HTML and CSS for your website: this ensures your pages will load instantly and be compatible even with the oldest of browsers! +If you like this philosophy, you can check out other projects that aim for a simpler and faster web, like these ones:&lt;&#x2F;p&gt; +&lt;ul&gt; +&lt;li&gt;&lt;a href=&quot;&#x2F;&#x2F;gemini.circumlunar.space&#x2F;&quot;&gt;gemini:&#x2F;&#x2F;&lt;&#x2F;a&gt;: a new, purposefully limited, internet protocol;&lt;&#x2F;li&gt; +&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;based.cooking&#x2F;&quot;&gt;based.cooking&lt;&#x2F;a&gt;: a modern recipe website based on user collaboration via GitHub;&lt;&#x2F;li&gt; +&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiby.me&#x2F;&quot;&gt;wiby.me&lt;&#x2F;a&gt;: a search engine that aims to only index classic style webpages.&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +</content> + + </entry> +</feed>
A tags/foss/index.html

@@ -0,0 +1,1 @@

+<!doctype html><html lang=en><head><meta charset=UTF-8><meta content="IE=edge" http-equiv=X-UA-Compatible><meta content="text/html; charset=UTF-8" http-equiv=content-type><meta content="width=device-width,initial-scale=1,user-scalable=no" name=viewport><meta content="index, follow" name=robots><title>BiRabittoh</title><meta content=BiRabittoh name=title><meta content="Tech and privacy ramblings from a random italian dude." name=description><meta content=website property=og:type><meta content=https://birabittoh.github.io/ property=og:url><meta content=BiRabittoh property=og:site_name><meta content=BiRabittoh property=og:title><meta content="Tech and privacy ramblings from a random italian dude." property=og:description><meta content=summary_large_image property=twitter:card><meta content=https://birabittoh.github.io/ property=twitter:url><meta content=BiRabittoh property=twitter:title><meta content="Tech and privacy ramblings from a random italian dude." property=twitter:description><link href=https://birabittoh.github.io/ rel=canonical><link href=https://birabittoh.github.io/atom.xml rel=alternate title=RSS type=application/atom+xml><link href=https://birabittoh.github.io/css/style.css rel=stylesheet><body><div class=wrapper><header><nav class=navBar><a href=/>/home/</a><a href=/about>/about/</a><a href=/links>/links/</a><a href=/blog>/blog/</a><div class=themeSwitch><button class="themeButton light" onclick="setTheme('light')" title="Light mode">◐</button><button class="themeButton dark" onclick="setTheme('dark')" title="Dark mode">◑</button></div><script>const setTheme=a=>{document.documentElement.className=a;localStorage.setItem(`theme`,a)};const getTheme=()=>{const a=localStorage.getItem(`theme`);const b=a?a:`dark`;setTheme(b)};getTheme()</script></nav><h1>foss</h1></header><main><ul><li><a href=https://birabittoh.github.io/blog/self-host/>Self-hosting Extravaganza</a><li><a href=https://birabittoh.github.io/blog/void-xfce/>Modernizing XFCE</a><li><a href=https://birabittoh.github.io/blog/reflector/>Update your mirrors!</a><li><a href=https://birabittoh.github.io/blog/data-volatility/>Data volatility</a><li><a href=https://birabittoh.github.io/blog/you-should-use-linux/>You should probably use Linux</a><li><a href=https://birabittoh.github.io/blog/modern-web-bloat/>Modern web bloat</a></ul></main><footer><hr><div class=footContainer><div class=footLeft><p>Licensed under <a rel="noopener noreferrer" href=https://fr.wikipedia.org/wiki/Licence_MIT target=_blank>MIT</a><br> Built with <a rel="noopener noreferrer" href=https://www.getzola.org target=_blank>Zola</a> using <a rel="noopener noreferrer" href=https://github.com/BiRabittoh/anemone target=_blank>anemone</a> theme & <a rel="noopener noreferrer" href=https://github.com/Speyll/veqev target=_blank>veqev</a> colors.<br></div><div class=footRight><a href=https://wobble.town/visit/528 target=_blank><img class="footGif noStyle" alt=footGif loading=lazy src=https://wobble.town/visit/528/wobble.gif></a><a rel="noopener noreferrer" title="Subscribe via RSS for updates." class=metaData href=https://birabittoh.github.io/atom.xml target=_blank>RSS</a></div></div></footer></div>
A tags/index.html

@@ -0,0 +1,1 @@

+<!doctype html><html lang=en><head><meta charset=UTF-8><meta content="IE=edge" http-equiv=X-UA-Compatible><meta content="text/html; charset=UTF-8" http-equiv=content-type><meta content="width=device-width,initial-scale=1,user-scalable=no" name=viewport><meta content="index, follow" name=robots><title>BiRabittoh</title><meta content=BiRabittoh name=title><meta content="Tech and privacy ramblings from a random italian dude." name=description><meta content=website property=og:type><meta content=https://birabittoh.github.io/ property=og:url><meta content=BiRabittoh property=og:site_name><meta content=BiRabittoh property=og:title><meta content="Tech and privacy ramblings from a random italian dude." property=og:description><meta content=summary_large_image property=twitter:card><meta content=https://birabittoh.github.io/ property=twitter:url><meta content=BiRabittoh property=twitter:title><meta content="Tech and privacy ramblings from a random italian dude." property=twitter:description><link href=https://birabittoh.github.io/ rel=canonical><link href=https://birabittoh.github.io/atom.xml rel=alternate title=RSS type=application/atom+xml><link href=https://birabittoh.github.io/css/style.css rel=stylesheet><body><div class=wrapper><header><nav class=navBar><a href=/>/home/</a><a href=/about>/about/</a><a href=/links>/links/</a><a href=/blog>/blog/</a><div class=themeSwitch><button class="themeButton light" onclick="setTheme('light')" title="Light mode">◐</button><button class="themeButton dark" onclick="setTheme('dark')" title="Dark mode">◑</button></div><script>const setTheme=a=>{document.documentElement.className=a;localStorage.setItem(`theme`,a)};const getTheme=()=>{const a=localStorage.getItem(`theme`);const b=a?a:`dark`;setTheme(b)};getTheme()</script></nav><h1>tags</h1></header><main><p><a href=https://birabittoh.github.io/tags/advice/>#advice</a>[6] <a href=https://birabittoh.github.io/tags/ai/>#ai</a>[1] <a href=https://birabittoh.github.io/tags/art/>#art</a>[1] <a href=https://birabittoh.github.io/tags/foss/>#foss</a>[6] <a href=https://birabittoh.github.io/tags/minimalism/>#minimalism</a>[2] <a href=https://birabittoh.github.io/tags/privacy/>#privacy</a>[3]</main><footer><hr><div class=footContainer><div class=footLeft><p>Licensed under <a rel="noopener noreferrer" href=https://fr.wikipedia.org/wiki/Licence_MIT target=_blank>MIT</a><br> Built with <a rel="noopener noreferrer" href=https://www.getzola.org target=_blank>Zola</a> using <a rel="noopener noreferrer" href=https://github.com/BiRabittoh/anemone target=_blank>anemone</a> theme & <a rel="noopener noreferrer" href=https://github.com/Speyll/veqev target=_blank>veqev</a> colors.<br></div><div class=footRight><a href=https://wobble.town/visit/528 target=_blank><img class="footGif noStyle" alt=footGif loading=lazy src=https://wobble.town/visit/528/wobble.gif></a><a rel="noopener noreferrer" title="Subscribe via RSS for updates." class=metaData href=https://birabittoh.github.io/atom.xml target=_blank>RSS</a></div></div></footer></div>
A tags/minimalism/atom.xml

@@ -0,0 +1,106 @@

+<?xml version="1.0" encoding="UTF-8"?> +<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"> + <title>BiRabittoh - minimalism</title> + <subtitle>Tech and privacy ramblings from a random italian dude.</subtitle> + <link rel="self" type="application/atom+xml" href="https://birabittoh.github.io/tags/minimalism/atom.xml"/> + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/"/> + <generator uri="https://www.getzola.org/">Zola</generator> + <updated>2022-03-06T00:00:00+00:00</updated> + <id>https://birabittoh.github.io/tags/minimalism/atom.xml</id> + <entry xml:lang="en"> + <title>My opinion on FOMO</title> + <published>2022-03-06T00:00:00+00:00</published> + <updated>2022-03-06T00:00:00+00:00</updated> + + <author> + <name> + + BiRabittoh + + </name> + </author> + + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/blog/fomo/"/> + <id>https://birabittoh.github.io/blog/fomo/</id> + + <content type="html" xml:base="https://birabittoh.github.io/blog/fomo/">&lt;h2 id=&quot;what-are-you-even-talking-about&quot;&gt;What are you even talking about&lt;&#x2F;h2&gt; +&lt;p&gt;Let me preface this by saying I know nothing about psychology and behavioral studies, so anything you read here is just my personal opinion.&lt;&#x2F;p&gt; +&lt;p&gt;Let’s start with defining FOMO, to make sure we’re all on the same spectrum.&lt;&#x2F;p&gt; +&lt;blockquote&gt; +&lt;p&gt;Fear of missing out (FOMO) is the feeling of apprehension that one is either not in the know or missing out on information, events, experiences, or life decisions that could make one’s life better.&lt;&#x2F;p&gt; +&lt;&#x2F;blockquote&gt; +&lt;p&gt;Source: &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Fear_of_missing_out&quot;&gt;Wikipedia&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;The Fear Of Missing Out is what drives modern society; It keeps us hooked to mainstream social media and drives newbie investors towards obvious rugpulls.&lt;&#x2F;p&gt; +&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.sciencedirect.com&#x2F;science&#x2F;article&#x2F;abs&#x2F;pii&#x2F;S0747563213000800&quot;&gt;Studies&lt;&#x2F;a&gt; have correlated it to various negative behaviors, like social media addiction and even distracted driving.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;am-i-affected-by-this&quot;&gt;Am I affected by this?&lt;&#x2F;h2&gt; +&lt;p&gt;Probably. As long as you have a friend group and an account on any mainstream social network, yes you are. +It’s the feeling that drives you to check out your friends’ Stories on Instagram, the dread you feel when somebody else reaches a life goal before you do, the fear that pushes people to buy limited-time merchandise before it runs out of stock.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;my-experience&quot;&gt;My experience&lt;&#x2F;h2&gt; +&lt;p&gt;FOMO has been a constant for my entire life and just now I’m trying to write this as a way to think critically about it and try to avoid being pushed by stupid instincts. I’ve come to realize that Discord is the thing that slows down my productivity the most: as soon as I enter a voice chat with my friend, I stop being productive in any capacity and I’m also uncapable of resuming for the whole day.&lt;&#x2F;p&gt; +&lt;p&gt;Even after I turn off my PC, I still think about what my friends are doing and what I’m missing out on, be it a Gartic Phone round or any stupid discussion I might have had on there. The biggest problem is, it’s entirely subconscious. I often find myself uncapable of concentrating and don’t know what’s the cause of it; I’ve been eliminating elements one by one to find out the cause of this and turns out that distancing myself totally from social media AND Discord actually solves it.&lt;&#x2F;p&gt; +&lt;p&gt;It’s not immediate either, it took a few days for me but your mileage may vary depending on a lot of factors. Of course, I plan on restoring my online presence after I have graduated but it’s useful to know what exactly was causing me to waste all of my time for months.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;any-solutions&quot;&gt;Any solutions?&lt;&#x2F;h2&gt; +&lt;p&gt;I think you should evaluate possible solutions yourself, as FOMO is strictly dependant on your personality and experiences. You could try eliminating or replacing parts of your habits regularly, like I did, to find out if something is more destructive than you might initially think.&lt;&#x2F;p&gt; +&lt;p&gt;As I was researching this, I found out about JOMO. It stands for “Joy Of Missing Out” and it’s the exact opposite thing. +Embracing JOMO means you dedicate a few hours of the day to yourself and stop worrying about how your friends are doing at life and which continent gets invaded next.&lt;&#x2F;p&gt; +&lt;p&gt;Modern society does not wait for anybody, there’s nothing wrong in taking a break and focusing on yourself. You can always catch up later.&lt;&#x2F;p&gt; +&lt;ul&gt; +&lt;li&gt;&lt;a href=&quot;gopher:&#x2F;&#x2F;republic.circumlunar.space:70&#x2F;0&#x2F;~katolaz&#x2F;phlog&#x2F;20190219_fomo.txt&quot;&gt;Another interesting article about FOMO&lt;&#x2F;a&gt;, on Gopher;&lt;&#x2F;li&gt; +&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gopherproxy.vern.cc&#x2F;gopher&#x2F;republic.circumlunar.space:70&#x2F;0&#x2F;~katolaz&#x2F;phlog&#x2F;20190219_fomo.txt&quot;&gt;Same article&lt;&#x2F;a&gt;, but proxied to be viewed on modern browsers.&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +</content> + + </entry> + <entry xml:lang="en"> + <title>Modern web bloat</title> + <published>2021-04-09T00:00:00+00:00</published> + <updated>2021-04-09T00:00:00+00:00</updated> + + <author> + <name> + + BiRabittoh + + </name> + </author> + + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/blog/modern-web-bloat/"/> + <id>https://birabittoh.github.io/blog/modern-web-bloat/</id> + + <content type="html" xml:base="https://birabittoh.github.io/blog/modern-web-bloat/">&lt;p&gt;This is it. My first blog post; I suppose this officially makes be a boomer.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;inspiration&quot;&gt;Inspiration&lt;&#x2F;h2&gt; +&lt;p&gt;Some time ago I stumbled upon a &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;invidio.us&#x2F;cvDyQUpaFf4&quot;&gt;video&lt;&#x2F;a&gt;, where the popular Linux influencer &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;lukesmith.xyz&quot;&gt;Luke Smith&lt;&#x2F;a&gt; talked about the effort of looking up a Chicken Parmesan recipe in 2021 without having any adblock or privacy extensions enabled.&lt;&#x2F;p&gt; +&lt;p&gt;That’s because most modern websites take a lot of time to load framework files, ads and trackers. While that’s kinda functional, I think we should change our habits and start making simple websites again.&lt;&#x2F;p&gt; +&lt;p&gt;Yeah, this looks like a first world problem and it probably is, but it’s not as subtle as you think. I’m actually convinced that the internet could actually benefit from this way of thinking, and that’s what I’m going to talk about.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;the-problem&quot;&gt;The problem&lt;&#x2F;h2&gt; +&lt;p&gt;In the early days of the internet, it was common for webpages to be written using only HTML, so we had very ugly but functional websites.&lt;&#x2F;p&gt; +&lt;p&gt;As technology went on, sites needed to get more modern-looking and interactive; that’s why CSS and JavaScript were introduced into the mix, allowing for dynamic websites that could actually change based on user input. +As of nowadays, a lot more stuff went into the mix, to the point where the browser is now the most common program we use in our OS: you can, in fact, use it for doing things that 15+ years ago required external programs, like:&lt;&#x2F;p&gt; +&lt;ul&gt; +&lt;li&gt;playing music and video,&lt;&#x2F;li&gt; +&lt;li&gt;reading PDF files,&lt;&#x2F;li&gt; +&lt;li&gt;doing office work,&lt;&#x2F;li&gt; +&lt;li&gt;checking e-mail,&lt;&#x2F;li&gt; +&lt;li&gt;cloud storage,&lt;&#x2F;li&gt; +&lt;li&gt;etc…&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;p&gt;I guess people just find it more comfortable if they can do everything with a single program, and they’re not to blame for that. This IS the easiest approach for unexperienced people: just have a program that does everything, instead of having to learn how to use a bunch of different software.&lt;&#x2F;p&gt; +&lt;p&gt;This plethora of uses is possible today because of the existence of various libraries and frameworks that simplify JavaScript and CSS and make them easier to develop complicated websites with. +This is good for basic web users who just want functional websites, and great for developers since they can easily code advanced functions inside the browser, which makes them work in every OS.&lt;&#x2F;p&gt; +&lt;p&gt;Sadly, this brings us to the problem: any modern website has become a burden for any browser to load, since our browser needs to download and parse through each library and often fill the page content as you scroll through. +In his video, Luke Smith found that a simple Chicken Parmesan recipe would take up to 5-10 megabytes, which doesn’t sound like a lot, but it actually is.&lt;&#x2F;p&gt; +&lt;p&gt;It’s easier to understand it if you think about it with video-games; any game on 16-bit consoles and earlier, including full-fledged 30+ hour adventures like Final Fantasy 6 and Chrono Trigger, weighs less than one single recipe page (as stated &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blogs.umass.edu&#x2F;Techbytes&#x2F;2014&#x2F;02&#x2F;10&#x2F;history-of-gaming-storage&#x2F;#attachment_2827&quot;&gt;here&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt; +&lt;h2 id=&quot;the-solution&quot;&gt;The solution&lt;&#x2F;h2&gt; +&lt;p&gt;Well, I don’t think this “problem” is getting solved soon, as new frameworks for web development are constantly being introduced. Sadly, it’s a one-way train, but if you’re a web-dev you could actually make a difference yourself!&lt;&#x2F;p&gt; +&lt;p&gt;I mean, this can not apply to all websites. Some of them just NEED to be as responsive and interactive as they are; most of them actually just became bloated at a certain time period (probably mid-2000s) when having a flashy website was cool and different from what everyone else had. +Nowadays you can make a difference by using plain HTML and CSS for your website: this ensures your pages will load instantly and be compatible even with the oldest of browsers! +If you like this philosophy, you can check out other projects that aim for a simpler and faster web, like these ones:&lt;&#x2F;p&gt; +&lt;ul&gt; +&lt;li&gt;&lt;a href=&quot;&#x2F;&#x2F;gemini.circumlunar.space&#x2F;&quot;&gt;gemini:&#x2F;&#x2F;&lt;&#x2F;a&gt;: a new, purposefully limited, internet protocol;&lt;&#x2F;li&gt; +&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;based.cooking&#x2F;&quot;&gt;based.cooking&lt;&#x2F;a&gt;: a modern recipe website based on user collaboration via GitHub;&lt;&#x2F;li&gt; +&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiby.me&#x2F;&quot;&gt;wiby.me&lt;&#x2F;a&gt;: a search engine that aims to only index classic style webpages.&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +</content> + + </entry> +</feed>
A tags/minimalism/index.html

@@ -0,0 +1,1 @@

+<!doctype html><html lang=en><head><meta charset=UTF-8><meta content="IE=edge" http-equiv=X-UA-Compatible><meta content="text/html; charset=UTF-8" http-equiv=content-type><meta content="width=device-width,initial-scale=1,user-scalable=no" name=viewport><meta content="index, follow" name=robots><title>BiRabittoh</title><meta content=BiRabittoh name=title><meta content="Tech and privacy ramblings from a random italian dude." name=description><meta content=website property=og:type><meta content=https://birabittoh.github.io/ property=og:url><meta content=BiRabittoh property=og:site_name><meta content=BiRabittoh property=og:title><meta content="Tech and privacy ramblings from a random italian dude." property=og:description><meta content=summary_large_image property=twitter:card><meta content=https://birabittoh.github.io/ property=twitter:url><meta content=BiRabittoh property=twitter:title><meta content="Tech and privacy ramblings from a random italian dude." property=twitter:description><link href=https://birabittoh.github.io/ rel=canonical><link href=https://birabittoh.github.io/atom.xml rel=alternate title=RSS type=application/atom+xml><link href=https://birabittoh.github.io/css/style.css rel=stylesheet><body><div class=wrapper><header><nav class=navBar><a href=/>/home/</a><a href=/about>/about/</a><a href=/links>/links/</a><a href=/blog>/blog/</a><div class=themeSwitch><button class="themeButton light" onclick="setTheme('light')" title="Light mode">◐</button><button class="themeButton dark" onclick="setTheme('dark')" title="Dark mode">◑</button></div><script>const setTheme=a=>{document.documentElement.className=a;localStorage.setItem(`theme`,a)};const getTheme=()=>{const a=localStorage.getItem(`theme`);const b=a?a:`dark`;setTheme(b)};getTheme()</script></nav><h1>minimalism</h1></header><main><ul><li><a href=https://birabittoh.github.io/blog/fomo/>My opinion on FOMO</a><li><a href=https://birabittoh.github.io/blog/modern-web-bloat/>Modern web bloat</a></ul></main><footer><hr><div class=footContainer><div class=footLeft><p>Licensed under <a rel="noopener noreferrer" href=https://fr.wikipedia.org/wiki/Licence_MIT target=_blank>MIT</a><br> Built with <a rel="noopener noreferrer" href=https://www.getzola.org target=_blank>Zola</a> using <a rel="noopener noreferrer" href=https://github.com/BiRabittoh/anemone target=_blank>anemone</a> theme & <a rel="noopener noreferrer" href=https://github.com/Speyll/veqev target=_blank>veqev</a> colors.<br></div><div class=footRight><a href=https://wobble.town/visit/528 target=_blank><img class="footGif noStyle" alt=footGif loading=lazy src=https://wobble.town/visit/528/wobble.gif></a><a rel="noopener noreferrer" title="Subscribe via RSS for updates." class=metaData href=https://birabittoh.github.io/atom.xml target=_blank>RSS</a></div></div></footer></div>
A tags/page/1/index.html

@@ -0,0 +1,1 @@

+<!doctype html><meta charset=utf-8><link href=https://birabittoh.github.io/tags/ rel=canonical><meta content="0; url=https://birabittoh.github.io/tags/" http-equiv=refresh><title>Redirect</title><p><a href=https://birabittoh.github.io/tags/>Click here</a> to be redirected.
A tags/privacy/atom.xml

@@ -0,0 +1,293 @@

+<?xml version="1.0" encoding="UTF-8"?> +<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"> + <title>BiRabittoh - privacy</title> + <subtitle>Tech and privacy ramblings from a random italian dude.</subtitle> + <link rel="self" type="application/atom+xml" href="https://birabittoh.github.io/tags/privacy/atom.xml"/> + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/"/> + <generator uri="https://www.getzola.org/">Zola</generator> + <updated>2023-07-16T00:00:00+00:00</updated> + <id>https://birabittoh.github.io/tags/privacy/atom.xml</id> + <entry xml:lang="en"> + <title>Self-hosting Extravaganza</title> + <published>2023-07-16T00:00:00+00:00</published> + <updated>2023-07-16T00:00:00+00:00</updated> + + <author> + <name> + + BiRabittoh + + </name> + </author> + + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/blog/self-host/"/> + <id>https://birabittoh.github.io/blog/self-host/</id> + + <content type="html" xml:base="https://birabittoh.github.io/blog/self-host/">&lt;p&gt;Lately, more and more companies are putting their services behind paywalls, usage limits and closed APIs. Some examples are &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nitter.it&#x2F;elonmusk&#x2F;status&#x2F;1675187969420828672&quot;&gt;Twitter&lt;&#x2F;a&gt; limiting the number of tweets a non-paying user can read, &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.redditinc.com&#x2F;blog&#x2F;2023apiupdates&quot;&gt;Reddit&lt;&#x2F;a&gt; increasing their API price to an extent that’s unbearable for any normal individual and &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;libreddit.kavin.rocks&#x2F;r&#x2F;youtube&#x2F;comments&#x2F;14kmd07&#x2F;youtube_cracking_down_on_if_youre_not_paying_them&#x2F;&quot;&gt;YouTube&lt;&#x2F;a&gt; starting to block their service towards anyone using an adblock extension.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;there-must-be-a-better-way&quot;&gt;There must be a better way&lt;&#x2F;h2&gt; +&lt;p&gt;Luckily, I’ve been interested in &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mendel5&#x2F;alternative-front-ends&quot;&gt;alternative front-ends&lt;&#x2F;a&gt; for a while. These services allow you to get the same (or better) functionality as their corporate counterpart without giving away any of your information in return. Some of these even offer their own free APIs.&lt;&#x2F;p&gt; +&lt;p&gt;Here’s my favorite instances with respect to the service they provide:&lt;&#x2F;p&gt; +&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Service&lt;&#x2F;th&gt;&lt;th&gt;PC&lt;&#x2F;th&gt;&lt;th&gt;Mobile&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt; +&lt;tr&gt;&lt;td&gt;YouTube&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;y.com.sb&#x2F;&quot;&gt;Invidious&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;apt.izzysoft.de&#x2F;fdroid&#x2F;index&#x2F;apk&#x2F;org.polymorphicshade.newpipe&quot;&gt;NewPipe&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;Twitter&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nitter.it&quot;&gt;Nitter&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;apt.izzysoft.de&#x2F;fdroid&#x2F;index&#x2F;apk&#x2F;org.ca.squawker&quot;&gt;Squawker&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;Reddit&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;libreddit.kavin.rocks&quot;&gt;LibReddit&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;libreddit.kavin.rocks&quot;&gt;LibReddit&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;tr&gt;&lt;td&gt;Medium&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;scribe.rip&quot;&gt;Scribe&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;scribe.rip&#x2F;&quot;&gt;Scribe&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt; +&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt; +&lt;h2 id=&quot;drawbacks&quot;&gt;Drawbacks&lt;&#x2F;h2&gt; +&lt;p&gt;Of course, this is not a perfect solution. There are a lot of problems to be discussed.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;privacy&quot;&gt;Privacy&lt;&#x2F;h3&gt; +&lt;p&gt;First and foremost, these instances do not make any profit. This is not a problem until you really think about it. Can you really trust a random developer offering a (paid) service for thousands of users out of their own kindness? +The answer is “probably yes”, but are you willing to take this risk?&lt;&#x2F;p&gt; +&lt;p&gt;Instance admins could easily edit the upstream source code to make it so they can track their users indefinetly and sell usage data without them even realizing. +This is a given if you use any “normal” (not self-hosted) service, but the difference is big companies are &lt;em&gt;required&lt;&#x2F;em&gt; by GDPR to protect collected user data in a certain way and keep them for a maximum set amount of time.&lt;&#x2F;p&gt; +&lt;p&gt;The same cannot be assured for individuals who apparently don’t even make a profit for what they’re doing.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;scaling&quot;&gt;Scaling&lt;&#x2F;h3&gt; +&lt;p&gt;This buzzword has become a meme in the programming world, but it’s been shown how important it is to consider when dealing with large userbases that can grow exponentially without any warning.&lt;&#x2F;p&gt; +&lt;p&gt;Think about the amount of users who migrated to Mastodon immediately after Elon Musk acquired Twitter. Instance admins were used to having a couple hundred users, so hundred of thousands of new signups made a lot of popular instances slow down or even temporarily shut down while they migrated to new (and more expensive) hardware.&lt;&#x2F;p&gt; +&lt;p&gt;Anything public you use can be subject to this phenomenon, leading to poor user experience, as you’ll be one of the many people wondering why your feed takes one minute to load.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;fine-i-ll-do-it-myself&quot;&gt;Fine, I’ll do it myself&lt;&#x2F;h2&gt; +&lt;p&gt;Since joining the world of minimalism, I had always considered Docker as a bloated way to run multiple virtual machines. I read about people complaining that even simple Python scripts were providing &lt;code&gt;Dockerfile&lt;&#x2F;code&gt; and &lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt; files and I started seeing it as a bloaty way to achieve the same result.&lt;&#x2F;p&gt; +&lt;p&gt;Whenever I wanted to host anything by myself, I used to SSH into my VPS with password authentication (!!!) and expose a public port for each service (!!!). +I used my public IP address to log into my services, so I had to resort to sending cleartext passwords through HTTP (!!!) since TLS was not an option.&lt;&#x2F;p&gt; +&lt;p&gt;Of course, this is possibly the most insecure way to host services on a public server, but I felt that was “secure enough” and nobody would ever be interested in hacking me (!!! × ∞).&lt;&#x2F;p&gt; +&lt;p&gt;Nonetheless, I used to &lt;code&gt;cat &#x2F;var&#x2F;log&#x2F;auth.log&lt;&#x2F;code&gt; to see all the failed login attempts, and pray that nobody actually got my password right. +Nowadays, I look back and laugh at my previous config; at least I’m (almost) sure that nobody actually managed to get in.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;the-right-way&quot;&gt;The right way&lt;&#x2F;h2&gt; +&lt;p&gt;Since I started my new job, I also began experimenting with Docker and found out it’s not as bad as I thought it’d be. I will now let my previous config serve as the perfect example of how NOT to secure your VPS correctly for any self-hosting configuration.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;ditch-password-authentication&quot;&gt;Ditch password authentication&lt;&#x2F;h3&gt; +&lt;p&gt;First of all, password authentication. You’ll be a lot safer as soon as you disable it.&lt;&#x2F;p&gt; +&lt;p&gt;Having it enabled means you’re vulnerable to dictionary and bruteforce attacks. Also, if some new vulnerability is published, the password field is one more way the attacker could send a malicious string to get inside (see &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;scribe.rip&#x2F;geekculture&#x2F;the-log4j-incident-explained-ed0ce6d36df2&quot;&gt;the log4j incident&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt; +&lt;p&gt;A better way of logging into your VPS is through public key authentication.&lt;&#x2F;p&gt; +&lt;p&gt;First, generate a key on your own PC:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;ssh-keygen -t ed25519 -a 100 +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;This will create two files: &lt;code&gt;~&#x2F;.ssh&#x2F;id_ed25519.pub&lt;&#x2F;code&gt; and &lt;code&gt;~&#x2F;.ssh&#x2F;id_ed25519&lt;&#x2F;code&gt;&lt;&#x2F;p&gt; +&lt;p&gt;Now, use the following command to copy your key over to the VPS:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;ssh-copy-id -i ~&amp;#x2F;.ssh&amp;#x2F;id_ed25519 &amp;lt;user&amp;gt;@&amp;lt;host&amp;gt; +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;At this point, if everything went correctly, just add or change the following line in &lt;code&gt;&#x2F;etc&#x2F;ssh&#x2F;sshd_config&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;PasswordAuthentication no +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;At this point, you should be able to log into your VPS without the need to input your password, which is more secure as well as more convenient.&lt;&#x2F;p&gt; +&lt;p&gt;I keep the content of my public and private ssh key files saved as secure notes in my BitWarden account, so I can take them to any PC I want to access my VPS from. +People say this is bad practice (you should only have a key for each host), but I personally feel like it’s not that big of a deal compared to the security mess I had going on before.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;containerize-your-applications&quot;&gt;Containerize your applications&lt;&#x2F;h3&gt; +&lt;p&gt;Now that you have a safe way to SSH into your machine, you can start hosting your own services.&lt;&#x2F;p&gt; +&lt;p&gt;First, some terminology:&lt;&#x2F;p&gt; +&lt;ul&gt; +&lt;li&gt;&lt;code&gt;Dockerfile&lt;&#x2F;code&gt; files are like a list of ingredients. They contain every dependency needed to build a minimal operating system dedicated to running a program. They’re used to build images.&lt;&#x2F;li&gt; +&lt;li&gt;&lt;code&gt;Images&lt;&#x2F;code&gt; are like recipes. You can create some yourself from a Dockerfile or download them from an external repository. They can be instantiated as containers.&lt;&#x2F;li&gt; +&lt;li&gt;&lt;code&gt;Containers&lt;&#x2F;code&gt; are like courses. You can instantiate multiple equal courses from the same image and you can actually eat (use) them! They can be managed through &lt;code&gt;docker-compose&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt; +&lt;li&gt;&lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt; files are like menus. They’re a convenient way to instantiate and deinstantiate multiple containers in a specific and reproducible configuration. If you’re not a developer, you’ll be mainly working on these files.&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;p&gt;To get started with Docker, install &lt;code&gt;docker&lt;&#x2F;code&gt; and &lt;code&gt;docker-compose&lt;&#x2F;code&gt; via your package manager of choice. If you want an easy start, you can follow &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.invidious.io&#x2F;installation&#x2F;#docker-compose-method-production&quot;&gt;this guide&lt;&#x2F;a&gt; to host our own Invidious instance.&lt;&#x2F;p&gt; +&lt;p&gt;It’s not that hard, but you might need to read the official &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.docker.com&#x2F;compose&#x2F;&quot;&gt;Docker Compose documentation&lt;&#x2F;a&gt; if something doesn’t go as planned.&lt;&#x2F;p&gt; +&lt;p&gt;My advice is to generate an &lt;code&gt;hmac_key&lt;&#x2F;code&gt; using &lt;code&gt;pwgen 20 1&lt;&#x2F;code&gt; or &lt;code&gt;openssl rand -hex 20&lt;&#x2F;code&gt; and insert it in the correct spot inside &lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;Also, remove the &lt;code&gt;127.0.0.1:&lt;&#x2F;code&gt; part in the &lt;code&gt;ports&lt;&#x2F;code&gt; section since we don’t have a reverse proxy set up (yet).&lt;&#x2F;p&gt; +&lt;p&gt;After you’re done configuring, you can type &lt;code&gt;docker-compose up -d&lt;&#x2F;code&gt; to pull all required images and instantiate your containers, and &lt;code&gt;docker-compose down&lt;&#x2F;code&gt; if you want to stop and remove everything.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;use-a-reverse-proxy&quot;&gt;Use a reverse proxy&lt;&#x2F;h3&gt; +&lt;p&gt;If you’ve followed that guide correctly, you should now have two containers that communicate through a network. You can find out their names by running &lt;code&gt;docker ps -a&lt;&#x2F;code&gt;. Take note of the name of your main invidious container, which will be referred as &lt;code&gt;invidious&lt;&#x2F;code&gt; for the rest of this guide.&lt;&#x2F;p&gt; +&lt;p&gt;Problem is, you’re still using an IP address and communicating in cleartext through HTTP! This means your ISP can read every single detail in every single request you make.&lt;&#x2F;p&gt; +&lt;p&gt;Luckily, there is a way to get a cool domain name for free that also happens to include free and auto-generated TLS certificates.&lt;&#x2F;p&gt; +&lt;p&gt;First, create an account on &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.duckdns.org&#x2F;&quot;&gt;DuckDNS&lt;&#x2F;a&gt; and set up a free domain.&lt;&#x2F;p&gt; +&lt;p&gt;Just make a new directory near the one you used for Invidious and create a new &lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;mkdir swag +cd swag +nano docker-compose.yml +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;You can paste and edit accordingly the lines in &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.linuxserver.io&#x2F;general&#x2F;swag#creating-a-swag-container&quot;&gt;this guide&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;For example, instead of &lt;code&gt;DNSPLUGIN=cloudflare&lt;&#x2F;code&gt; you should have &lt;code&gt;DNSPLUGIN=duckdns&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;When you’re done, start your container with &lt;code&gt;docker-compose up -d&lt;&#x2F;code&gt;. This will create the config folder in &lt;code&gt;&#x2F;etc&#x2F;config&#x2F;swag&lt;&#x2F;code&gt; as well as a new network called &lt;code&gt;swag_default&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;Now we need to create a custom subdomain for Invidious. You can do it by creating the following file: &lt;code&gt;&#x2F;etc&#x2F;config&#x2F;swag&#x2F;nginx&#x2F;proxy-confs&#x2F;invidious.subdomain.conf&lt;&#x2F;code&gt; with this content:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;server { + listen 443 ssl http2; + listen [::]:443 ssl http2; + + server_name y.*; + + include &amp;#x2F;config&amp;#x2F;nginx&amp;#x2F;ssl.conf; + + client_max_body_size 0; + + location &amp;#x2F; { + include &amp;#x2F;config&amp;#x2F;nginx&amp;#x2F;proxy.conf; + include &amp;#x2F;config&amp;#x2F;nginx&amp;#x2F;resolver.conf; + set $upstream_app invidious; + set $upstream_port 3000; + set $upstream_proto http; + proxy_pass $upstream_proto:&amp;#x2F;&amp;#x2F;$upstream_app:$upstream_port; + } +} +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Where:&lt;&#x2F;p&gt; +&lt;ul&gt; +&lt;li&gt;&lt;code&gt;server_name yt.*&lt;&#x2F;code&gt;: &lt;code&gt;yt&lt;&#x2F;code&gt; is the subdomain of choice;&lt;&#x2F;li&gt; +&lt;li&gt;&lt;code&gt;set $upstream_app invidious;&lt;&#x2F;code&gt;: &lt;code&gt;invidious&lt;&#x2F;code&gt; is the name of the main Invidious container;&lt;&#x2F;li&gt; +&lt;li&gt;&lt;code&gt;set $upstream_port 3000;&lt;&#x2F;code&gt;: &lt;code&gt;3000&lt;&#x2F;code&gt; is the Invidious port.&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;p&gt;There’s one last step remaining. Invidious and Swag are two separate containers, so they cannot communicate unless they’re connected to the same network. You can connect Invidious to Swag’s network with the following command, where &lt;code&gt;invidious&lt;&#x2F;code&gt; is the name of your main Invidious container.&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;docker network connect swag_default invidious +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Finally, you can visit https:&#x2F;&#x2F;yt.&amp;lt;your-domain&amp;gt;.duckdns.org&#x2F; and check if you can access Invidious through HTTPS.&lt;&#x2F;p&gt; +&lt;p&gt;Note: now that you have a reverse proxy set up, you can remove your &lt;code&gt;ports:&lt;&#x2F;code&gt; section entirely from Invidious’ &lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt;. +You can do this because the containers are communicating internally to the &lt;code&gt;swag_default&lt;&#x2F;code&gt; network, without the need to expose any ports to the outside. +After you’re done, remember to reload your configuration by running &lt;code&gt;docker-compose restart&lt;&#x2F;code&gt; in your Invidious folder.&lt;&#x2F;p&gt; +&lt;p&gt;Ideally, the only container with exposed ports in your VPS should be Swag exposing ports 80 (HTTP) and 443 (HTTPS).&lt;&#x2F;p&gt; +&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt; +&lt;p&gt;Self-hosting is not easy. It’s been my &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.froth.zone&#x2F;wiki&#x2F;Camino_de_Santiago&quot;&gt;Camino de Santiago&lt;&#x2F;a&gt;: a long path of redemption for the sins I have committed in my young age. +Even if I made a lot of mistakes, in the end I’ve learned a lot about dev-ops and cybersecurity, as well as precious skills that proved themselves useful for my engineering job.&lt;&#x2F;p&gt; +&lt;p&gt;You can find a full list of self-hostable services &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;awesome-selfhosted&#x2F;awesome-selfhosted&quot;&gt;here&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt; +</content> + + </entry> + <entry xml:lang="en"> + <title>Data volatility</title> + <published>2022-01-14T00:00:00+00:00</published> + <updated>2022-01-14T00:00:00+00:00</updated> + + <author> + <name> + + BiRabittoh + + </name> + </author> + + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/blog/data-volatility/"/> + <id>https://birabittoh.github.io/blog/data-volatility/</id> + + <content type="html" xml:base="https://birabittoh.github.io/blog/data-volatility/">&lt;p&gt;I tried to access my domain at smol.pub yesterday and I noticed the service went down. Fear started rushing through my veins as I noticed I would have to choose another platform and, most importantly, write everything back from scratch since I don’t have a backup. This made me think about the importance of always having a backup stored somewhere.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;why-though&quot;&gt;Why though&lt;&#x2F;h2&gt; +&lt;p&gt;Creating a backup of your important data is crucial. On a daily basis, people discover vulnerabilities that allow remote code execution on any host machine. Try to imagine what would happen if someone ran a ransomware program on your PC. Would you be safe?&lt;&#x2F;p&gt; +&lt;p&gt;This genuinely feels like fearmongery, but it’s something that can seriously happen: you can be attacked by someone that specifically targets you. If you run Windows, you might be part of a botnet (think about all of the unsigned EXE files you’ve run since you installed the OS). What happens when someone doesn’t need your machine anymore? Well, that person might try and squeeze some money from you by holding your files hostage.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;cloud-backups&quot;&gt;Cloud backups&lt;&#x2F;h2&gt; +&lt;p&gt;Most people define cloud storage as follows:&lt;&#x2F;p&gt; +&lt;blockquote&gt; +&lt;p&gt;Cloud storage is a way for businesses and consumers to save data securely online so that it can be accessed anytime from any location and easily shared with those who are granted permission. Cloud storage also offers a way to back up data to facilitate recovery off-site.&lt;&#x2F;p&gt; +&lt;&#x2F;blockquote&gt; +&lt;p&gt;Source: &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.investopedia.com&#x2F;terms&#x2F;c&#x2F;cloud-storage.asp&quot;&gt;Investopedia&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;In reality, cloud storage is no more than some dude’s computer.&lt;&#x2F;p&gt; +&lt;p&gt;As soon as you upload your personal data to any service, you’re trusting it to store it in a safe and private way. If that software is not open source, you’re basically asking to get spied on.&lt;&#x2F;p&gt; +&lt;p&gt;Most people do not care about that, that’s why cloud storage solutions are very popular and basically enabled by default on any device you might buy nowadays.&lt;&#x2F;p&gt; +&lt;p&gt;I personally use cloud storage but I would never actually upload anything I actually care about on it… +If you have to choose, I have a few suggestions.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;don-t-trust-non-encrypted-solutions&quot;&gt;Don’t trust non-encrypted solutions&lt;&#x2F;h3&gt; +&lt;p&gt;Everybody has a Google account nowadays. If you forget your password, there is a way to recover it and get access to everything inside, including your Google Drive contents. As long as there is a password that can be changed or reset, your files are NOT encrypted and fully visible to anyone who has access to the Drive servers (Google or any other government agency that might want to take a peek). +Most cloud solutions work like this, and it’s actually frightening how many people trust megacorporations to have all of their private information available unencrypted.&lt;&#x2F;p&gt; +&lt;p&gt;One encrypted solution I use is mega.nz. +While I can’t be sure that the mega team isn’t spying on me, at least they’re hiding it well if they do. +Mega includes an encryption key with your account, which is not tied to your login information. +This means that if you lose your key, you also lost all of your files, there is absolutely no way to get them back, even if you change your account password.&lt;&#x2F;p&gt; +&lt;p&gt;Now, Mega is not open source, so you can never be sure that there isn’t any backdoor, or that keys aren’t stored together with your personal information, but at least it’s something.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;encrypt-your-data-yourself&quot;&gt;Encrypt your data yourself&lt;&#x2F;h3&gt; +&lt;p&gt;If you really need to trust Google, Apple or Amazon with your files, you can encrypt your files locally with the gpg command. This way, feds and big tech are going to need another password to actually access your private files.&lt;&#x2F;p&gt; +&lt;p&gt;It’s really easy, just two commands mainly.&lt;&#x2F;p&gt; +&lt;p&gt;Encrypt:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;gpg -c --cipher-algo AES256 secret.file +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Decrypt:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;gpg segret.file.gpg +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;If you need to encrypt a folder, you can compress it first:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;tar -cf output.tar.gz secret-folder +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Then encrypt your output.tar.gz archive as if it was a single file.&lt;&#x2F;p&gt; +&lt;p&gt;After decrypting it, you can extract your archive through this command:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;tar -xf output.tar.gz +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;Check out Mental Outlaw’s &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;invidio.us&#x2F;M0O7vhvQW30&quot;&gt;video&lt;&#x2F;a&gt; about this very topic.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;local-backups&quot;&gt;Local backups&lt;&#x2F;h2&gt; +&lt;p&gt;This is the best way to backup your data. +You don’t need to encrypt it if you have full physical access to your data, but you would still be vulnerable if it gets lost or stolen, so it’s always better to keep it encrypted and safe.&lt;&#x2F;p&gt; +&lt;p&gt;Of course, if you have a backup hard drive always plugged in your PC, it’s not really secure at all, since one could remotely execute a ransomware that encrypts everything in your PC, including all drives both internal and external, so you would get your backup encrypted with the original files voiding everything you’ve done.&lt;&#x2F;p&gt; +&lt;p&gt;This is why you should keep a GNU&#x2F;Linux device that only serves backup purposes and is turned OFF most of the time. As long as no current runs through your CPU, your files are safe. You should only turn it on once a month and copy everything important over, so you have a safe and offline backup.&lt;&#x2F;p&gt; +&lt;p&gt;You could also use a USB stick or external hard drive, as long as you only plug them in your PC when necessary.&lt;&#x2F;p&gt; +</content> + + </entry> + <entry xml:lang="en"> + <title>You should probably use Linux</title> + <published>2021-04-29T00:00:00+00:00</published> + <updated>2021-04-29T00:00:00+00:00</updated> + + <author> + <name> + + BiRabittoh + + </name> + </author> + + <link rel="alternate" type="text/html" href="https://birabittoh.github.io/blog/you-should-use-linux/"/> + <id>https://birabittoh.github.io/blog/you-should-use-linux/</id> + + <content type="html" xml:base="https://birabittoh.github.io/blog/you-should-use-linux/">&lt;h2 id=&quot;why-are-you-writing-this&quot;&gt;Why are you writing this?&lt;&#x2F;h2&gt; +&lt;p&gt;As you probably know, I like using free software (free as in &lt;em&gt;freedom&lt;&#x2F;em&gt;, not free of charge). Most people see users with this mentality as a group of paranoid psychopaths who circlejerk about their custom systems. While that’s in part true, there’s much more to it.&lt;&#x2F;p&gt; +&lt;p&gt;I often get asked by Windows or MacOS users about why they should think about switching to a GNU&#x2F;Linux OS (which I’ll be referring to as Linux); I’m just going to address everything here so I don’t have to repeat it to everyone who asks.&lt;&#x2F;p&gt; +&lt;p&gt;I’ll try to address every aspect where Linux is objectively better than the competition, then look at some reasons you &lt;em&gt;could&lt;&#x2F;em&gt; have to stick to Windows or, like I did, set up a dual boot.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;what-is-free-software&quot;&gt;What is free software?&lt;&#x2F;h2&gt; +&lt;p&gt;First of all, let’s read the official definition for it.&lt;&#x2F;p&gt; +&lt;blockquote&gt; +&lt;p&gt;A program is free software if the program’s users have the four essential freedoms: +0. The freedom to run the program as you wish, for any purpose.&lt;&#x2F;p&gt; +&lt;ol&gt; +&lt;li&gt;The freedom to study how the program works, and change it so it does your computing as you wish.&lt;&#x2F;li&gt; +&lt;li&gt;The freedom to redistribute copies so you can help others.&lt;&#x2F;li&gt; +&lt;li&gt;The freedom to distribute copies of your modified versions to others. By doing this you can give the whole community a chance to benefit from your changes. +A program is free software if it gives users adequately all of these freedoms.&lt;&#x2F;li&gt; +&lt;&#x2F;ol&gt; +&lt;&#x2F;blockquote&gt; +&lt;p&gt;Source: &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.gnu.org&#x2F;philosophy&#x2F;free-sw.en.html&quot;&gt;Free Software Foundation&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt; +&lt;p&gt;Let’s examine how this freedom is beneficial.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;linux-is-open&quot;&gt;Linux is open&lt;&#x2F;h3&gt; +&lt;p&gt;Using free software on an open source OS means you always know what’s going on with your PC; if you get curious or have any suspects you can always read the source code (or trust that somebody already did it in your place).&lt;&#x2F;p&gt; +&lt;p&gt;The good thing about Linux is that it doesn’t hide anything from you. Whenever there’s a problem, you can read various logfiles (with different levels of detail) to identify and troubleshoot your problem; it’s also easier to fix problems since you actually know what each program and file does, while troubleshooting in closed-source OSes is like trying to fix a car engine without being able to open the hood.&lt;&#x2F;p&gt; +&lt;p&gt;Some distros, like &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;archlinux.org&#x2F;&quot;&gt;Arch Linux&lt;&#x2F;a&gt;, require you to set everything up from scratch; this means you always know exactly which programs you’re installing and their exact function inside the Linux environment. I would only advise this kind of installation to advanced users, but after you do it the first time you’ll certainly learn a lot about how a Linux OS actually works.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;linux-is-secure&quot;&gt;Linux is secure&lt;&#x2F;h3&gt; +&lt;p&gt;Every single FOSS-oriented website makes this point, I’m just going to re-iterate it just to be sure. +The source code being publicly available doesn’t make software less secure. In fact, it’s way more secure since more people can work on it and fix security flaws. +&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Security_through_obscurity&quot;&gt;Security through obscurity&lt;&#x2F;a&gt; just doesn’t work. You can see that by looking at the number of security breaches that are found every day on closed-source software.&lt;&#x2F;p&gt; +&lt;p&gt;If you make your software closed-source you’re basically betting you and your small team are able to create a better and more secure code than every single other person in the planet. Of course, this assumption is stupid and irrealistic, that’s why FOSS software will always be faster and more secure than closed-source alternatives.&lt;&#x2F;p&gt; +&lt;p&gt;This goes for every kind of software, including the very operating system code. GNU&#x2F;Linux based operating systems are the most secure choice for every kind of user. +More often than not, you can trust the software programmers without even reading the code yourself: since they’re sharing every single line of code, they probably don’t have anything to hide. If they do include malicious code, someone else will probably have noticed by now, provided you didn’t build and run that software straight from the repo a few minutes after the last commit lol&lt;&#x2F;p&gt; +&lt;p&gt;You can also be safe against external attackers. Linux’s &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gs.statcounter.com&#x2F;os-market-share&#x2F;desktop&#x2F;worldwide&#x2F;#monthly-202012-202012-bar&quot;&gt;market share&lt;&#x2F;a&gt; on desktop and laptop PCs was less than 2% as of January 2021, and those people are probably much more tech-savy than the other OSes’ users… +This means attackers will likely target Windows or OS X users, so you can be safe even without using an antivirus or anything similar (even though there &lt;em&gt;are&lt;&#x2F;em&gt; &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.clamav.net&#x2F;&quot;&gt;choices&lt;&#x2F;a&gt; for that, too).&lt;&#x2F;p&gt; +&lt;h3 id=&quot;linux-is-smarter&quot;&gt;Linux is smarter&lt;&#x2F;h3&gt; +&lt;p&gt;Saying that Linux is for &lt;em&gt;everybody&lt;&#x2F;em&gt; would be a risky take. My point is that you &lt;em&gt;probably&lt;&#x2F;em&gt; could benefit from using a Linux system.&lt;&#x2F;p&gt; +&lt;p&gt;If you’re a programmer, Linux is objectively the best OS you can use. As a programmer, I love using the terminal to do stuff more quickly. I also love the level of integration you can have with the system: a lot of programs are designed with a client&#x2F;server model, which makes them work in complex scenarios as long as you have the time and patience to configure them properly.&lt;&#x2F;p&gt; +&lt;p&gt;While Windows still has to retain compatibility with legacy systems, Linux is much more free to do its own thing. Linux will always be smarter and more modern. Just think about the filesystem structure. +Windows is forced to retain a confusing structure, where you have a ton of (not) hidden folders where programmers can store their necessary data… But there are so many choices and they’re not coherent! If I wanted to create a backup of all my settings and save files, I would have to copy all of these folders:&lt;&#x2F;p&gt; +&lt;pre&gt;&lt;code&gt;C:\ProgramData; C:\Users\username\AppData; C:\Users\username\Documents\my games; +&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt; +&lt;p&gt;And I would still miss all of the informations saved on the awful Windows Registry…&lt;&#x2F;p&gt; +&lt;p&gt;On Linux, you just copy the .config folder in your home directory.&lt;&#x2F;p&gt; +&lt;p&gt;Moreover, in Windows 10 you have two ways of editing system settings: the Control Panel and the Windows Settings. But sometimes editing a setting on one side does NOT reflect on the other! +Windows is literally the most confusing OS you can start with… And people still recommend it to beginners over Linux. It’s just dumb.&lt;&#x2F;p&gt; +&lt;h3 id=&quot;linux-is-versatile&quot;&gt;Linux is versatile&lt;&#x2F;h3&gt; +&lt;p&gt;Now, to the point everybody’s been waiting for. Yes, none of the Adobe programs will run &lt;em&gt;natively&lt;&#x2F;em&gt; on any Linux distro. That means if you’re a creative person and you need those programs on a daily basis, maybe you should consider dual booting…&lt;&#x2F;p&gt; +&lt;p&gt;BUT, steps are being made in two different directions:&lt;&#x2F;p&gt; +&lt;ul&gt; +&lt;li&gt;Valve is working on Proton, which allows the execution of most Windows-only applications and games on any Linux system.&lt;&#x2F;li&gt; +&lt;li&gt;More and more open-source alternatives to closed-source standards are being developed by the day.&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;p&gt;While Proton is interesting, I always prefer to run open source software, especially if we’re talking about programs that are also free of charge: imagine trusting a closed-source software you didn’t pay for.&lt;&#x2F;p&gt; +&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt; +&lt;p&gt;Ok, now I’m getting repetitive so I’ll just get to the point. +Linux is constantly evolving and it has now become the top choice for a lot of people, so let’s try and consider every use case.&lt;&#x2F;p&gt; +&lt;ul&gt; +&lt;li&gt;If you’re a professional that’s deep in the industry and you need some &lt;em&gt;specific&lt;&#x2F;em&gt; program to run perfectly on your device… Yeah, you should use Windows.&lt;&#x2F;li&gt; +&lt;li&gt;If you’re a power user that’s just used to paid software, maybe consider trying out some open source alternative?&lt;&#x2F;li&gt; +&lt;li&gt;If you’re a gamer, I say you should dual boot. I have a Windows 10 LTSC installation that I use &lt;em&gt;exclusively&lt;&#x2F;em&gt; for gaming. While Proton has made Linux gaming feasable, the experience isn’t always the best, especially if you play games that require millisecond-grade accuracy, like rhythm games or competitive shooters.&lt;&#x2F;li&gt; +&lt;li&gt;If you’re a student or employee, Linux would be perfect for you. You can quickly take notes and do office work without the annoying Windows 10 updates popping up and rebooting your system seemingly at random. Also, any Linux system will probably be more light on resource usage than Windows, so you could take some old hardware you thought would never be using again and actually make something useful with it.&lt;&#x2F;li&gt; +&lt;li&gt;If you work in the programming or engineering field, then what are you waiting for? You should try out a Linux OS as soon as possible, and not in a virtual machine. A lot of my friends said they didn’t like Linux because it felt slow… While running on a VM… Duh? Try it out on real hardware so you can feel its superiority.&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +&lt;p&gt;Well, I can’t possibly cover &lt;em&gt;every&lt;&#x2F;em&gt; profession and use-case, but I hope I was clear about those I managed to list above. +I’m going to conclude this article with some interesting links about Linux and FOSS you definitely should check out.&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;islinuxabout.xyz&#x2F;&quot;&gt;Is Linux About…?&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;usermod.net&#x2F;why-use-linux&#x2F;&quot;&gt;usermod.net - Why use Linux?&lt;&#x2F;a&gt;&lt;&#x2F;li&gt; +&lt;&#x2F;ul&gt; +</content> + + </entry> +</feed>
A tags/privacy/index.html

@@ -0,0 +1,1 @@

+<!doctype html><html lang=en><head><meta charset=UTF-8><meta content="IE=edge" http-equiv=X-UA-Compatible><meta content="text/html; charset=UTF-8" http-equiv=content-type><meta content="width=device-width,initial-scale=1,user-scalable=no" name=viewport><meta content="index, follow" name=robots><title>BiRabittoh</title><meta content=BiRabittoh name=title><meta content="Tech and privacy ramblings from a random italian dude." name=description><meta content=website property=og:type><meta content=https://birabittoh.github.io/ property=og:url><meta content=BiRabittoh property=og:site_name><meta content=BiRabittoh property=og:title><meta content="Tech and privacy ramblings from a random italian dude." property=og:description><meta content=summary_large_image property=twitter:card><meta content=https://birabittoh.github.io/ property=twitter:url><meta content=BiRabittoh property=twitter:title><meta content="Tech and privacy ramblings from a random italian dude." property=twitter:description><link href=https://birabittoh.github.io/ rel=canonical><link href=https://birabittoh.github.io/atom.xml rel=alternate title=RSS type=application/atom+xml><link href=https://birabittoh.github.io/css/style.css rel=stylesheet><body><div class=wrapper><header><nav class=navBar><a href=/>/home/</a><a href=/about>/about/</a><a href=/links>/links/</a><a href=/blog>/blog/</a><div class=themeSwitch><button class="themeButton light" onclick="setTheme('light')" title="Light mode">◐</button><button class="themeButton dark" onclick="setTheme('dark')" title="Dark mode">◑</button></div><script>const setTheme=a=>{document.documentElement.className=a;localStorage.setItem(`theme`,a)};const getTheme=()=>{const a=localStorage.getItem(`theme`);const b=a?a:`dark`;setTheme(b)};getTheme()</script></nav><h1>privacy</h1></header><main><ul><li><a href=https://birabittoh.github.io/blog/self-host/>Self-hosting Extravaganza</a><li><a href=https://birabittoh.github.io/blog/data-volatility/>Data volatility</a><li><a href=https://birabittoh.github.io/blog/you-should-use-linux/>You should probably use Linux</a></ul></main><footer><hr><div class=footContainer><div class=footLeft><p>Licensed under <a rel="noopener noreferrer" href=https://fr.wikipedia.org/wiki/Licence_MIT target=_blank>MIT</a><br> Built with <a rel="noopener noreferrer" href=https://www.getzola.org target=_blank>Zola</a> using <a rel="noopener noreferrer" href=https://github.com/BiRabittoh/anemone target=_blank>anemone</a> theme & <a rel="noopener noreferrer" href=https://github.com/Speyll/veqev target=_blank>veqev</a> colors.<br></div><div class=footRight><a href=https://wobble.town/visit/528 target=_blank><img class="footGif noStyle" alt=footGif loading=lazy src=https://wobble.town/visit/528/wobble.gif></a><a rel="noopener noreferrer" title="Subscribe via RSS for updates." class=metaData href=https://birabittoh.github.io/atom.xml target=_blank>RSS</a></div></div></footer></div>