<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://joelchrono.xyz/feeds/raspberrypi.xml" rel="self" type="application/atom+xml" /><link href="https://joelchrono.xyz/" rel="alternate" type="text/html" /><updated>2026-03-04T20:16:19-06:00</updated><id>https://joelchrono.xyz/feeds/raspberrypi.xml</id><title type="html">joelchrono’s blog</title><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><entry><title type="html">Rapberry Pi is out (for now)</title><link href="https://joelchrono.xyz/blog/rapberry-pi-is-out-(for-now)/" rel="alternate" type="text/html" title="Rapberry Pi is out (for now)" /><published>2024-09-17T05:23:40-06:00</published><updated>2024-09-17T05:23:40-06:00</updated><id>https://joelchrono.xyz/blog/rapberry-pi-is-out-(for-now)</id><content type="html" xml:base="https://joelchrono.xyz/blog/rapberry-pi-is-out-(for-now)/"><![CDATA[<p>So, a few days ago my Raspberry Pi died because of a power outage, most likely, the SD card got corrupted <em>again</em>.</p>

<p>I really, really should just look for some way to stop that from happening.</p>

<p>Anyway, my contact synchronization is no more, my FreshRSS instance is no more, my Nextcloud instance is no more, and I have to find alternatives in the mean time.</p>

<p>I think that I will for sure switch to an SSD next time I try to boot it up, I already have one that I just haven’t installed and should help me avoid these issues. these issues. Right now my Pi is just sitting there collecting dust, I actually bought a new mini hdmi dongle to try and boot it with a monitor and keyboard plugged in.</p>

<p>For a bit I even thought of going back to Google, but I am not that lazy. I will probablyl just trust <a href="https://disroot.org">Disroot</a> enough to hold my contact and calendar info, and maybe the <a href="https://rss.zdx.fr">ZDX free FreshRSS instance</a> to be my RSS backend.</p>

<p>Thankfully, all of the pictures I had on Nextcloud is on an external drive I was using as just storage on my Raspberry Pi, so I can still get that out. I could probably just keep using it as just a hard drive and use it whenever I need. I remember using MEGA at some point for my cloud storage needs, I should maybe go back to that? I dont’ know.</p>

<p>Everything would be solved if I just had some external power source that kept my Pi alive during outages, and a script that shut it down safely…</p>

<p>This is day of 71 <a href="https://100daystooffload.com">#100DaysToOffload</a></p>]]></content><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><category term="raspberrypi" /><category term="selfhost" /><category term="rss" /><summary type="html"><![CDATA[My Raspberry Pi shutdown and won't come back online for a bit, so what now?]]></summary></entry><entry><title type="html">FreshRSS and Nextcloud broke</title><link href="https://joelchrono.xyz/blog/freshrss-and-nextcloud-broke/" rel="alternate" type="text/html" title="FreshRSS and Nextcloud broke" /><published>2023-01-31T14:00:00-06:00</published><updated>2023-01-31T14:00:00-06:00</updated><id>https://joelchrono.xyz/blog/breaking-my-selhosted-services</id><content type="html" xml:base="https://joelchrono.xyz/blog/freshrss-and-nextcloud-broke/"><![CDATA[<p>As my rabbithole on RSS kept going down. I eventually decided to go and import even more feeds to my FreshRSS instance, because sometimes you just feel like the web is terrible and decide run away from it as much as you can, util it is too much of a hassle and the balance returns.</p>

<h1 id="how-i-broke-freshrss">How I broke FreshRSS</h1>

<p>So, I decided to import my Youtube subscriptions, the way I did it was kinda neat. I had found this javascript bookmark that may be better for you, since its <em>just a bit</em> faster than using Google Takeout just for subscriptions.</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nx">javascript</span><span class="p">:</span><span class="k">if</span><span class="p">(</span><span class="dl">"</span><span class="s2">https://www.youtube.com/feed/channels</span><span class="dl">"</span><span class="o">==</span><span class="nb">window</span><span class="p">.</span><span class="nx">location</span><span class="p">.</span><span class="nx">href</span><span class="p">){</span><span class="kd">let</span> <span class="nx">e</span><span class="o">=</span><span class="p">[...</span><span class="nb">document</span><span class="p">.</span><span class="nf">querySelectorAll</span><span class="p">(</span><span class="dl">"</span><span class="s2">#main-link.channel-link</span><span class="dl">"</span><span class="p">)].</span><span class="nf">map</span><span class="p">(</span><span class="nx">e</span><span class="o">=&gt;</span><span class="p">{</span><span class="kd">const</span><span class="p">[,</span><span class="nx">t</span><span class="p">,</span><span class="nx">n</span><span class="p">]</span><span class="o">=</span><span class="nx">e</span><span class="p">.</span><span class="nx">href</span><span class="p">.</span><span class="nf">match</span><span class="p">(</span><span class="dl">"</span><span class="s2">/((?:user)|(?:channel))/(.*)$</span><span class="dl">"</span><span class="p">);</span><span class="k">return</span><span class="dl">"</span><span class="s2">https://www.youtube.com/feeds/videos.xml?</span><span class="dl">"</span><span class="o">+</span><span class="p">(</span><span class="dl">"</span><span class="s2">user</span><span class="dl">"</span><span class="o">===</span><span class="nx">t</span><span class="p">?</span><span class="dl">"</span><span class="s2">user=</span><span class="dl">"</span><span class="p">:</span><span class="dl">"</span><span class="s2">channel_id=</span><span class="dl">"</span><span class="p">)</span><span class="o">+</span><span class="nx">n</span><span class="p">}).</span><span class="nf">join</span><span class="p">(</span><span class="dl">"</span><span class="se">\n</span><span class="dl">"</span><span class="p">);</span><span class="nx">e</span><span class="p">?</span><span class="nb">navigator</span><span class="p">.</span><span class="nx">clipboard</span><span class="p">.</span><span class="nf">writeText</span><span class="p">(</span><span class="nx">e</span><span class="p">).</span><span class="nf">then</span><span class="p">(()</span><span class="o">=&gt;</span><span class="nf">alert</span><span class="p">(</span><span class="dl">"</span><span class="s2">A%20list%20of%20channel%20RSS%20feeds%20has%20been%20copied%20to%20the%20clipboard.%20</span><span class="se">\n</span><span class="s2">Paste%20these%20into%20rssmix.com%20to%20generate%20a%20single%20RSS%20feed,%20or%20opml-gen.ovh%20to%20generate%20an%20OPML%20file.</span><span class="dl">"</span><span class="p">)).</span><span class="k">catch</span><span class="p">(()</span><span class="o">=&gt;</span><span class="p">{</span><span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="nx">e</span><span class="p">),</span><span class="nf">alert</span><span class="p">(</span><span class="dl">"</span><span class="s2">A%20list%20of%20channel%20RSS%20feeds%20has%20logged%20to%20the%20console.%20(Unable%20to%20copy%20to%20clipboard)%20</span><span class="se">\n</span><span class="s2">Paste%20these%20into%20rssmix.com%20to%20generate%20a%20single%20RSS%20feed,%20or%20opml-gen.ovh%20to%20generate%20an%20OPML%20file.</span><span class="dl">"</span><span class="p">)}):</span><span class="nf">alert</span><span class="p">(</span><span class="dl">"</span><span class="s2">Couldn't%20find%20any%20subscriptions</span><span class="dl">"</span><span class="p">)}</span><span class="k">else</span><span class="o">%</span><span class="mi">20</span><span class="nf">alert</span><span class="p">(</span><span class="dl">'</span><span class="s1">Please%20run%20at%20"https://www.youtube.com/feed/channels"</span><span class="dl">'</span><span class="p">);</span>
</code></pre></div></div>

