<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>sudo make ./</title>
    <link>https://blog.benoto.net/</link>
    <description>This blog is about my stuff; my projects; my hobby. I build software in my freetime and right here, I am going to document each project and problem. </description>
    <pubDate>Tue, 21 Jul 2026 03:30:13 +0000</pubDate>
    <item>
      <title>How Bad is the Internet, really?</title>
      <link>https://blog.benoto.net/how-bad-is-the-internet-really</link>
      <description>&lt;![CDATA[Unfortunately, I am not talking about the entirety of the internet, as there is no way for me to measure how bad that one is really, yet.&#xA;But, where I live in Germany (since it&#39;s German countryside™), we have very poor internet. &#xA;You might be thinking 50 Mbit/s or even 25 Mbit/s. And, by contract, that&#39;s what it&#39;s supposed to be! Most of the time, we are guaranteed 50 Mbit/s. So, what do you guess, how much is actually usable on some days (some are better, some worse, I have not yet found out why that is the case...)?&#xA;&#xA;10 Mbit/s?&#xA;5 Mbit/s??&#xA;3Mbit/s???&#xA;&#xA;Nope, a solid ~0.5 Mbit/s. YES! A solid 500 kilobytes per second!&#xA;That&#39;s only about 10 times faster than ancient dial-up modems. &#xA;As one could guess, something must be wrong here. But again, as I&#39;ve said before, I cannot tell on which days the speeds are crawling and on which they are oozing and shuffling in place. &#xA;How could I even begin to find that out???&#xA;&#xA;!--more--&#xA;&#xA;Finding that out&#xA;I&#39;ve done some thinkin&#39; and concluded: I should simply measure, always and find out if there is a pattern. Or rather, first, I need to find out, if I might be the problem. Since the situation is the following: &#xA;It&#39;s a very big house with many different people and we only have two connections (which is already one too much, we&#39;re paying double and getting half!) to the house which are basically almost at the exact same place in the house. Therefore, I was tasked with making the internet work everywhere, so I just used a WiFi repeater. Yeah, Yeah, I know. WiFi, the most horrible sin on earth, but there isn&#39;t really a different choice here, since all other parties in the house simply hate cables. If they see one, they&#39;ll ask me about it and want it gone. So I had to make the choice of no internet or probably highly unreliable internet. &#xA;&#xA;So could it be simply the WiFi? Well, I don&#39;t think so, but actually, I don&#39;t know, so I need to scientifically test it, of course. &#xA;How? &#xA;Well, I have a home server there already, physical access to all routers, a Raspberry Pi and lots of time since it&#39;s currently summer break. What better use of my time than to do random &#34;experiments&#34;, am I right? &#xA;&#xA;The Idea&#xA;To actually measure when and how the internet get&#39;s worse (or rather horrible), I figured, I could do the following: &#xA;&#xA;I take my Home Server (random laptop I had lying around to do Proxmox Experiments on) and use it as the control. I plug it in physically via LAN (normally, I would get angry looks, but currently, most people are on vacation ;) ) and periodically test ping, bandwidth to the router, bandwidth to the internet, and the pings for each stop on my way to a domain using a tool called mtr (which I have recently found out about in a Late Night Linux Family Podcast, listen to it!). &#xA;That will be my baseline for speed. &#xA;Then, I take my Raspberry Pi (only a zero, but I don&#39;t think that will be the significant bottleneck) and do the same periodically via WiFi to see, whether there is a difference because of the wireless nature of WiFi. &#xA;&#xA;Problems I can already foresee and fix&#xA;&#xA;WiFi annoyance with Pies&#xA;Since I only have a Raspberry Pi Zero lying around, I don&#39;t have a LAN port to work with. That&#39;s incredibly annoying, because I can only access the Pi using ssh, so I already have to have to connected to a WiFi network to do anything with it. And therefore, changing networks always is a paint the s (to stay family friendly over here ;) ). &#xA;The best way I can think of to make it as easy as possible is to add multiple networks to the pi to let it automatically connect and additionally add a fallback network which I can use to connect in case all other networks fail (it will be a hotspot of my computer to be able to ssh into the Pi right after it connected). &#xA;Shouldn&#39;t be too difficult, it&#39;s just annoying to do on such a slow and small system. But let&#39;s get to work, soon (not right now, I am too lazy)!&#xA;Uhh, well, I guess I&#39;ll find more when I actually get there... xD&#xA;&#xA;It&#39;s a new day and I have gotten slightly less lazy. Let&#39;s do it!&#xA;&#xA;Execution&#xA;Okay, I have decided to simplify the whole thing: &#xA;Instead of adding the Raspberry Pi into the equation, I left it out completely and only did the test with the laptop. I wired it up directly via a LAN-Cable to my router. Well, directly is an overstatement. It was a 25 meter (82 feet) cable which I routed to the start of the attic. &#xA;I did that since, after having made sure that WiFi was the main cause of problems, I wanted to replace the laptop with another router so extend my WiFi without adding unnecessary delay or WiFi hops. Through the quite long wire, I was able to accomplish about 600 MBit/s, which I was actually quite happy with (especially considering the 50 MBit/s the DSL can carry at most). &#xA;All in all, an experiment well ended, which might have saved us a bill of about 700 Euros for getting cable internet into the building, replacing DSL. &#xA;&#xA;Problems arisen during the making of this project&#xA;None... There were none. It was simply such a simple project that there was very little to go wrong. I just had to make a new container and set up a script (with the slight help of my friendly local AI-Chatbot; Yes, I am sorry for using AI, but it helps with developing prototypes quickly...) to collect a couple of statistics regularly (like outside ping, internet speed, ping to router, etc). &#xA;&#xA;Editors Note: This post has a bit of a different character and tone compared the other ones. Again, I&#39;m still figuring this entire &#34;blogging&#34; thing out, bare with me, I&#39;ll probably change again soon :D]]&gt;</description>
      <content:encoded><![CDATA[<p>Unfortunately, I am not talking about the entirety of the internet, as there is no way for me to measure how bad that one is <em>really</em>, yet.
But, where I live in Germany (since it&#39;s <em>German countryside™</em>), we have <strong>very poor internet</strong>.
You might be thinking 50 Mbit/s or even 25 Mbit/s. And, by contract, that&#39;s what it&#39;s supposed to be! Most of the time, we are guaranteed 50 Mbit/s. So, what do you guess, how much is actually usable on some days (some are better, some worse, I have not yet found out why that is the case...)?</p>

<p>10 Mbit/s?
5 Mbit/s??
3Mbit/s???</p>

<p>Nope, a solid ~0.5 Mbit/s. YES! <strong>A solid 500 kilobytes per second</strong>!
That&#39;s only about 10 times faster than <em>ancient</em> dial-up modems.
As one could guess, <em>something</em> <strong>must</strong> be wrong here. But again, as I&#39;ve said before, I cannot tell on which days the speeds are crawling and on which they are oozing and shuffling in place.
How could I even begin to find that out???</p>



<h1 id="finding-that-out">Finding <em>that</em> out</h1>

<p>I&#39;ve done some thinkin&#39; and concluded: I should simply measure, <em>always</em> and find out if there is a pattern. Or rather, first, I <em>need</em> to find out, if <strong>I</strong> might be the problem. Since the situation is the following:
It&#39;s a very big house with many different people and we only have two connections (which is already one too much, <strong>we&#39;re paying double and getting half!</strong>) to the house which are basically almost at the exact same place in the house. Therefore, I was tasked with <em>making the internet work everywhere</em>, so I just used a WiFi repeater. Yeah, Yeah, I know. WiFi, the most horrible <strong>sin</strong> on earth, but there isn&#39;t really a different choice here, since all other parties in the house simply <em>hate</em> cables. If they see one, they&#39;ll ask me about it and want it gone. So I had to make the choice of no internet or probably highly unreliable internet.</p>

<p>So could it be simply the WiFi? Well, I don&#39;t think so, but actually, I don&#39;t <em>know</em>, so I need to scientifically test it, of course.
How?
Well, I have a home server there already, physical access to all routers, a Raspberry Pi and lots of time since it&#39;s currently summer break. What better use of my time than to do random “<em>experiments</em>”, am I right?</p>

<h1 id="the-idea">The Idea</h1>

<p>To actually measure when and how the internet get&#39;s worse (or rather <em>horrible</em>), I figured, I could do the following:</p>

<p>I take my Home Server (random laptop I had lying around to do Proxmox Experiments on) and use it as the control. I plug it in physically via LAN (normally, I would get angry looks, but currently, most people are on vacation <code>;)</code> ) and periodically test <strong>ping</strong>, bandwidth to the <strong>router</strong>, bandwidth to the <strong>internet</strong>, and the pings for each stop on my way to a domain using a tool called <code>mtr</code> (which I have recently found out about in a Late Night Linux Family Podcast, <strong>listen to it!</strong>).
That will be my baseline for speed.
Then, I take my Raspberry Pi (only a zero, but I don&#39;t think that will be the significant bottleneck) and do the same periodically via WiFi to see, whether there is a difference because of the wireless nature of WiFi.</p>

<h1 id="problems-i-can-already-foresee-and-fix">Problems I can already foresee and fix</h1>
<ol><li><strong>WiFi annoyance with Pies</strong>
Since I only have a Raspberry Pi Zero lying around, I don&#39;t have a LAN port to work with. That&#39;s incredibly annoying, because I can only access the Pi using ssh, so I already have to have to connected to a WiFi network to do anything with it. And therefore, changing networks always is a paint the s (to stay family friendly over here ;) ).
The best way I can think of to make it as easy as possible is to add multiple networks to the pi to let it automatically connect and additionally add a fallback network which I can use to connect in case all other networks fail (it will be a hotspot of my computer to be able to ssh into the Pi right after it connected).
Shouldn&#39;t be too difficult, it&#39;s just annoying to do on such a slow and small system. But let&#39;s get to work, soon (not right now, I am too lazy)!</li>
<li>Uhh, well, I guess I&#39;ll find more when I actually get there... xD</li></ol>

<p>It&#39;s a new day and I have gotten slightly less lazy. Let&#39;s do it!</p>

<h1 id="execution">Execution</h1>

<p>Okay, I have decided to simplify the whole thing:
Instead of adding the Raspberry Pi into the equation, I left it out completely and only did the test with the laptop. I wired it up directly via a LAN-Cable to my router. Well, directly is an overstatement. It was a 25 meter (82 feet) cable which I routed to the start of the attic.
I did that since, after having made sure that WiFi was the main cause of problems, I wanted to replace the laptop with another router so extend my WiFi without adding unnecessary <em>delay</em> or <em>WiFi hops</em>. Through the quite long wire, I was able to accomplish about 600 MBit/s, which I was actually quite happy with (especially considering the 50 MBit/s the DSL can carry at most).
All in all, an experiment well ended, which might have saved us a bill of about 700 Euros for getting cable internet into the building, replacing DSL.</p>

<h1 id="problems-arisen-during-the-making-of-this-project">Problems arisen during the making of this project</h1>

<p>None... There were none. It was simply such a simple project that there was very little to go wrong. I just had to make a new container and set up a script (with the slight help of <em>my friendly local AI-Chatbot</em>; <strong>Yes</strong>, I am sorry for using AI, but it helps with developing prototypes quickly...) to collect a couple of statistics regularly (like outside ping, internet speed, ping to router, etc).</p>

<p>Editors Note: This post has a bit of a different character and tone compared the other ones. Again, I&#39;m still figuring this entire “blogging” thing out, bare with me, I&#39;ll probably change again soon <code>:D</code></p>
]]></content:encoded>
      <guid>https://blog.benoto.net/how-bad-is-the-internet-really</guid>
      <pubDate>Tue, 30 Jun 2026 15:38:28 +0000</pubDate>
    </item>
    <item>
      <title>Problems in CalcX Development</title>
      <link>https://blog.benoto.net/problems-in-calcx-development</link>
      <description>&lt;![CDATA[Development of my own calculator / simple programming language I called calcx was going very well up until this point... And now, I feel like I am simply stuck. &#xA;I have implemented working systems for handling units and calculations, etc. &#xA;The problem I am facing however, is that when I run a command, I parse it all into different tokens and already convert them to their respective numbers with units. This, however, results in me loosing the information which I need for conversion. &#xA;If I say I want to convert to Milli seconds, I do not mean to convert to 0.001 seconds...&#xA;I genuinely cannot think of a good solution for this problem. I have tried some possibilities, but they are all very clumsy and very much not elegant. As an example, I tried to parse every token after the &#34;to&#34; or &#34;in&#34; token as a single string-token which I could then later use. But this feels very wrong... Since the meaning is supposed to happen during the parsing. And I do not create more meaning by leaving an entire phrase like volt second / (kilo gram) as a string instead of parsing it into actually meaningful numbers... &#xA;I believe, I need to spend a few days thinking the problem through until I should start coding new things. Until then, I will try to reorganize the project further (as during writing one of the possibilities, I felt like the code base was a whole mess). &#xA;Let&#39;s see how this will go!&#xA;&#xA;!--more--&#xA;&#xA;Update: &#xA;Oh wow... Everything I wrote before, I just put into a stale branch (it will not get developed further)... &#xA;But I was able to refactor the entire program to be much better. While doing so, I&#39;ve also found some edge cases and errors, which took some time as well to fix. But now, I feel pretty good about the state of the calculator again. The code base is quite tidy and I feel like it would be rather straightforward to implement few functions. &#xA;First, however, I want to improve the output of conversions by adding appropriate units at the end of the output quantity. &#xA;I am, however, not sure how exactly I should implement it: &#xA;&#xA;Option 1: &#xA;  Adding appropriate SI Units at the End &#xA;  (-  Easier, because the original string for the query does not need to be transferred through multiple software layers)&#xA;Option 2:&#xA;  Adding the units the user decided on &#xA;  (-  Seemingly easier, because you could just append everything after the &#34;to&#34; keyword as the output unit, but actually very hard to implement, because the string is tokenized into tokens that have nothing to do with the original string anymore)&#xA;&#xA;I&#39;m guessing for extensibility, I should go with the first option, but later, I might add a function to turn SI unit tokens back into the original unit strings and use them as the output...&#xA;&#xA;Okay, wow. Never mind. I do not know why I would have thought that could work...&#xA;When I would have done exactly what I have just said, the program does the following: &#xA;5 kilo gram to gram = 5000 kilogram^1...&#xA;Well, I guess I&#39;ll just leave the units out for now... ]]&gt;</description>
      <content:encoded><![CDATA[<p>Development of my own calculator / simple programming language I called calcx was going very well up until this point... And now, I feel like I am simply stuck.
I have implemented working systems for handling units and calculations, etc.
The problem I am facing however, is that when I run a command, I parse it all into different tokens and already convert them to their respective numbers with units. This, however, results in me loosing the information which I need for conversion.
If I say I want to convert to Milli seconds, I do not mean to convert to 0.001 seconds...
I genuinely cannot think of a good solution for this problem. I have tried some possibilities, but they are all very clumsy and very much not elegant. As an example, I tried to parse every token after the “to” or “in” token as a single string-token which I could then later use. But this feels very wrong... Since the meaning is supposed to happen during the parsing. And I do not create more meaning by leaving an entire phrase like <code>volt second / (kilo gram)</code> as a string instead of parsing it into actually meaningful numbers...
I believe, I need to spend a few days thinking the problem through until I should start coding new things. Until then, I will try to reorganize the project further (as during writing one of the possibilities, I felt like the code base was a whole mess).
Let&#39;s see how this will go!</p>



<p>Update:
Oh wow... Everything I wrote before, I just put into a stale branch (it will not get developed further)...
But I was able to refactor the entire program to be much better. While doing so, I&#39;ve also found some edge cases and errors, which took some time as well to fix. But now, I feel pretty good about the state of the calculator again. The code base is quite tidy and I feel like it would be rather straightforward to implement few functions.
First, however, I want to improve the output of conversions by adding appropriate units at the end of the output quantity.
I am, however, not sure how exactly I should implement it:</p>
<ul><li>Option 1:
<ul><li>Adding appropriate SI Units at the End</li>
<li>(–&gt; Easier, because the original string for the query does not need to be transferred through multiple software layers)</li></ul></li>
<li>Option 2:
<ul><li>Adding the units the user decided on</li>
<li>(–&gt; Seemingly easier, because you could just append everything after the “to” keyword as the output unit, but actually very hard to implement, because the string is tokenized into tokens that have nothing to do with the original string anymore)</li></ul></li></ul>

<p>I&#39;m guessing for extensibility, I should go with the first option, but later, I might add a function to turn SI unit tokens back into the original unit strings and use them as the output...</p>

<p>Okay, wow. Never mind. I do not know why I would have thought that could work...
When I would have done exactly what I have just said, the program does the following:
<code>5 kilo gram to gram</code> = <code>5000 kilogram^1</code>...
Well, I guess I&#39;ll just leave the units out for now...</p>
]]></content:encoded>
      <guid>https://blog.benoto.net/problems-in-calcx-development</guid>
      <pubDate>Fri, 26 Jun 2026 19:07:59 +0000</pubDate>
    </item>
    <item>
      <title>Intentionally Creating a Backdoor to My Desktop PC via USB-Thumbdrive</title>
      <link>https://blog.benoto.net/intentionally-creating-a-backdoor-via-usb-thumbdrive</link>
      <description>&lt;![CDATA[So I recently had this problem: &#xA;My NAS and my home server were both down, I was away (at school) and needed to access some files I had on my big desktop pc at home. Normally, this wouldn&#39;t be that bad, since there was physically someone in the house I was able to call, but... Well, let&#39;s just say I&#39;m incredibly paranoid and my passwords are 32+ alpha-numeric chars with special signs and everything... The &#34;physically present person&#34; was not too amused and eventually (after mistyping for a few of times) gave up. &#xA;Therefore, the need for me to access my files remotely was born. And since I don&#39;t want to save everything to my NAS that I might eventually could potentially need sometime in the future, I want it to work on the local actual files on my desktop pc. So what could I do? &#xA;&#xA;!--more--&#xA;&#xA;At first, I thought I could simply add a small partition on my local hard drive, which, when booted, would simply do nothing more than to open an ssh login so that I could log into this partition and mount all my other stuff from there (since I do have a VPN connection to my home network).&#xA;That idea was from a couple of months ago, but I kept on coming back to this idea again and again. &#xA;Since I was unable to find a good solution on how to make a tiny bit of space on my hard drive (with it already being partitioned and all), I pivoted the idea of a live-iso on an usb stick which in principle does the exact same thing but more temporary and elegantly. &#xA;&#xA;My original &#34;requirements&#34; / ideas for how this system should work were that it should run from a usb stick and take up very little space (my original idea was about 256 MB since that would barely fit on my smallest usb thumb drive). When booted, the system should obtain network access and display the ip address so that you can still access your files when you are away but a non-technical user (or even someone you don&#39;t fully trust with your passwords) is physically present. &#xA;&#xA;I&#39;ve spent today with getting the most simple prototype working. It&#39;s not doing a lot, but already displays that this might be a very promising idea. &#xA;The basic example does the following:&#xA;&#xA;Automatically boots into a normal (self-compiled) live arch-iso system&#xA;Checks if there is an active internet connection&#xA;If yes: Start an ssh server (passwordless, maybe change later to be more secure)&#xA;if not: put the user into an nmtui prompt to get network working again&#xA;when user exists, do another check if there is a current internet connection&#xA;&#xA;I believe for my use case, this will already work out to be sufficient, as I will be able to instruct whoever is using it on what to do (and how to get networking to work). &#xA;However, possible improvements could include: &#xA;&#xA;Better UI / TUI for when there is no internet connection&#xA;  User is supposed to be guided through getting internet&#xA;  User should not need to type in any commands (in contrast to using iwctl)&#xA;More Security: Add randomly generated password for root ssh login and display that in stdout&#xA;More Remote Options:&#xA;  Software is currently assuming a VPN connection to the local network the pc is in or a port forward of ssh port (which would be very bad without a password)&#xA;  -  One should add an option to access the data even when completely away without VPN to local network, Options for getting this to work include&#xA;    Using a VPS as a common VPN endpoint =  Tunnel&#xA;    Creating Outbound connection via accessed device to the accessing device (the accessing device needs to be publicly accessible)&#xA;    Use a service like ngrok to establish a direct connection between accessing device and accessed device through a server at ngrok (Probably the best option which I have listed).&#xA;&#xA;Nonetheless, this working prototype is more than enough for me for now. If you would be interested in having the original files be submitted to Github (they are not, yet), please feel free so send me a message! Also send me a message if you would generally be interested in the aforementioned additional features. If other people would like them, I might be willing to implement them. &#xA;&#xA;CUL8R!&#xA;(See You Later)]]&gt;</description>
      <content:encoded><![CDATA[<p>So I recently had this problem:
My NAS and my home server were both down, I was away (at school) and needed to access some files I had on my big desktop pc at home. Normally, this wouldn&#39;t be that bad, since there was physically someone in the house I was able to call, but... Well, let&#39;s just say I&#39;m incredibly paranoid and my passwords are 32+ alpha-numeric chars with special signs and everything... The “physically present person” was not too amused and eventually (after mistyping for a few of times) gave up.
Therefore, the need for me to access my files remotely was born. And since I don&#39;t want to save everything to my NAS that I might eventually could potentially need sometime in the future, I want it to work on the local actual files on my desktop pc. So what could I do?</p>



<p>At first, I thought I could simply add a small partition on my local hard drive, which, when booted, would simply do nothing more than to open an ssh login so that I could log into this partition and mount all my other stuff from there (since I do have a VPN connection to my home network).
That idea was from a couple of months ago, but I kept on coming back to this idea again and again.
Since I was unable to find a good solution on how to make a tiny bit of space on my hard drive (with it already being partitioned and all), I pivoted the idea of a live-iso on an usb stick which in principle does the exact same thing but more temporary and elegantly.</p>

<p>My original “<em>requirements</em>” / ideas for how this system should work were that it should run from a usb stick and take up very little space (my original idea was about 256 MB since that would barely fit on my smallest usb thumb drive). When booted, the system should obtain network access and display the ip address so that you can still access your files when you are away but a non-technical user (or even someone you don&#39;t fully trust with your passwords) is physically present.</p>

<p>I&#39;ve spent today with getting the most simple prototype working. It&#39;s not doing a lot, but already displays that this might be a very promising idea.
The basic example does the following:</p>
<ul><li>Automatically boots into a normal (self-compiled) live arch-iso system</li>
<li>Checks if there is an active internet connection</li>
<li>If yes: Start an ssh server (passwordless, maybe change later to be more secure)</li>
<li>if not: put the user into an nmtui prompt to get network working again</li>
<li>when user exists, do another check if there is a current internet connection</li></ul>

<p>I believe for my use case, this will already work out to be sufficient, as I will be able to instruct whoever is using it on what to do (and how to get networking to work).
However, possible improvements could include:</p>
<ul><li>Better UI / TUI for when there is no internet connection
<ul><li>User is supposed to be guided through getting internet</li>
<li>User should not need to type in any commands (in contrast to using iwctl)</li></ul></li>
<li>More Security: Add randomly generated password for root ssh login and display that in stdout</li>
<li>More Remote Options:
<ul><li>Software is currently assuming a VPN connection to the local network the pc is in or a port forward of ssh port (which would be very bad without a password)</li>
<li>–&gt; One should add an option to access the data even when completely away without VPN to local network, Options for getting this to work include</li>
<li>Using a VPS as a common VPN endpoint =&gt; Tunnel</li>
<li>Creating Outbound connection via accessed device to the accessing device (the accessing device needs to be publicly accessible)</li>
<li>Use a service like ngrok to establish a direct connection between accessing device and accessed device through a server at ngrok (Probably the best option which I have listed).</li></ul></li></ul>

<p>Nonetheless, this working prototype is more than enough for me for now. If you would be interested in having the original files be submitted to Github (they are not, yet), please feel free so send me a message! Also send me a message if you would generally be interested in the aforementioned additional features. If other people would like them, I might be willing to implement them.</p>

<p>CUL8R!
(See You Later)</p>
]]></content:encoded>
      <guid>https://blog.benoto.net/intentionally-creating-a-backdoor-via-usb-thumbdrive</guid>
      <pubDate>Tue, 23 Jun 2026 17:20:05 +0000</pubDate>
    </item>
    <item>
      <title>Migrating to a new Blogging Engine</title>
      <link>https://blog.benoto.net/migrating-to-a-new-blogging-engine</link>
      <description>&lt;![CDATA[Like I already told in my previous post about the state of this blog, I&#39;ve recently and randomly found a really cool, personal blog, written by Drew DeVault. One of his posts was about his blogging engine and workflow, which, according to him, involves Neovim as the editor (just like I use as well!) and a git server to which he is able to push his changes, which then are instantly deployed using some specific (and I guess quite niche) static site generator. &#xA;Said workflow sounds incredibly exciting to me and makes me want to try the exact same thing. With one change, nonetheless, since I do not have the same specific and high requirements for the actual static site generator, which he had. I simply want something that works with the highest priority being the lightweight nature of the service and small footprint on memory and storage (as I only have 1G &amp; 10G respectively on my VPS, as I have stated before as well). &#xA;&#xA;!--more--&#xA;&#xA;After researching a bit, I have come to the conclusion that I cannot do much wrong with a rather default choice for static site generation called hugo. &#xA;Since I am not exactly 100% sure I want to switch to it, however, I am going to spin up a small virtual container on my local proxmox server to try the workflow out and see what I like and dislike about it. &#xA;&#xA;To start out, I simply made a new Alpine Linux Container with very minimal specs:&#xA;&#xA;4 GB Storage Disk&#xA;256 MB Memory&#xA;1 CPU Core&#xA;&#xA;Since I was particularly lazy, I simply installed the hugo package via the edge-alpine linux repository and created a new project with the hugo cli. &#xA;Then, I went searching for a good-looking color scheme and just decided for one that looked good enough for my liking (this is just a test anyway, not the final shipped product to my VPS). &#xA;After configuring the display scheme a tiny bit (different colors), I was already ready to host some stuff!&#xA;I just had to add it to my Caddy configuration and it already sort of worked. But only sort of. It just displayed a few text lines without any content...&#xA;So the theme did not really display anything... Strange...&#xA;&#xA;I figured it out, since it was simply just a problem with cross origins and it not knowing on what source to bind, so hugo tends to bind to localhost, which is rather bad for a container... But whatever. &#xA;As the simple static file server I just use Caddy, which is very much not built for this thing (well, at least not mainly) but it works and I know how to work with it...&#xA;&#xA;Finally, I got it all working. I can now create new posts quite easily and edit them in Neovim. It might be better long term to have my posts as normal markdown files on my own computer as well as my server, but after having set up hugo, I do not feel the need anymore to switch to a static site generator. I really like the convenience of being able to publish from any device and having the blog be always accessible. &#xA;&#xA;Concerning the longevity, I might need to think about a solution for backups for my blog, since by now it has become quite a big collection of work hours I have spent writing and I would prefer to not lose it by simply having a corrupted file system (despite that being very unlikely on Debian stable...)&#xA;&#xA;I found an acceptable solution: From time to time, I will manually download an entire image of my VPS (since it&#39;s only 10 GB max) and will regularly download my blog as a JSON file (which WriteFreely supports natively. It&#39;s definitely not ideal, as I would have liked something more automatic and not manual, but it will work for now and I guess, for now, I won&#39;t need to worry about it. ]]&gt;</description>
      <content:encoded><![CDATA[<p>Like I already told in my previous post about the state of this blog, I&#39;ve recently and randomly found a really cool, personal blog, written by <a href="https://drewdevault.com/">Drew DeVault</a>. One of his posts was about his blogging engine and workflow, which, according to him, involves Neovim as the editor (just like I use as well!) and a git server to which he is able to push his changes, which then are instantly deployed using some specific (and I guess quite niche) static site generator.
Said workflow sounds incredibly exciting to me and makes me want to try the exact same thing. With one change, nonetheless, since I do not have the same specific and high requirements for the actual static site generator, which he had. I simply want something that works with the highest priority being the lightweight nature of the service and small footprint on memory and storage (as I only have 1G &amp; 10G respectively on my VPS, as I have stated before as well).</p>



<p>After researching a bit, I have come to the conclusion that I cannot do much wrong with a rather default choice for static site generation called <a href="https://gohugo.io/">hugo</a>.
Since I am not exactly 100% sure I want to switch to it, however, I am going to spin up a small virtual container on my local proxmox server to try the workflow out and see what I like and dislike about it.</p>

<p>To start out, I simply made a new Alpine Linux Container with very minimal specs:</p>
<ul><li>4 GB Storage Disk</li>
<li>256 MB Memory</li>
<li>1 CPU Core</li></ul>

<p>Since I was particularly lazy, I simply installed the hugo package via the edge-alpine linux repository and created a new project with the hugo cli.
Then, I went searching for a good-looking color scheme and just decided for one that looked good enough for my liking (this is just a test anyway, not the final shipped product to my VPS).
After configuring the display scheme a tiny bit (different colors), I was already ready to host some stuff!
I just had to add it to my Caddy configuration and it already sort of worked. But only sort of. It just displayed a few text lines without any content...
So the theme did not really display anything... Strange...</p>

<p>I figured it out, since it was simply just a problem with cross origins and it not knowing on what source to bind, so hugo tends to bind to localhost, which is rather bad for a container... But whatever.
As the simple static file server I just use Caddy, which is very much not built for this thing (well, at least not mainly) but it works and I know how to work with it...</p>

<p>Finally, I got it all working. I can now create new posts quite easily and edit them in Neovim. It might be better long term to have my posts as normal markdown files on my own computer as well as my server, but after having set up hugo, I do not feel the need anymore to switch to a static site generator. I really like the convenience of being able to publish from any device and having the blog be always accessible.</p>

<p>Concerning the longevity, I might need to think about a solution for backups for my blog, since by now it has become quite a big collection of work hours I have spent writing and I would prefer to not lose it by simply having a corrupted file system (despite that being very unlikely on Debian stable...)</p>

<p>I found an acceptable solution: From time to time, I will manually download an entire image of my VPS (since it&#39;s only 10 GB max) and will regularly download my blog as a JSON file (which WriteFreely supports natively. It&#39;s definitely not ideal, as I would have liked something more automatic and not manual, but it will work for now and I guess, for now, I won&#39;t need to worry about it.</p>
]]></content:encoded>
      <guid>https://blog.benoto.net/migrating-to-a-new-blogging-engine</guid>
      <pubDate>Tue, 23 Jun 2026 17:16:24 +0000</pubDate>
    </item>
    <item>
      <title>Opening Up</title>
      <link>https://blog.benoto.net/opening-up</link>
      <description>&lt;![CDATA[During a recent search on Kagi (my new search engine of choice, you should try it too!), I&#39;ve stumbled upon an independent software engineer&#39;s blogging website by a guy called Drew DeVault. &#xA;I was quite pleasantly surprised to have found such results on the web, as such blogs tend to be rather small because they fill a small niche on the web. I guess this has never happened before, without me realized it because of the absence of the &#34;small web&#34; feature in other search engines like DuckDuckGo (which I have used previously). &#xA;&#xA;I&#39;ve quickly read through the main article I needed for the information I was searching. Then another; and another. It felt so relatable that I&#39;ve just kept on reading. Most of the things he said were simply right on the same wavelength as I was. &#xA;&#xA;!--more--&#xA;&#xA;I took his blog as an inspiration to open up my blog and simply write about whatever I am currently dealing with. Therefore, there will also be posts about other stuff I am doing, like the process of transferring the entire blog from WriteFreely to a static site generator (like Hugo, for example), which is currently already in the planning phase.&#xA;The reason behind this switch is that I want to try a new system of publishing via git because of the versioning control in addition to being able to use Neovim as my editor, which I have recently customized to my liking with lots of plugins which will also probably make the work of writing blog posts easier. More on this topic in the later specific post just about the switch. &#xA;&#xA;In general, this is simply supposed to be my blog; without much selection of what I post on here. And because I am planning to keep this action of blogging up, I will try to regularly release or write posts concerning basically what I&#39;ve been working on since the previous post. &#xA;Additionally, when I haven&#39;t actually done anything myself, but I&#39;ve found a topic which really interests me, which I want to explore further or even just give my own opinion on, I will do exactly that on this blog as well. &#xA;&#xA;I hope if I keep up the work of doing regular blog posts, the quality of each one must improve eventually, right? &#xA;No other way to find out, than to try... ]]&gt;</description>
      <content:encoded><![CDATA[<p>During a recent search on Kagi (my new search engine of choice, you should try it too!), I&#39;ve stumbled upon an <a href="https://drewdevault.com">independent software engineer&#39;s blogging website</a> by a guy called Drew DeVault.
I was quite pleasantly surprised to have found such results on the web, as such blogs tend to be rather small because they fill a small niche on the web. I guess this has never happened before, without me realized it because of the absence of the “small web” feature in other search engines like DuckDuckGo (which I have used previously).</p>

<p>I&#39;ve quickly read through the main article I needed for the information I was searching. Then another; and another. It felt so relatable that I&#39;ve just kept on reading. Most of the things he said were simply right on the same wavelength as I was.</p>



<p>I took his blog as an inspiration to open up my blog and simply write about whatever I am currently dealing with. Therefore, there will also be posts about other stuff I am doing, like the process of transferring the entire blog from WriteFreely to a static site generator (like Hugo, for example), which is currently already in the planning phase.
The reason behind this switch is that I want to try a new system of publishing via git because of the versioning control in addition to being able to use Neovim as my editor, which I have recently customized to my liking with lots of plugins which will also probably make the work of writing blog posts easier. More on this topic in the later specific post just about the switch.</p>

<p>In general, this is simply supposed to be <em>my</em> blog; without much selection of what I post on here. And because I am planning to keep this action of blogging up, I will try to regularly release or write posts concerning basically what I&#39;ve been working on since the previous post.
Additionally, when I haven&#39;t actually done anything myself, but I&#39;ve found a topic which really interests me, which I want to explore further or even just give my own opinion on, I will do exactly that on this blog as well.</p>

<p>I hope if I keep up the work of doing regular blog posts, the quality of each one <em>must</em> improve eventually, right?
No other way to find out, than to try...</p>
]]></content:encoded>
      <guid>https://blog.benoto.net/opening-up</guid>
      <pubDate>Tue, 23 Jun 2026 05:58:08 +0000</pubDate>
    </item>
    <item>
      <title>Starting Calculator Development (Calcx)</title>
      <link>https://blog.benoto.net/starting-calculator-development-calcx</link>
      <description>&lt;![CDATA[After finishing the last tiny project (port scanner), I now started working on my own calculator app in Rust which I (creatively) called calcx. &#xA;By now, I was able to lay some ground work with general structs and making a very simple interactive &#34;tui&#34; using cliclack (through I did switch between tui libraries / crates quite a lot before settling for this one). &#xA;The most current version of the source code can be found here: &#xA;Github&#xA;&#xA;!--more--&#xA;&#xA;Update: &#xA;A couple of days in and I have finally got token parsing sort of working. It&#39;s not really correct, yet. But the codebase is still surprisingly tidy and organized. I am genuinely shocked :D&#xA;&#xA;Second-Update:&#xA;Well, I jinxed it. The codebase is everything but tidy. I am, however, quite content with the amount of features I was able to implement up until this point. &#xA;By now, one is able to do actual basic calculations with the program (even with units; sort of). &#xA;I&#39;m not really sure which problem / feature I should tackle next, since there are quite a few possible next steps from my current state: &#xA;&#xA;Reorganizing the codebase to have everything in its own file&#xA;Implementing well-formatted output of calculations (currently it&#39;s rather a debug message than anything else; this would probably not take too long to implement)&#xA;Adding support for keywords like kilo, mega, etc&#xA;Fixing already identified potential crashes (most obvious: -(1+2) crashes)&#xA;Instead of crashing the program when it encounters an error, implement error messages and continue running&#xA;&#xA;Despite everything else, I believe I should start with the task of reorganizing to lay the groundwork for all future additions. &#xA;&#xA;Third-Update:&#xA;I guess I was quite productive: &#xA;&#xA;I&#39;ve organized the folder structure into more, smaller files&#xA;I&#39;ve also added a display function (for later use, currently it&#39;s still horrible as it just returns the exponents of each unit in order, but it&#39;s good enough for now. &#xA;Support for keywords for powers of 10 was added, you can now use kilo, nano, etc&#xA;-(1+2) works, but no other crashes were fixed&#xA;Some error handling has been done, but the previous system for the parsing into the tree was not yet restructured, only the eval function now returns a result enum. &#xA;&#xA;Next ToDos: &#xA;&#xA;Figure out versioning (semantic versioning)&#xA;Working on known crashes (e.g. (2)5 should return 10, but hangs; actually just fixed that one)&#xA;Starting development on unit conversions? &#xA;OR starting on functions (I don&#39;t know which seems more complex)&#xA;Working with Variables&#xA;Write documentation&#xA;&#xA;Fourth Update: &#xA;I am now done with implementing all misc units (like volts, ohm, etc). &#xA;I will now start to plan on how to implement keywords and parsing them. I guess I will have to implement this into the tree building. I might even be able to use the current logic for brackets in a similar way...]]&gt;</description>
      <content:encoded><![CDATA[<p>After finishing the last tiny project (port scanner), I now started working on my own calculator app in Rust which I (creatively) called calcx.
By now, I was able to lay some ground work with general structs and making a very simple interactive “tui” using cliclack (through I did switch between tui libraries / crates quite a lot before settling for this one).
The most current version of the source code can be found here:
<a href="https://github.com/BenotoNet/calcx">Github</a></p>



<h2 id="update">Update:</h2>

<p>A couple of days in and I have finally got token parsing sort of working. It&#39;s not really correct, yet. But the codebase is still surprisingly tidy and organized. I am genuinely shocked <code>:D</code></p>

<h2 id="second-update">Second-Update:</h2>

<p>Well, I jinxed it. The codebase is everything <em>but</em> tidy. I am, however, quite content with the amount of features I was able to implement up until this point.
By now, one is able to do actual basic calculations with the program (even with units; sort of).
I&#39;m not really sure which problem / feature I should tackle next, since there are quite a few possible next steps from my current state:</p>
<ul><li>Reorganizing the codebase to have everything in its own file</li>
<li>Implementing well-formatted output of calculations (currently it&#39;s rather a debug message than anything else; this would probably not take too long to implement)</li>
<li>Adding support for keywords like kilo, mega, etc</li>
<li>Fixing already identified potential crashes (most obvious: –(1+2) crashes)</li>
<li>Instead of crashing the program when it encounters an error, implement error messages and continue running</li></ul>

<p>Despite everything else, I believe I should start with the task of reorganizing to lay the groundwork for all future additions.</p>

<h2 id="third-update">Third-Update:</h2>

<h3 id="i-guess-i-was-quite-productive">I guess I was quite productive:</h3>
<ul><li>I&#39;ve organized the folder structure into more, smaller files</li>
<li>I&#39;ve also added a display function (for later use, currently it&#39;s still horrible as it just returns the exponents of each unit in order, but it&#39;s good enough for now.</li>
<li>Support for keywords for powers of 10 was added, you can now use kilo, nano, etc</li>
<li>–(1+2) works, but no other crashes were fixed</li>
<li>Some error handling has been done, but the previous system for the parsing into the tree was not yet restructured, only the eval function now returns a result enum.</li></ul>

<h3 id="next-todos">Next ToDos:</h3>
<ul><li>Figure out versioning (semantic versioning)</li>
<li>Working on known crashes (e.g. (2)5 should return 10, but hangs; actually just fixed that one)</li>
<li>Starting development on unit conversions?</li>
<li>OR starting on functions (I don&#39;t know which seems more complex)</li>
<li>Working with Variables</li>
<li>Write documentation</li></ul>

<h2 id="fourth-update">Fourth Update:</h2>

<p>I am now done with implementing all misc units (like volts, ohm, etc).
I will now start to plan on how to implement keywords and parsing them. I guess I will have to implement this into the tree building. I might even be able to use the current logic for brackets in a similar way...</p>
]]></content:encoded>
      <guid>https://blog.benoto.net/starting-calculator-development-calcx</guid>
      <pubDate>Fri, 12 Jun 2026 11:13:45 +0000</pubDate>
    </item>
    <item>
      <title>Starting new Projects While Others aren&#39;t even Done... Sorry :)</title>
      <link>https://blog.benoto.net/starting-new-projects-while-others-arent-even-done</link>
      <description>&lt;![CDATA[I was bored, but still did not want to post the link to the onion service, which resulted in my searching for a new project idea. &#xA;Since I set as a goal to really learn Rust, I wanted to build the next project in it (if it is not by far easier with another tool). &#xA;&#xA;Having not that much experience with Rust yet, I aimed for quite beginner projects, which are useful for building core skills. &#xA;&#xA;The list of potential next contenders includes: &#xA;&#xA;Snake&#xA;Port Scanner&#xA;TCP-Chat Application (Client &amp; Server)&#xA;CLI Calculator&#xA;    (I was searching for a really good, extensive one fitting my needs exactly for a long time, might be unrealistic for me to make such a big project, however)&#xA;    Extension features could include: functions, working with units, live fetched data (-  units like BTC Price in EUR, etc)&#xA;&#xA;!--more--&#xA;&#xA;I currently lean towards building a port scanner first as a fun side project and then starting the rather large project of building the calculator which actually fits my needs. &#xA;(Currently, as the calculator of choice, I use SpeedCrunch, but sometimes, I find it to have rather poor documentation and be quite unintuitive)&#xA;&#xA;Having started the project of a tcp-port scanner, I found that it is actually quite easy to get a working prototype (which, of course, is not optimized at all). &#xA;To optimize it now (with threads) I need to extend my own threading package (tokio &#34;replacement&#34;) to give me output when each thread finishes. &#xA;&#xA;Actually, never mind. I will simply learn to use tokio, I think that might be the best use of my time, especially since I think implementing a good input-output system for a multi-threaded-pool is still a bit over my head... &#xA;So just sticking with tokio for now. &#xA;&#xA;Update: &#xA;Okay, multi threaded small application using tokio is done, it was actually surprisingly easy (I guess that&#39;s what you get when you use actual good libraries / crates). The code is quite unsurprising and quite short (I expected it to be a much larger project than it finally turned out to be, but whatever...&#xA;&#xA;use std::net::TcpStream;&#xA;use tokio;&#xA;&#xA;async fn testport(host: &amp;str, port: u32) -  bool {&#xA;    match TcpStream::connect(format!{&#34;{host}:{port}&#34;}) {&#xA;        Ok() =  true,&#xA;        Err() =  false,&#xA;    }&#xA;}&#xA;&#xA;[tokio::main]&#xA;async fn main() {&#xA;    let mut porthandles = vec![];&#xA;    for port in 0..5000 {&#xA;        porthandles.push((tokio::spawn(testport(&#34;192.168.178.1&#34;, port)), port));&#xA;    }&#xA;&#xA;    let mut openports = vec![];&#xA;    for handle in porthandles {&#xA;        let port = handle.1;&#xA;        match handle.0.await.unwrap() {&#xA;            true =  {openports.push(port)},&#xA;             =  {},&#xA;        }&#xA;    }&#xA;&#xA;    println!{&#34;{:?}&#34;, open_ports};&#xA;}&#xA;`]]&gt;</description>
      <content:encoded><![CDATA[<p>I was bored, but still did not want to post the link to the onion service, which resulted in my searching for a new project idea.
Since I set as a goal to really learn Rust, I wanted to build the next project in it (if it is not by far easier with another tool).</p>

<p>Having not that much experience with Rust yet, I aimed for quite beginner projects, which are useful for building core skills.</p>

<p>The list of potential next contenders includes:</p>
<ul><li>Snake</li>
<li>Port Scanner</li>
<li>TCP-Chat Application (Client &amp; Server)</li>
<li>CLI Calculator
<ul><li>(I was searching for a really good, extensive one fitting my needs exactly for a long time, might be unrealistic for me to make such a big project, however)</li>
<li>Extension features could include: functions, working with units, live fetched data (–&gt; units like BTC Price in EUR, etc)</li></ul></li></ul>



<p>I currently lean towards building a port scanner first as a fun side project and then starting the rather large project of building the calculator which actually fits my needs.
(Currently, as the calculator of choice, I use SpeedCrunch, but sometimes, I find it to have rather poor documentation and be quite unintuitive)</p>

<p>Having started the project of a tcp-port scanner, I found that it is actually quite easy to get a working prototype (which, of course, is not optimized at all).
To optimize it now (with threads) I need to extend my own threading package (tokio “replacement”) to give me output when each thread finishes.</p>

<p>Actually, never mind. I will simply learn to use tokio, I think that might be the best use of my time, especially since I think implementing a good input-output system for a multi-threaded-pool is still a bit over my head...
So just sticking with tokio for now.</p>

<p>Update:
Okay, multi threaded small application using tokio is done, it was actually surprisingly easy (I guess that&#39;s what you get when you use actual good libraries / crates). The code is quite unsurprising and quite short (I expected it to be a much larger project than it finally turned out to be, but whatever...</p>

<pre><code class="language-rust">use std::net::TcpStream;
use tokio;

async fn test_port(host: &amp;str, port: u32) -&gt; bool {
    match TcpStream::connect(format!{&#34;{host}:{port}&#34;}) {
        Ok(_) =&gt; true,
        Err(_) =&gt; false,
    }
}

#[tokio::main]
async fn main() {
    let mut port_handles = vec![];
    for port in 0..5000 {
        port_handles.push((tokio::spawn(test_port(&#34;192.168.178.1&#34;, port)), port));
    }

    let mut open_ports = vec![];
    for handle in port_handles {
        let port = handle.1;
        match handle.0.await.unwrap() {
            true =&gt; {open_ports.push(port)},
            _ =&gt; {},
        }
    }

    println!{&#34;{:?}&#34;, open_ports};
}
</code></pre>
]]></content:encoded>
      <guid>https://blog.benoto.net/starting-new-projects-while-others-arent-even-done</guid>
      <pubDate>Tue, 09 Jun 2026 17:41:45 +0000</pubDate>
    </item>
    <item>
      <title>Quick Bit: GPodder</title>
      <link>https://blog.benoto.net/quick-bit-gpodder</link>
      <description>&lt;![CDATA[This blog post was written in retrospect, since I simply forgot to write about it during the process of setting it up. I guess I am not yet used to documenting my entire procedure when working on projects. Hopefully, that&#39;ll change. &#xA;&#xA;To start off a bit of context: &#xA;For the previous few months, I have been trying to cut down my screen time on my phone. This eventually resulted in me downloading an open-source podcast app (called AntennaPod, for anyone curious). Since then, I&#39;ve been replacing my video consumption with audio-media and have accumulated quite a few different podcasts I am subscribed to. &#xA;By chance, I&#39;ve found the option to use GPodder Sync to synchronize these podcasts and my progress through them to a locally-self-hosted server running GPodder. &#xA;&#xA;!--more--&#xA;&#xA;Naturally, I had a hunch to set it up quickly for fun. So I did. &#xA;Though, first, of course, I did some research on which option to choose for hosting. The one I came across first was the original GPodder repository itself, which I found to be too old and unnecessarily complex to set up. I researched a few more options and finally found PinePods which is a full suite for Podcasts also including website, app and CLI-players (especially the latter really fancied me). And another positive aspect: It&#39;s written in Rust. &#xA;&#xA;So after spinning up a small alpine linux container in my main-server proxmox instance and setting up a few quick docker-compose containers, it was done. I only needed to add two entries for the different ports (web and gpodder) to my Caddy configuration so I could resolve it via URL and I was done. &#xA;&#xA;  Note to self: put all containers running docker-compose into one single lxc-container to not have duplicate versions of docker compose saved on different virtual containers. &#xA;Well, it&#39;ll be a ToDo for another time. ]]&gt;</description>
      <content:encoded><![CDATA[<p>This blog post was written in retrospect, since I simply forgot to write about it during the process of setting it up. I guess I am not yet used to documenting my entire procedure when working on projects. Hopefully, that&#39;ll change.</p>

<p>To start off a bit of context:
For the previous few months, I have been trying to cut down my screen time on my phone. This eventually resulted in me downloading an open-source podcast app (called AntennaPod, for anyone curious). Since then, I&#39;ve been replacing my video consumption with audio-media and have accumulated quite a few different podcasts I am subscribed to.
By chance, I&#39;ve found the option to use GPodder Sync to synchronize these podcasts and my progress through them to a locally-self-hosted server running GPodder.</p>



<p>Naturally, I had a hunch to set it up quickly for fun. So I did.
Though, first, of course, I did some research on which option to choose for hosting. The one I came across first was the original GPodder repository itself, which I found to be too old and unnecessarily complex to set up. I researched a few more options and finally found PinePods which is a full suite for Podcasts also including website, app and CLI-players (especially the latter really fancied me). And another positive aspect: It&#39;s written in Rust.</p>

<p>So after spinning up a small alpine linux container in my main-server proxmox instance and setting up a few quick docker-compose containers, it was done. I only needed to add two entries for the different ports (web and gpodder) to my Caddy configuration so I could resolve it via URL and I was done.</p>

<blockquote><p>Note to self: put all containers running docker-compose into one single lxc-container to not have duplicate versions of docker compose saved on different virtual containers.
Well, it&#39;ll be a ToDo for another time.</p></blockquote>
]]></content:encoded>
      <guid>https://blog.benoto.net/quick-bit-gpodder</guid>
      <pubDate>Mon, 01 Jun 2026 11:15:05 +0000</pubDate>
    </item>
    <item>
      <title>Darknet-Metrics: Publishing</title>
      <link>https://blog.benoto.net/darknet-metrics-publishing</link>
      <description>&lt;![CDATA[I recently worked a bit on the way I am going to publish the entire system. The final deploy (since it&#39;s only temporary) will be done using a small Raspberry Pi Zero I had laying around (so I don&#39;t risk locking my main server in the case that something goes wrong with the service; or even worse, I get hacked...)&#xA;&#xA;!--more--&#xA;&#xA;Since I had something else installed on it before, I was able to simply log in via ssh and install and set up tor. I let it generate a random Onion Address and pointed it to a local port. Then, I spun up my Python Flask app to start automatically on boot and accept requests from Localhost on port 5000. And that was basically it, since TOR does not require any domain name to be registered or anything like that. &#xA;I might need to additionally secure the Raspberry Pi since it does include some other projects I had running a while ago and it is allowed to access the local network, e.g. other devices in the network (which I really do NOT like). &#xA;But probably, it would be unnecessarily complex. &#xA;Now, the next phase may begin: &#xA;&#xA;---&#xA;&#xA;Gaining Attention on the Darknet&#xA;&#xA;Since the link itself is such an obscure string of random alpha-numeric characters, no one will be able to find the website by mistake, of course. So, I&#39;m going to have to do some advertisement. &#xA;To, first, see the impact of a single simple link posted without context in a forum on the Darknet, I am going to create a new Dread account and post the link there. I might need to do some searching to see in which subpart of the forum I am actually allowed to post the link, though. &#xA;&#xA;I will not post the link here so that I, by no chance, change the results of the experiment (though I know I do not have any readers up until this point, so it would not make a difference...)&#xA;&#xA;Again, I am unable to complete this part of the project at the current moment, therefore, I am going to post this entry and make another write-up when I was able to post it. &#xA;&#xA;Update: &#xA;I guess I won&#39;t find the time / motivation to simply do this last distribution of the link, so let&#39;s just say the project was a learning opportunity for web development without JavaScript and how to do APIs. ]]&gt;</description>
      <content:encoded><![CDATA[<p>I recently worked a bit on the way I am going to publish the entire system. The final deploy (since it&#39;s only temporary) will be done using a small Raspberry Pi Zero I had laying around (so I don&#39;t risk locking my main server in the case that something goes wrong with the service; or even worse, I get hacked...)</p>



<p>Since I had something else installed on it before, I was able to simply log in via ssh and install and set up tor. I let it generate a random Onion Address and pointed it to a local port. Then, I spun up my Python Flask app to start automatically on boot and accept requests from Localhost on port 5000. And that was basically it, since TOR does not require any domain name to be registered or anything like that.
I might need to additionally secure the Raspberry Pi since it does include some other projects I had running a while ago and it is allowed to access the local network, e.g. other devices in the network (which I really do NOT like).
But probably, it would be unnecessarily complex.
Now, the next phase may begin:</p>

<hr>

<h2 id="gaining-attention-on-the-darknet">Gaining Attention on the Darknet</h2>

<p>Since the link itself is such an obscure string of random alpha-numeric characters, no one will be able to find the website <em>by mistake</em>, of course. So, I&#39;m going to have to do some advertisement.
To, first, see the impact of a single simple link posted without context in a forum on the Darknet, I am going to create a new Dread account and post the link there. I might need to do some searching to see in which subpart of the forum I am actually allowed to post the link, though.</p>

<p>I will not post the link here so that I, by no chance, change the results of the experiment (though I know I do not have any readers up until this point, so it would not make a difference...)</p>

<p>Again, I am unable to complete this part of the project at the current moment, therefore, I am going to post this entry and make another write-up when I was able to post it.</p>

<p>Update:
I guess I won&#39;t find the time / motivation to simply do this last distribution of the link, so let&#39;s just say the project was a learning opportunity for web development without JavaScript and how to do APIs.</p>
]]></content:encoded>
      <guid>https://blog.benoto.net/darknet-metrics-publishing</guid>
      <pubDate>Fri, 29 May 2026 15:15:06 +0000</pubDate>
    </item>
    <item>
      <title>The First Documented Project: Darknet Metrics</title>
      <link>https://blog.benoto.net/the-first-documented-project-darknet-metrics</link>
      <description>&lt;![CDATA[So, I recently had an idea for an experiment. I wondered about the TOR Network) and how people connect in it. In case you have never tried to use TOR, I would strongly recommend you to. Here are the basics: &#xA;!--more--&#xA;When using the TOR browser, you can still access normal (clear web) websites via normal urls; e.g. https://example.com. But there is also an additional type of URL: an onion address. This is a long string of random characters which ultimately point to the server the website is hosted on. Unlike with normal URLs, when you create an onion address you have no control over which characters appear in which order. This makes remembering onion addresses mostly impractical.&#xA;From what I&#39;ve seen so far, most users get around this by using bookmarks for the sites that are noteworthy and exist. Additionally, there exist some sites whose sole purpose is to catalog and list all known onion sites. One example of this would be tor.taxi, but the legitimacy can hardly be verified in such cases. &#xA;In the real world, most exchange of onion addresses happens in forums and chat rooms. &#xA;&#xA;---&#xA;&#xA;The Idea&#xA;I want to know how much traction and attention a random link in a chat room is able to achieve. I want to do this by hosting my own onion service. &#xA;To realize such a project, I&#39;ve considered a few possibilities: &#xA;&#xA;A website which...&#xA;&#xA;... sends an API request to an API server to catalog the number of visitors with an empty page&#xA;... has a single red button in the middle with an incrementing counter for clicks&#xA;... has a single span as a counter, measuring how often a site was accessed&#xA;&#xA;Unfortunately, all options have their own respective up- and downsides which makes deciding quite a bit more difficult. &#xA;Exemplary, simply making a button to log interaction would only measure the interaction with the site; not when it is accessed. Since I do not expect the website to be flooded with requests and users, I believe there will be a big difference between the number of users (potentially accidentally) clicking on the onion link and users willing to interact with the website to click a button. &#xA;Additionally, I need to find a way to make the website work without the use of JavaScript, as many TOR users have disabled it for security purposes. Currently I do not have a satisfactory solution on how to create API requests without the use of JavaScript; especially since I would prefer not to use PHP, as I am not quite as familiar with it yet.&#xA;Nonetheless, I settled for implementing aspects of all different ideas to have a variety. &#xA;&#xA;--- &#xA;&#xA;Starting Out&#xA;Since the website will have such a simple design, I am not going to design a full UI/UX-Plan and simply start coding. &#xA;&#xA;Okay, update: &#xA;I first started programming in HTML and CSS until I realized that I won&#39;t be able to use JavaScript (since it&#39;s TOR...)&#xA;So, I started using Flask. It&#39;s very rough code but it does not need to survive for long since the project will stay up only for a limited time anyway. &#xA;&#xA;The current version of the deployed code can be found on Github under the following URL: &#xA;https://github.com/Erebos132/darknet-metrics&#xA;&#xA;It will be deployed using Gunicorn + Flask.&#xA;&#xA;Actual deployment will be a topic for a future post as I will take a short break from the project before starting work on it again.]]&gt;</description>
      <content:encoded><![CDATA[<p>So, I recently had an idea for an experiment. I wondered about the <a href="https://en.wikipedia.org/wiki/Tor_(network)">TOR Network</a> and how people connect in it. In case you have never tried to use TOR, I would strongly recommend you to. Here are the basics:

When using the TOR browser, you <em>can</em> still access normal (clear web) websites via normal <a href="https://en.wikipedia.org/wiki/URL">urls</a>; e.g. https://<em>example.com</em>. But there is also an additional type of URL: an onion address. This is a long string of random characters which ultimately point to the server the website is hosted on. Unlike with normal URLs, when you create an onion address you have no control over which characters appear in which order. This makes remembering onion addresses mostly impractical.
From what I&#39;ve seen so far, most users get around this by using bookmarks for the sites that are noteworthy and exist. Additionally, there exist some sites whose sole purpose is to catalog and list all known onion sites. One example of this would be tor.taxi, but the legitimacy can hardly be verified in such cases.
In the real world, most exchange of onion addresses happens in forums and chat rooms.</p>

<hr>

<h2 id="the-idea">The Idea</h2>

<p>I want to know how much traction and attention a random link in a chat room is able to achieve. I want to do this by hosting my own onion service.
To realize such a project, I&#39;ve considered a few possibilities:</p>

<p><em>A website which...</em></p>
<ol><li>... sends an API request to an API server to catalog the number of visitors with an empty page</li>
<li>... has a single red button in the middle with an incrementing counter for clicks</li>
<li>... has a single span as a counter, measuring how often a site was accessed</li></ol>

<p>Unfortunately, all options have their own respective up- and downsides which makes deciding quite a bit more difficult.
Exemplary, simply making a button to log interaction would only measure the <em>interaction</em> with the site; not when it is accessed. Since I do not expect the website to be flooded with requests and users, I believe there will be a big difference between the number of users (potentially accidentally) clicking on the onion link and users willing to interact with the website to click a button.
Additionally, I need to find a way to make the website work without the use of JavaScript, as many TOR users have disabled it for security purposes. Currently I do not have a satisfactory solution on how to create API requests without the use of JavaScript; especially since I would prefer not to use PHP, as I am not quite as familiar with it yet.
Nonetheless, I settled for implementing aspects of all different ideas to have a variety.</p>

<hr>

<h2 id="starting-out">Starting Out</h2>

<p>Since the website will have such a simple design, I am not going to design a full UI/UX-Plan and simply start coding.</p>

<p>Okay, update:
I first started programming in HTML and CSS until I realized that I won&#39;t be able to use JavaScript (since it&#39;s TOR...)
So, I started using Flask. It&#39;s very rough code but it does not need to survive for long since the project will stay up only for a limited time anyway.</p>

<p>The current version of the deployed code can be found on <a href="https://github.com/Erebos132/darknet-metrics">Github</a> under the following URL:
<a href="https://github.com/Erebos132/darknet-metrics">https://github.com/Erebos132/darknet-metrics</a></p>

<p>It will be deployed using Gunicorn + Flask.</p>

<p>Actual deployment will be a topic for a future post as I will take a short break from the project before starting work on it again.</p>
]]></content:encoded>
      <guid>https://blog.benoto.net/the-first-documented-project-darknet-metrics</guid>
      <pubDate>Mon, 25 May 2026 17:10:19 +0000</pubDate>
    </item>
  </channel>
</rss>