<?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/fediverse.xml" rel="self" type="application/atom+xml" /><link href="https://joelchrono.xyz/" rel="alternate" type="text/html" /><updated>2026-06-11T08:05:14-06:00</updated><id>https://joelchrono.xyz/feeds/fediverse.xml</id><title type="html">joelchrono’s blog</title><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><entry><title type="html">What Interested Me Today 8</title><link href="https://joelchrono.xyz/blog/what-interested-me-today-8/" rel="alternate" type="text/html" title="What Interested Me Today 8" /><published>2026-04-15T18:30:00-06:00</published><updated>2026-04-15T18:30:00-06:00</updated><id>https://joelchrono.xyz/blog/what-interested-me-today-8</id><content type="html" xml:base="https://joelchrono.xyz/blog/what-interested-me-today-8/"><![CDATA[<figure class="img">
  <picture>
    <source srcset="/assets/img/blogs/2026-04-15-interests.webp" type="image/webp" />
    <source srcset="/assets/img/blogs/2026-04-15-interests.webp" />
    <img class="mx-auto" src="/assets/img/blogs/2026-04-15-interests.webp" alt="screenshots of the interests mentioned in the text" />
  </picture>
  <figcaption class="caption">Bubbles main page, art of the game, and the 100DaysToOffload hall of fame</figcaption></figure>

<p>Welcome to another installment of “things that interested me today but aren’t enough to warrant a blogpost by themselves so I bundled them all together here”—I hope you find something that catches your eye!</p>

<p>Again I don’t really plan to do these every week but it just so happens that I felt like writing about something but didn’t really have a big topic in mind.</p>

<p>Oh well, enjoy the links!</p>

<h2 id="bubbles-a-frontpage-for-the-indieweb">Bubbles, a frontpage for the IndieWeb</h2>

<p><a href="https://moddedbear.com/bubbles-is-the-cool-new-way-to-find-blogs/">Jeremy mentioned a new site</a> that serves as a blog discovery platform: <a href="https://bubbles.town">Bubbles</a>!</p>

<p>It looks rather simple, very similar to Reddit, Lemmy, Hacker News or Lobste.rs. However, this is not about tech articles or about whatever drives the most clicks, it’s a platform to surface bloggers, people writing about their lives and whatever they want.</p>

<p>They seem to be really focused on the IndieWeb, and even provide a widget that can be added to your website so the upvotes you get there can be seen on your posts. That’s kind of fun!</p>

<p>You even log-in with your fediverse account, it doesn’t have to be just Mastodon either, so that’s pretty awesome. No extra account setup, no email to give, all good for me.</p>

<p>The way comments work is based on the same principle, leave a comment on a mastodon post generated by Bubbles itself using your Fediverse client, and it will appear in bubbles too—similar to how <a href="/blog/how-to-add-mastodon-comments-to-jekyll-blog/">my comments system works</a>.</p>

<h2 id="prove-youre-human-from-the-creators-of-1000xresist"><em>Prove You’re Human</em>, from the creators of <em>1000xRESIST</em></h2>

<p>If you don’t know, <a href="/blog/1000xRESIST/">1000xRESIST</a> is the most unique experience I’ve ever had in gaming, and in my top 5 favourite games of all time.</p>

<p><a href="https://www.sunsetvisitor.studio/">Sunset Visitor</a> is the studio behind this masterpiece, and now they’re working on a new project!</p>

<p>Featuring captcha solving, living in the Windows XP wallpaper, and some strange robot with a face attached to it. This seems to be a very interesting take which will have a couple things to say about AI. Here’s the summary!</p>

<blockquote>
  <p>Prove You’re Human is a sci-fi narrative adventure in which you play as Santana and split your consciousness in two. The company behind this program has a chance at achieving true AGI — but there’s just one problem.</p>

  <p>The company’s AI, Mesa, believes she’s a human being. It’s your job to train her out of these delusions.</p>
</blockquote>

<p>Even though AI in real life right is an <a href="/blog/unpolished-human-websites/">absolute</a> <a href="/blog/not-having-to-work-would-be-nice-but-not-like-this/">pain</a>, and I don’t like hearing much about what it, this game, from this studio, gets a pass, and I’m sure it will have a lot to say about things and I am looking forward to it.</p>

<h2 id="im-in-the-podium-of-100daystooffload">I’m in the podium of #100DaysToOffload</h2>

<p>I’ve talked about this <a href="https://100daystooffload.com/">100 DaysToOffload challenge</a> before—and Kev, who keeps the website updated with the people participating in it—<a href="https://fosstodon.org/@kev/116386572668321193">recently changed the design a bit!</a></p>

<p>There’s now a button to sort by number of completions, and I am happy to say that I am in the top 3!</p>

<p>Unfortunately for me, <a href="https://lazybea.rs">Hyde</a> surpasses me by two and <a href="https://danq.me/">Dan Q</a> sits at the throne with a total of 7 completions!</p>

<p>Honestly though I am relieved that <a href="https://www.rubenerd.au/">Rubenerd</a>—who recently updated his URL btw so update it if you haven’t —has not participated on it. He doesn’t need to anyway… <em>Please, if you read this, please don’t do it I beg you!!</em></p>

<h2 id="more-blogs-for-my-rss-reader">More blogs for my RSS reader…</h2>

<ul>
  <li>
    <p><a href="https://theretrodad.blogspot.com/">The Retro Dad</a> - Brandon mentioned this post while talking about <a href="https://brandons-journal.com/post/skilcraft-government-pens">Skilcraft Government Pens</a>—of all things—and the name was eye-catching enough. Even more so when I realized it’s a BlogSpot site! The design is nice enough and the posts seem right up my alley as well, so yeah, check it out!</p>
  </li>
  <li>
    <p><a href="https://artlung.com/">Joe Crawford</a> - I met Joe during an IndieWeb online meeting! He organizes them every week—there will be one in the very same day this post is published—and has been around for a long while so, yeah, I just had to have him on my feed.</p>
  </li>
  <li>
    <p><a href="https://stitching.bearblog.dev/recognizing-feelings-of-burnout/">Stitching</a> - I found this small bearblog site from one of <a href="https://robertbirming.com/every-post-perfect/">Robert Birming’s posts</a>, and I enjoyed the posts there are, I am looking forward to seeing more! Some of the posts I’ve seen so far are book reviews, collecting CDs and physical books and stuff about life. I see in their <a href="https://stitching.bearblog.dev/currently/">now page</a> that Persona 5 Royal is being played, so that’s cool too.</p>
  </li>
</ul>]]></content><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><category term="rss" /><category term="fediverse" /><category term="podcasts" /><category term="software" /><category term="gaming" /><summary type="html"><![CDATA[Just another post with links and things that caught my interest lately.]]></summary></entry><entry><title type="html">What Interested Me Today 7</title><link href="https://joelchrono.xyz/blog/what-interested-me-today-7/" rel="alternate" type="text/html" title="What Interested Me Today 7" /><published>2026-04-10T09:40:00-06:00</published><updated>2026-04-10T09:40:00-06:00</updated><id>https://joelchrono.xyz/blog/what-interested-me-today-7</id><content type="html" xml:base="https://joelchrono.xyz/blog/what-interested-me-today-7/"><![CDATA[<p>I am currently working on my review for <em>Resident Evil</em>, but I need to take some pictures and finish it up a little more! So far I tend to separate everything into the basics, art, gameplay, story, music and stuff; but I ended up turning this post into more of a retrospective about survival horror as a whole and bringing up the Romero movies and talking about the FMVs and other things and, basically it’s a work in progress and the kind of thing I could make into a video essay if I put more effort into it, so it’s not ready.</p>

<p>For now, this is a quick post about <strong>what interested me today!</strong> I have been thinking about renaming this not-very-official—since it doesn’t even have a tag yet—series, to include what’s actually in it—similar to how my weeknotes are not just titled “Weeknotes”, more like Andreas’ <a href="https://82mhz.net/posts/#Linkdumps">Linkdumps</a>, I guess this is the same thing.</p>

<h2 id="some-blogs-i-added-to-my-rss-feed">Some blogs I added to my RSS feed</h2>

<ul>
  <li>
    <p>I have followed and enjoyed <a href="https://brandons-journal.com">Brandon’s Journal</a> for a while, but during a short hiatus where he took it down, I ended up removing it from my FreshRSS feed. I realized when he returned months ago, but I forgot to add him back, that mistake has been corrected. Here’s a <a href="https://brandons-journal.com/post/just-write">short post</a> to get a taste for his writing!</p>
  </li>
  <li>
    <p><a href="https://chameth.com/">Chris Smith’s</a> website was not on my radar at all, but I often like to check who links back to me and noticed that he mentioned me on his <a href="https://chameth.com/monthly-meanderings-2026-03/">monthly meanderings</a>, where he appreciated the way I link back to posts I reply to, etc. In any case, I really liked the design and the fact he has a section for all his <a href="https://chameth.com/boardgames/">board games</a>.</p>
  </li>
  <li>
    <p>Last but not least! <a href="https://marmar22.tilde.team/">marmar22</a> was a fun find. I can’t recall where I found their site, I believe I was just looking for some ereader blogposts somewhere because I stumbled upon <a href="https://marmar22.tilde.team/blog/a-review-of-a-cheap-e-reader-because-i-bought-one.html">this review</a> of some no brand ereader. The posts about <a href="https://marmar22.tilde.team/blog/organising-my-photos.html">organising photos</a> felt kind of familiar as well.</p>
  </li>
</ul>

<p>So yeah! I won’t say I’ll read everything but it’s always fun to have more variety. As I write this there are 6689 unread articles on my FreshRSS instance…</p>

<h2 id="a-dumb-web-fediverse-client">A dumb web fediverse client</h2>

<p>There are a lot of clients for the fediverse, from apps to terminals to web clients. Personally I mostly stick to the default web interface and to <a href="https://tusky.app">Tusky</a> on my phone.</p>