<p>All you need to do to make it work is go <a href="https://www.youtube.com/feed/channels">here</a>, scroll ALL the way to the bottom, it might take a while, so use the EndPage key or something a couple of times, or a dozen if you are susbribed to many channels like me. Once done, just run the bookmarklet and all the feed urls will be copied to your clipboard. After that, I found an <a href="https://opml-gen.ovh/">online OPML generator</a>, but you can probably use some bash script too, this time I was lazy.</p>

<p>After that I imported the OPML file to FreshRSS and that’s where the fun begun.</p>

<p>For some reason, I thought that adding 1200 feeds at once would be a decent idea, it was not. The import process took a while, a long while. Even if it didn’t actually break, it was a pain to use and doing a refresh was painfully bad.</p>

<h2 id="bulk-deletion-of-feed-subscriptions">Bulk deletion of feed subscriptions</h2>

<p>I decided to try and remove them. Sadly, as of now there is no way to delete subscriptions in bulk. So I had to fiddle around with the MySQL database via SSH.</p>

<p>Of course, <strong>before doing all this backing up the database is a good idea</strong>. But I didn’t think anything too bad could happen, don’t follow my example though.</p>

<p>I ran the following command, after getting into the freshrss database:</p>

<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">DELETE</span> <span class="k">FROM</span> <span class="n">freshrss_</span><span class="err">$</span><span class="n">user_feed</span> <span class="k">WHERE</span> <span class="n">category</span> <span class="o">=</span> <span class="mi">14</span><span class="p">;</span> <span class="c1">-- user is your username</span>
</code></pre></div></div>

<p>Of course, to get the category and table name, you should use commands such as <code class="language-plaintext highlighter-rouge">show tables;</code> and also checking the category number in the <code class="language-plaintext highlighter-rouge">freshrss_$user_category</code> with <code class="language-plaintext highlighter-rouge">SELECT * FROM freshrss_$user_category;</code>. But while I am kinda used to MySQL, not everyone is, I hope bulk actions become a thing soon enough in FreshRSS.</p>

<h1 id="and-now-nextcloud-too-️">And now Nextcloud too… 🤦🏻‍♂️</h1>

<p>Later I also decided to check my Yunohost admin settings and saw that some of my applications had updates available. Nextcloud is always down for a while when its being updated, so that’s all right.</p>

<p>I was able to login to Nextcloud just fine from the browser, and verify it updated correctly.</p>

<p>However, I noticed that my desktop client couldn’t connect, and also DAVx5 stopped working, no luck with vdirsyncer. No matter how many times I tried to authenticate, generating an app password would fail as fail.</p>

<p>I actually did quite a bit of things trying to fix this. I changed my domain name, changed the certificates, compared with the example nginx configuration in Nextcloud’s documentation, even a full reboot, nothing worked.</p>

<p>Thankfully, after a while asking around in the Yunohost IRC chat, I discovered <a href="https://forum.yunohost.org/t/authentication-issues-with-yunohost-11-1-0-with-new-ssowat-version-please-upgrade-to-yunohost-11-1-2-to-fix/23059">this thread</a> that had a pinned solution, which worked perfectly fine for me.</p>

<p>Turns out I am using a testing release of Yunohost that got accidentally tagged as stable, and the best course of action at the moment is going all out and switching to the testing branch, at least until a real stable version comes out. I decided to do the change and after the update process completed, Nextcloud worked fine again. Basically, I just ran this on my terminal:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>curl https://install.yunohost.org/switchtoTesting | bash
</code></pre></div></div>

<p>I am glad this problem got solved so easily and I didn’t need to move or edit too many files, because I would have never figured this out myself.</p>

<h1 id="final-thoughts">Final thoughts</h1>

<p>Well, at least I changed the domain for a better one, since I was using one of those free domains Nextcloud can give you. For now its all fine.</p>

<p>I also decided to import my subscriptions from Newpipe instead, since I follow less channels, that end up being more meaningul for me than those hundreds of old channels I had in my YouTube subscriptions.</p>

<p>Sadly, Newpipe has no way to export to OPML. So once again I went and parsed their json file using sed and formatted it properly using the tool I mentioned before.</p>

<p>Everything is running as expected now.</p>

<p>I actually made blogs daily blogs for thw whole of January, this is actually quite incredible for me, I think I will take a bit of a break, but maybe not. It depends on how I feel.</p>

<p>This is day 31 of <a href="https://100daystooffload.com">#100DaysToOffload</a></p>]]></content><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><category term="selfhost" /><category term="raspberrypi" /><category term="rss" /><category term="tutorial" /><summary type="html"><![CDATA[You gotta love when you decide you want to do something completely non-sensical. Its even better if you actually get away with it, mostly without any losses. Its not as funny when the software itself decides to do the non-sensical things though. Here's how I fixed it all.]]></summary></entry><entry><title type="html">Yunohost to the rescue</title><link href="https://joelchrono.xyz/blog/yunohost-x-tailscale/" rel="alternate" type="text/html" title="Yunohost to the rescue" /><published>2022-08-13T14:31:22-05:00</published><updated>2022-08-13T14:31:22-05:00</updated><id>https://joelchrono.xyz/blog/yunohost-x-tailscale</id><content type="html" xml:base="https://joelchrono.xyz/blog/yunohost-x-tailscale/"><![CDATA[<p>So I was saying I was lazying around and stuff but I sure did act kinda fast on fixing my issues with my Raspberry. Sadly pluggin a keyboard and a display did not work, I had a black screen. So, to avoid trouble, I decided to use a different SD card and install another distro. This time I went with <a href="https://yunohost.org">Yunohost</a>, which is quite more user friendly and provides a web interface to install and manage users and applications.</p>

<p>Its more bloated than DietPi, but it works, and it provides a lot more applications, which require less fiddling around with the terminal too.</p>

<p>The only problem is that it was asking me for a domain from the start. Since I already have a domain I just used it, but it provided me with self-signed certificates. This was fine, I could trust them, but I wanted to get my own certificates going.</p>

<p>I use Porkbun as a domain provider, it works great and has its own certificates, which I can use no problem. You can get your ssl certificate from a link like this, once you log in: <code class="language-plaintext highlighter-rouge">https://porkbun.com/account/ssl/yourdomain.com</code></p>

<p>I pretty much followed <a href="https://yunohost.org/en/certificate_custom">this guide to use custom certificates</a>, except that most of it explains how to turn the files to the <code class="language-plaintext highlighter-rouge">.pem</code> format which is already provided by Porkbun, so I don’t have to fiddle too much with the <code class="language-plaintext highlighter-rouge">openssl</code> and <code class="language-plaintext highlighter-rouge">wget</code> commands used in the guide, I simply used <code class="language-plaintext highlighter-rouge">scp</code> and renamed them to be how Yunohost expects them.</p>

<p>Porkbun provides these certificates but they expire in 3 months, but since I am the only one using my stuff, I just download them again from them if I need.</p>

<p>One thing I really liked here is the Single Sign-On feature, so I use a single login screen and gain access to all the services I need, its just great.</p>

