<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>Blackilykat's blog</title>
		<link>https://blackilykat.dev/blog</link>
		<description>My blog</description>
		<language>en-us</language>
		<managingEditor>contact@blackilykat.dev</managingEditor>
		<webMaster>contact@blackilykat.dev</webMaster>
		<lastBuildDate>Sat, 27 Jun 2026 12:20:06 +0100</lastBuildDate>
		
		<item>
			<dc:creator>Blackilykat</dc:creator>
			<title>State of PMP: 2026-06-27</title>
			<link>https://blackilykat.dev/blog/pmp-update-2026-06-27</link>
			<description>&lt;h1&gt;State of PMP: 2026-06-27&lt;/h1&gt;&lt;p&gt;Since this is the first update I&#39;m posting here, I thought I&#39;d give a broad overview of the current state of the project.&lt;/p&gt;
&lt;p&gt;First off, the project is still in pre-alpha. It works well enough for me to use it as my only music player, both on desktop and mobile, but it is not ready for public usage yet. I will explain in more detail below.&lt;/p&gt;
&lt;h2 id=&#34;programs&#34;&gt;Programs&lt;/h2&gt;
&lt;p&gt;Since the project started, there have been two main programs: the server and the desktop client. After some abstractions there are a few new additions to this list. The project is mainly composed of four parts now:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The server, mostly untouched for a few months;&lt;/li&gt;
&lt;li&gt;The original desktop client built with Java Swing;&lt;/li&gt;
&lt;li&gt;An Android client built with Compose and Material 3;&lt;/li&gt;
&lt;li&gt;A new desktop client built with QT.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The QT client is currently kept in its separate development branch and is not fully feature-complete. I find it to be a lot easier to work with compared to Swing, which is why I am attempting to replace the original client with the QT one in the first place, but I think I&#39;ll play with some other alternatives before I fully commit to switching.&lt;/p&gt;
&lt;h2 id=&#34;implementedfeatures&#34;&gt;Implemented features&lt;/h2&gt;
&lt;p&gt;Being a music player, it plays music. Of course. But as basic as it sounds, playback did get updated quite often so far, both by fixing issues and adding audio backends. There&#39;s actually still &lt;a href=&#34;https://github.com/Blackilykat/PMP/issues/14&#34;&gt;some work&lt;/a&gt; to do here.&lt;/p&gt;
&lt;p&gt;Library related features are mostly implemented as well. You can add and remove tracks and all updates are recognized and applied on all other devices. You can narrow your track selection based on metadata using filters and you can sort tracks as you&#39;d expect.&lt;/p&gt;
&lt;p&gt;Controlling playback is also implemented. This means that you can start playing on one device and pause, skip, change track or really do anything you would want from any other connected device.&lt;/p&gt;
&lt;p&gt;All big important features of the project are implemented. What is now missing is polish. Support for customization is under the ground right now. There are no settings, when a client starts it tries to connect to my computer and will fail on any network other than mine. UI needs work, there&#39;s features I straight up forgot to implement in the logic and protocol, you can&#39;t add any track that isn&#39;t in the right format, and there&#39;s many bugs to iron out. These and many more issues on their own are not a big deal but add up to making the project not usable yet by the average person. This is why the project is in pre-alpha, and why I&#39;m still working on it despite it being good enough for me to use daily.&lt;/p&gt;
&lt;h2 id=&#34;documentation&#34;&gt;Documentation&lt;/h2&gt;
&lt;p&gt;A very recent change is related to documentation. I just finished running through all non-UI code and properly documenting it. I realized keeping little documentation works while you&#39;re alone and have it all in your head, but it makes it a lot harder for others trying to contribute. By the way! Contributions are accepted and appreciated. I try to keep &lt;a href=&#34;https://github.com/Blackilykat/PMP/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22good%20first%20issue%22&#34;&gt;some open issues to get familiar with the codebase&lt;/a&gt; while I focus on more complex tasks. See the repository README for an overview on code structure.&lt;/p&gt;
&lt;h2 id=&#34;demo&#34;&gt;Demo&lt;/h2&gt;
&lt;p&gt;I recorded a short demo video for the project a while ago which I never released publicly, but I&#39;m taking the opportunity as I think it does a pretty good job at showing the currently implemented features. What you see is the Swing and Android clients and the server on local network.&lt;/p&gt;
&lt;p&gt;&lt;video controls=&#34;&#34; loading=&#34;lazy&#34; src=&#34;https://files.blackilykat.dev/blog/pmp-update-2026-06-27/demo.mp4&#34; alt=&#34;demo video&#34;&gt;&lt;/video&gt;&lt;/p&gt;
&lt;h2 id=&#34;upnext&#34;&gt;Up next&lt;/h2&gt;
&lt;p&gt;In the short term I will likely keep playing with desktop UI frameworks and finish making the QT client if I don&#39;t change my mind on it being the best one for the project. Longer term, I&#39;ll likely work on settings after closing the issues that bug me the most. Settings will play a pretty big role in pushing the project out of pre-alpha.&lt;/p&gt;</description>
			<author>contact@blackilykat.dev</author>
			<pubDate>1782559206</pubDate>
		</item>

		<item>
			<dc:creator>Blackilykat</dc:creator>
			<title>Things I hate about Java</title>
			<link>https://blackilykat.dev/blog/things_i_hate_about_java</link>
			<description>&lt;h1&gt;Things I hate about Java&lt;/h1&gt;&lt;p&gt;I have started properly programming about 4 years ago. I started with python for the first few months of learning, but after a small period of indecisiveness I settled on learning Java. It has since then stayed as the language I know best and use most often.&lt;/p&gt;&lt;p&gt;I do generally like it as a language, but it definitely has its flaws. Sometimes I just stumble upon some unexpected behavior that I don&#39;t think makes sense. Enough times to make this post.&lt;/p&gt;&lt;p&gt;&lt;small&gt;Sorry for the lack of formatting in code blocks. I use a hacked-together page to write these and have not decided to &lt;i&gt;properly&lt;/i&gt; implement them yet.&lt;/small&gt;&lt;/p&gt;&lt;p&gt;&lt;h2&gt;Generics&lt;/h2&gt;&lt;/p&gt;&lt;p&gt;Generics are probably the worst thing to exist in Java.&lt;/p&gt;&lt;p&gt;To write this part, I had to read Oracle&#39;s Java™  Tutorials to make sure my (old) assumptions were correct. They were not.&lt;/p&gt;&lt;p&gt;I&#39;ll take you on a small journey of me expecting OOP to work like OOP.&lt;/p&gt;&lt;p&gt;5 Months ago I modified an MPRIS library to allow to arbitrarily modify metadata without being locked to some specific values. If you don&#39;t know what that means, what&#39;s important is that I tried to accept this type as an argument:&lt;/p&gt;&lt;p&gt;&lt;code&gt;Map&amp;lt;String, List&amp;lt;?&amp;gt;&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;p&gt;The intentions are clear here: I needed a map with strings as keys and lists of whatever as values. With Java being an object oriented language where you are expected to use hierarchy, you&#39;d expect this to work right?&lt;/p&gt;&lt;p&gt;When I tried using the library, I only needed to use lists of strings as values as that is how FLAC files store metadata. So my type became:&lt;/p&gt;&lt;p&gt;&lt;code&gt;Map&amp;lt;String, List&amp;lt;String&amp;gt;&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Lists of Strings were Lists of whatever, so I expected to not have problems here.&lt;/p&gt;&lt;p&gt;But &lt;i&gt;this did not compile&lt;/i&gt;, since:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;java.util.Map&amp;lt;java.lang.String,java.util.List&amp;lt;java.lang.String&amp;gt;&amp;gt; cannot be converted to java.util.Map&amp;lt;java.lang.String,java.util.List&amp;lt;?&amp;gt;&amp;gt;&lt;/code&gt;.&lt;/pre&gt;&lt;p&gt;Turns out that &lt;a href=&#34;https://docs.oracle.com/javase/tutorial/java/generics/subtyping.html&#34;&gt;generics like to completely throw away all concepts of OOP unless you explicitly tell them not to&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;In this instance, the problem was that &lt;code&gt;List&amp;lt;String&amp;gt;&lt;/code&gt; and &lt;code&gt;List&amp;lt;?&amp;gt;&lt;/code&gt; are not exactly the same type. Because I didn&#39;t specify &lt;code&gt;? extends List&amp;lt;?&amp;gt;&lt;/code&gt; it assumed I only wanted &lt;i&gt;exactly&lt;/i&gt; a &lt;code&gt;List&amp;lt;?&amp;gt;&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;But that&#39;s not my only issue with generics. Generics in Java are a lie. They don&#39;t exist at runtime. All generic types, when compiled, become &lt;code&gt;Object&lt;/code&gt;. They&#39;re a fancy addition at compile time to specify your intentions but there is nothing stopping you from just &lt;code&gt;((List) list).add(&#34;hello&#34;)&lt;/code&gt; with a &lt;code&gt;List&amp;lt;Integer&amp;gt;&lt;/code&gt;. That sounds like a fantasy scenario I made up to prove my point but all you need to replicate it is some wrong assumptions when decoding JSON and a couple of innocent-looking casts and you&#39;ll get a ClassCastException.&lt;/p&gt;&lt;p&gt;My last issue with generics is that they should be more accessible at runtime. I&#39;ve read it&#39;s possible to access a generic class using reflection but that&#39;s hacky and I always try to avoid it when possible. We have &lt;code&gt;Class&lt;/code&gt; objects for each class already! We treat &lt;code&gt;T&lt;/code&gt; as a class by putting it in front of variable names, just let me write &lt;code&gt;T.class&lt;/code&gt; and make it behave like one! I don&#39;t want to have to specify my class twice when it&#39;ll always be the same (&lt;code&gt;new Thing&amp;lt;String&amp;gt;(String.class)&lt;/code&gt;).&lt;/p&gt;&lt;p&gt;&lt;h2&gt;Everything&#39;s a class&lt;/h2&gt;&lt;/p&gt;&lt;p&gt;&lt;small&gt;Edit: after publishing this post I was informed there actually &lt;i&gt;is&lt;/i&gt; a good reason for the structure which sparked my complaint. I still find it to be a weird design decision but am not knowledgeable enough to complain in this scenario, so I take it back.&lt;/small&gt;&lt;/p&gt;&lt;p&gt;&lt;details&gt;&lt;/p&gt;&lt;p&gt;&lt;summary&gt;Original part&lt;/summary&gt;&lt;/p&gt;&lt;p&gt;Not long ago I had to look into the code of a function in &lt;a href=&#34;https://github.com/GeyserMC/MCProtocolLib/&#34;&gt;a Minecraft-related library&lt;/a&gt;. The class was a Vector3d, which is just 3 variables x, y, z. I expected it to be simple. I needed to check whether calling the &lt;code&gt;.add(x, y, z)&lt;/code&gt; method would modify the original vector or create a new one.&lt;/p&gt;&lt;p&gt;I use IDEA (as neovim sucks for java specifically) and ctrl+clicking on the function always worked in the past, so that&#39;s what I did. I ended up in an &lt;i&gt;abstract class Vector3d&lt;/i&gt;.&lt;/p&gt;&lt;p&gt;Okay. Sure. Let&#39;s see what implements it. I ctrl click and all I find is a &lt;i&gt;public interface VectorProvider&lt;/i&gt; with a method &lt;code&gt;createVector3d(x, y, z)&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;Cool so I&#39;ll just go one more layer deeper and see what implements it. I ctrl click and all I find a &lt;code&gt;public static VectorProvider provider()&lt;/code&gt; method in a Vectors class. In the method I find this:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;Iterator&lt;VectorProvider&gt; iterator = MathImplementationLoader.serviceLoader(VectorProvider.class).iterator();