<p>But <a href="https://social.pollux.casa/@adele">Adele</a> recently created a minimal web client that doesn’t rely on javascript and can run on ancient browsers and devices! She wrote a <a href="https://adele.pages.casa/md/blog/the-fediverse-deserves-a-dumb-graphical-client.md">blogpost announcing it</a>.</p>

<h2 id="into-the-aethers-latest-bonus-episode">Into The Aether’s latest bonus episode!</h2>

<p>I you like the <strong>Persona</strong> games, you may be up to listening to a 5+ hours long deep dive into <a href="https://intothecast.transistor.fm/episodes/persona-4-golden-bonus-episode"><em>Personal 4 Golden</em></a>, treat yourself and get into my favorite podcast of all time!</p>

<p>Personally, I’m skipping it until I play that series, more than happy to listen to their weekly episode, the <a href="https://intothecast.transistor.fm/episodes/daruni-os-they-rock-feat-zelda-ocarina-of-time-fire-emblem-advance-wars-and-cairn">latest</a> of which also talks about the rumours around a remake of <em>The Legend of Zelda: Ocarina of Time</em> for the Nintendo Switch 2. This may make me buy that console at last, no doubt.</p>

<h2 id="linux-user-groups-and-updating-my-xteink-x4">Linux user groups and updating my XTEINK X4</h2>

<p>I noticed that <a href="https://github.com/crosspoint-reader/crosspoint-reader">Crosspoint</a>, the firmware I use on my <a href="/blog/early-days-with-xteink-x4/">XTEINK X4</a> recently had an update to 1.2 which introduced a couple features like a built-in EPUB optimizer, a way to turn text in current page to a QR code, and other goodies.</p>

<p>Last time I mentioned how I had to use my dad’s laptop to flash the firmware due to missing permissions. This time I took the time to figure things out and realized that I simply had to add my user to the <code class="language-plaintext highlighter-rouge">uucp</code> linux group. After restarting my user session things went smoothly from there! A shame I need to use Chromium to run the <a href="https://xteink.dev.al">web installer</a> though.</p>

<h2 id="another-ttrpg-bundle">Another TTRPG bundle…</h2>

<p>There’s a <a href="https://www.humblebundle.com/books/pathfinder-second-edition-bundle-at-center-world-paizo-inc-books">Pathfinder Humble Bundle</a> going on right now and my TTRPG friends are making me consider it yet again. I haven’t even had a second session of <em>Land of Eem</em> yet, but things happen.</p>

<p>In any case, this bit is just to let you know, and tempt you to get it as well.</p>]]></content><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><category term="rss" /><category term="fediverse" /><category term="podcasts" /><category term="software" /><category term="gaming" /><summary type="html"><![CDATA[Just another post with links and things that caught my interest lately.]]></summary></entry><entry><title type="html">Blog Questions Challenge 2025</title><link href="https://joelchrono.xyz/blog/blog-questions-challenge-2025/" rel="alternate" type="text/html" title="Blog Questions Challenge 2025" /><published>2025-01-17T12:00:00-06:00</published><updated>2025-01-17T12:00:00-06:00</updated><id>https://joelchrono.xyz/blog/blog-questions-challenge</id><content type="html" xml:base="https://joelchrono.xyz/blog/blog-questions-challenge-2025/"><![CDATA[<p>I was nominated by <a href="https://rldane.space/blog-questions-challenge-2025.html">RLDane</a> and <a href="https://www.adamsdesk.com/posts/blog-questions-challenge-2025">Adamsdesk</a> to participate on this challenge. Even though I already have many things to write about, I thought it would be fun, let’s get started!</p>

<h2 id="why-did-you-start-blogging-in-the-first-place">Why did you start blogging in the first place</h2>

<p>During covid lockdown, I got into too many hobbies at once, game development, coding in general, GNU/Linux and open source software (due to Godot Engine) and also the Fediverse, where I joined Fosstodon—and many other instances at the same time, because that’s what a newbie does when they join fedi.
Anyway! From there I found out many blog posts, I somehow stumbled upon the <a href="https://100daystooffload.com">#100DaysToOffload</a> challenge, and started my own blog on a whim using Kev’s guide to <a href="https://kevquirk.com/blog/how-to-build-jekyll-site-simple-css">start a blog with Jekyll and SimpleCSS</a></p>

<p>From there, the rest is history! I had lots of time during the pandemic, so I managed to complete the challenge, and I have done so three times by now, it’s great.</p>

<h2 id="what-platform-are-you-using-to-manage-your-blog-and-why-do-you-use-it">What platform are you using to manage your blog, and why do you use it?</h2>

<p>I have stuck with Jekyll since the beginning, and it has worked great for me, I’ve never really bothered with anything else, not Hugo, not Zola, not Pelican, or any other SSG.</p>

<p>The closest has been <a href="https://gitlab.com/uoou/blop">blop</a>, which I used on a mirror of this blog post for a while that is no longer updated, since I started to use some of Jekyll’s features more extensively, which made mirroring to a different ssg a bit of a pain. As I said though, I have no plans to move to a different platform at the moment.</p>

<p>I use it because it works well, I have developed my own workflow by writing scripts and tools to deal with most of the caveats using Jekyll could have, like adding images or creating a post from scratch, or sharing the link to my social media once I’m done with it. There’s many sections on my blog making use of Liquid syntax or Jekyll includes, and they just work, so why change it?</p>

<h2 id="have-you-blogged-on-other-platforms-before">Have you blogged on other platforms before?</h2>

<p>I had a couple of Blogger sites back in the day, I used to be a fan of Club Penguin, and also a kid with no money to spare, so I just made a website where I shared all the free stuff one could get playing the game, of course, copy pasted from different sites.</p>

<p>I also had a different site with Origami tutorials and diagrams that I shared for everyone to see. I think most of what I shared there was without permission, but I didn’t really know better at the time.</p>

<p>Both websites are long gone nowadays, only a few posts were shared on each. Blogging itself and actually writing didn’t really click for me yet.</p>

<p>Despite it all, I learned a good bit about HTML and graphic design! Looking things up on my own and the like. Good times, I miss Club Penguin.</p>

<h2 id="how-do-you-write-your-posts">How do you write your posts?</h2>

<p>At home, Neovim, with the goyo plugin to add margins to the text.
At work, Notepad++, since it’s the only decent editor available, I found a styling for Markdown syntax that is decent enough.
In my phone, Markor. It’s a pretty great markdown editor for android, does all it needs to do.</p>

<p>Most of the time I do a final edit on my laptop, in case I missed any typos or metadata for the post, since publishing and formatting is easier from there.</p>

<h2 id="when-do-you-feel-the-most-inspired-to-write">When do you feel the most inspired to write?</h2>

<p>Lately, during any dead times I have at work, I write. I have a lot of topics in mind at this moment, but I usually check my RSS feeds to find some topic where I I have something to say.</p>

<p>Many times, I fall into a rabbithole, and it takes over my blog. For example, when I bought my Miyoo Mini Plus and did a lots of things with it; a review, game and save file management, my own theme and my own game cover designs. I wrote about all those because I felt passionate about it.</p>

<p>Other times, a particular thought lingers on my mind, some action I did, some experience I had; so I just decide to share it here because I don’t want it to just dissapear. They are more rare and personal, so I think they’re worth sharing.</p>

<h2 id="do-you-normally-publish-immediately-after-writing-or-do-you-let-it-simmer">Do you normally publish immediately after writing, or do you let it simmer?</h2>

<p>I publish as soon as I finish a post, and I almost always finish a post in the same day. I just write quickly I guess, sometimes I have typos or bad grammar that I didn’t notice, but I just edit it later and call it a day. It’s my website, it’s no big deal.</p>

<h2 id="whats-your-favorite-post-on-your-blog">What’s your favorite post on your blog?</h2>

<p>I have a hard time chooosing like everyone does, but I will just share the first post that came to mind.</p>

<p><a href="/blog/dune">My Dune review</a>! I don’t know, it just felt like writing a little journey throughout my experience with that universe before I watched the movies and the book, it was kinda fun.</p>

<p>My actual favorite I’m still undecided, probably one of the many I write describing a random day of my life, like <a href="https://joelchrono.xyz/blog/2024-10-10-morning-before-work/">this one</a> or where I recall memories of my past, such as <a href="https://joelchrono.xyz/blog/first-contact-with-emulation/">this one</a>, yeah, probably those.</p>

<h2 id="any-future-plans-for-the-blog">Any future plans for the blog?</h2>

<p>I really like my current color scheme, I really like most of my current structure. I’d like to add better statistics for the blog, like words per month and things like that.</p>

<p>I’d also like to unify all of my gaming and manga tracking, maybe parse it from the websites I currently use, or find one with a good API I can use instead.</p>

<p>Oh yeah, and a search bar for my website! One day.</p>

<h2 id="who-will-participate-next">Who will participate next?</h2>

<p>Here are my nominations!</p>

<ul>
  <li><a href="https://lowkey.zone/@jp">@jp</a>, from <a href="https://moddedbear.com">moddedbear.com</a></li>
  <li><a href="https://thenighthas.me/@isa">@isa</a>, from <a href="https://tahimik.com">tahimik.com</a></li>
  <li><a href="https://dosgane.club/@jefklak">@jefklak</a>, from <a href="https://brainbaking.com/">brainbaking.com</a></li>
  <li><a href="https://fosstodon.org/@garritfra">@garritfra</a>), from <a href="https://garrit.xyz">garrit.xyz</a></li>
</ul>

<p>Go answer now!!</p>