<p>Oh, I almost forgot, Tailscale can’t be installed from the web interface, but I can ssh into my pi and, since the distro its pretty much vanilla Debian 11, the installation is as simple as it gets, so accessing my stuff from outside my local network is now possible.</p>]]></content><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><category term="raspberrypi" /><category term="selfhost" /><category term="linux" /><category term="internet" /><summary type="html"><![CDATA[Reviving my Raspberry Pi led me to Yunohost, which was quite tedious, but it might end up easier than what I used before in the long run.]]></summary></entry><entry><title type="html">Selfhosting failed me</title><link href="https://joelchrono.xyz/blog/selfhosting-failed-me/" rel="alternate" type="text/html" title="Selfhosting failed me" /><published>2022-08-10T12:23:50-05:00</published><updated>2022-08-10T12:23:50-05:00</updated><id>https://joelchrono.xyz/blog/selfhosting-failed-me</id><content type="html" xml:base="https://joelchrono.xyz/blog/selfhosting-failed-me/"><![CDATA[<p>Using a Raspberry Pi to selfhost everything and then suffering from a power outage is not the greatest thing that has happened to me. I got lucky many times, but it was bound to happen.</p>

<p>Thankfully, my hard drive which contained pretty much all of the data suffered no damage as far as I can tell, since I can still access all the files I had stored in it. I am not sure if my SD card is well or not, I have not bothered to try fixing anything if it was only an SSH failure or something worse. I went on vacation so I was not home and I did not feel like fixing this or selfhosting for a while</p>

<h1 id="recovering-data-and-annoyances">Recovering data and annoyances.</h1>

<p>There were some things that I had to fix and some services I had to replace, its a bit of a regression, but at least I am back to normal.</p>

<h2 id="dav-calendar-and-contacts">DAV (Calendar and contacts)</h2>

<p>At the moment I decided to move my contact/calendar DAV sync to Disroot, which I’ve decided to trust. All of the data was synced to my computer thanks to Khal and Khard, but Kontacts, which is KDE’s manager provided the best VCF export file, since it kept the contact pictures quality, which was not kept on Android’s exporter, and I don’t think Khard provides it at all.</p>

<p>Calendars and events were easy to recover from Simple Calendar’s exporter.</p>

<p>I had done some testing with importing contacts locally, merging stuff and I ended up with duplicate birthday events. By disabling the calendar on Disroot’s Nextcloud and enabling it again, reimporting my adressbook fixed it for me.</p>

<h2 id="rss-feeds">RSS feeds</h2>

<p>This was quite a pain to get back, actually. I had not made an OPML backup in a while from FreshRSS, and I could not use Newsboat to retrieve anything from the cache. I had tried Fluent Reader a while back, and it provided OPML exports, which was lacking on all of my Android FreshRSS clients for some reason. I lost a couple feeds, but not as many as I thought.</p>

<h2 id="books">Books</h2>

<p>I had some books in the SD Card which I was able to recover successfully, since the database used by my web front-end is compliant with Calibre, I was able to import it to my computer quite easily.</p>

<h2 id="other-files">Other Files</h2>

<p>As I said, since I placed most of my files in the external hard drive, nothing of value was lost. There were some small files and things in the SD card, which I was able to recover too, as the books mentioned before.</p>

<h1 id="finishing-up">Finishing up</h1>

<p>After checking that most things seem to be working fine in my SD and HDD, I will probably try to get it to work again by plugging a monitor to my raspberry and checking whats up. For now I managed to recover almost everything without problems.</p>

<p>Pi-hole and other services will have to wait for now, I guess.</p>]]></content><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><category term="storytime" /><category term="ramble" /><category term="selfhost" /><category term="webdev" /><category term="raspberrypi" /><summary type="html"><![CDATA[This was pretty much my fault, but let it be a tale about how not being cautious about backups could be terrible if you are careless like me]]></summary></entry><entry><title type="html">A troublesome Raspberry Pi install</title><link href="https://joelchrono.xyz/blog/troublesome-raspberrypi-setup/" rel="alternate" type="text/html" title="A troublesome Raspberry Pi install" /><published>2022-06-20T11:00:51-05:00</published><updated>2022-06-20T11:00:51-05:00</updated><id>https://joelchrono.xyz/blog/troublesome-raspberrypi-setup</id><content type="html" xml:base="https://joelchrono.xyz/blog/troublesome-raspberrypi-setup/"><![CDATA[<p>I’ve used a Raspberry Pi to selfhost a lot of stuff, such as Nextcloud or FreshRSS. Eventually I managed to inspire a friend to try it out too. He just wanted a simple file server that could be accessed on his network.</p>

<p>The distro of choice was of course <a href="https://dietpi.com/">DietPi</a>, which has proved to be quite powerful thanks to their software installation scripts that <em>just work</em>.</p>

<p>So I downloaded the OS image and flashed it with Raspberry Pi’s Imager since I already had it installed. No real problems at all so far.</p>

<p>The first detail I noticed was that somehow Wi-Fi was not working nicely. This had already happened to me on my own Pi, but I didn’t worry too much, since I connect to it via Ethernet. Which would be the case here too.</p>

<p>The setup was fairly standard, once the system was installed I went ahead and used their <code class="language-plaintext highlighter-rouge">dietpi-software</code> tool to install Nextcloud.</p>

<p>It was here were everything got a little annoying. My friend does not live in a very urban area, so the Internet is not of the best quality. There are constant hiccups and I had to re-run the script trying to have no downtime or errors.</p>

<p>DietPi’s scripts can detect when an error shows up and lets you retry the last command, so retrying the install was not difficult, it was just a matter of having to try each step a couple times.</p>

<p>At one point the script downloads the latest version using <code class="language-plaintext highlighter-rouge">curl</code>, a perfectly normal procedure. However, the download stopped midway and it looks like there was no check to verify the integrity of the tar file. So the script kept going until its time to extract the file, which led to an error.</p>

<p>So, retrying the latest command this time would not work, since the file is technically there, just broken. So how did I fix this?</p>

<p>Its easy right? just download again and replace the file. So I go ahead and ssh into another terminal, and I proceed to download the file, this time via <code class="language-plaintext highlighter-rouge">wget</code>. But for some reason, the download keeps failing or getting stuck.</p>

<p>Because of the bad internet, my friend actually has some different providers and modems. So I connect to another network and try downloading the file on my computer. It worked! although it was kinda slow. I could have connected the pi to such network but the Ethernet cable was not long enough.</p>

<p>So I go ahead, connect to the same network as the pi and <code class="language-plaintext highlighter-rouge">scp</code> the file to it.</p>

<p>Yet another failure. I don’t know why would it fail, maybe Dropbear, the SSH server installed on the Pi, is not fully compatible with OpenSSH on my computer. The point is that I had to find another way to send the file.</p>

<p>Using the internet itself was not an option. Thinking back I could have just plugged a USB stick, mount it, place the file where it should be and call it a day. But I like to make things more difficult for myself.</p>

<p>I started a quick server on my computer, where I placed the file I needed, then I used wget to download it, since its the local network there was no problem at all.</p>

<p>Now I just gave the file the right permissions, placed it where it was expected (<code class="language-plaintext highlighter-rouge">/tmp/DietPi-software</code>, If I recall correctly) and retried the script. It all worked out and the installation finally finished properly.</p>

<p>Now, there is only one problem. Since there are a lot of available routers, sometimes my friend won’t be able to access the local IP of the pi when connected to a different one. Of course, we already know the solution to that, installing <a href="https://tailscale.com">Tailscale</a>! or setting up WireGuard, but I am lazy.</p>

<p>This meant that I would have to download it, and using the internet is not fun. Thankfully I just had to try the installation multiple times until it finally worked out.</p>

<p>Now it was just a matter of installing the Nextcloud Desktop client and Tailscale on his computer, and he got a personal Nextcloud instance for himself and his family. I didn’t have a chance to setup more devices though.</p>