if (!iterator.hasNext()) {
    throw new RuntimeException(&#34;Could not initialize vector provider as no implementation was provided!&#34;);
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Excuse me?? A dynamic implementation loader for three variables? Are you scared you&#39;ll get addition wrong and will have to swap it out??&lt;/p&gt;&lt;p&gt;This is silly. I&#39;m sure these many layers of abstraction might make sense in a complex code base &lt;i&gt;but we&#39;re talking about x, y and z&lt;/i&gt;. Three variables.&lt;/p&gt;&lt;p&gt;I think this structure is actually &lt;i&gt;encouraged&lt;/i&gt; by the language. Everything you make is a class anyway so might as well dynamically load the three numbers.&lt;/p&gt;&lt;p&gt;&lt;/details&gt;&lt;/p&gt;&lt;p&gt;If there&#39;s something I love about C is the ability to make a struct with &lt;i&gt;n&lt;/i&gt; bytes, and use them all. If you need x, y, and z, you&#39;ll intentionally allocate the memory needed for x, y, and z.&lt;/p&gt;&lt;p&gt;I think java should support that. There&#39;s no reason to store an address to the heap where you allocate space for the three doubles. Store the doubles as if they were a primitive. It&#39;ll be fine.&lt;/p&gt;&lt;p&gt;&lt;small&gt;Edit: &lt;a href=&#34;https://openjdk.org/jeps/401&#34;&gt;yay!&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;&lt;p&gt;&lt;h2&gt;No tuples&lt;/h2&gt;&lt;/p&gt;&lt;p&gt;Working with other languages I&#39;ve had the pleasure to work with tuples. They might be a bit of a slippery slope if you abuse them, but storing 2 values in 1 variable is really useful on a small scale. I&#39;ve actually just ended up implementing &lt;code&gt;Pair&amp;lt;T, U&amp;gt;&lt;/code&gt; in multiple of my projects.&lt;/p&gt;&lt;p&gt;This isn&#39;t a proper talking point like the others, i just find these really handy.&lt;/p&gt;&lt;p&gt;&lt;h2&gt;Let me tell you what version I was made for&lt;/h2&gt;&lt;/p&gt;&lt;p&gt;Java verisons are a mess. Sometimes you just need any JRE and everything is great, until you need to use the 10 year old program that only works with java 8 or suddenly need a JDK for one program. Then you end up installing an old version of Java you only intended to use once and it takes over your PATH and now the rest of your programs won&#39;t run because they needed a recent JDK.&lt;/p&gt;&lt;p&gt;If a java program wants to reliably work on all - or most - machines, it &lt;i&gt;needs&lt;/i&gt; a bootstrap to download its own version of java. I don&#39;t think it should work like that. After all, a a bootstrap with that purpose will always do the same thing.&lt;/p&gt;&lt;p&gt;Similarly to how jar files specify their main class, they should also be able to specify which version of java they were designed for and which other versions they also work with. Then each JDK should be able to read that and judge if another JDK installed in the system may be more fit or - if none is - install a new one.&lt;/p&gt;</description>
			<author>contact@blackilykat.dev</author>
			<pubDate>1754053197</pubDate>
		</item>

		<item>
			<dc:creator>Blackilykat</dc:creator>
			<title>My experience with GrapheneOS</title>
			<link>https://blackilykat.dev/blog/my_experience_with_grapheneos</link>
			<description>&lt;h1&gt;My experience with GrapheneOS&lt;/h1&gt;&lt;p&gt;A few months ago I decided to switch my Pixel 7 pro&#39;s OS to GrapheneOS. I had heard good things about it before and wanted to give it a shot. I had wanted to switch for a while but was scared of &lt;i&gt;something&lt;/i&gt; going wrong. I had heard of issues with notifications and banking apps, both of which I&#39;m happy to say are (mostly) non-issues.&lt;/p&gt;&lt;p&gt;&lt;h2&gt;Daily usage&lt;/h2&gt;&lt;/p&gt;&lt;p&gt;When using the phone, you wouldn&#39;t even be able to tell it&#39;s running a custom OS. When I decided to install it I was expecting some things to be a bit buggy or to have to tinker with the device to get something to work. I was pleasantly surprised finding out from the moment the installation process starts it&#39;s just as straight-forward as any other android OS.&lt;/p&gt;&lt;p&gt;&lt;h2&gt;Banking apps&lt;/h2&gt;&lt;/p&gt;&lt;p&gt;My banking app was the biggest worry for me. When I first tried to install it, it would refuse to launch, as I was scared would happen. I tried tricking it into believing it was on a normal device installed from a normal place, but nothing would work. Eventually - I can&#39;t explain how - I tried installing the app&#39;s apk through the Files app. I had already tried this and it didn&#39;t work before, but for whatever reason it did start working that time and has never given me any issues to this day.&lt;/p&gt;&lt;p&gt;If banking apps are the only thing holding you back from switching, do give it a shot. Even if it doesn&#39;t go as planned, &lt;a href=&#34;https://developers.google.com/android/ota&#34;&gt;you can always just switch back&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;h2&gt;Notifications&lt;/h2&gt;&lt;/p&gt;&lt;p&gt;As long as I kept Google play services installed and enabled, notifications always arrived on time. However, the moment I uninstalled it, I noticed big delays in notifications coming through (specifically from WhatsApp, I didn&#39;t notice big delays on other apps). &lt;/p&gt;&lt;br /&gt;&lt;p&gt;If there&#39;s an aspect I missed but you think I should cover, &lt;a href=&#34;/contact&#34;&gt;let me know&lt;/a&gt;. &lt;/p&gt;</description>
			<author>contact@blackilykat.dev</author>
			<pubDate>1737761421</pubDate>
		</item>

		<item>
			<dc:creator>Blackilykat</dc:creator>
			<title>Being a furry is a lot different now</title>
			<link>https://blackilykat.dev/blog/being_a_furry_is_a_lot_different_now</link>
			<description>&lt;h1&gt;Being a furry is a lot different now&lt;/h1&gt;&lt;p&gt;I used to be a furry a few years ago. Funnily enough, I didn&#39;t even know of the fandom&#39;s existence when I first got hate for it.&lt;/p&gt;&lt;p&gt;I played Minecraft and needed a skin of my own, I had used existing skins but never had one tailored to me. Having already made a horrible attempt in the past at making one from scratch, I took a bit of a different approach and turned to Roblox for references. I went into one of those games where you can put on any wearable item, made something I was happy with and copied it as best as I could into Minecraft. Now, I&#39;m leaving the important bit out: I had decided to put a rainbow cat tail on that roblox avatar. That made me decide to make the whole skin a (mostly human) anthropomorphic cat. Cat ears, yellow eyes, and rainbow tail made it into the first version of that skin. After setting it, I decided to log into hypixel - a popular Minecraft minigame server, for those not familiar with the game - and play the character a little bit. I don&#39;t want to say exactly what I was doing as I&#39;m still pretty embarrassed by it, but it may just be worthy of those cringe compilations that used to be popular. But at this point I had only heard the term &#34;furry&#34; thrown around a couple times and I hadn&#39;t looked into it before. After being weird in a guild in hypixel (like a group of players you can chat and play with), I got kicked out for the reason &#34;furry&#34;. I decided to look into what that word I kept hearing meant. I searched &#34;what is a furry&#34; on YouTube, and watched a video explaining exactly what this whole thing was. I realized I was basically what the video was describing, and then decided to look further into it. The moments after this are a bit of a blur. I think I kept looking at YouTube and getting recommendations on furry content after that, cause I eventually found a furry discord server and remember putting a favorite furry youtuber in the application. I hung out for quite a while in that server. My english was questionable and I think I misinterpreted like 30% of what was happening, but I made some great friends and had a lot of fun talking there. At one point I even got a profile picture drawn for free by an artist trying to practice there. Outside of that server, however, it wasn&#39;t all great. I remember getting straight up kicked out of a few groups before they could even get to know me as soon as they saw my furry profile picture. Eventually - and this is &lt;i&gt;not&lt;/i&gt; because of the hate - I lost interest in the discord server and in furry as a whole, making some changes to my skin to turn it into just a human. And that was it for while.&lt;/p&gt;&lt;p&gt;Recently - and I don&#39;t know what sparked it - the interest came back. I started thinking about what my fursona would be, and after a pretty long process of deciding how to bring what I had in mind to reality, I eventually got a good enough profile picture and set it. From my past experience I had expected &lt;i&gt;some&lt;/i&gt; reaction to this, but to my surprise, there was absolutely no change in how people interacted with me. I&#39;m still incredibly impressed with the change in how the fandom is seen by outsiders in just like, 4 years? It&#39;s been months since I got back into the fandom, and all I&#39;ve gotten this entire time is &lt;i&gt;maybe&lt;/i&gt; one person mentioning the fact that I&#39;m in it in a Minecraft minigame.&lt;/p&gt;&lt;p&gt;I wrote this post because I&#39;m really impressed with how fast the public opinion on something can flip. I&#39;m sure there&#39;s still some people out there who haven&#39;t changed their minds about us and never will - hell, most people I know in real life probably have negative opinions about the fandom (hi you know who you are) - but still, four years is nothing to make a big change in how people view one community, yet the change was so big I barely even noticed a difference between being and not being in it.&lt;/p&gt;&lt;p&gt;&lt;small&gt;PS: All that was written is based on my own personal experiences and may not represent what others are experiencing.&lt;/small&gt;&lt;/p&gt;</description>
			<author>contact@blackilykat.dev</author>
			<pubDate>1732302050</pubDate>
		</item>

		<item>
			<dc:creator>Blackilykat</dc:creator>
			<title>Shift + space not getting registered in NetBeans + jVi</title>
			<link>https://blackilykat.dev/blog/netbeans_jvi_shift_space_not_registered_solution</link>
			<description>&lt;h1&gt;Shift + space not getting registered in NetBeans + jVi&lt;/h1&gt;&lt;p&gt;So I had to use NetBeans for school and after installing jVi (i cannot let go of vim bindings) I had a problem where pressing shift and space at the same time would not write a space. This was a problem for me as when I&#39;m typing code I often still have shift held down when the space key is pressed and it kept resulting in a missing space all over the place. I decided to write the solution here as searching the internet got me no results when I tried.&lt;/p&gt;&lt;p&gt;&lt;h2&gt;Ok but what&#39;s the solution&lt;/h2&gt;&lt;/p&gt;&lt;p&gt;Check &lt;code&gt;Tools&lt;/code&gt; » &lt;code&gt;Options&lt;/code&gt; » &lt;code&gt;jVi Config&lt;/code&gt; » &lt;code&gt;Ctrl-Key Bindings&lt;/code&gt; » &lt;code&gt;Shift-Space&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;&lt;h2&gt;Some keywords to make this have a chance at being found&lt;/h2&gt;&lt;/p&gt;&lt;p&gt;Netbeans missing space&lt;/p&gt;&lt;p&gt;Netbeans shift + space&lt;/p&gt;&lt;p&gt;Netbeans shift space not working&lt;/p&gt;&lt;p&gt;Netbeans space not registered sometimes&lt;/p&gt;</description>
			<author>contact@blackilykat.dev</author>
			<pubDate>1726835478</pubDate>
		</item>

		<item>
			<dc:creator>Blackilykat</dc:creator>
			<title>The lie of &#34;built in survival&#34;</title>
			<link>https://blackilykat.dev/blog/the_lie_of_build_in_survival</link>
			<description>&lt;h1&gt;The lie of &#34;built in survival&#34;&lt;/h1&gt;&lt;p&gt;Okay so in minecraft there&#39;s been really impressive and good looking builds on the internet that are supposedly &#34;made in survival&#34;. Now, most of the time this isn&#39;t a straight up lie. Most of the time, they actually placed all the blocks in the world without going into creative and gathered all the blocks and its like legit and all. Thats not the part I care about.&lt;/p&gt;&lt;p&gt;While placing that many blocks in complicated patterns and gathering all the many many shulkers of materials is all you need to place the structure in your world, It&#39;s not the entire process. What makes the build look good is the designing part. The part where you&#39;re deciding what the build is gonna be and what it&#39;s gonna look like and figuring out all the shapes, which textures to use, where to put all the details. Most of the time that part is done in creative, where you have no worries about dying or standing on ground or having materials and you can try anything with no consequences at all. Compare that to the whole process being done in survival, where you would be having to eyeball stuff all the time, guess which blocks would look good and if you mess up you just wasted a bunch of your time and you have to redo a bunch of stuff.&lt;/p&gt;&lt;p&gt;It&#39;s easier in creative. That&#39;s the whole point of doing it in creative, and it makes builds done that way less impressive as worse looking, maybe smaller builds made fully in survival.&lt;/p&gt;&lt;p&gt;That&#39;s it I don&#39;t know how to end this&lt;/p&gt;&lt;p&gt;like this i guess&lt;/p&gt;</description>
			<author>contact@blackilykat.dev</author>
			<pubDate>1725560314</pubDate>
		</item>

		<item>
			<dc:creator>Blackilykat</dc:creator>
			<title>Redesigning my homepage</title>
			<link>https://blackilykat.dev/blog/redesigning_homepage</link>
			<description>&lt;h1&gt;Redesigning my homepage&lt;/h1&gt;&lt;p&gt;I recently decided to completely redo the homepage of this site. I made this decision after browsing some websites in the personal web (small web, whatever other name theres like a billion names for it).&lt;/p&gt;&lt;p&gt;For context, the main page used to be kind of a portfolio page. but it was boringg it was text and some headers and it only talked about my history as a programmer. Looking at the personal web I realised just how much more and how many more interesting things I could write about me that aren&#39;t just programming.&lt;/p&gt;&lt;p&gt;So I decided to completely throw away the old page. I got some practice with html and css while building the rest of the site so I knew I could have a more fun layout than what I had before. I don&#39;t want to get technical here but yeah I laid out some sections and decided to replicate what a bunch of old sites did by dividing everything in 2 &#34;side&#34; columns and one central one with the main contents. The whole website has a look on the more modern site so I didn&#39;t put much retro-looking stuff (other than the buttons) but I like how the mix turned out :3&lt;/p&gt;&lt;p&gt;I am now adding even more sections, adding pages and tweaking other parts of the site.&lt;/p&gt;</description>
			<author>contact@blackilykat.dev</author>
			<pubDate>1724091300</pubDate>
		</item>

		<item>
			<dc:creator>Blackilykat</dc:creator>
			<title>So this exists now</title>
			<link>https://blackilykat.dev/blog/this_exists</link>
			<description>&lt;h1&gt;So this exists now&lt;/h1&gt;&lt;p&gt;Hello! If you&#39;re reading this, you reached my blog. As of writing this I don&#39;t have too many ideas on what will go here, but I thought it would be nice to have a place where I can throw whatever and share it. I&#39;m sure I would&#39;ve been happy to have one in the past :3&lt;/p&gt;&lt;p&gt;This only exists because I &lt;b&gt;want to&lt;/b&gt; make it. There is not and never will be any financial motivation behind this.&lt;/p&gt;&lt;p&gt;If I ever decide to change that and start putting ads / trackers / any of the sort, please &lt;a href=&#34;/contact&#34;&gt;complain about it&lt;/a&gt;.&lt;/p&gt;</description>
			<author>contact@blackilykat.dev</author>
			<pubDate>1723828680</pubDate>
		</item>

	</channel>
</rss> 