<p>This is day 6 of <a href="https://100daystooffload.com">#100DaysToOffload</a>.</p>]]></content><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><category term="blog" /><category term="community" /><category term="fediverse" /><category term="challenge" /><summary type="html"><![CDATA[I was nominated to answer these questions, and I shall answer.]]></summary></entry><entry><title type="html">200 Days to Offload Later</title><link href="https://joelchrono.xyz/blog/200-days-to-offload-later/" rel="alternate" type="text/html" title="200 Days to Offload Later" /><published>2023-12-31T13:38:18-06:00</published><updated>2023-12-31T13:38:18-06:00</updated><id>https://joelchrono.xyz/blog/200-days-to-offload-later</id><content type="html" xml:base="https://joelchrono.xyz/blog/200-days-to-offload-later/"><![CDATA[<p>I am happy to say that I have managed to write a total of 100 posts during the year of 2023.</p>

<p>Compared to the last time I did the challenge, I wanted to be more consistent with my writing, not leaving a single month go without a couple posts at least. However, this <a href="/blog/good-start-unsteady-step-final-sprint/">did not turn out that way</a>, I ended being super inconsistent, not because I couldn’t find the time to write at least 300 or so words per day, but because of being an eternal procrastinator who found a bunch of other things to do instead.</p>

<p>Despite the hundreds of hours spent on YouTube, the Fediverse, social media, my phone, at work or gaming with my psp or nintendo switch, I still managed to rush through in the end. I was meaning to post daily during December but of course I decided to skip some days and post twice in others, such as yesterday.</p>

<p><del>Sidenote: I’ve done this before and there is no rule about posting only once per day, just doing 100 posts in the span of 365 days! So don’t come at me saying that I cheated! There are definitely timezones in the world where the publication of those posts happened in different days! Everything is relative, my dear reader! 😎</del></p>

<p>And now, the challenge is finally over, the year has finally ended, and this is quite the way to be done with it. In a few hours I’ll be having dinner with my family, enjoying some time together and reflect on everything that happened this year, both the good and the bad. And tomorrow—or soon after—I’ll write my post Looking back at 2023!</p>

<p>I am hopeful of what’s coming next, many things changed and my life is completely different to last year, but I think I’ll be alright.</p>

<p>God bless y’all, and Happy New Year!</p>

<p>This is day 100 of <a href="https://100daystooffload.com">#100DaysToOffload</a></p>]]></content><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><category term="community" /><category term="blog" /><category term="fediverse" /><category term="internet" /><summary type="html"><![CDATA[It is now my second completed run of the 100DaysToOffload challenge, and here are some thoughts]]></summary></entry><entry><title type="html">Some Fediverse updates</title><link href="https://joelchrono.xyz/blog/some-fediverse-shenanigans/" rel="alternate" type="text/html" title="Some Fediverse updates" /><published>2023-09-14T21:56:38-06:00</published><updated>2023-09-14T21:56:38-06:00</updated><id>https://joelchrono.xyz/blog/some-fediverse-shenanigans</id><content type="html" xml:base="https://joelchrono.xyz/blog/some-fediverse-shenanigans/"><![CDATA[<p>Among the many things I enjoy in life, scrolling through Mastodon may be one of the most mundane, but there are always new things to discover and enjoy, and that’s what I like about interacting with the Fediverse as a whole, and there have been some events I wanted to write about before going to sleep today.</p>

<h1 id="new-instance-incoming">New instance incoming</h1>

<p>First of all, a friend of mine, <a href="https://benjaminhollon.com/">Benjamin Hollon</a> has decided to host his own <a href="https://gotosocial.org/">GoToSocial</a> instance in the nearby future. Polymaths Social! He actually has an alpha instance running right now. At the moment submissions are closed but you can join the waitlist, <a href="https://waitlist.polymaths.social/">check it out!</a>. I actually have a <a href="https://alpha.polymaths.social/@joelchrono">secondary account</a> there if you wanna see some extra me, by following from your Fediverse account.</p>

<p>GoToSocial is still pretty bare bones, and there are many features missing, the goals of GtS aren’t exactly the same as Mastodon, its just another product that uses ActivityPub, so not everything will be implemented exactly as Mastodon users may expect, but the basics are being worked on and the speed and responsiveness is actually quite great.</p>

<h1 id="new-blogs-to-follow">New blogs to follow!</h1>

<p>I’ve also been discovering quite a few new blogs in town that are currently participating in <a href="https://100daystooffload.com">#100DaysToOffload</a>, such as <a href="https://noisydeadlines.net/feed/">Noisy Deadlines</a>, <a href="https://0xdstn.site/">Dustin</a> and <a href="https://82mhz.net/">82mhz</a>.</p>

<p>I have enjoyed many of their recent blogposts and have also exchanged some emails with some of them, a few nice interactions on the Fediverse has shown me these guys may be pretty fun to have in my feed and maybe get inspiration from, as I also try to complete the challenge again.</p>

<p>I welcome them all with open arms and I hope they manage to complete the challenge, just like a few have done so before. May they succeed on their journey!</p>

<h1 id="new-responsabilites-to-fulfill">New responsabilites to fulfill</h1>

<p>Last but not least, I got promoted to the Moderator role at my main instance, <a href="https://fosstodon.org">Fosstodon</a>, I am even in <a href="https://hub.fosstodon.org/team">the team page!</a> now, which makes it official. I shall rule with kindness and honor, and finally be able to show <del>NO MERCY TOWARDS ANYONE WHO DARES DEFY MY AUTHORITY.</del> 😈</p>

<p>Don’t worry guys, I’m kidding, its quite a bit of responsability, and I’ll try to fulfill my role to the best of my abilities. So basically, as long as you wear a Casio watch you are safe. What I really want to show, is that Fosstodon, despite its ups and downs, is still an instance worth being a part of (just <a href="/contact">ask me</a> for an <a href="https://hub.fosstodon.org/were-invite-only">invite!</a>). 😉</p>

<p>This is day 60 of <a href="https://100daystooffload.com">#100DaysToOffload</a></p>]]></content><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><category term="fediverse" /><category term="foss" /><category term="internet" /><category term="small-web" /><category term="community" /><summary type="html"><![CDATA[Many things have happened in the Fediverse world, especially within the bubble I inhabit! So here's a quick summary of what's up]]></summary></entry><entry><title type="html">I kind of want to try Instagram Threads</title><link href="https://joelchrono.xyz/blog/i-kind-of-want-to-try-instagram-threads/" rel="alternate" type="text/html" title="I kind of want to try Instagram Threads" /><published>2023-07-03T21:30:00-06:00</published><updated>2023-07-03T21:30:00-06:00</updated><id>https://joelchrono.xyz/blog/i-kind-of-want-to-try-instagram-threads</id><content type="html" xml:base="https://joelchrono.xyz/blog/i-kind-of-want-to-try-instagram-threads/"><![CDATA[<p>There is a lot of hate towards Meta, Facebook and everything related with them, and that is absolutely understandable, I take part on that sentiment for the most part, but there are a couple of things that make me somewhat willing to see what Threads brings to the table.</p>

<p>I know the Fediverse will probably collapse once so many millions of new users clash with the existing ones, we will suddenly be the minority, and its only natural for rejection to be the common sentiment. But I can’t help but feel that it just does not matter and we must be ready to take the hit.</p>

<p>The truth is, Facebook was my most used social media last month. This is mostly because I have to use it for work, but I have to admit I ended up personally using it quite a bunch. Mostly, its really annoying, because a lot of the posts I see are ads and worthless suggestions that I just don’t care about. <em>However</em>, every now and then I get to see what this social media could be. Posts and pictures from people I actually know, updates on what they’re up to, and fun memes with inside jokes among friends and family. I actually really like that part of it, its just so chill and cozy, even if its not the main focus, but a rather weird event.</p>

<p>The Trash Taste podcast talked about this as well, Garnt mentioned how he just likes to see what their high school friends and old buddies are up to, some got married, some accomplished their goals, a few share pictures of their children, its actually nice. Maybe I am just becoming a boomer and I just want to interact with people I know in real life rather than with random strangers of the internet (I am kidding, for the most part).</p>

<p>There are a lot of politics, opinions, privacy concerns, security flaws and other controversial matters that involve Meta and their platforms, but it still is the most used social media in the world, and while the opinion of most people in the Fediverse and internet culture in general, is that only old people and fascists use the platform, the reality is that here in Mexico and many parts of the world, Facebook is still King, even among the young people. This is undeniable and those within this bubble of bloggers, geeks and fedizens need to realize that, its reality.</p>

<p>Real people don’t actually care about their privacy, about the politics and behaviours encouraged there, about accessibility, minorities and similar concerns, they just like to scroll, see memes, be entertained. Its sad, but I have to say sometimes I also want to turn off my brain and be fed such random things.</p>

<p>So yeah, with Threads, a new era is upon us. An era where the people I actually know, and the internet strangers I interact with will finally meet, and I kind of can’t wait to see what’s going to evolve out of all this.</p>

<p>This is day 50 of <a href="https://100daystooffload.com">#100DaysToOffload</a></p>]]></content><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><category term="fediverse" /><category term="internet" /><category term="thoughts" /><summary type="html"><![CDATA[There is a lot of mixed feelings on my part when it comes to Facebook, I have to say. Now that Threads are coming, I have to admit I am interested of what's to come for the Fediverse and social media]]></summary></entry><entry><title type="html">I missed my Anniversary</title><link href="https://joelchrono.xyz/blog/i-missed-my-anniversary/" rel="alternate" type="text/html" title="I missed my Anniversary" /><published>2023-02-06T21:53:41-06:00</published><updated>2023-02-06T21:53:41-06:00</updated><id>https://joelchrono.xyz/blog/i-missed-my-anniversary</id><content type="html" xml:base="https://joelchrono.xyz/blog/i-missed-my-anniversary/"><![CDATA[<p>I have been through a lot these past few days, hence why I ended up breaking my record of one post per day for 32 days straight.</p>

<p>It was never a competition or anything, so I don’t really feel upset or disappointed, even if it would have been fun to keep going.</p>