<p>This was quite a nice, challenging experience. I am glad it all worked out in the end and I felt pretty accomplished with what I did.</p>]]></content><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><category term="linux" /><category term="raspberrypi" /><category term="storytime" /><category term="selfhost" /><category term="internet" /><summary type="html"><![CDATA[I offered to help a friend who wanted to use a Raspberry Pi as a file server. But I got into a lot more trouble than I expected.]]></summary></entry><entry><title type="html">Rethinking Self-hosting needs</title><link href="https://joelchrono.xyz/blog/rethinking-self-hosting-needs/" rel="alternate" type="text/html" title="Rethinking Self-hosting needs" /><published>2022-04-21T16:40:00-05:00</published><updated>2022-04-21T16:40:00-05:00</updated><id>https://joelchrono.xyz/blog/rethinking-self-hosting-needs</id><content type="html" xml:base="https://joelchrono.xyz/blog/rethinking-self-hosting-needs/"><![CDATA[<p>Honestly, I’ve had a lot of fun learning how to install and mess around with MariaDB, Apache and other tools for quite a while. And I decided to host my own services for a lot of things. But looking back at the things I actually need and use, I think I could do just fine without most of the things I’ve installed on my Raspberry Pi. So I will go through all the tools I use and why I don’t really need them, or why I actually do.</p>

<h1 id="syncthing">Syncthing</h1>

<p>This is probably the best syncing tool I know of, and its probably more than enough for a lot of your needs too. Interestingly enough, its the only thing I don’t actually use on my Raspberry Pi, since it doesn’t need a server, it just works in a peer to peer network between the devices, which share folders with each other.</p>

<p>I use it every day, and I will definitely keep going with it, since its so awesome, if a bit hard to understand when presented to new people.</p>

<p>Among other things, I use Syncthing to:</p>
<ul>
  <li>keep my passwords up to date (Currently using KeepassXC on my laptop and KeepassDX on Android).</li>
  <li>sync my Arcticons icons with my phone (So I can test them quickly and see how they look).</li>
  <li>sync other general files with my devices and family.</li>
</ul>

<h1 id="nextcloud">Nextcloud</h1>

<p>I do use Nextcloud, but it’s not really because of the file server. The only features of Nextcloud I actually use are the Contacts, Calendar, and maybe notes, which I enable and disable quite often (I’ve been looking for note-taking apps lately, Joplin is my current choice).</p>

<p>The thing about Nextcloud is that its main feature is not really that needed for me. I kinda would rather just plug an external hard drive and organize its folders myself in a normal file manager instead of dealing with a web based GUI that is honestly not that fast. The worst thing is that I can’t even share files with others, which would be actually useful, since I can’t open my router ports and I currently run all these services in a private VPN using Tailscale, which is kind of awesome, but makes it impossible to share stuff to people outside my network.</p>

<p>Right now I have been considering switching to Baikal, a DAV server just to get Contacts and Calendar for personal use, or at least OwnCloud, which gives me a web interface to add contacts and events, and seems less “bloated” than its fork. Radicale is another option for a basic DAV server that I’ve used before, but since Vdirsyncer, a terminal utility <a href="https://joelchrono.xyz/blog/davx5-and-vdirsynced/">quite essential for my current setup</a>, does not support it, it’s not an option for me at the moment.</p>

<h1 id="jellyfin">Jellyfin</h1>

<p>I run into a similar problem with Jellyfin, yes I get a pretty interface and nice metadata, its honestly quite great, but, I only use this for myself at home, why don’t I just use Kodi and plug the hard drive whenever I actually need it?</p>

<p>The only other thing that would be kinda nice is music streaming, which is honestly quite good, but maybe not enough of a reason to keep it up? I am still considering keeping this one alive for now.</p>

<p>Besides, while I got a Raspberry Pi 4 with 8GB of RAM, which is quite capable, it still takes a while to re-encode stuff, so I have been compressing and re-encoding all of my totally legally obtained media files in my computer first, then using <code class="language-plaintext highlighter-rouge">scp</code> to move them to the server once they are ready, which takes quite a long time. I could just enjoy the content stored on my local disk and not worry about stuff, but of course I wanted to host it all there.</p>

<p>Maybe I should just rework the way I do things, its not bad at all, I will keep using it. Maybe I’ll just stick to streaming music or find better ways to rename files without making totally legal torrents stop seeding.</p>

<h1 id="gitea">Gitea</h1>

<p>I actually didn’t even talk about this on my blog at all, but I installed Gitea on my Raspberry and never actually used it, what’s the point of such a pretty interface if only I use it and I prefer using the terminal instead?</p>

<p>I am going to delete this since it makes no sense for my use-case, if my ports were open it would be different tho, since a couple people might be interested on my dotfiles or something.</p>

<h1 id="pi-hole">Pi-hole</h1>

<p>This is great, a local DNS provider that keeps all the devices at home ad-free (for the most part), I am actually really happy with how it works and it made the Raspberry Pi completely worth it, since it was also the main reason I started all of this journey in the first place, due to a Linus Tech Tips video.</p>

<p>Not a lot to talk about here, it works and I will keep it!</p>

<h1 id="freshrss">FreshRSS</h1>

<p>The problem with FreshRSS is that its not as popular or known as I hoped. There are not enough good android clients for it. I currently use Readrops, but it has almost no customization and it has not been updated in a while, other clients are even uglier (with respect to the developers). The only pretty client I know of is Fluent Reader, but its UI looks like iOS and doesn’t fit at all with my device, but its pretty cool and works fine.</p>

<p>Another thing is that FreshRSS support on Newsboat is only on newer versions that are not supported on Linux Mint, and even though I said I didn’t really mind that since the Web GUI was there, its still kinda annoying.</p>

<p>I am thinking about going back to Miniflux even if I have to setup PostgreSQL again alongside the already existing MariaDB.</p>

<h1 id="calibre-web">Calibre Web</h1>

<p>Since I got into books again last month, I also got a bit invested into Calibre, a great tool to manage books, metadata and syncing with e-readers and other devices. It is pretty cool, but the web server was kinda bare bones and I didn’t really like it. I found out about <a href="https://github.com/janeczku/calibre-web">Calibre-Web</a>, a web app that can access and display a Calibre database in really good way which looks and feels a lot better than the official version.</p>

<p>Again I don’t really use this too often, but I have to say that when I do, it works pretty nicely. The Calibre desktop program does not seem to work well with network storage though, so I have only stuck with the Web version since I installed it. However, going back is a matter so moving the files around, which is great.</p>

<h1 id="photoprism">Photoprism</h1>

<p>This is a Google Photos kinda thing, but I really don’t think I need it, My photo collection is not that big, I probably have more downloaded wallpapers on my phone compared to actual photos. I’ve been meaning to take pictures of meaningful moments a bit more, but I also like to think I can enjoy something in the time and place it happened and leave it at that.</p>

<p>Anyways I don’t want this to devolve into some existential ramble. The point is, I will be removing this and I kinda hate that I’ve duplicated a bunch of stuff to test it out without actually thinking if I needed it first.</p>

<p>Allow me to ramble a bit about this, I did a couple Google Takeouts in the last few months for different reasons, I also did it for different Google accounts back when I was <a href="https://joelchrono.xyz/blog/cleanup-your-pwmanager/">cleaning up my password manager</a>, and I feel like I have the same pictures in a bunch of different places. At some point I also compressed a ton of pictures with ImageMagick while keeping the duplicates, and I think I did that in a different folder too. Some time later I tried Cryptomator with some of those folders, and since I didn’t trust it fully, I remember I made some duplicates just in case things went wrong. In addition to all this, I distro-hopped like 2 times during last year, which means I probably lost track of some things while backing up others. Its all a terrible mess.</p>

<p>I like the concept of backing stuff up in multiple places, but it sucks when you don’t even know what you backed up and what you didn’t. I have already done some spring cleaning tho, and I decided to go wit Cryptomator again, this time using MEGA, since I got like 50GB for free and I only use like 6GB for those photos and wallpapers.</p>

