<?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/project.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/project.xml</id><title type="html">joelchrono’s blog</title><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><entry><title type="html">New desk and keyboard</title><link href="https://joelchrono.xyz/blog/new-desk-and-keyboard/" rel="alternate" type="text/html" title="New desk and keyboard" /><published>2025-05-25T14:58:37-06:00</published><updated>2025-05-25T14:58:37-06:00</updated><id>https://joelchrono.xyz/blog/new-desk-and-keyboard</id><content type="html" xml:base="https://joelchrono.xyz/blog/new-desk-and-keyboard/"><![CDATA[<p>A year or so ago I got myself a chest of drawers from on Costco. I didn’t write much about it, but I assembled it with my sister and had quite a lot of fun doing it—and not enough cleaning up.</p>

<p>Ever since then, I have had the itch to get some more new furniture and keep making my room look a little bit more <em>mine</em>.</p>

<p>Recently, my parents went to a pretty big city in my state, and during their visit, they went into an IKEA store. I have heard of IKEA in the past, but I hadn’t really considered them. But since my parents were there already, I asked them to look for something for me!</p>

<p>They didn’t dissapoint.</p>

<p>They sent me some píctures, and I chose a couple of things.</p>

<p>A cabinet, to store some things I had on some old boxes, and a new desk, for my computer!</p>

<h2 id="new-desk---ikea-hauga-desk">New desk - IKEA HAUGA Desk</h2>

<p>My old desk, was one of the old style ones from the 2000s or so, with a slide-out section for the keyboard and a shelf above the monitor, as well as sections under it for the machine itself and whatever other things you may want to place there. My parents got it out of nowhere during my early years at university, when I only had an old desktop computer. It worked fine, if a bit wobbly, since the whole thing was just plywood. One of the worst mistakes done to it, was placing a printer on the top shelf, which weighed quite a lot. In the end, it was even more wobbly, and I ended up removing the top shelf section and using it like that, more stable as long as you didn’t push it from the sides.</p>

<p>Enough backstory. I bought those two things from IKEA, first we assembled the cabinet, which took the most time, and replaced a modular metal wire storage rack—which I passed down to my sister. The next day we assembled the desk, pretty easy and painless to me.</p>

<p>I won’t mention the cabinet much, it is what it is—an IKEA BRIMNES cabinet. Here’s a picture of it though, although it’s a bit of a mess inside, like all cabinets are.</p>

<figure class="img">
  <picture>
    <source srcset="/assets/img/blogs/2025-05-25-my-new-cabinet.webp" type="image/webp" />
    <source srcset="/assets/img/blogs/2025-05-25-my-new-cabinet.png" type="image/png" />
    <img class="mx-auto" src="/assets/img/blogs/2025-05-25-my-new-cabinet.png" alt="My new cabinet" width="700px" />

  </picture>
  <figcaption class="caption">My new cabinet</figcaption></figure>

<p>The desk is also just a desk, although it is still the space I will use the most from now on. As it houses my computer, my gateway to the internet, the place where I’ll write, read and interface with the world from the comfort of my bedroom.</p>

<p>The dimensions are 100x45 cm, slightly less usable suface, because of the rails on the sides, but still plenty for me. I would have liked a bit more depth, but it’s good enough.</p>

<p>The shelf under it is a bit meh, it’s only 7cm high, and what looks like a “drawer” in the photo, is actually just a sliding door. That means that things stored all they way in are hard to reach. I put some card games and notebooks, and my handhelds when I’m not using them too. Not much space for anything else.</p>

<p>The space on top I decorated with a mousepad, a pencil holder, a lamp for aesthetics and some other peripherals.</p>

<p>To make space for the keyboard, I used the rail on the back to raise my laptop. I initially bought a stand for it but I think this works better, since it can get even further to the back, which allows more space for my palms to rest.</p>

<p>I had heard some things about IKEA, both good and bad, but in my experience both the desk and the cabinet were quite easy to build with the help of my sister. She’s really into LEGOs so it was like the adult version of that. I had a nice time as well, nothing that complicated happened, but I wonder how we would fare building something bigger later on. For now, this is good enough.</p>

<figure class="img">
  <picture>
    <source srcset="/assets/img/blogs/2025-05-25-my-desk-setup.webp" type="image/webp" />
    <source srcset="/assets/img/blogs/2025-05-25-my-desk-setup.png" type="image/png" />
    <img class="mx-auto" src="/assets/img/blogs/2025-05-25-my-desk-setup.png" alt="My desk setup" />

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