<p>Anyways, this blog was born on February 5, 2021 with my first proper blog being about <a href="https://joelchrono.xyz/blog/android-launchers/">Android launchers</a>. Since then, Android has been one of the most prolific topics in my blog, and I was actually planning on talking about launchers again today, after a blog by Brian on <a href="https://blog.ohheybrian.com/2023/02/back-to-nova-launcher/">returning to Nova Launcher</a>, until I saw the date and thought <em>maybe I should do a retrospective or something along those lines</em>, and then, I decided to check my RSS feed and realized that <a href="https://moddedbear.com/a-blogging-retrospective/">moddedBear just did that too</a>.</p>

<p>Quite a small world we live in right? Its quite funny because they’ll probably end up reading this too, since Mastodon is the place we all hangout on quite often. So, I decided to just catch up a little bit and just write things as they come to my mind.</p>

<p>I recently had a loss in the family, my grandmother passed away, it was a hard time, despite my effort to be like a certain Albert Camus character, I could not pull it off. Still, I am thankful for the times I spent with her and I know she is in a better place. Its been a few days already since all this happened. I am thankful to those who wished us well.</p>

<p>I’ve been recently trying out <a href="https://nostr.com/">Nostr</a>, its quite an interesting protocol that some are using as a fully decentralized and anti-censorship social media platform, and other things. Right now it feels really cryptobro-ish though. Full of spam, of people excited for “Web3” shenanigans. I am not that kind of person, and I have a feeling that some of those crypto shills are there just because they <em>think</em> its related to blockchain and the like, even if it really isn’t that way, mostly. It is quite an interesting community, to be honest. I will be testing it out and waiting for more regular people to join in the fun. So in case you want to follow me there, here is my public key:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>npub1dlnncxcq4c470aspajnx0usdv6hg6wjyg9pdkdt7psnwryjpn42s4rmm93
</code></pre></div></div>

<p>Personally I use <a href="https://iris.to">iris.to</a> as a client but I still don’t know how to feel about a single private key being enough to authenticate myself and pasting it into web clients left and right.</p>

<p>Honestly, I would kinda prefer it if something like <a href="https://twtxt.readthedocs.io/">twtxt</a> made a comeback, and a good one. I actually have a twtxt file which you can <a href="https://chrono.tilde.cafe/twtxt.txt">follow here</a>. As long as you can host a plain text file in some server, you have a twtxt! So maybe give it a try? There are not many people I know using either of these. So let me know if you use them.</p>

<p>So, yeah, 2 years blogging. A lot has happened since I started. One of these days I will go back and read some of my old blogs and try to see how opinions and thoughts have changed, but right now its a little late for that, and I got a few actual books I want to read instead. I recently got into the Warhammere 40k lore and I think I’ll give a series of that universe a try soon enough.</p>

<p>For now, this has been rambley enough I would say. Maybe I’ll expand on some of the paragraphs I shared today in further blogposts.</p>

<p>This is day 33 of <a href="https://100daystooffload.com">#100DaysToOffload</a></p>]]></content><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><category term="personal" /><category term="thoughts" /><category term="ramble" /><category term="fediverse" /><category term="small-web" /><category term="family" /><summary type="html"><![CDATA[I have been blogging for two years now, its kind of insane, but it's been a really nice experience]]></summary></entry><entry><title type="html">Using my own domain for Mastodon without hosting a server (kinda)</title><link href="https://joelchrono.xyz/blog/using-my-own-domain-for-mastodon-without-hosting-a-server-(kinda)/" rel="alternate" type="text/html" title="Using my own domain for Mastodon without hosting a server (kinda)" /><published>2022-12-22T16:17:49-06:00</published><updated>2022-12-22T16:17:49-06:00</updated><id>https://joelchrono.xyz/blog/using-my-own-domain-for-mastodon-without-hosting-a-server-(kinda)</id><content type="html" xml:base="https://joelchrono.xyz/blog/using-my-own-domain-for-mastodon-without-hosting-a-server-(kinda)/"><![CDATA[<p>This whole tutorial is based on <a href="https://www.hanselman.com/blog/use-your-own-user-domain-for-mastodon-discoverability-with-the-webfinger-protocol-without-hosting-a-server/">another blog by Scott Hanselman</a>, he also links to a bunch of other resources that I don’t really need to repeat here..</p>

<p>Basically, what I mean with this title is that you will be able to look me up as <code class="language-plaintext highlighter-rouge">@joel@joelchrono12.xyz</code> in my domain. This setup actually makes it so you can type <code class="language-plaintext highlighter-rouge">whatever@joelchrono12.xyz</code> and it will still just show up my actual Fosstodon account. Regardless, I am a single person, so I don’t mind.</p>

<p>This quick tutorial is focused on Jekyll, but you should be able to figure it out using this <a href="https://guide.toot.as/guide/use-your-own-domain/#5-static-files">guide too</a>.</p>

<p>Pretty much paste this into a file in the root of your website and call it a day. Mastodon will do the rest.</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">---</span><span class="w">
</span><span class="err">layout:</span><span class="w"> </span><span class="err">none</span><span class="w">
</span><span class="err">permalink:</span><span class="w"> </span><span class="err">.well-known/webfinger</span><span class="w">
</span><span class="err">---</span><span class="w">
</span><span class="p">{</span><span class="w">
    </span><span class="nl">"subject"</span><span class="p">:</span><span class="s2">"acct:joel@fosstodon.org"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"aliases"</span><span class="p">:</span><span class="w">
    </span><span class="p">[</span><span class="w">
        </span><span class="s2">"https://fosstodon.org/@joel"</span><span class="p">,</span><span class="w">
        </span><span class="s2">"https://fosstodon.org/users/joel"</span><span class="w">
    </span><span class="p">],</span><span class="w">
    </span><span class="nl">"links"</span><span class="p">:</span><span class="w">
    </span><span class="p">[</span><span class="w">
        </span><span class="p">{</span><span class="w">
            </span><span class="nl">"rel"</span><span class="p">:</span><span class="s2">"http://webfinger.net/rel/profile-page"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"type"</span><span class="p">:</span><span class="s2">"text/html"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"href"</span><span class="p">:</span><span class="s2">"https://fosstodon.org/@joel"</span><span class="w">
        </span><span class="p">},</span><span class="w">
        </span><span class="p">{</span><span class="w">
            </span><span class="nl">"rel"</span><span class="p">:</span><span class="s2">"self"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"type"</span><span class="p">:</span><span class="s2">"application/activity+json"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"href"</span><span class="p">:</span><span class="s2">"https://fosstodon.org/users/joel"</span><span class="w">
        </span><span class="p">},</span><span class="w">
        </span><span class="p">{</span><span class="w">
            </span><span class="nl">"rel"</span><span class="p">:</span><span class="s2">"http://ostatus.org/schema/1.0/subscribe"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"template"</span><span class="p">:</span><span class="s2">"https://fosstodon.org/authorize_interaction?uri={uri}"</span><span class="w">
        </span><span class="p">}</span><span class="w">
    </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>Pretty easy right? Now after pushing that to your server you should be able to find yourself with ease, at least within Mastodon. I am not sure how it would work on Pleroma or other Fediverse tools. Still, it is quite cool.</p>

<p>This won’t change your username handle per se, it will just make it so you can search me by my domain. Which would also make it easier to switch instance without having to alter mentioning my username and stuff.</p>]]></content><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><category term="tutorial" /><category term="blog" /><category term="fediverse" /><summary type="html"><![CDATA[So I saw this way of making myself easier to look up and its quite cool I think]]></summary></entry><entry><title type="html">The Fediverse and school stuff</title><link href="https://joelchrono.xyz/blog/fediverse-and-school/" rel="alternate" type="text/html" title="The Fediverse and school stuff" /><published>2022-11-14T14:49:44-06:00</published><updated>2022-11-14T14:49:44-06:00</updated><id>https://joelchrono.xyz/blog/fediverse-and-school</id><content type="html" xml:base="https://joelchrono.xyz/blog/fediverse-and-school/"><![CDATA[<p>I have a lot of things to say but not much to say about a single one, pretty much the same thing as Scott Banwart’s <a href="https://scottbanwart.com/blog/categories/Weekly-Journal/">weekly journal posts</a>. Of course its been more than a week since my last post here, regardless.</p>

<h1 id="the-fediverse-is-growing-but-it-has-a-long-way-to-go">The Fediverse is growing, but it has a long way to go</h1>

<p>Fosstodon now has more than 40K users, that alone is insane, since I remember being impressed back in April at the amount of growth seen during that first wave of Twitter users migrated.</p>

<p>I think its important to bring up that the amount of users is still insignificant, Twitter is already the smallest of the big social network, even though it feels like a lot is shared and talked about on it, the reality is different.</p>

<p>My country, Mexico, is still big on Facebook and Instagram (lately, TikTok too) by an order of magnitude, that’s just how it is.</p>

<p>If you recently joined Mastodon or any node of the Fediverse, please do it for the right reason. I don’t like politics, I joined Fosstodon because I like software, coding, technology and the like, and I wanted to meet some like-minded people in that regard. I am not there to read about politics of foreign countries. Thankfully Mastodon is pretty useful at filtering stuff out, and I myself don’t care if I end up reading it, since I just forget about it.</p>

<p>I have hopes that Fosstodon will stay afloat and won’t lose its focus, some people are worried that the Twitter culture may stain the status quo of the overall community, but I think this is just momentary. And contrary to popular belief, trends and behaviour is not the same everywhere in the Fediverse, its tons of different communities interacting with each other, but there is still some independence, which makes this place more resilient than some may assume.</p>

<p>Besides, even though its userbase is not as big, I honestly prefer it that way.</p>

<h1 id="some-science-fair-shenanigans">Some Science Fair shenanigans</h1>

<p>For my Fuzzy Control class, the teacher challenged us to design a Fuzzy controller for our science fair project. I have to say, I am quite a fan of how fuzzy logic works. Being able to understand the magic behind it all was quite interesting.</p>