<h1 id="wrapping-up">Wrapping up</h1>

<p>So yeah, this was supposed to be a short overview of the services I use and if I really need them but it ended up being a bit more rambley than expected.</p>

<p>I guess I got a little bit too excited about the concept of having everything in my own server, that I didn’t even realize that for most things, a simple hard drive or USB stick is enough. Or Syncthing. Syncthing is fine too.</p>

<p>There is this interesting protocol which I think I’ve mentioned before known as <a href="https://github.com/39aldo39/DecSync">DecSync</a>, which works with Syncthing too and can sync calendars, contacts and RSS with simple folders shared across devices. It has not been updated for a while, but its concept is pretty cool and I have been thinking about giving it a fair chance one of these days.</p>

<p>Well, that’s a problem for future me. Thanks for reading.</p>]]></content><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><category term="selfhost" /><category term="raspberrypi" /><summary type="html"><![CDATA[Having a Raspberry Pi has allowed me to host a lot of alternatives to popular cloud services myself, but I have been thinking about how much do I actually need to host the stuff I do.]]></summary></entry><entry><title type="html">Selfhosting my news feed with FreshRSS</title><link href="https://joelchrono.xyz/blog/self-hosting-my-news-feed-with-freshrss/" rel="alternate" type="text/html" title="Selfhosting my news feed with FreshRSS" /><published>2022-01-01T07:00:00-06:00</published><updated>2022-01-01T07:00:00-06:00</updated><id>https://joelchrono.xyz/blog/self-hosting-my-news-feed-with-freshrss</id><content type="html" xml:base="https://joelchrono.xyz/blog/self-hosting-my-news-feed-with-freshrss/"><![CDATA[<p>So, I have been using Miniflux for the last few months, and it has worked quite greatly. However, I was not self-hosting it myself, and, while I could just keep using it, since there was no problem for my provider, I decided that, since I was already self-hosting Nextcloud, I could try installing their News add-on. Except that there was a small detail…</p>

<p>You see, I am running RaspberryOS 32bit, and for some reason, the News extension for Nextcloud needs a 64bit operating system. So, instead of being clever and changing distro since I will have to do it one day anyway, I just decided to install something else.</p>

<p>At first I wanted to go for Miniflux, since I was already using it, but then I remembered that it required a Postgres database, and while I don’t really have anything against it, I already had MariaDB installed, and I did not felt like having multiple database formats running on my device.</p>

<p>I considered going for TT-RSS or FeedBin but I ultimately went with FreshRSS since it seemed to be the easiest to set up, at least from what I saw.</p>

<p>I initially git cloned the latest release, configured a database and user for FreshRSS and ultimately did the setup with the web interface. Sadly, I was getting a weird <code class="language-plaintext highlighter-rouge">Error during context user init!</code> message once everything was supposedly alright.</p>

<p>There was no similar problems online, but I decided to go back one version and instead of git I downloaded the tarball. I kept everything unchanged, and it worked just fine. I realized I can actually update FreshRSS via the web interface, and I it seems to have worked when I did it.</p>

<p>So yeah, I have now switched to a self-hosted RSS provider, and it is actually quite great, I still have to find a good theme tho, since the available dark theme kind of sucks, at least for my taste.</p>

<p>I am still probably going to move to a 64 bit distro, so I’ll keep you updated on that.</p>

<p>This has been day 72 of <a href="https://100DaysToOffload.com">#100DaysToOffload</a></p>]]></content><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><category term="foss" /><category term="tutorial" /><category term="linux" /><category term="raspberrypi" /><category term="selfhost" /><category term="rss" /><summary type="html"><![CDATA[So, I decided to take a look at FreshRSS and try and install it by myself on my Raspberry Pi]]></summary></entry><entry><title type="html">Self-hosting Nextcloud</title><link href="https://joelchrono.xyz/blog/self-hosting-nextcloud/" rel="alternate" type="text/html" title="Self-hosting Nextcloud" /><published>2021-12-26T17:00:00-06:00</published><updated>2021-12-26T17:00:00-06:00</updated><id>https://joelchrono.xyz/blog/self-hosting-nextcloud</id><content type="html" xml:base="https://joelchrono.xyz/blog/self-hosting-nextcloud/"><![CDATA[<p>So, as I previously stated, I am very happy I got to have a Raspberry Pi, it is the kind of gadget I would have loved to have earlier in my life to play around with doing cool stuff. Being introduced to Linux some year early could have had quite a great impact on my life, and I only wonder what my today could’ve been.</p>

<p>But anyways, I am happy with how things have turned out, since I can still have fun and experiment with what I got today. So since my semester is over and I no longer have an academic use for my Raspi right now, I decided to set it up as a Nextcloud server for my family and personal use.</p>

<p>I have selfhosted a lot of cool services on my Pi <a href="https://fosstodon.org/@joeligj12/106891573076715442">in previous times</a>. Stuff like Radicale, Miniflux or Pi-hole. But because of University, I ended up losing all of them because of some problems that made me have to reinstall my OS, I wasn’t happy about it, but I was running a distro that had some missing packages, so I wouldn’t be able to do my school projects unless I distro-hopped.</p>

<p>The point is, I decided to follow <a href="https://pimylifeup.com/raspberry-pi-nextcloud-server/">this tutorial</a>, and after finally figuring out how to enable PHP8 on my apache server, I got it all working just fine. I won’t be able to really explain everything, but the tutorial covers it quite well and the part of enabling modules is a matter of looking it up (<code class="language-plaintext highlighter-rouge">a2enmod</code> is the command needed).</p>

<p>The problem now was, how do I access it from outside my LAN? I had already said  many times that I could not open my router ports since I am behind a NAT and as such, I can’t really access my public IP and forward ports or stuff like that.</p>

<p>However, I discovered a tool/service called ZeroTier that basically let’s me be own boss and create my own network of devices. I didn’t even need to look up at a tutorial to figure how it works. <del>But if you want one, <a href="https://pimylifeup.com/raspberry-pi-zerotier/">there you go</a></del>.</p>

<p>Now all I had to do was download the app for my phone that works like a VPN and gives me access to my Nextcloud instance from anywhere in the world. The app is FOSS, But it isn’t on F-Droid, so I went with the <a href="https://github.com/kaaass/ZerotierFix">a fork of it</a>, just to have it my way and get it via <a href="https://apt.izzysoft.de/fdroid/repo/net.kaaass.zerotierfix_8.apk">IzzyOnDroid’s repo.</a></p>

<p>So yes, I now have my own instance of Nextcloud. Right now I’m only using my SD card to store everything, but I am planning on getting a 2TB external SSD to be able to mount it and get more storage for it.</p>

<p>This is day 66 of <a href="https://100DaysToOffload.com">#100DaysToOffload</a></p>]]></content><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><category term="selfhost" /><category term="raspberrypi" /><category term="project" /><category term="foss" /><category term="privacy" /><category term="degoogle" /><summary type="html"><![CDATA[After my classes using my Raspberry Pi for many handy projects, I decided to now use it as a Nextcloud server, and I might try and set it up for other things as well]]></summary></entry><entry><title type="html">Saved by the bell</title><link href="https://joelchrono.xyz/blog/saved-by-the-bell/" rel="alternate" type="text/html" title="Saved by the bell" /><published>2021-11-30T17:42:18-06:00</published><updated>2021-11-30T17:42:18-06:00</updated><id>https://joelchrono.xyz/blog/saved-by-the-bell</id><content type="html" xml:base="https://joelchrono.xyz/blog/saved-by-the-bell/"><![CDATA[<p>So winter vacations are about to start, and school is finally ending this year.
I have had quite an interesting experience this semester. So I’ll mention a
couple of my highlights this semester.</p>