<h2 id="new-keyboard---machenike-k500">New keyboard - Machenike K500</h2>

<p>I wasn’t really planning on buying a new keyboard, I have never been interested on mechanical keyboards before, and while my desk is much bigger than my previous one, I didn’t really think I had the space for it anyway.</p>

<p>However, I made the mistake of just looking it up, and I saw one for very cheap, and with colors I really liked, so I had no choice but to cave in and get it anyway.</p>

<p>The Machenike K500 is a budget keyboard, plastic body and all. Honestly, I couldn’t care less. I have zero experience in this little world and I don’t know if I really want to get into it any further.</p>

<p>Regardless, it just arrived a few hours ago as of the writing of this piece, and this is the first chunk of text written on it.</p>

<p>They keyboard feels nice to me, I don’t know about lube, or sensitivity, or if the sound it makes is super satisfying. It has a numpad and full arrow keys, and that’s really all I needed. The only key I really miss right now is the Delete key, but I will survive.</p>

<p>The keyboard is also “hot swap” capable, it comes with some Cherry MX Red clones and RGB too. I set it up so only the keys I press light up in white, nothing too fancy. It has some software to setup profiles or customize things further, but it’s proprietary and I don’t really care much.</p>

<p>The layout I got is the standard Latin Spanish one, with an <code class="language-plaintext highlighter-rouge">ñ</code> and some different key placements, which are the same as my laptop’s, so I’m used to it. The font is more standard than what I saw on reviews with the US layout, with which was a bit too gamer for my taste. My first impressions are quite positive, I am satisfied with my purchase so far.</p>

<figure class="img">
  <picture>
    <source srcset="/assets/img/blogs/2025-05-25-my-new-keyboard.webp" type="image/webp" />
    <source srcset="/assets/img/blogs/2025-05-25-my-new-keyboard.png" type="image/png" />
    <img class="mx-auto" src="/assets/img/blogs/2025-05-25-my-new-keyboard.png" alt="My new keyboard" />

  </picture>
  <figcaption class="caption">My new keyboard</figcaption></figure>

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

<p>Getting to really customize my space how I want is something that I couldn’t really afford when I was a student, it’s one of those nice adult things I get to do with my own money and it’s honestly kind of awesome.</p>

<p>The keyboard I got feels good so far, I’ve never really had issues with thin laptop keyabords, I actually kind of liked them—I admit that I barely used other keyboards but the cheap ones at school. I am liking the feel it has while typing all of this. I hope I don’t get the itch to really get into mechanical keyboards, it’s too expensive, and scary—<em>send help.</em></p>

<p>In the end, I am really happy with how everything turned out! From assemtly to decorating everything, I had a nice time.</p>

<p>This is day 71 of <a href="https://100daystooffload.com">#100DaysToOffload</a></p>]]></content><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><category term="tech" /><category term="hardware" /><category term="gadget" /><category term="productivity" /><category term="project" /><summary type="html"><![CDATA[I had the chance to get a new desk, and a mechanical keyboard while we are at it, so now I got a new setup! Very productive stuff.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://joelchrono.xyz/assets/img/blogs/2025-05-25-my-desk-setup.webp" /><media:content medium="image" url="https://joelchrono.xyz/assets/img/blogs/2025-05-25-my-desk-setup.webp" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Leaving Google Photos (part 1)</title><link href="https://joelchrono.xyz/blog/leaving-google-photos-1/" rel="alternate" type="text/html" title="Leaving Google Photos (part 1)" /><published>2022-06-07T18:29:25-05:00</published><updated>2022-06-07T18:29:25-05:00</updated><id>https://joelchrono.xyz/blog/leaving-google-photos</id><content type="html" xml:base="https://joelchrono.xyz/blog/leaving-google-photos-1/"><![CDATA[<p>I might have lied with the title a little bit, I don’t really use Google Photos, but I don’t think I will stop using the “Google” part of it. I decided to look for a way to backup all those photos, encrypt them, and then upload them once again to Google Drive. I am writing this while doing this task, so I will be documenting what I’ve done so far, and maybe update you all in a later post.</p>

<h1 id="getting-my-data-back">Getting my data back</h1>