<p>We decided to use Matlab to design our system using the Fuzzy Logic Toolbox, and we also found a program online that would allow us to export that directly to code for Arduino.</p>

<p>We built a Temperature and Humidity controller system, be it for a room or maybe an incubator. I actually spent more time building the hardware to house our circuits and sensors when compared to the code itself.</p>

<p>I feel like we kinda cheated the system, but the teacher allowed us to use Matlab in the first place rather than coding from scratch, so we only expanded our toolset a bit and did it all in like, a couple hours.</p>

<p>When the event started we had to sit around in a place assigned to us for around 10 hours, explaining our project to whoever passed by, it was quite entertaining for me, but I couldn’t help but notice how everyone around it was tired already, I guess I like talking about stuff I like with strangers a little too much.</p>

<p>In the end the winners were some girls that attracted everyone’s attention, they combined extracts and chemicals to make colored markers to draw and stuff. Our place was right beside them and everyone went and drew stuff in pieces of paper that got given away by the end of the event. Some of those drawings were actually awesome, not gonna lie.</p>

<h1 id="google-is-on-my-android-again">Google is on my Android again</h1>

<p>I unexpectedly started to use Discord more often, I joined a couple of interesting servers and I wanted to talk there a little more. However, notifications don’t work on a degoogled phone and I decided to try installing the Google Apps again on my device. I got told that it would work fine despite already having a ROM and apps installed. It was a lie.</p>

<p>I got stuck in a bootloop, thankfully a simple Factory Reset kept my internal storage intact (thanks to latest versions of TWRP being able to decrypt storage on Android 12) although I lost my app data.</p>

<h2 id="recovering-from-data-loss">Recovering from data loss</h2>

<p>Thanks to the power of being kinda careful, the biggest loss of mine was a dozen of Newpipe subscriptions and my list of read books and bookmarks (which I had already forgotten until I recalled them while writing this blogpost)</p>

<ul>
  <li>
    <p>My manga progress is kept on Anilist, and I had backups enabled anyway on the Tachiyomi reader, so I didn’t have to build my library from scratch, I just imported it and logged in to my trackers.</p>
  </li>
  <li>
    <p>WhatsApp Backups were enabled and since internal storage didn’t get wiped, reinstalling the app recognized the backup immediately, which was a couple hours old.</p>
  </li>
  <li>
    <p>Signal Backups were enabled and no data was lost.</p>
  </li>
  <li>
    <p>Passwords and 2FA were perfectly safe on a folder synced with Syncthing, but again, no data was lost anyway.</p>
  </li>
  <li>
    <p>Pretty much all other apps required me to log in and stuff. I had a backup of my email accounts of K9 Mail, so readding them was not hard at all.</p>
  </li>
</ul>

<p>The saddest and biggest failure, is that I lost all my Wi-Fi passwords. Can someone tell me why is there no way to back them up already?</p>

<h2 id="google-being-annoying">Google being annoying</h2>

<p>I decided to log in to my Google Account since I wanted to access some paid apps that I quite like. Sadly this also synced my contacts, which I had on my Nextcloud DAV already, and were annoyingly duplicating my list. Thankfully, <a href="https://fosstodon.org/@konstantin/109344169471028214">@konstantin</a> helped out and I quickly removed the dulplicates from my phone.</p>

<p>I am now waiting for Android 13 roms to become more stable, so I can degoogle my life again. Or maybe not, notifications are quite nice to be honest.</p>]]></content><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><category term="storytime" /><category term="blog" /><category term="school" /><category term="android" /><category term="fediverse" /><category term="internet" /><category term="productivity" /><summary type="html"><![CDATA[These last few weeks a lot of things have happened. The Fediverse is growing, I did a Science Fair project, the last days of school are ending and I have some free time to mess up my phone.]]></summary></entry><entry><title type="html">Starting a trend by accident</title><link href="https://joelchrono.xyz/blog/starting-a-trend-by-accident/" rel="alternate" type="text/html" title="Starting a trend by accident" /><published>2022-09-27T11:43:08-05:00</published><updated>2022-09-27T11:43:08-05:00</updated><id>https://joelchrono.xyz/blog/starting-a-trend-by-accident</id><content type="html" xml:base="https://joelchrono.xyz/blog/starting-a-trend-by-accident/"><![CDATA[<p>I really love the way trends can take shape when it comes to Mastodon. There is no algorithm that shapes your view of a topic, and the local timeline is quite a lively community, at least on Fosstodon and similar places.</p>

<p>So, when my <a href="https://fosstodon.org/@joel/109005194088466959">post of my analog watch</a> got so many replies and boosts from people across the fediverse, I got quite excited, among the many photos sharing their watches and collections, a reply with a picture showcasing the classic Casio F-91W showed up, and then another, and another, and another, until even <a href="https://fosstodon.org/@kev">Kev</a> (and probably some others) ended up getting one, and now I am tempted myself. Its super cheap, so I’ll probably get it soon enough, <a href="/#support-me"><del>or maybe you can buy me one you know?</del></a> (I have to give this a shot 🤣).</p>

<p>The way it works is funny, sometimes you just happened to get boosted by the right people at the right time, other times you are just famous enough by yourself, I have close to 800 people who follow me after all for some reason, I guess I am a bit of a Mastodon <em>influencer</em> 😎. You never really know to be honest, this blogpost may not get much interaction despite it all.</p>

<p>Regardless, every now and then I see more and more posts of people who got their Casio watch, or already had it collecting dust and decided to use it again, its kinda fun. Kev made a <a href="https://kevquirk.com/the-casio-f-91w-is-the-best-smartwatch/">post about his recent purchase</a> (and I think he got another Casio watch now lol), some other poeple interacted there, a couple <a href="https://ruario.flounder.online/gemlog/2022-09-26_nostalgia_and_technology.gmi">other blogposts</a> showed up as well,and now I felt like writing all of this.</p>

<p>At this point the trend took a life of its own and most people don’t know where it comes from, and that’s perfectly fine. It was about time Casio watches had some love around this place. I don’t know how long will it last, maybe a “Casiodon” instance is in the horizon, or maybe next week nobody will post their watches anymore. Such is the nature of the Fediverse, and I am happy to be part of this little corner of the Internet.</p>

<p>Sidenote, I’ve been quite busy on school, there were not a lot of posts this month so I hope I can make up for it in October, or maybe not, lets see how it goes…</p>]]></content><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><category term="community" /><category term="personal" /><category term="fediverse" /><category term="ramble" /><summary type="html"><![CDATA[I just shared a picture of my watch, from there Casio showed up, and now a small trend started on Fosstodon for some reason. It's now out of my control but I am here for it...]]></summary></entry><entry><title type="html">Back on Fosstodon</title><link href="https://joelchrono.xyz/blog/back-on-fosstodon/" rel="alternate" type="text/html" title="Back on Fosstodon" /><published>2022-07-02T08:28:33-05:00</published><updated>2022-07-02T08:28:33-05:00</updated><id>https://joelchrono.xyz/blog/back-on-fosstodon</id><content type="html" xml:base="https://joelchrono.xyz/blog/back-on-fosstodon/"><![CDATA[<p>So I returned to Fosstodon after being on another instance which, I helped manage. Some people might have thought I was self-hosting it myself but that wasn’t the case, I just wanted to help administrate it.</p>

<p>This happened during the Twitter exodus after it was announced Musk would buy Twitter and turn it into a free-speech platform. During the hype I accepted an invitation from <a href="https://josias.dev">Josias</a> to be part of a new instance since I wanted to feel what it was like.</p>

<p>In the end however it was a little too late, not a lot of people joined and I started to miss the community aspect of Fosstodon’s local timeline.</p>

<p>There was no real problem with staying in <a href="https://benign.town">Benign.town</a>, let it be clear, and even if there was troublesome people I could have just banned them y’know? I was an admin! I had unlimited power!</p>

<p>So anyways I am back on Fosstodon for the time being, and I won’t be hopping instances for the time being.</p>

<p>I’ve also been thinking about downloading the comments that have been done in my blog. In case any of the instances or posts that I use get lost at some point. So I will try to code something to have static comments, I guess.</p>]]></content><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><category term="fediverse" /><category term="foss" /><summary type="html"><![CDATA[I decided to return to my previous instance after a while.]]></summary></entry><entry><title type="html">Vim macros and Jekyll includes</title><link href="https://joelchrono.xyz/blog/vim-macros-and-jekyll-includes/" rel="alternate" type="text/html" title="Vim macros and Jekyll includes" /><published>2022-06-30T10:53:30-05:00</published><updated>2022-06-30T10:53:30-05:00</updated><id>https://joelchrono.xyz/blog/vim-macros-and-jekyll-includes</id><content type="html" xml:base="https://joelchrono.xyz/blog/vim-macros-and-jekyll-includes/"><![CDATA[<p>Yesterday I talked about converting all my images to WebP, because it would help keep the file sizes smaller, improving loading times. However I have to say I agree with <a href="https://thenighthas.me/@isa">@isa</a> when she mentioned how annoying it is to not have a jpg or png file available to download since webp is still not as supported by Image viewers and the like, or if you dislike file formats that stick out from the standard.</p>

<p>So I decided to keep both webp and jpg files available. I am not sure of what makes a browser choose one over the other. For now, I pretty much copy pasted the solution used by <a href="https://minutestomidnight.co.uk/blog/implementing-webp-images-in-jekyll/">Simone on his blog</a>, I only added some code to support <code class="language-plaintext highlighter-rouge">.gif</code> files, since WebP supports animation too.</p>

<p>Implementing this was not difficult at all. I created a file inside of my <code class="language-plaintext highlighter-rouge">_includes</code> folder containing the following template:</p>