<p>I still went with online classes, but at least I managed to go to the lab a
couple times and see some CNC machinery in action, the machines were kinda
huge, and all of them were running Windows 95 or 98. It was quite interesting.
We had to use Floppy disks to move the G code files from our devices to them.
In fact, the mouse and keyboard were not even using a USB connection and their
color was beige, just like the ones in old pictures.</p>

<p>Now, talking about my embedded systems class, where my Raspberry Pi was the
main focus. I have to say, I had a lot of fun. As soon as the final project got
announced and we had the option to do basically whatever we wanted as long as
it used the knowledge we gained from class, I had my mind overflowing with
ideas and different ways to showcase the power of Linux to everybody!</p>

<p><em>Just kidding</em>, I actually had a hard time coming up with something to do. It
had to be something related to home automation and stuff. I got a few ideas
from both Mastodon and Discord, and I settled on a simple security system.</p>

<p>I made a Telegram bot that received notifications every time the system
perceived an intruder (An ultrasonic sensor attached to a door which measured a
huge distance when opened) and took a picture, it also gave the option to start
a video recording, take more pics and stuff.</p>

<p>I also added a simple web interface to access those files, protected in a
simple manner via <code class="language-plaintext highlighter-rouge">htpasswd</code>, and yeah, it wasn’t really that complicated, but
it was still the best project in class (Let’s say most of my classmates didn’t
put that much effort, sadly) and I had a lot of fun messing around with Python
and the Raspberry itself.</p>

<p>Finally, I still have some final projects to deliver, but they are nothing as
complicated, and they are also done in teams. I have to say I dislike to work
with teams but it does take a lot of the pressure from me, and in a weird way I
have more people to blame other than me if it goes wrong, although deep inside
me I know I could have done better. We are doing just fine tho, so its only a
matter of time until I am done with everything.</p>

<p>There was only one class where everything could have gone wrong, I still had 3
assignments to do, and even one exam. But all of a sudden, during today’s
class, the teacher told us that he was going to cancel everything except for
one of them, which was the easiest of the bunch!</p>

<p>You’ll see, he never actually mentioned any of the homework, it was just there
in the calendar and we assumed we had to do it, but he recognized he didn’t
actually taught us any of the topics of those assignments at the right time,
so he decided to let us free, and I am really, really grateful for that.</p>

<p>All I have left is a single class, the one class I actually never managed to
completely understand, but I will pass, or that’s what I hope. Just a final
project, and exam, and I am done! Let the holidays begin!</p>

<p>This has been day 62 of <a href="https://100DaysToOffload.com">#100DaysToOffload</a></p>]]></content><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><category term="school" /><category term="ramble" /><category term="raspberrypi" /><category term="anime" /><summary type="html"><![CDATA[The semester is ending once again, and I am actually really happy with how things are going so far, will my average score finally improve? Well, I don't know yet!]]></summary></entry><entry><title type="html">Not blogging for a whole month</title><link href="https://joelchrono.xyz/blog/not-blogging-for-a-whole-month/" rel="alternate" type="text/html" title="Not blogging for a whole month" /><published>2021-11-04T19:10:10-06:00</published><updated>2021-11-04T19:10:10-06:00</updated><id>https://joelchrono.xyz/blog/not-blogging-for-a-whole-month</id><content type="html" xml:base="https://joelchrono.xyz/blog/not-blogging-for-a-whole-month/"><![CDATA[<p>After a little bit of thought, I actually had a lot of free time during all of last month, but I have been using it for other things, including of course, wasting some time scrolling my Mastodon timeline or watching YouTube videos, going to class, getting distracted during class, etc.</p>

<p>I also got quite invested into watching anime, I was never a huge fan of it. As a kid, the only anime I kind of watched was Captain Tsubasa, known as “Super Campeones” here in Mexico, since it aired Saturday morning and was entertaining enough. Despite this, I never watched Dragon Ball or Naruto or anything else.</p>

<p>Anyways, I will probably talk about anime in the future, but I have to say it was not the main reason I didn’t update my blog. In fact, I only watched it during the night right before going to sleep, and I don’t really feel like writing at such time anyways.</p>

<p>I guess I just got quite lazy at writing for this. I feel like I actually lost some of my typing speed because of it, I haven’t made any typing sessions lately either.</p>

<p>Lately my Embedded Systems class showed us a bunch of PHP and Web dev stuff, and we got the task of improving upon <a href="/blog/raspberry-school-project-stuff/">our Parking Lot project</a> on my Raspberry Pi. This time we had to make a user database and be able to reserve parking spots, generate a way to validate the reservation, like a QR Code, and have a web interface for it all.</p>

<p>I had already made a web interface, but not all of it, so I got quite inspired to work on it, and it took quite a lot of time, I am still not done with it since there are some little details to fix in the way my database gets updated, but at this point is a matter of creating the right queries.</p>

<p>This post is going to end up being quite short but I don’t really have a lot of things to say. Facebook has a new name, some GTA games will be remade and the 3D character models look terrible, Firefox decided to add some colors to its version 94, which are kind of ugly looking; I have been listening to a lot of podcasts lately and I am starting to get addicted to have them as background noise. I recently watched the Evangelion Rebuild movies and I am having a mental breakdown that at least is more happy than depressed, I am struggling to find something to fill the void.</p>

<p>Well that’s a nice amount of lines I guess, this has been day 59 of <a href="https://100DaysToOffload.com">#100DaysToOffload</a>, I hope you enjoyed your read even if it is kind of pointless, I promise I’ll make some worthy content soon enough!.</p>]]></content><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><category term="ramble" /><category term="personal" /><category term="blog" /><category term="anime" /><category term="raspberrypi" /><category term="webdev" /><category term="school" /><summary type="html"><![CDATA[So last October I barely managed to make one post, because I happened to be really busy, while still having a lot of time to explore other hobbies]]></summary></entry><entry><title type="html">Beyond the school assignment</title><link href="https://joelchrono.xyz/blog/beyond-the-school-assignment/" rel="alternate" type="text/html" title="Beyond the school assignment" /><published>2021-09-30T19:55:40-05:00</published><updated>2021-09-30T19:55:40-05:00</updated><id>https://joelchrono.xyz/blog/beyond-the-school-assignment</id><content type="html" xml:base="https://joelchrono.xyz/blog/beyond-the-school-assignment/"><![CDATA[<p>After delivering my school project, the teacher taught us the basics of HTML and PHP. As you might assume, I was already quite familiar with HTML and even a little JavaScript which I’ve used for some parts of my website.</p>

<p>During class, we learned how to detect <code class="language-plaintext highlighter-rouge">POST</code> requests and make a simple input box to set the degrees of a servomotor via the internet!</p>

<p>As far as I know PHP only works on the server side, and it can do quite a lot of stuff, like run other scripts and print its output.</p>

<p>So, I started to modify a script I had to print tables from a database, and I added HTML tags to every print function to make it a table.</p>

<p>After a few failed attempts, missing tags and some coding errors, I managed to make that work. And a nice table was displayed. I also added my website’s stylesheet!</p>

<figure class="img">
  <picture>
    <source srcset="/assets/img/blogs/2021-09-30-database-table.webp" type="image/webp" />
    <source srcset="/assets/img/blogs/2021-09-30-database-table.jpg" type="image/jpeg" />
    <img class="mx-auto" src="/assets/img/blogs/2021-09-30-database-table.jpg" alt="" />

  </picture>
  </figure>

<p>Next, I wanted to be able to run specific sections of that python script based on which button was pressed, so I can allow cars to enter or exit the parking lot successfully.</p>

