mirror of
https://github.com/SrIzan10/mainwebsite.git
synced 2026-06-06 00:56:58 +00:00
73 lines
22 KiB
JSON
73 lines
22 KiB
JSON
{
|
|
"version": "https://jsonfeed.org/version/1",
|
|
"title": "Sr Izan's Blog",
|
|
"home_page_url": "https://srizan.dev/blog",
|
|
"feed_url": "https://srizan.dev/blog/feed.json",
|
|
"description": "My little donowall place on the net",
|
|
"icon": "https://srizan.dev/pfp.png",
|
|
"author": {
|
|
"name": "Sr Izan",
|
|
"url": "https://srizan.dev"
|
|
},
|
|
"items": [
|
|
{
|
|
"id": "https://srizan.dev/blog/2",
|
|
"content_html": "<h2>Introduction</h2>\n<p>So, the last few months I've been migrating services from my good old Raspberry Pi into my new HP server and the last service I migrated was MongoDB.</p>\n<p>I've been using MongoDB for a while now and I've been using it for a few things, like my discord bots, <a href=\"https://github.com/SrIzan10/webhooks-ui\">webhooks-ui</a> and probably other projects I don't remember right now.</p>\n<p>So, let's get started!</p>\n<h2>Testing the plan</h2>\n<p>My database instance is on Docker with a replica set of 1 node (itself) so <a href=\"https://www.prisma.io/\">Prisma</a> works.</p>\n<p>My idea is to add the HP server as a secondary replica and then promote it to be the primary one, but I don't know if that will work, so we need to test some stuff.</p>\n<p>I first created 2 docker containers on my <a href=\"https://gist.github.com/SrIzan10/50bc2ba689a4cc43bcbac2799cc733c9\">main Ryzen machine</a>'s WSL Ubuntu instance.</p>\n<p>I created a <code>docker-compose.yml</code> file with the following content:</p>\n<pre><code class=\"language-yml\">version: "3.8"\nservices:\n mongo1:\n image: mongo:4.4.17-rc0-focal\n container_name: mongo1\n restart: always\n ports:\n - 27017:27017\n volumes:\n - ./mongo1:/data/db\n command: mongod --replSet mongoset\n networks:\n - mongo\n mongo2:\n image: mongo:4.4.17-rc0-focal\n container_name: mongo2\n restart: always\n ports:\n - 27018:27017\n volumes:\n - ./mongo2:/data/db\n command: mongod --replSet mongoset\n networks:\n - mongo\nnetworks:\n mongo:\n</code></pre>\n<p>and ran it with <code>docker compose up -d</code>.</p>\n<p>I went to connect with MongoDB Compass and it didn't work for some reason. I asked GPT and nothing. It looks like it accepted the connection but it won't connect, so I installed <code>mongosh</code> and tried to connect with that.</p>\n<pre><code class=\"language-bash\">$ mongosh mongodb://localhost:27017\n</code></pre>\n<p>...and it worked! That didn't make any sense, but okay, we can work with it.</p>\n<p>I then connected to the <code>mongo1</code> instance and ran the following commands:</p>\n<pre><code class=\"language-bash\">> rs.initiate()\n</code></pre>\n<p>and it worked, but only that same database connected. Before adding the second database to the replica, I went ahead and pinged it from the first container (just to check if the network configuration worked):</p>\n<pre><code class=\"language-bash\">docker exec mongo1 sh -c "rm /bin/ping;apt update;apt install inetutils-ping -y;ping mongo2"\n</code></pre>\n<p>I removed /bin/ping because I tried to transfer the binary from WSL to the container but it still needed some libraries and I didn't want to bother, so I just installed the package.</p>\n<p>It worked, so I went ahead and added the second database to the replica set:</p>\n<pre><code class=\"language-bash\">> rs.add("mongo2")\n</code></pre>\n<p>After waiting for it, the second database connected and everything was working fine. Let's create a collection and some documents on the primary replica (mongo1):</p>\n<pre><code class=\"language-bash\">> use test\n> db.createCollection("test")\n> db.test.insertOne({ name: "test" })\n</code></pre>\n<p>and then, let's check if it's on the second replica (mongo2):</p>\n<pre><code class=\"language-bash\">$ mongosh mongodb://localhost:27017\n</code></pre>\n<pre><code class=\"language-bash\">> use test\n> db.getMongo().setReadPref("secondaryPreferred")\n> db.test.find()\n</code></pre>\n<p>and, yeah, that worked.</p>\n<p>I don't really know if ORMs will read when connecting to the second replica, but for now it's fine as the main plan is on track.<br>So, to promote I connected to the primary replica (mongo1) and ran the following command:</p>\n<pre><code class=\"language-bash\">> rs.stepDown()\n</code></pre>\n<p>And that worked! Woo! The second replica is now the primary one. We can now start <em>drum rolls please</em>:</p>\n<h2>The migration</h2>\n<p>This is it. We're doing it.</p>\n<p>I went ahead and created a new docker-compose file on my server with the following content:</p>\n<pre><code class=\"language-yml\">version: "3.8"\nservices:\n mongo:\n image: mongo:4.4.17-rc0-focal\n container_name: mongodb\n restart: unless-stopped\n ports:\n - 27017:27017\n volumes:\n - ./mongo:/data/db\n command: mongod --replSet rs0\n</code></pre>\n<p>After deploying the stack, I connected using mongosh to the primary db and ran the following command:</p>\n<pre><code class=\"language-bash\">> rs.add("ip")\n</code></pre>\n<p>and after waiting for a while it looked like it worked. I then connected to the new database and ran the following command to check if the replica cloned fine:</p>\n<pre><code class=\"language-bash\">> db.getMongo().setReadPref("secondaryPreferred")\n</code></pre>\n<p>and let's just let the results speak for themselves:</p>\n<pre><code class=\"language-bash\">rs0 [direct: secondary] test> show dbs\n# author's note: some dbs are redacted for privacy reasons \nadmin 80.00 KiB\napi 80.00 KiB\nava 40.00 KiB\nbask 168.00 KiB\nconfig 144.00 KiB\nlocal 348.00 KiB\nvinci 428.00 KiB\nrs0 [direct: secondary] test> use vinci\nswitched to db vinci\nrs0 [direct: secondary] vinci> show tables\nafk\nbirthdays\nchatgpt\ngiveaways-enters\ngiveaways-message\npadyama\nsuggestions\ntwitter\nwarns\nyoutube\nrs0 [direct: secondary] vinci> db.afk.find()\n[\n {\n _id: ObjectId("sadfsad fsadfsdf"),\n id: 'redacted',\n reason: 'redacted',\n __v: 0\n },\n {\n _id: ObjectId("asdfsadfadf"),\n id: 'redacted',\n reason: 'readacted',\n __v: 0\n }\n]\nrs0 [direct: secondary] vinci>\n</code></pre>\n<p>Nice. let's now try to write something to the database from Vinci:<br><img src=\"https://img.srizan.dev/Discord_a2iXkWYxwn.png\" alt=\"\"><br>That just worked and we can see it on the secondary replica:</p>\n<pre><code class=\"language-bash\">rs0 [direct: secondary] vinci> db.afk.find({ id: '703974042700611634' })\n[\n {\n _id: ObjectId("6550eccc6154a8c9030fe76a"),\n id: '703974042700611634',\n reason: 'test',\n __v: 0\n }\n]\n</code></pre>\n<p>Let's now edit all .envs and change the database url to the new secondary one. For this I checked all dbs that I have and then go from top to bottom editing the secrets.</p>\n<p>After that was done I needed to deploy all changes. I went ahead and created too many tabs on my terminal and ran the all deployment commands on each tab. At the same time.<br>I really hope that doesn't make my server run out of ram, because I'm really short on that.</p>\n<p>After executing all the commands I <code>rs.stepDown()</code>'ed the primary Raspberry Pi replica and, as expected, the HP Server took over.</p>\n<p>The last command of the day:</p>\n<pre><code class=\"language-bash\">> rs.remove("ip")\n</code></pre>\n<p>...SIKE! I needed to check the logs of the containers to see if everything was working fine. The <code>api</code> and <code>vinci</code> to be exact.<br>This is because <code>api</code> runs Prisma and <code>vinci</code> runs the now defunct in my stack, <a href=\"https://mongoosejs.com/\">mongoose</a>.</p>\n<p>Luckily enough, both were fine, so I was free. Yay!</p>\n<h2>Conclusion</h2>\n<p>Welp, that was a lot of work. I'm glad it's over. I got my HP server on July and it's now November and I just finished migrating.<br>Could I have done it in less time? Yes.<br>Was I lazy? Also yes.</p>\n<p>So that answers all your questions.</p>\n<p>I hope you enjoyed this my first blog post, and thankfully it was a big one.<br>This took 3 hours in total, but at the end of the day, it was worth it.</p>\n<p>I'll see you in the next one!</p>\n",
|
|
"url": "https://srizan.dev/blog/2",
|
|
"title": "My tales of MongoDB migration",
|
|
"summary": "Here I ramble about the last service migration I did, MongoDB, and all the difficulties that came with it.",
|
|
"date_modified": "2023-11-12T00:00:00.000Z",
|
|
"author": {
|
|
"name": "Sr Izan",
|
|
"url": "https://srizan.dev"
|
|
}
|
|
},
|
|
{
|
|
"id": "https://srizan.dev/blog/4",
|
|
"content_html": "<p>Alright, so you want to install osu! on Endeavour OS. I just reinstalled my system. Two birds with one stone!<br>Based on <a href=\"https://wiki.archlinux.org/title/User:Katoumegumi\">https://wiki.archlinux.org/title/User:Katoumegumi</a></p>\n<h1>Backstory</h1>\n<p>My Windows installation has been unstable since year 1 of my computer, and it even went to the point that when I open osu! sometimes it would just not work, black out my screen and play the last sound it was playing (see audio when a BSOD happens)<br>Yesterday I went to install <a href=\"https://osu.ppy.sh/home/changelog/stable40/20231217.1\">the latest update</a>, click on restart, yadiyadiyada and unfortunately my computer CRASHED. I didn't feel nervous until I opened up the game to play a bit and find out that my skin was the default one.</p>\n<p>Okay, strange, lemme open up the game...</p>\n<p>It starts importing all beatmaps.</p>\n<p>Okay then, a bit understandable because the update is all about difficulty calculator.</p>\n<p>When it finishes, I go to my most recent plays.<br>Nothing.<br>Never played.<br>What?</p>\n<p>I go into my collections.<br>They're still there.<br>Okay, but are the scores there?<br>NO!</p>\n<p>Thus, after recovering my replays using a batch scripts that opens all <code>.osr</code> files in my <code>Data\\r</code> folder, I just moved to linux, and this is a writeup on how I've been installing the game since my first time in April.</p>\n<p>Enjoy!</p>\n<h1>Installation</h1>\n<h2>Installing Wine</h2>\n<p>We first need to install wine and winetricks, to do so run:</p>\n<pre><code class=\"language-sh\">sudo pacman -S wine\nwget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks\nchmod +x winetricks\nsudo mv ./winetricks /usr/local/bin/winetricks\n</code></pre>\n<h2>Preparing wineprefix</h2>\n<p>We now need to install dependencies like fonts or dotnet to make osu! run correctly</p>\n<pre><code class=\"language-sh\">WINEARCH=win32 WINEPREFIX=~/.wineosu winetricks dotnet40 dotnet45 cjkfonts gdiplus\n</code></pre>\n<p><strong>(update 12/19/2023)</strong>: added <code>dotnet45</code> to make it work with <a href=\"https://github.com/l3lackShark/gosumemory/issues/140#issuecomment-1179663744\">gosumemory</a></p>\n<h2>Installing osu!</h2>\n<p>Skipping this part, but basically download the installer and run it.<br>I already have my own 3-year-old installation with all my everything on it, so I'm bind-mounting it.</p>\n<p>Create a directory:</p>\n<pre><code class=\"language-sh\">mkdir ~/.wineosu/osu\n</code></pre>\n<p>And then I added the following fstab line:</p>\n<pre><code class=\"language-sh\">/mnt/HDD/osu! /home/srizan/.wineosu/osu none defaults,bind 0 0\n</code></pre>\n<h2>Trying to open it up</h2>\n<p>Running <code>WINEARCH=win32 WINEPREFIX=~/.wineosu wine ~/.wineosu/osu/osu\\!.exe</code> twice leads us in the osu! installer with no network connection found.</p>\n<p>This is a bit easy to fix, as Wine itself yields this error if you scroll up a bit:</p>\n<pre><code class=\"language-sh\">01b0:err:winediag:process_attach Failed to load libgnutls, secure connections will not be available.\n</code></pre>\n<p>Looking the package up in the <a href=\"https://archlinux.org/packages/?q=libgnutls\">Arch Linux repos</a>, a package called <code>lib32-gnutls</code> shows up which looks to be exactly what we want.</p>\n<p>After installing it, the SSL connection worked and the game is going to sta- too bad!\n<img src=\"/blog/img/osu-eOS/graphicsContext.png\" alt=\"\"><br>You thought that was gonna be IT!</p>\n<p>It wants a GL context, which we don't have, so installing <a href=\"https://archlinux.org/packages/multilib-testing/x86_64/lib32-mesa/\"><code>lib32-mesa</code></a> fixes it. Easy!</p>\n<p>Now, the window is... dark? WHEN ARE WE DONE MAN?<br>Welp, when going to almost the top of the file, we can see this:</p>\n<pre><code class=\"language-sh\">0024:err:winediag:create_gl_drawable XComposite is not available, using GLXPixmap hack.\n</code></pre>\n<p>"GLXPixmap hack"?<br>The game is, according to peppy, held with duct tape, so no hacks are really going to work.</p>\n<p>Here we go, <a href=\"https://archlinux.org/packages/multilib/x86_64/lib32-libxcomposite/\">yet ANOTHER lib32 package</a> should fix it.</p>\n<p>It opens up!<br><img src=\"/blog/img/osu-eOS/noaudio.mp4\" alt=\"\"></p>\n<p>Yeah. Nice. No audio.<br>Browsing through the Arch forums I found <img src=\"https://bbs.archlinux.org/viewtopic.php?id=135032\" alt=\"this post\">, and I installed the three <code>lib32-alsa-plugins lib32-libpulse lib32-openal</code> packages.</p>\n<p>And it started up! (too lazy to screenshot)</p>\n<h2>Setting up the start script</h2>\n<p>edit a file in <code>~/.wineosu/osu/start.sh</code> with the following contents:</p>\n<pre><code class=\"language-sh\">#!/usr/bin/env bash\n\n# props to Katoumegumi for the original script, this is exactly the same one and it works wonders.\n#export PATH="$HOME/.wineosu/osuwine/bin:$PATH" #Use custom WINE version to run osu!\nexport WINEARCH=win32\nexport WINEPREFIX="$HOME/.wineosu"\n#export WINEFSYNC=1\n\n#VSync. For some reason, some people had been getting input latency issues and for some reason, the fix is to set VSync to off.\nexport vblank_mode=0 #For AMD, Intel and others\nexport __GL_SYNC_TO_VBLANK=0 #For NVIDIA proprietary and open source >=500\n\n#export STAGING_AUDIO_PERIOD=10000\n\n#start osu!\nwine osu\\!.exe\n</code></pre>\n<h2>Setting up the freedesktop entry</h2>\n<p>Download the osu! logo:</p>\n<pre><code class=\"language-sh\">wget --output-document ~/.wineosu/osu/icon.png https://github.com/ppy/osu-wiki/raw/master/wiki/Brand_identity_guidelines/img/usage-full-colour.png\n</code></pre>\n<p>and finally edit a new file in the path <code>~/.local/share/applications/osu.desktop</code></p>\n<pre><code>[Desktop Entry]\nType=Application\nComment=A free-to-play rhythm game inspired in Osu! Tataekae! Ouendan!\nIcon=/home/<username>/.wineosu/osu/icon.png\nExec=/home/<username>/.wineosu/osu/start.sh\nPath=/home/<username>/.wineosu/osu\nGenericName=osu!\nName=osu!\nStartupNotify=true\n</code></pre>\n<h1>that's it</h1>\n<p>Way harder than I thought. If you want the command with all dependencies, type in:</p>\n<pre><code class=\"language-sh\">sudo pacman -S lib32-gnutls lib32-mesa lib32-alsa-plugins lib32-libpulse lib32-openal\n</code></pre>\n",
|
|
"url": "https://srizan.dev/blog/4",
|
|
"title": "Install osu! on Endeavour OS",
|
|
"summary": "A guide on how to install osu! on Endeavour OS",
|
|
"date_modified": "2023-12-17T00:00:00.000Z",
|
|
"author": {
|
|
"name": "Sr Izan",
|
|
"url": "https://srizan.dev"
|
|
}
|
|
},
|
|
{
|
|
"id": "https://srizan.dev/blog/3",
|
|
"content_html": "<p>Alright, let's do this. Fast.<br>Disclaimer: this only works when the /home directory is on the same partition, which is the default option if you don't specify.</p>\n<h1>Step 1: Boot up a live environment.</h1>\n<p>For the sake of simplicity, I'll be using the Endeavour OS Galileo installation media, but <a href=\"https://command-not-found.com/arch-chroot\">any linux distro should work</a></p>\n<p>When you're in, open the terminal:<br><img src=\"https://img.srizan.dev/vmware_zCwt9ac9KE.png\" alt=\"\"></p>\n<h1>Step 2: Mounting the linux distro</h1>\n<p>Type in <code>lsblk</code>. This will show all mounted drives.<br><img src=\"https://img.srizan.dev/vmware_LPBNlTo9BI.png\" alt=\"\"></p>\n<p>Locate the drive and partition where your installation is.<br>It's usually the partition with the most space. The space is on the size row (duh)<br>If you have multiple drives with the same size and want more info about the volumes, type in <code>fdisk -l</code>.</p>\n<p>In my case it's <code>/dev/sda1</code>.</p>\n<p>So let's mount the partition to the <code>/mnt</code> directory with <code>sudo mount /dev/sda1 /mnt</code>. </p>\n<h1>Step 3: Chrootin'</h1>\n<p>Chroot is a linux tool which basically changes the root directory to whatever directory you specify. This will be used to run the <code>passwd</code> command inside your installation's context.</p>\n<p>Arch Linux has it's own chroot command which does some magic in the background to make it useable on this distro's environments.</p>\n<pre><code class=\"language-sh\">sudo arch-chroot /mnt\n</code></pre>\n<p>should chroot into your installation and after a few seconds a shell will show up!<br><img src=\"https://img.srizan.dev/vmware_nyyqOA9ELo.png\" alt=\"\"></p>\n<p>And now one last command, the one that actually changes the password:</p>\n<pre><code class=\"language-sh\">passwd yourusername\n</code></pre>\n<p>and boom! that's it! impressive, right? <code>exit</code> off the console and then reboot.</p>\n<h1>The end</h1>\n<p>That was quick.</p>\n",
|
|
"url": "https://srizan.dev/blog/3",
|
|
"title": "How to change the user password in Arch if you forgot it",
|
|
"summary": "This post was made for a certain person who loves to lose passwords",
|
|
"date_modified": "2023-11-23T00:00:00.000Z",
|
|
"author": {
|
|
"name": "Sr Izan",
|
|
"url": "https://srizan.dev"
|
|
}
|
|
},
|
|
{
|
|
"id": "https://srizan.dev/blog/1",
|
|
"content_html": "<h1>Hey!</h1>\n<p>This is probably the last time I'm going to make a blog. I've made a few in the past, but I've never really stuck to them. I'm hoping that this time will be different.<br>This one was made entirely from scratch using React and Markdown, initially trying to use MDX, but it was a pain to set up, and it didn't end up working in the end.<br>I'm hoping to post about my projects, and maybe some other stuff too. I'm not sure yet, but I'll figure it out as I go along.<br>Anyways, thank you for reading. I hope you enjoyed my UX/UI for this one!</p>\n<p>PD: I need some help for making the blog text look good and readable, so hit me up on my Discord if you have any ideas.</p>\n",
|
|
"url": "https://srizan.dev/blog/1",
|
|
"title": "Welcome to my new blog!",
|
|
"summary": "This post welcomes you to my new blog",
|
|
"date_modified": "2024-08-08T00:00:00.000Z",
|
|
"author": {
|
|
"name": "Sr Izan",
|
|
"url": "https://srizan.dev"
|
|
}
|
|
},
|
|
{
|
|
"id": "https://srizan.dev/blog/5",
|
|
"content_html": "<p>As once our lord and savior Terry A. Davis said, <a href=\"https://www.goodreads.com/quotes/10480697-an-idiot-admires-complexity-a-genius-admires-simplicity-a-physicist\">"An idiot admires complexity, a genius admires simplicity."</a><br>And, welp, that's what I just did with my github bot Automata.</p>\n<h1>v1</h1>\n<p>Automata v1 was a real mess. We were supposed to publish a next.js website, a jobs system to make our lives easier, and a large etc.</p>\n<p>Now, I've been working on this for quite a while (about a year) and I felt like I wasn't going anywhere. So I just thought about it we could run the automation scripts on Github Actions, right?</p>\n<h1>So I got to work</h1>\n<p>And in 4 days I got the whole thing working. I'm really proud of it.</p>\n<p>We send API requests to Github whenever we want to trigger a workflow, on demand, by using the webhook system and handling everything from there.<br>As a bonus I also added a command, so we could merge on a more controlled way, specially on larger PRs.</p>\n<h2>Unexpected bugs on prod just after the PR merge</h2>\n<p>There were some bugs on launch.</p>\n<ul>\n<li>I didn't have a start script nor a license <a href=\"https://github.com/sern-handler/automata/commit/05c6ac3b81740ab9dcf86155b16afc84e7c850c8\">(commit)</a></li>\n<li>I forgot to change some environment variable names on index.ts <a href=\"https://github.com/sern-handler/automata/commit/6e5d21ce548db04e9926ef7dfc3c1a5945d61aed\">(commit)</a></li>\n<li>A day later, forgot to listen on the <code>PORT</code> environment variable <a href=\"https://github.com/sern-handler/automata/commit/622d6e72ded4330e06e802432677855a5397cedc\">(commit)</a></li>\n<li>Squash and merge by default (ended up regretting it, see below) <a href=\"https://github.com/sern-handler/automata/commit/65ccede477f509c2e2de27be40a78281b79cda18\">(commit)</a></li>\n<li>I FORGOT TO CHECK IF THE COMMAND MENTIONED @SERNBOT <a href=\"https://github.com/sern-handler/automata/commit/a5e58a415423eace3a8b0d6fbc4fe43e050c0624\">(commit)</a></li>\n</ul>\n<p>That last one was a real pain, as I detected the bug in production, on the most important PR of the week, if not the month: the website's move to starlight docs.\n<img src=\"/blog/img/sernAutomataV2/prMerge1.png\" alt=\"\"><br><img src=\"/blog/img/sernAutomataV2/prMerge2.png\" alt=\"\"></p>\n<h1>Conclusion</h1>\n<p>Wow, a project with good DevEx? SIGN ME UP!</p>\n<p>PD: I created a next.js template with my preferred tech stack, make sure to check it out! <a href=\"https://stack.srizan.dev\">link</a></p>\n",
|
|
"url": "https://srizan.dev/blog/5",
|
|
"title": "Releasing sern Automata v2",
|
|
"date_modified": "2024-05-08T18:46:01.405Z",
|
|
"author": {
|
|
"name": "Sr Izan",
|
|
"url": "https://srizan.dev"
|
|
}
|
|
}
|
|
]
|
|
} |