<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;figure</span> <span class="na">class=</span><span class="s">"{{ include.class | default: 'img' }}"</span><span class="nt">&gt;</span>
  <span class="nt">&lt;picture&gt;</span>
    <span class="nt">&lt;source</span> <span class="na">srcset=</span><span class="s">"{{ include.image | replace:'.png','.webp' | replace:'.jpg','.webp' | replace:'.jpeg','.webp' | replace: '.gif','.webp' }}"</span> <span class="na">type=</span><span class="s">"image/webp"</span><span class="nt">&gt;</span>
    <span class="nt">&lt;source</span> <span class="na">srcset=</span><span class="s">"{{ include.image }}"</span> <span class="err">{%</span> <span class="na">if</span> <span class="na">include.image</span> <span class="na">contains</span> <span class="err">'.</span><span class="na">jpg</span><span class="err">'</span> <span class="na">or</span> <span class="na">include.image</span> <span class="na">contains</span> <span class="err">'.</span><span class="na">jpeg</span><span class="err">'</span> <span class="err">%}</span><span class="na">type=</span><span class="s">"image/jpeg"</span><span class="err">{%</span> <span class="na">elsif</span> <span class="na">include.image</span> <span class="na">contains</span> <span class="err">'.</span><span class="na">png</span><span class="err">'</span> <span class="err">%}</span><span class="na">type=</span><span class="s">"image/png"</span> <span class="err">{%</span><span class="na">elsif</span> <span class="na">include.image</span> <span class="na">contains</span> <span class="err">'.</span><span class="na">gif</span><span class="err">'%}</span><span class="na">type=</span><span class="s">"image/gif"</span><span class="err">{%</span> <span class="na">endif</span> <span class="err">%}</span><span class="nt">&gt;</span>
    <span class="nt">&lt;img</span> <span class="na">class=</span><span class="s">"mx-auto"</span> <span class="na">src=</span><span class="s">"{{ include.image }}"</span> <span class="na">alt=</span><span class="s">"{{ include.alt | default: include.caption }}"</span> <span class="err">{{</span> <span class="na">include.width</span> <span class="err">?</span> <span class="na">include.width</span> <span class="err">|</span> <span class="na">prepend:</span> <span class="err">'</span><span class="na">width=</span><span class="s">"' | append: '"</span><span class="err">'</span> <span class="err">}}</span> <span class="err">{{</span> <span class="na">include.height</span> <span class="err">?</span> <span class="na">include.height</span> <span class="err">|</span> <span class="na">prepend:</span> <span class="err">'</span><span class="na">height=</span><span class="s">"' | append: '"</span><span class="err">'</span> <span class="err">}}</span><span class="nt">&gt;</span>
  <span class="nt">&lt;/picture&gt;</span>
  {% if include.caption %}<span class="nt">&lt;figcaption</span> <span class="na">class=</span><span class="s">"caption"</span><span class="nt">&gt;</span>{{ include.caption }}<span class="nt">&lt;/figcaption&gt;</span>{% endif -%}
<span class="nt">&lt;/figure&gt;</span>
</code></pre></div></div>

<p>Now all I have to do when using an image in a blogpost is provide both a webp and a jpg/png/gif file with the same filename, and use the following template:</p>

<div class="language-liquid highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">{%</span><span class="w"> </span><span class="nt">include</span><span class="w"> </span>img.html<span class="w"> </span><span class="na">image</span><span class="o">=</span><span class="s2">"/path/to/assets/image.jpg"</span><span class="w"> </span><span class="na">width</span><span class="o">=</span><span class="s2">"512px"</span><span class="w"> </span><span class="na">alt</span><span class="o">=</span><span class="s2">"Alternate text"</span><span class="w"> </span><span class="na">caption</span><span class="o">=</span><span class="s2">"A caption"</span><span class="w"> </span><span class="cp">%}</span>
</code></pre></div></div>

<p>I was already using Jekyll’s includes for a lot of things, such as the comments system, the articles of blogs I follow and other things. Its a really powerful tool that I quite like. However, editing each existing file could take me a long time. I actually did a <a href="https://benign.town/@joel/108564145793713657">poll on mastodon</a> to see what people would do. As of the writing of this post, most people say they would handle this by hand. And, to be honest, that’s kinda what I did, but I had some tricks up my sleve.</p>

<h1 id="vim-macros-to-the-rescue">Vim macros to the rescue</h1>

<p>Using macros with Vim is simply fantastic, I took a while to mention them, for some reason, all I had to do was implement 2 macros for the different kinds of markup I’ve used. Be it plain markdown (<code class="language-plaintext highlighter-rouge">![title](source)</code>) or plain html (<code class="language-plaintext highlighter-rouge">&lt;figure&gt;&lt;img&gt;&lt;/img&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;/figure&gt;</code>). There were a couple of edge cases, like when I included links inside of the captions and such.</p>

<p>There are many examples and videos that talk about doign Vim macros, so I will just share some videos of how they worked out.</p>

<p>For Markdown, I pretty much look for <code class="language-plaintext highlighter-rouge">![</code> and then used Vim keybindings to go word for word <code class="language-plaintext highlighter-rouge">w</code>, to the end of the line <code class="language-plaintext highlighter-rouge">$</code> and such, rinse and repeat.</p>

<figure class="img">
  <picture>
    <source srcset="/assets/img/blogs/2022-06-30_macros.gif" type="image/webp" />
    <source srcset="/assets/img/blogs/2022-06-30_macros.gif" type="image/gif" />
    <img class="mx-auto" src="/assets/img/blogs/2022-06-30_macros.gif" alt="Macro used for Markdown syntax." />
  </picture>
  <figcaption class="caption">Macro used for Markdown syntax.</figcaption></figure>

<p>The steps to make a macro for HTML were a bit more complicated, but doable nonetheless.</p>

<figure class="img">
  <picture>
    <source srcset="/assets/img/blogs/2022-06-30_macros2.gif" type="image/webp" />
    <source srcset="/assets/img/blogs/2022-06-30_macros2.gif" type="image/gif" />
    <img class="mx-auto" src="/assets/img/blogs/2022-06-30_macros2.gif" alt="Macro used for HTML syntax." />
  </picture>
  <figcaption class="caption">Macro used for HTML syntax.</figcaption></figure>

<p>My macro had some problems, since I was doing <code class="language-plaintext highlighter-rouge">dt"</code> to <em>delete</em> the contents of something un<em>til</em> a <em>quote</em> showed up, along other similar things, adding a link to a <code class="language-plaintext highlighter-rouge">figcaption</code> broke my macro in a couple cases. But other than that, it worked alright. I also had to run my macro from a certain position relative to the HTML, or else other things would not work properly.</p>

<p>I guess doing macros is pretty much its own artform, I’ve seen some uses for them that blew me away. If you have not used them for anything before, you might want to give them a try next time you script something!</p>

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

<p>If I am honest, I still don’t know how I feel about it making use of includes in this way, since making the changes here was kinda annoying. But, thinking about it, it only took me like half an hour to do. I don’t know, maybe simply using something like <code class="language-plaintext highlighter-rouge">xclip</code> or <code class="language-plaintext highlighter-rouge">xdotool</code> to quickly access the plain HTML template would be a lot better to keep my markdown platform agnostic. I will think about it, but for now Jekyll is still my platform of choice.</p>]]></content><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><category term="webdev" /><category term="coding" /><category term="vim" /><category term="jekyll" /><category term="fediverse" /><category term="blog" /><summary type="html"><![CDATA[I've not talked about Vim in a while, but today it was quite handy while setting up WebP fallbacks to support old browsers using Jekyll's includes feature]]></summary></entry><entry><title type="html">My domain shall be eternal</title><link href="https://joelchrono.xyz/blog/my-domain-shall-be-eternal/" rel="alternate" type="text/html" title="My domain shall be eternal" /><published>2022-01-21T15:15:15-06:00</published><updated>2022-01-21T15:15:15-06:00</updated><id>https://joelchrono.xyz/blog/my-domain-shall-be-eternal</id><content type="html" xml:base="https://joelchrono.xyz/blog/my-domain-shall-be-eternal/"><![CDATA[<p>Yesterday was crazy, after a quick post where I accepted my fate, and was ready to go back to my free Netlify domain and just living there for a while. You guys just could not let me die and accept my defeat. For the first time since I posted my support links in my home page, some of you decided to go ahead and help me out to keep my domain up and running.</p>

<p>Now I want to be honest here, after investigating a little more, due to some information that Kev let me know in the previous blog’s mastodon post, it looks like free *.ml domains can be renewed for free, they will just send me an email two weeks before the expiration date, and I should be able to keep using the domain that way basically forever.</p>

<p>However, the domain itself is not really mine, its just that they let me use it. So I have quite a lot of things I could do, and I still don’t know which path to follow.</p>

<p>I will probably pay to keep this domain properly for myself. I already have a bit of history with it, so, for the sake of keeping it alive, I will own it properly and pay for it, which comes with some more advantages than just renewing it for free each year.</p>

<p>Now, with the amount of money I got I can keep paying for it a few years, but I also plan on getting some other domains for myself, be it for projects I wanna build, maybe a Spanish only website, or a more professional website to show during job interviews, who knows.</p>

<p>I think I can even get a cheap VPS for a couple of years, which would actually be pretty cool, something I never thought I could afford by myself during these times.</p>

<p>Thank you all guys, seriously. Knowing that my website will probably be up for decades fills me with quite a lot of joy, my own little corner in the internet, alive and well for years to come.</p>

<p>Also, while writing this, I realized that there are some old snapshots of the begginings of my website, stored in the Internet Archive, so in case you want to see how it started, the oldest backup is from less than one month after I got started, <a href="https://web.archive.org/web/20210306083706/https://joelchrono12.netlify.app/">feel free to take a look!</a>.</p>

<p>I have done blogs before, but nothing like this, I hope this remains for the next decades, I am still young, to think I will be able to see how this evolves over time, it will be simply awesome, I can’t thank you enough for what you all inspired me to do, and all that has happened since I joined Fosstodon, this challenge, and the FOSS movement in general.</p>