<p>For that, the easiest route for me would be using external arguments, that come when you run a command. For example, when you run <code class="language-plaintext highlighter-rouge">cd /path/to/directory/</code> , the argument is the path you wanna go to. In my case, the arguments would be the action I wanna do, and in one of those actions I would also require the input of the user, to know which parking spot they are exiting from.</p>

<p>After messing around with Python, I was now able to recognize user input and update the page according to it thanks to arguments sent by PHP. That section looked like this!</p>

<figure class="img">
  <picture>
    <source srcset="/assets/img/blogs/2021-09-30-database-input.webp" type="image/webp" />
    <source srcset="/assets/img/blogs/2021-09-30-database-input.jpg" type="image/jpeg" />
    <img class="mx-auto" src="/assets/img/blogs/2021-09-30-database-input.jpg" alt="" />

  </picture>
  </figure>

<p>The cool thing about this is that not only was I displaying all this information on the website, I also did stuff in the real world, my servo opened and closed, and I setup a speaker to output when there were no spots available, or in case you are entering, which spot you were assigned to use.</p>

<p>The PHP itself looked something like this. I placed it in different sections of the HTML, so the output appears where I want it to.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>//If the car wants to enter
if($_POST['entrance'] and $_SERVER['REQUEST_METHOD'] == "POST"){

    $command = escapeshellcmd("sudo ./parking.py 2");
    $output = shell_exec($command);
    echo "$output";
}

// If the car wants to exit
if($_POST['space_num'] and $_SERVER['REQUEST_METHOD'] == "POST"){
    $v = $_POST['space_num'];
    $command2 = escapeshellcmd("sudo ./parking.py 1 $v");
    $output2 = shell_exec($command2);
    echo "$output2";
}

# Runs every time the page loads
$command = escapeshellcmd("sudo ./database_output.py");
$output = shell_exec($command);

echo "$output &lt;br&gt;";
</code></pre></div></div>

<p>As you can tell, it is quite simple to get whats going on. Now you might be wondering whats inside of those python scripts, well, I made one to output the database contents in a table, as I mentioned, and another one is in charge of updating the database, playing output to a speaker and moving the servo to let cars in and out. Check it out if you want <a href="https://tildegit.org/chrono/parking_lot_website.git">in its git repo</a></p>

<p>Let me know what do you think of my coding skills out of this! I think I took into account most of the plausible scenarios, but there might be some bugs still there.</p>

<p>I could explain these scripts but I was already unwilling to show them at all because of the mistakes I could have. Anyways, the point is I got a really cool project working that will probably be what we’ll learn during the following classes, but I am glad I got inspired to do this on my own! so I am happy about it.</p>

<p>This has been day 57 of <a href="https://100DaysToOffload.com">#100DaysToOffload</a></p>]]></content><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><category term="school" /><category term="project" /><category term="webdev" /><category term="coding" /><category term="raspberrypi" /><summary type="html"><![CDATA[After my previous school project ended, I decided to work more on it by myself. I learned a bit of PHP and server stuff so here it goes!]]></summary></entry><entry><title type="html">Raspberry school project stuff</title><link href="https://joelchrono.xyz/blog/raspberry-school-project-stuff/" rel="alternate" type="text/html" title="Raspberry school project stuff" /><published>2021-09-28T18:33:13-05:00</published><updated>2021-09-28T18:33:13-05:00</updated><id>https://joelchrono.xyz/blog/raspberry-school-project-stuff</id><content type="html" xml:base="https://joelchrono.xyz/blog/raspberry-school-project-stuff/"><![CDATA[<p>So yeah I don’t really have a lot of time to make an epic post, and its been a while since my last one, but well.</p>

<p>Last week our teacher showed us how to create databases using mariadb and how to manipulate it with Python and the PyMySQL library, so I got working on it and created my own database.</p>

<p>We had to make some sort of parking lot with 15 spaces to be used by vehicles, and all I had to do was keep track of which ones were being used or freed. I did this with a simple database with 15 slots and a state.</p>

<p>I also had to move a servo-motor so it works as the entrance, it goes up and down to let cars in and out. I even made it go smoother by making a for loop and changing the work frequency grade by grade with a timer.</p>

<p>Keeping track of the cars and making sure there are no weird errors was kinda fun. This project allowed me to experiment with Python, using stuff that I don’t really do when using other languages, like <code class="language-plaintext highlighter-rouge">try</code> and exceptions to detect stuff.</p>

<p>For example, when a car exits, I need to know the space it used, and I don’t want the code to fail when the user inputs “18” or “-4”. Although I could just make a few conditional statements, I decided to add an exception to the <code class="language-plaintext highlighter-rouge">IndexError</code> from PyMySQL and take care of stuff that way.</p>

<p>It was quite a nice experience, I also had to help half a dozen of classmates who are still not used to the Raspberry Pi and are unwilling to learn Vim for some weird reason. Anyways, I have had a lot of homework and a new <em>exam</em> coming up pretty soon, which will be quite a nightmare for me, since it looks like this semester I am only good at Embedded Systems…</p>

<p>Anyways, this was post number 56 for <a href="https://100DaysToOffload.com">#100DaysToOffload</a>, I hope you enjoyed this quick post which almost feels like a mastodon thread, but anyways, have a nice day!</p>]]></content><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><category term="raspberrypi" /><category term="school" /><category term="project" /><category term="coding" /><summary type="html"><![CDATA[So I finally made something kinda cool for school on my Raspberry Pi and I might do some more school stuff pretty soon too]]></summary></entry><entry><title type="html">Not every post has to be a tutorial (Catching up)</title><link href="https://joelchrono.xyz/blog/not-every-post-has-to-be-a-tutorial/" rel="alternate" type="text/html" title="Not every post has to be a tutorial (Catching up)" /><published>2021-09-08T15:22:24-05:00</published><updated>2021-09-08T15:22:24-05:00</updated><id>https://joelchrono.xyz/blog/not-every-post-has-to-be-a-tutorial</id><content type="html" xml:base="https://joelchrono.xyz/blog/not-every-post-has-to-be-a-tutorial/"><![CDATA[<p>So, I have learned quite a lot of things that I wanted to share here on my blog. But I did not really feel like I was good enough to mention them properly without doing a full tutorial or essay about the topic. I have already talked about a similar problem in previous blogs. Let’s catch up on what I have been doing lately, alright?</p>

<h1 id="switching-to-dwm">Switching to dwm</h1>

<p>First, I switched to DWM as my tilling window manager of choice. Yeah, right after I upload my blog showcasing my dotfiles and my spectrwm configuration, I pick up my stuff, git clone the dwm repo and start learning how to patch this thing so it does the stuff I want. And guess what, I couldn’t be any happier right now. DWM is not the window manager I wanted, but the one I needed.</p>

<p>Seriously, once its all setup and ready to go, it looks exactly like my previous spectrwm configuration. However, the bar is better, the tags are clickable (I know, I am sorry), and (again, I am sorry) <em>I can change my gaps size on the fly</em>.</p>

<p>I no longer have access to a config file that can be changed on the fly. But it is still quite easy to read, and building from source is not slow at all. Besides that, the bar (which I spent most of the time customizing) is a separate program (<a href="https://notabug.org/dm9pZCAq/aslstatus">aslstatus</a> btw), so I don’t need to reboot the WM to see the changes.<sup id="fnref:1"><a href="#fn:1" class="footnote" rel="footnote" role="doc-noteref">1</a></sup></p>

<p>Overall, I am really happy with DWM, and I will probably talk more about it in the future.</p>

<h1 id="more-services-for-my-raspberry-pi">More services for my Raspberry Pi</h1>