<p>Google offers a <a href="https://takeout.google.com">pretty decent way</a> to download an archive of all the data they got on me (and you). However, I decided to go ahead and do this in a more nerdy way, that also allows me to skip a ton of waiting time and unnecessary files I don’t care about.</p>

<p>When retrieving an archive of Google Photos from Google, they will put it all in a certain file structure and they will duplicate files if you got them in an Album or something else. They will also include a <code class="language-plaintext highlighter-rouge">.json</code> file that contains metadata related to a picture or video of the same name. I wanted to retrieve these files in a more organized manner, and when I found out about <a href="https:/rclone.org">rclone</a> I realized it was pretty good for the job.</p>

<p>Rclone lets me access and manage cloud storage from the terminal, setting it up was not that hard, I used <a href="https://exitcode0.net/backup-google-photos-with-rclone/">this post</a> as a guide.</p>

<p>So you can pretty much run this command to download all of your photos, structured in folders by year, then by months.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>rclone copy --progress GooglePhotos:/media/by-month/ ~/Pictures/google-photos-backup/
</code></pre></div></div>

<h1 id="getting-rid-of-duplicates">Getting rid of duplicates</h1>
<p>However, I already had some folder with photos divided by year too locally, and I wanted to merge both folders. For this I went the lazy route and downloaded each folder by year. But anyways, now I can download all of my photos, no problem.</p>

<p>Doing an <code class="language-plaintext highlighter-rouge">ls</code> would output something like this:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>❯ ls
drwxrwxr-x  - joel  5 Apr 15:42 screenshots
drwxr-xr-x@ - joel  7 Jun 17:49 pics
drwxrwxr-x  - joel  5 Apr 15:41 videos
drwxrwxr-x  - joel  7 Jun 18:50 by-month
</code></pre></div></div>

<p>All the existing folders probably have duplicated photos that are contained in Google Photos too. So now I got a new problem in my hands.</p>

<p>But not really. Thankfully I am aware of a tool with a kinda hard name to remember.</p>

<h2 id="czkawka-to-the-rescue">Czkawka to the rescue</h2>

<p>Yeah, <a href="https://github.com/qarmin/czkawka">Czkawka</a>, I had to read the GitHub repo name while typing to make sure I got it right. Still, this tool is absolutely great at looking for duplicate files. Not only can it find actual duplicated files, it’s also able to look for similar files, and this is quite a blessing. I won’t explain exactly how it works, but the documentation is quite decent and Mental Outlaw <a href="https://youtu.be/CWlRiTD4vDc">made a video about it</a>.</p>

<p>I had already done a similar process before, but while doing so I had compressed most of the files with ImageMagick. However, this messed up the metadata and modification dates, which is not a big deal, but I wanted to try and keep the file as original as possible (even if Google already compressed it somewhat).</p>

<p>The tool (I refuse to type its name again), allows me to look for similar pictures and from all the options, automatically select the oldest one for all the matches it finds, which pretty much means I’ll have the original file always.</p>

<h1 id="thats-the-progress-so-far">That’s the progress so far</h1>

<p><del>By the way, while typing this I noticed an error which is not actually a bad thing for me. Rclone seems to not be downloading shared pictures and videos. And this is fantastic, because at some point in 2018 I followed a Wallpapers shared folder and it got absolutely <em>flooded</em> with thousands of photos that didn’t even fit my style, so that’s great for me, but I can understand if its somewhat annoying, there is probably a way to fix this, but its fine as is for me.</del></p>

<p>Looks like rclone retried the download and its downloading them just fine. Anyways I had already dealt with that problem before, most of them start in the same way so I can just do an <code class="language-plaintext highlighter-rouge">rm start_of_file_*</code> to get rid of most. Well not everything can be how you want it I guess.</p>

<p>According to Google itself, I only use around 2GB of Google Photos, that’s quite interesting, because it means that most of my backup is as big as it is (around 10GB) <em>because</em> of those freaking wallpapers. Also a lot of photos for that one time I logged in to my mom’s phone, quite painful.</p>

<p>I am still downloading things, so I will do another post later, maybe in the same day, I don’t know.</p>]]></content><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><category term="degoogle" /><category term="selfhost" /><category term="linux" /><category term="personal" /><category term="project" /><summary type="html"><![CDATA[Photo management and search is one of Google Photos' best features, but I don't like to have all my stuff in one basket. So I decided to look for a different way to backup my memories and protect them from outsiders.]]></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">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></feed>