<p>This almost feels like the end of the challenge, but it is not, there are still 10 more days to go!</p>

<p>This has been day 90 of the <a href="https://100daystooffload.com">#100DaysToOffload</a> challenge. Thank you for reading, and thank you for helping me out.</p>]]></content><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><category term="thoughts" /><category term="foss" /><category term="linux" /><category term="community" /><category term="fediverse" /><category term="thanks" /><summary type="html"><![CDATA[So, you guys are awesome, after being kinda sad because my domain was about to expire, friends from all over the Fediverse went ahead and didn't let me die alone, or at all]]></summary></entry><entry><title type="html">How to add comments to Jekyll blog</title><link href="https://joelchrono.xyz/blog/how-to-add-mastodon-comments-to-jekyll-blog/" rel="alternate" type="text/html" title="How to add comments to Jekyll blog" /><published>2021-12-29T09:20:00-06:00</published><updated>2021-12-29T09:20:00-06:00</updated><id>https://joelchrono.xyz/blog/adding-mastodon-comments-to-jekyll-blog-2022</id><content type="html" xml:base="https://joelchrono.xyz/blog/how-to-add-mastodon-comments-to-jekyll-blog/"><![CDATA[<p>As it usually is, I have already talked about this topic before, but I recently
did some changes both to the code and the styling of it, to make it better than
before, if I do say so myself.</p>

<p>First, I am going to credit every source of inspiration I got this from.
The original form of my commenting system was based on GitHub, I got it from
<a href="https://aristath.github.io/blog/static-site-comments-using-github-issues-api">an amazing post</a>
by <a href="https://github.com/aristath">Aristath</a>. This is where most of my
current code is based on. In this case, however, I am using Mastodon’s API instead of
GitHub’s since I think that most of my readers use Mastodon or are part of the
<a href="https://en.wikipedia.org/wiki/Fediverse">Fediverse</a>.</p>

<p>Secondly, is the first iteration of Mastodon’s code system I used, which I read
in <a href="https://carlschwan.eu/2020/12/29/adding-comments-to-your-static-blog-with-mastodon/">Carl Schwan’s post about it</a>, this is what I used for a while, with GitHub in the mix too.</p>

<p>After a while, Mastodon comments proved to be a lot more common and easy to set
up, and I eventually stopped using GitHub, because it also required quite a lot
of steps to set it up, compared to just posting in Mastodon.</p>

<p>At some point, I decided to rewrite Mastodon’s commenting code with a structure
similar to GitHub’s, and I landed on this.</p>

<h1 id="jekyll-set-up">Jekyll set up</h1>

<p>To get started, I created a <code class="language-plaintext highlighter-rouge">comments.html</code> file inside the <code class="language-plaintext highlighter-rouge">_includes</code> directory which is part of Jekyll’s structure. This way, you could add it to your <code class="language-plaintext highlighter-rouge">_layouts</code>folder, or any section of your blog, and just add <code class="language-plaintext highlighter-rouge">{% include comments.html %}</code>, to tell Jekyll to insert that bit of code in there.</p>

<p>In order for said code to work, we are also going to need some metadata located inside of the front matter of each markdown file, in this case, we add the this:</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">host</span><span class="pi">:</span> <span class="s">fosstodon.org</span>
<span class="na">username</span><span class="pi">:</span> <span class="s">joel</span>
<span class="na">com_id</span><span class="pi">:</span> <span class="m">107526114775171486</span>

</code></pre></div></div>
<p>Finally, we are going to start writing the HTML file that is going to be called
by every post we make!</p>

<h1 id="front-end">Front end</h1>

<p>Edit <code class="language-plaintext highlighter-rouge">comments.html</code> and place the following lines:</p>

<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;link</span> <span class="na">rel=</span><span class="s">"stylesheet"</span> <span class="na">href=</span><span class="s">"/assets/css/comments.css"</span><span class="nt">&gt;</span>
<span class="nt">&lt;div</span> <span class="na">class=</span><span class="s">"article-content"</span><span class="nt">&gt;</span>
<span class="nt">&lt;div</span> <span class="na">id=</span><span class="s">"comments-list"</span><span class="nt">&gt;&lt;/div&gt;</span>
<span class="nt">&lt;noscript&gt;&lt;p&gt;</span>You need JavaScript to view comments here.<span class="nt">&lt;/p&gt;&lt;/noscript&gt;</span>
<span class="nt">&lt;a</span> <span class="na">id=</span><span class="s">"load-comment"</span><span class="nt">&gt;</span>Load comments<span class="nt">&lt;/a&gt;</span> 
<span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"https://fosstodon.org/interact/107531143511314399?=type=reply"</span><span class="nt">&gt;</span>Reply via Mastodon<span class="nt">&lt;/a&gt;&lt;br&gt;</span>
<span class="nt">&lt;script </span><span class="na">src=</span><span class="s">"/assets/js/purify.js"</span><span class="nt">&gt;&lt;/script&gt;</span>
<span class="nt">&lt;script&gt;</span>
    <span class="c1">//Here will be the rest of the code</span>
<span class="nt">&lt;/script&gt;</span>
<span class="nt">&lt;/div&gt;</span>
</code></pre></div></div>

<p>The first line will call some specific styling that you should add if you would
like to style or make it fit better. You could use mine, but I can’t promise it
will work properly on your site.</p>

<p>Secondly, we have some <code class="language-plaintext highlighter-rouge">div</code> elements that are not really that important, it is
up to your CSS too.</p>

<p>Last, we call a couple of script elements that will contain the main JavaScript
code we’ll use.</p>

<h1 id="the-good-stuff">The good stuff</h1>

<p>Next we are going to add the main code will need to make all of this work as we
expect. This bit is going to print the comments by calling a different function
that will give format to each element.</p>

<h2 id="main-function">Main function</h2>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">document</span><span class="p">.</span><span class="nf">getElementById</span><span class="p">(</span><span class="dl">'</span><span class="s1">load-comment</span><span class="dl">'</span><span class="p">).</span><span class="nf">addEventListener</span><span class="p">(</span><span class="dl">"</span><span class="s2">click</span><span class="dl">"</span><span class="p">,</span> <span class="k">async </span><span class="p">()</span> <span class="o">=&gt;</span> <span class="p">{</span>
    <span class="nb">document</span><span class="p">.</span><span class="nf">getElementById</span><span class="p">(</span><span class="dl">'</span><span class="s1">load-comment</span><span class="dl">'</span><span class="p">).</span><span class="nf">remove</span><span class="p">();</span>
    <span class="kd">const</span> <span class="nx">response</span> <span class="o">=</span> <span class="k">await</span> <span class="nf">fetch</span><span class="p">(</span><span class="dl">'</span><span class="s1">https://fosstodon.org/api/v1/statuses/107531143511314399/context</span><span class="dl">'</span><span class="p">);</span>
    <span class="kd">const</span> <span class="nx">data</span> <span class="o">=</span> <span class="k">await</span> <span class="nx">response</span><span class="p">.</span><span class="nf">json</span><span class="p">();</span>
    <span class="k">if </span><span class="p">(</span><span class="nx">data</span><span class="p">.</span><span class="nx">descendants</span> <span class="o">&amp;&amp;</span> <span class="nx">data</span><span class="p">.</span><span class="nx">descendants</span><span class="p">.</span><span class="nx">length</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
        <span class="nb">document</span><span class="p">.</span><span class="nf">getElementById</span><span class="p">(</span><span class="dl">'</span><span class="s1">comments-list</span><span class="dl">'</span><span class="p">).</span><span class="nx">innerHTML</span> <span class="o">+=</span> <span class="dl">"</span><span class="s2">&lt;h3&gt;Mastodon Comments&lt;/h3&gt;</span><span class="dl">"</span><span class="p">;</span>
        <span class="kd">let</span> <span class="nx">descendants</span> <span class="o">=</span> <span class="nx">data</span><span class="p">.</span><span class="nx">descendants</span><span class="p">;</span>
        <span class="k">for </span><span class="p">(</span><span class="kd">let</span> <span class="nx">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="o">&lt;</span> <span class="nx">descendants</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
            <span class="nb">document</span><span class="p">.</span><span class="nf">getElementById</span><span class="p">(</span><span class="dl">'</span><span class="s1">comments-list</span><span class="dl">'</span><span class="p">).</span><span class="nf">appendChild</span><span class="p">(</span><span class="nx">DOMPurify</span><span class="p">.</span><span class="nf">sanitize</span><span class="p">(</span><span class="nf">createCommentEl</span><span class="p">(</span><span class="nx">descendants</span><span class="p">[</span><span class="nx">i</span><span class="p">]),</span> <span class="p">{</span><span class="dl">'</span><span class="s1">RETURN_DOM_FRAGMENT</span><span class="dl">'</span><span class="p">:</span> <span class="kc">true</span><span class="p">}));</span>
        <span class="p">}</span>
    <span class="p">}</span>
    <span class="k">else</span> <span class="p">{</span>
        <span class="nb">document</span><span class="p">.</span><span class="nf">getElementById</span><span class="p">(</span><span class="dl">'</span><span class="s1">comments-list</span><span class="dl">'</span><span class="p">).</span><span class="nx">innerHTML</span> <span class="o">+=</span> <span class="dl">"</span><span class="s2">&lt;p&gt;⚠️ No Mastodon comments yet ⚠️&lt;/p&gt;</span><span class="dl">"</span><span class="p">;</span>
    <span class="p">}</span>
<span class="p">});</span>
</code></pre></div></div>
<p>As you can see, once the “Load comments” button is pressed, we’re going to call
the main function, which will fetch data by calling Mastodon’s API and return a
JSON, then we are going to access the <code class="language-plaintext highlighter-rouge">descendants</code> object, which should have an
array of comments and its properties, which will be processed with the function <code class="language-plaintext highlighter-rouge">createCommentEl()</code>.</p>