<p>Since my Pi is confined to my local network, I decided to keep playing around with it and using programs that can be used despite said limitation.</p>

<p>I already mentioned Pi-hole, which is an ad blocking program that works in the whole local network. Since then I added <a href="https://radicale.org/">radicale</a>, which is a contact and calendar server that uses CalDAV protocol, I can just save my contacts on my phone, and using DAVx5 it gets synced as soon as I am connected to my network.</p>

<h2 id="rethinking-my-rss-setup">Rethinking my RSS setup</h2>

<p>Another program I decided to try was an RSS server. Something that I could use and would work with <a href="https://newsboat.org">Newsboat</a>, a terminal-based RSS reader that I believed was local only. But after reading the documentation, I realized it was able to work with multiple services like <a href="https://newsblur.com">Newsblur</a>, <a href="https://tt-rss.org">Tiny Tiny Rss</a>, <a href="https://freshrss.org">FreshRSS</a> and <a href="https://miniflux.app">Miniflux</a>.</p>

<p>At first I tried and enjoyed Newsblur, but after I found the limitations of the free tier, I decided to use my Pi and find some server to use. I chose Miniflux, and I am pretty happy with how it turned out.</p>

<p>While the integration with Newsboat was fine. There are not a lot of apps compatible with Miniflux, at least on F-Droid, the only one available was <a href="https://hyliu.me/fluent-reader-lite/">Fluent Reader</a>, which looks like an iOS app, and while functional, didn’t really fit my style. After some digging on Reddit, I found out about <a href="https://github.com/DocMarty84/miniflutt">Miniflutt</a>, which is available on GitHub and, while a little bare bones, works fine enough. I really like having my read and starred articles synced across my devices, the kind of feature I didn’t know I needed!</p>

<h1 id="designing-some-more-icons-on-inkscape">Designing some more icons on Inkscape</h1>

<p>Of course, I am also making icons for the Arcticons icon pack, while I don’t have as much time during school, I have still managed to create a few icons for some apps, including the Miniflux RSS readers I found. You can see the pull request <a href="https://github.com/Donnnno/Arcticons/pull/311">here</a>.<sup id="fnref:2"><a href="#fn:2" class="footnote" rel="footnote" role="doc-noteref">2</a></sup></p>

<h1 id="finishing-up">Finishing up</h1>

<p>So yeah, just a quick catch up, Here is a quick list of another quick things I did:</p>
<ul>
  <li>I followed a bunch of new RSS feeds from sites that appear on the Tech News videos from Techquickie.</li>
  <li>I am using Emacs and org mode to take notes for school, because it has a feature to copy and paste screenshots easily!</li>
  <li>I might switch to Vim again because HexDSL has a script I could modify to do the same thing!</li>
  <li>I posted a meme on Fosstodon and its getting more attention than I expected, I also decided to make my account locked, so you have to send a follow request.</li>
  <li>I am learning some fun robotics stuff at University, but the site feels like something made for kids (Visual scripting), I wish they taught us some real coding.</li>
</ul>

<p>Anyways, I wrote more than I expected to! This has been day 55 of <a href="https://100DaysToOffload.com">#100DaysToOffload</a>. I hope you have a great day.</p>

<hr />

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1">
      <p>Being honest, due to how aslstatus works, I feel like it could be easily used in spectrwm. But I have not tried it, and since DWM works just fine, I don’t plan to. <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:2">
      <p>I did not feel like adding pictures to this post, so I just shared a link where you can see the icons in their full glory (Unless you use light theme on GitHub, which is disgusting). <a href="#fnref:2" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><category term="lifestyle" /><category term="ramble" /><category term="blog" /><category term="ricing" /><category term="raspberrypi" /><category term="school" /><category term="design" /><category term="foss" /><category term="linux" /><summary type="html"><![CDATA[During the last couple of days I have been thinking about topics I want to cover, but I don't have the time to invest in proper explanations. I decided to let it be and just talk about what I've been doing these days.]]></summary></entry><entry><title type="html">Getting a Raspberry Pi to play with</title><link href="https://joelchrono.xyz/blog/getting-a-raspberry-pi-to-play-with/" rel="alternate" type="text/html" title="Getting a Raspberry Pi to play with" /><published>2021-08-17T15:19:28-05:00</published><updated>2021-08-17T15:19:28-05:00</updated><id>https://joelchrono.xyz/blog/getting-a-raspberry-pi-to-play-with</id><content type="html" xml:base="https://joelchrono.xyz/blog/getting-a-raspberry-pi-to-play-with/"><![CDATA[<p>So, going back to school was not as I expected, I thought I was going to be able to pay attention to the new classes and maybe take some notes, be a good student and everything.</p>

<p>But of course, I had to get a Raspberry Pi, and I just cannot stop being distracted by it. During the first couple of days I decided to try and move my website to it, self host a few things and try some new programs.</p>

<figure class="img">
  <picture>
    <source srcset="/assets/img/blogs/2021-08-07-raspi.webp" type="image/webp" />
    <source srcset="/assets/img/blogs/2021-08-07-raspi.jpg" type="image/jpeg" />
    <img class="mx-auto" src="/assets/img/blogs/2021-08-07-raspi.jpg" alt="My Raspberry Pi setup" />

  </picture>
  <figcaption class="caption">My Raspberry Pi setup</figcaption></figure>

<p>Sadly, despite my best efforts, I was unable to open the necessary ports to the world, so I wont be able to self host at the moment. Thankfully, it looks like the network in the area we live will be updated to fiber. We will get some new modems and maybe the software and configuration allow me to have it working before this year ends.</p>

<h1 id="setting-up-a-pi-hole">Setting up a pi-hole</h1>

<p>After failing to use my Pi as a web server, I decided to at least use it as an local ad blocker, so everyone at my house can enjoy an ad-free experience. To do this easily, I used a software known as <a href="https://pi-hole.net/">pi-hole</a>.</p>

<p>Setting it up was extremely simple, I only had to run a simple script and then configure my router to use my Raspi as its main DNS. I added a few more host lists, blocked some specific domains, set up dark mode for the web UI, and voilá!</p>

<figure class="img">
  <picture>
    <source srcset="/assets/img/blogs/2021-08-17-pihole.webp" type="image/webp" />
    <source srcset="/assets/img/blogs/2021-08-17-pihole.jpg" type="image/jpeg" />
    <img class="mx-auto" src="/assets/img/blogs/2021-08-17-pihole.jpg" alt="Pi-hole's web interface" />

  </picture>
  <figcaption class="caption">Pi-hole's web interface</figcaption></figure>

<p>It has worked quite well for me and my family, from time to time an ad will appear, but I just had to add it to the blacklist and say I won’t see it again!</p>

<p>I have to use this device for a a University class, but I will only have to access it via ssh, since we’ll probably do code for it and I already know how to live in VIM and of course, the terminal. I will love to teach my classmates a little bit about how Linux works thanks to this class, the teacher is a bit too strict tho, and does not like interruptions, so I am going to try and behave instead of correcting him everytime he pronounces commands in a weird way…</p>

<p>This has been day 53 of <a href="https://100DaysToOffload.com">#100DaysToOffload</a></p>]]></content><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><category term="coding" /><category term="tech" /><category term="linux" /><category term="foss" /><category term="school" /><category term="raspberrypi" /><category term="webdev" /><summary type="html"><![CDATA[Last week, I got back to school, and I also got a Raspberry Pi. Lets say my attention got divided quite a lot]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://joelchrono.xyz/assets/img/blogs/2021-08-07-raspi.jpg" /><media:content medium="image" url="https://joelchrono.xyz/assets/img/blogs/2021-08-07-raspi.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>