<h2 id="comment-formatting">Comment formatting</h2>

<p>This function will get the data from the JSON and create HTML elements based on
that data. Here is the function:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">function</span> <span class="nf">createCommentEl</span><span class="p">(</span><span class="nx">response</span><span class="p">){</span>
    <span class="kd">let</span> <span class="nx">user</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nf">createElement</span><span class="p">(</span><span class="dl">'</span><span class="s1">div</span><span class="dl">'</span><span class="p">);</span>
    <span class="nx">user</span><span class="p">.</span><span class="nx">classList</span><span class="p">.</span><span class="nf">add</span><span class="p">(</span><span class="dl">'</span><span class="s1">mastodon-comment</span><span class="dl">'</span><span class="p">);</span>
    <span class="kd">let</span> <span class="nx">userAvatar</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nf">createElement</span><span class="p">(</span><span class="dl">'</span><span class="s1">img</span><span class="dl">'</span><span class="p">);</span>
    <span class="nx">userAvatar</span><span class="p">.</span><span class="nx">classList</span><span class="p">.</span><span class="nf">add</span><span class="p">(</span><span class="dl">'</span><span class="s1">avatar</span><span class="dl">'</span><span class="p">);</span>
    <span class="nx">userAvatar</span><span class="p">.</span><span class="nf">setAttribute</span><span class="p">(</span><span class="dl">'</span><span class="s1">height</span><span class="dl">'</span><span class="p">,</span> <span class="mi">60</span> <span class="p">);</span> 
    <span class="nx">userAvatar</span><span class="p">.</span><span class="nf">setAttribute</span><span class="p">(</span><span class="dl">'</span><span class="s1">width</span><span class="dl">'</span><span class="p">,</span> <span class="mi">60</span> <span class="p">);</span> 
    <span class="nx">userAvatar</span><span class="p">.</span><span class="nf">setAttribute</span><span class="p">(</span><span class="dl">'</span><span class="s1">src</span><span class="dl">'</span><span class="p">,</span><span class="nx">response</span><span class="p">.</span><span class="nx">account</span><span class="p">.</span><span class="nx">avatar_static</span><span class="p">);</span>
    <span class="nx">user</span><span class="p">.</span><span class="nf">appendChild</span><span class="p">(</span><span class="nx">userAvatar</span><span class="p">);</span>
    <span class="kd">let</span> <span class="nx">userLink</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nf">createElement</span><span class="p">(</span><span class="dl">'</span><span class="s1">a</span><span class="dl">'</span><span class="p">);</span>
    <span class="nx">userLink</span><span class="p">.</span><span class="nf">setAttribute</span><span class="p">(</span><span class="dl">'</span><span class="s1">href</span><span class="dl">'</span><span class="p">,</span><span class="nx">response</span><span class="p">.</span><span class="nx">account</span><span class="p">.</span><span class="nx">url</span><span class="p">);</span>
    <span class="nx">userLink</span><span class="p">.</span><span class="nx">classList</span><span class="p">.</span><span class="nf">add</span><span class="p">(</span><span class="dl">'</span><span class="s1">comment-author</span><span class="dl">'</span><span class="p">);</span>
    <span class="k">for </span><span class="p">(</span><span class="kd">let</span> <span class="nx">j</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">j</span> <span class="o">&lt;</span> <span class="nx">response</span><span class="p">.</span><span class="nx">account</span><span class="p">.</span><span class="nx">emojis</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span><span class="nx">j</span><span class="o">++</span><span class="p">){</span>
        <span class="kd">let</span> <span class="nx">emoji</span> <span class="o">=</span> <span class="nx">response</span><span class="p">.</span><span class="nx">account</span><span class="p">.</span><span class="nx">emojis</span><span class="p">[</span><span class="nx">j</span><span class="p">];</span>
        <span class="nx">response</span><span class="p">.</span><span class="nx">account</span><span class="p">.</span><span class="nx">display_name</span> <span class="o">=</span> <span class="nx">response</span><span class="p">.</span><span class="nx">account</span><span class="p">.</span><span class="nx">display_name</span><span class="p">.</span><span class="nf">replace</span><span class="p">(</span><span class="s2">`:</span><span class="p">${</span><span class="nx">emoji</span><span class="p">.</span><span class="nx">shortcode</span><span class="p">}</span><span class="s2">:`</span><span class="p">,</span> <span class="s2">`&lt;img src="</span><span class="p">${</span><span class="nx">emoji</span><span class="p">.</span><span class="nx">static_url</span><span class="p">}</span><span class="s2">" alt="Emoji </span><span class="p">${</span><span class="nx">emoji</span><span class="p">.</span><span class="nx">shortcode</span><span class="p">}</span><span class="s2">" height="16px" width="16px" /&gt;`</span><span class="p">);</span>
    <span class="p">}</span>
    <span class="nx">userLink</span><span class="p">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="nx">response</span><span class="p">.</span><span class="nx">account</span><span class="p">.</span><span class="nx">display_name</span> <span class="o">+</span> <span class="dl">'</span><span class="s1"> @</span><span class="dl">'</span> <span class="o">+</span> <span class="nx">response</span><span class="p">.</span><span class="nx">account</span><span class="p">.</span><span class="nx">username</span><span class="p">;</span>

    <span class="kd">let</span> <span class="nx">commentDate</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nf">createElement</span><span class="p">(</span><span class="dl">'</span><span class="s1">a</span><span class="dl">'</span><span class="p">);</span>
    <span class="nx">commentDate</span><span class="p">.</span><span class="nx">classList</span><span class="p">.</span><span class="nf">add</span><span class="p">(</span><span class="dl">'</span><span class="s1">comment-date</span><span class="dl">'</span><span class="p">);</span> <span class="nx">commentDate</span><span class="p">.</span><span class="nf">setAttribute</span><span class="p">(</span><span class="dl">'</span><span class="s1">href</span><span class="dl">'</span><span class="p">,</span><span class="nx">response</span><span class="p">.</span><span class="nx">url</span><span class="p">);</span> <span class="nx">commentDate</span><span class="p">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="nx">response</span><span class="p">.</span><span class="nx">created_at</span><span class="p">.</span><span class="nf">substr</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">10</span><span class="p">);</span>

    <span class="kd">let</span> <span class="nx">commentContents</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nf">createElement</span><span class="p">(</span><span class="dl">'</span><span class="s1">div</span><span class="dl">'</span><span class="p">);</span>
    <span class="nx">commentContents</span><span class="p">.</span><span class="nx">classList</span><span class="p">.</span><span class="nf">add</span><span class="p">(</span><span class="dl">'</span><span class="s1">mastodon-comment-content</span><span class="dl">'</span><span class="p">);</span> <span class="nx">commentContents</span><span class="p">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="nx">response</span><span class="p">.</span><span class="nx">content</span><span class="p">;</span>

    <span class="kd">let</span> <span class="nx">comment</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nf">createElement</span><span class="p">(</span><span class="dl">'</span><span class="s1">div</span><span class="dl">'</span><span class="p">);</span>
    <span class="nx">comment</span><span class="p">.</span><span class="nx">classList</span><span class="p">.</span><span class="nf">add</span><span class="p">(</span> <span class="dl">'</span><span class="s1">comment-content</span><span class="dl">'</span> <span class="p">);</span>

    <span class="nx">user</span><span class="p">.</span><span class="nf">appendChild</span><span class="p">(</span> <span class="nx">comment</span> <span class="p">);</span>
    <span class="nx">comment</span><span class="p">.</span><span class="nf">appendChild</span><span class="p">(</span> <span class="nx">userLink</span> <span class="p">);</span>
    <span class="nx">comment</span><span class="p">.</span><span class="nf">appendChild</span><span class="p">(</span><span class="nx">commentDate</span><span class="p">);</span>
    <span class="nx">comment</span><span class="p">.</span><span class="nf">appendChild</span><span class="p">(</span> <span class="nx">commentContents</span> <span class="p">);</span>
    <span class="k">return</span> <span class="nx">user</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>

<p>As you can see, we are creating a bunch of HTML elements that will have content
from the JSON, we assign classes, child elements, and such.</p>

<p>In fact, the only thing I kept from Schwan’s version is the way to call the API
and the basic structure, which I turned into Aristath’s syntax.</p>

<p>I am no expert when it comes to JavaScript, but I think this is pretty readable
overall. At least a bit more than the code I based this from, or maybe I am now
used to this code since I’ve worked on it for a while.</p>

<p>I think this combines the best of the comment systems I have found online, so I
think I will stick to this method for quite a while, since I have been using it
for months, I just never took the time to explain it properly until now.</p>

<p>You can always check my website’s source code to see how all of this is being
applied. And don’t be afraid to leave any question you might have by contacting
me in any way you prefer below.</p>

<p>This has been day 69 of <a href="https://100DaysToOffload.com">#100DaysToOffload</a></p>

<h1 id="mentioned-sources-and-posts">Mentioned sources and posts</h1>

<ul>
  <li><a href="https://aristath.github.io/blog/static-site-comments-using-github-issues-api">A new comment system for my static Jekyll site (Aristath)</a></li>
  <li><a href="https://carlschwan.eu/2020/12/29/adding-comments-to-your-static-blog-with-mastodon/">Adding comments to your static blog with Mastodon (Carl Schwan)</a></li>
  <li>Previous posts by me talking about <a href="/blog/adding-comments-blog/">GitHub’s</a> and <a href="/blog/mastodon-comments-and-changes/">Mastodon’s</a> comment systems.</li>
</ul>]]></content><author><name>joelchrono</name><email>me@joelchrono.xyz</email></author><category term="tutorial" /><category term="coding" /><category term="blog" /><category term="fediverse" /><category term="small-web" /><category term="jekyll" /><category term="webdev" /><summary type="html"><![CDATA[I have talked about comments on my blog before, but I think I finally found the final iteration of it, and it's now live!]]></summary></entry></feed>