Fix headings on all posts

This commit is contained in:
Joshua Goins 2023-04-17 15:08:19 -04:00
parent 400f71851e
commit 4122da3a4b
23 changed files with 122 additions and 110 deletions

View file

@ -7,6 +7,11 @@ enableRobotsTXT: true
languageCode: 'en-us' languageCode: 'en-us'
summarylength: 15 summarylength: 15
markup:
tableOfContents:
ordered: true
startLevel: 1
minify: minify:
tdewolff: tdewolff:
html: html:

View file

@ -13,7 +13,7 @@ Welcome to my personal corner of the Internet! My username is **redstrate** and
Enjoyed what you see? Consider signing the [guestbook]({{< ref "guestbook" >}})! For other cool sites, check out my [outgoing links]({{< ref "links" >}}). Enjoyed what you see? Consider signing the [guestbook]({{< ref "guestbook" >}})! For other cool sites, check out my [outgoing links]({{< ref "links" >}}).
### Featured Artwork # Featured Artwork
{{< featured-art >}} {{< featured-art >}}
{{< recent-posts >}} {{< recent-posts >}}

View file

@ -14,7 +14,7 @@ Drawing has been a hobby of mine ever since childhood, and I try to draw when I
I also like to administrate my own servers, and that's what's hosting the website you're reading right now! You can find more details about this setup below. I also like to administrate my own servers, and that's what's hosting the website you're reading right now! You can find more details about this setup below.
### Links # Links
I'm on plenty of platforms if you want to follow me: I'm on plenty of platforms if you want to follow me:
@ -23,11 +23,11 @@ I'm on plenty of platforms if you want to follow me:
* [Newgrounds](https://redstrate.newgrounds.com/) - collection of my recent art. * [Newgrounds](https://redstrate.newgrounds.com/) - collection of my recent art.
* [Pixiv](https://www.pixiv.net/en/users/58118005) - another collection of my recent art. * [Pixiv](https://www.pixiv.net/en/users/58118005) - another collection of my recent art.
### Contact # Contact
If you wish to contact me privately about something, the best way is by emailing me at josh@redstrate.com or sending a message through [Matrix](https://matrix.to/@redstrate@pyra.sh#/@redstrate:pyra.sh). If you wish to contact me privately about something, the best way is by emailing me at josh@redstrate.com or sending a message through [Matrix](https://matrix.to/@redstrate@pyra.sh#/@redstrate:pyra.sh).
## Languages # Languages
English is my first language, but currently learning two new languages. Here is my current progress: English is my first language, but currently learning two new languages. Here is my current progress:
@ -35,7 +35,7 @@ English is my first language, but currently learning two new languages. Here is
*German*: &#9733; &#9734; &#9734; &#9734; &#9734; *German*: &#9733; &#9734; &#9734; &#9734; &#9734;
### Machines # Machines
| Name | Purpose | Model | Operating System | | Name | Purpose | Model | Operating System |
|----------|----------------|----------------------|------------------| |----------|----------------|----------------------|------------------|

View file

@ -13,11 +13,11 @@ series:
Today we're reviewing the Flare reissue of the YoRHa No. 2 Type B released by Square Enix, a company that despite being very, very controlling of their merchandise has the absolute worst online store ever. <!--more--> This isn't just a single case, you can read online where people have similar experiences with Square Enix's online store. Today we're reviewing the Flare reissue of the YoRHa No. 2 Type B released by Square Enix, a company that despite being very, very controlling of their merchandise has the absolute worst online store ever. <!--more--> This isn't just a single case, you can read online where people have similar experiences with Square Enix's online store.
### The Buying Process # The Buying Process
Buying through the (USA) Square Enix store is usually more expensive than what you can find elsewhere, and they take **forever to ship**. Not only this, but coincidentally, **the day after I received the figure** - a _better_, and _cheaper_ (overall) one showed up in the preorder listings on AmiAmi. Excuse me? Better as in this is the normally-$220-deluxe version. For **$129.** Of course, I'm picking that up! Despite the price tag difference, and a couple of accessories the two figures are virtually the same, so I'll be using them interchangeably between photos. Buying through the (USA) Square Enix store is usually more expensive than what you can find elsewhere, and they take **forever to ship**. Not only this, but coincidentally, **the day after I received the figure** - a _better_, and _cheaper_ (overall) one showed up in the preorder listings on AmiAmi. Excuse me? Better as in this is the normally-$220-deluxe version. For **$129.** Of course, I'm picking that up! Despite the price tag difference, and a couple of accessories the two figures are virtually the same, so I'll be using them interchangeably between photos.
### The Figure # The Figure
Despite the horrendous ordering process, the figure itself is very well put together! Starting with the base, which is has a transparent, mirror-like appearance like in this photograph provided on the box: Despite the horrendous ordering process, the figure itself is very well put together! Starting with the base, which is has a transparent, mirror-like appearance like in this photograph provided on the box:

View file

@ -16,7 +16,7 @@ So I bought an art tablet this year, the XP-Pen Artist 22R Pro which comes with
While almost every part of the tablet works, only one of the two stylus buttons is functional. One button is middle mouse click, and the other one is right mouse click. For some reason, only the first stylus button works! This is obviously troublesome, so where do we begin to fix this issue? Let me take you on a journey, if you have no experience with how input works on Linux - well that makes two of us! While almost every part of the tablet works, only one of the two stylus buttons is functional. One button is middle mouse click, and the other one is right mouse click. For some reason, only the first stylus button works! This is obviously troublesome, so where do we begin to fix this issue? Let me take you on a journey, if you have no experience with how input works on Linux - well that makes two of us!
### Figuring Out The Problem # Figuring Out The Problem
I work in Krita, so the first place to check is Krita's tablet testing tool first. Looking at the log yields us something like this: I work in Krita, so the first place to check is Krita's tablet testing tool first. Looking at the log yields us something like this:
@ -142,7 +142,7 @@ As you can see, whenever I press the first stylus button it reports `BTN_STYLUS`
Now before we go further, I just wanted to confirm whether or not the pen _actually worked at all_ so I booted up Windows real quick to test. And it does work as expected, darn. Now before we go further, I just wanted to confirm whether or not the pen _actually worked at all_ so I booted up Windows real quick to test. And it does work as expected, darn.
### Going Deeper # Going Deeper
Now it's easy to assume libinput is the culprit and the one to be fixed, [like I did](https://gitlab.freedesktop.org/libinput/libinput/-/issues/842). At first, I wrote up a quick patch to remap the wrong `BTN_TOUCH` inputs and inject proper `BTN_STYLUS2` events but honestly that's dirty. So what is beneath libinput? **evdev**! Now it's easy to assume libinput is the culprit and the one to be fixed, [like I did](https://gitlab.freedesktop.org/libinput/libinput/-/issues/842). At first, I wrote up a quick patch to remap the wrong `BTN_TOUCH` inputs and inject proper `BTN_STYLUS2` events but honestly that's dirty. So what is beneath libinput? **evdev**!
@ -184,7 +184,7 @@ It looks like the "usbhid" driver which makes sense, this is a USB HID device af
So what is the proper HID driver for this device? Well after some research it turns out to be **uclogic** which handles a bunch of UGTablet, Huion and other misc Asian tablet devices. Unfortunately, they haven't added any support for this model but someone has. So what is the proper HID driver for this device? Well after some research it turns out to be **uclogic** which handles a bunch of UGTablet, Huion and other misc Asian tablet devices. Unfortunately, they haven't added any support for this model but someone has.
### Digimend Project # Digimend Project
Luckily there is a project dedicated to upstreaming device drivers for these tablets, and Aren Villanuvea (also known as "kurikaesu") known for userspace-tablet-driver-daemon has [reverse engineered the tablet already](https://github.com/kurikaesu/DIGImend-research/blob/main/xp-pen-22r-pro.md). Better yet, he even implemented **most of the work in uclogic already**! You can see the [PR here](https://github.com/DIGImend/digimend-kernel-drivers/pull/557/). Luckily there is a project dedicated to upstreaming device drivers for these tablets, and Aren Villanuvea (also known as "kurikaesu") known for userspace-tablet-driver-daemon has [reverse engineered the tablet already](https://github.com/kurikaesu/DIGImend-research/blob/main/xp-pen-22r-pro.md). Better yet, he even implemented **most of the work in uclogic already**! You can see the [PR here](https://github.com/DIGImend/digimend-kernel-drivers/pull/557/).
@ -192,7 +192,7 @@ Now that's where the story ends, yay - except that my device still doesn't work.
The daemon is nice and all, but I would prefer kernel support for this device for numerous reasons. And what's worse is that it's _so close_ to being complete that it sucks that the work hasn't continued. Oh well... The daemon is nice and all, but I would prefer kernel support for this device for numerous reasons. And what's worse is that it's _so close_ to being complete that it sucks that the work hasn't continued. Oh well...
### Kernel Hacking # Kernel Hacking
So now I'm **trying to upstream the uclogic patch!** Oh how I wish it was a bug in a higher layer... I'll be taking over Aren's work and trying to clean up the patch and reduce it down to just supporting the 22R Pro, since that's the only tablet I own. Here's what works: So now I'm **trying to upstream the uclogic patch!** Oh how I wish it was a bug in a higher layer... I'll be taking over Aren's work and trying to clean up the patch and reduce it down to just supporting the 22R Pro, since that's the only tablet I own. Here's what works:

View file

@ -12,7 +12,7 @@ tags:
Some more progress has been made on fixing my newest drawing tablet! Some more progress has been made on fixing my newest drawing tablet!
<!--more--> <!--more-->
### Fixing up the patch # Fixing up the patch
So as described in the [original post]({{< ref "fixing-22r" >}}), I have to patch So as described in the [original post]({{< ref "fixing-22r" >}}), I have to patch
the uclogic HID driver. Let's start by going through the process of submitting a the uclogic HID driver. Let's start by going through the process of submitting a
@ -171,7 +171,7 @@ think my tablet pad is a... tablet pad?
Okay, that's interesting - why is this a mouse? Uh oh, don't tell me... Okay, that's interesting - why is this a mouse? Uh oh, don't tell me...
### Fixing udev # Fixing udev
So unfortunately before my tablet is fully functional, we have to touch _another_ So unfortunately before my tablet is fully functional, we have to touch _another_
piece of critical Linux infrastructure - _great_. I want to dive into how libinput piece of critical Linux infrastructure - _great_. I want to dive into how libinput
@ -302,7 +302,7 @@ hardware database, as this turns out to be a udev bug.
So I made [a systemd PR](https://github.com/systemd/systemd/pull/25866) fixing the So I made [a systemd PR](https://github.com/systemd/systemd/pull/25866) fixing the
logic, maybe that might fix your tablet too! logic, maybe that might fix your tablet too!
### Tilt support # Tilt support
One more thing I wanted to tackle was tilt support for the pen, which the driver One more thing I wanted to tackle was tilt support for the pen, which the driver
says it supported but I haven't tested yet. Simple, right? (you already know the says it supported but I haven't tested yet. Simple, right? (you already know the
@ -424,7 +424,7 @@ which has the unrealistic goal of complete tablet support in just one merge requ
I cleaned up the relevant tilt support part, and submitted a new [merge request](https://invent.kde.org/plasma/kwin/-/merge_requests/3364) I cleaned up the relevant tilt support part, and submitted a new [merge request](https://invent.kde.org/plasma/kwin/-/merge_requests/3364)
which means pen tilt/rotation is supported under KDE Wayland now! Yay! which means pen tilt/rotation is supported under KDE Wayland now! Yay!
### Dials # Dials
All is well and good now, right? That's what I thought, until I realized my **dials All is well and good now, right? That's what I thought, until I realized my **dials
don't work**! I was so entrenched in everything else, that I completely neglected don't work**! I was so entrenched in everything else, that I completely neglected

View file

@ -9,27 +9,27 @@ This website has been running almost non-stop [since November 2020](https://web.
I wanted to go over some of the services I run, break down the costs, etc. Maybe it will give you some ideas of what you could do yourself! I wanted to go over some of the services I run, break down the costs, etc. Maybe it will give you some ideas of what you could do yourself!
## E-mail # E-mail
Probably one of the biggest thing people will say _not_ to self-host. However, in my experience this has probably been one of the easiest. I'm not sure when I exactly started using my own email servers - I believe sometime in 2021 - but it's been almost painless. Of course it's a double-edged sword, if I lose any important email that's directed towards my inbox that's on me - but it's also _really_ cool to be able to say "Hey, I can be reached at josh@redstrate.com!"[^2] Probably one of the biggest thing people will say _not_ to self-host. However, in my experience this has probably been one of the easiest. I'm not sure when I exactly started using my own email servers - I believe sometime in 2021 - but it's been almost painless. Of course it's a double-edged sword, if I lose any important email that's directed towards my inbox that's on me - but it's also _really_ cool to be able to say "Hey, I can be reached at josh@redstrate.com!"[^2]
One thing to note is make sure to do business with a hosting provider that doesn't block SMTP ports, to save yourself pain later[^3]. Hetzner for example doesn't block the port and I've had zero trouble with them in terms of using their servers for hosting my email. One thing to note is make sure to do business with a hosting provider that doesn't block SMTP ports, to save yourself pain later[^3]. Hetzner for example doesn't block the port and I've had zero trouble with them in terms of using their servers for hosting my email.
## Matrix # Matrix
I use my own [Matrix](https://matrix.org) server probably more than my own e-mail, because I love chatrooms! Hosting your own server is mostly painless - as long as you have enough system resources. If you can, I highly suggest doing so - not just for the good of the federation but also because it enables lots of cool things like using your own appservices. I have [heisenbridge](https://github.com/hifi/heisenbridge) to act as my IRC bouncer for example, something that wouldn't be easy with someone else's homeserver. I use my own [Matrix](https://matrix.org) server probably more than my own e-mail, because I love chatrooms! Hosting your own server is mostly painless - as long as you have enough system resources. If you can, I highly suggest doing so - not just for the good of the federation but also because it enables lots of cool things like using your own appservices. I have [heisenbridge](https://github.com/hifi/heisenbridge) to act as my IRC bouncer for example, something that wouldn't be easy with someone else's homeserver.
The same bragging right from e-mail applies here too, since matrix handles are made up of the domain name. The same bragging right from e-mail applies here too, since matrix handles are made up of the domain name.
## Websites # Websites
My personal website has always been static or statically generated, and need very little maintenance. Since my websites are small and receive very little traffic, I'm able to host them all on the same box. Since I control the server, I can do cool stuff like [automatically updating Rust docs](https://docs.xiv.zone/docs/physis/) for my physis crate [from sourcehut](https://git.sr.ht/~redstrate/physis/tree/main/item/.build.yml#L12) using rsync. I also use builds.sr.ht [to update this website too](https://git.sr.ht/~redstrate/redstrate.com/tree/master/item/.build.yml#L17), once I'm done developing a blog post I simply just commit to the repository and after a minute or so it's live on the Internet! My personal website has always been static or statically generated, and need very little maintenance. Since my websites are small and receive very little traffic, I'm able to host them all on the same box. Since I control the server, I can do cool stuff like [automatically updating Rust docs](https://docs.xiv.zone/docs/physis/) for my physis crate [from sourcehut](https://git.sr.ht/~redstrate/physis/tree/main/item/.build.yml#L12) using rsync. I also use builds.sr.ht [to update this website too](https://git.sr.ht/~redstrate/redstrate.com/tree/master/item/.build.yml#L17), once I'm done developing a blog post I simply just commit to the repository and after a minute or so it's live on the Internet!
## Nextcloud # Nextcloud
[Nextcloud](https://nextcloud.com/) is probably the most useful thing I have, and I highly recommend using it, even if you don't self-host it. It replaces Google Drive, Apple Calendar/Contacts - everything! I use it to sync my personal contacts, calendar, files, bookmarks and more. Although the web interface is a little slow, I can't deny it's been really helpful and reliable over the years. [Nextcloud](https://nextcloud.com/) is probably the most useful thing I have, and I highly recommend using it, even if you don't self-host it. It replaces Google Drive, Apple Calendar/Contacts - everything! I use it to sync my personal contacts, calendar, files, bookmarks and more. Although the web interface is a little slow, I can't deny it's been really helpful and reliable over the years.
## Other services # Other services
Here's a quick rundown of some of the other notable services I self-host and use: Here's a quick rundown of some of the other notable services I self-host and use:
* [PeerTube](https://joinpeertube.org/) for when I rarely upload videos. * [PeerTube](https://joinpeertube.org/) for when I rarely upload videos.
@ -38,7 +38,7 @@ Here's a quick rundown of some of the other notable services I self-host and use
* [Vaultwarden](https://github.com/dani-garcia/vaultwarden) for a self-hosted Bitwarden (password vault). * [Vaultwarden](https://github.com/dani-garcia/vaultwarden) for a self-hosted Bitwarden (password vault).
* [Owncast](https://owncast.online/) for livestreaming, you can do this on PeerTube now though. * [Owncast](https://owncast.online/) for livestreaming, you can do this on PeerTube now though.
## Cost # Cost
For all of these services, Hetzner only charges me ~€40 a month - but that's overkill depending on how many services you actually plan to run.[^5] I also have a couple of domains, which are bought through Porkbun which costs me maybe another $50 USD a year. So in total, it would be about ~$60 USD a month to run everything. For all of these services, Hetzner only charges me ~€40 a month - but that's overkill depending on how many services you actually plan to run.[^5] I also have a couple of domains, which are bought through Porkbun which costs me maybe another $50 USD a year. So in total, it would be about ~$60 USD a month to run everything.

View file

@ -9,7 +9,7 @@ tags:
- Qt - Qt
--- ---
## New Gamepad KCM # New Gamepad KCM
The Joystick KCM is pretty bad shape right now, for numerous reasons: The Joystick KCM is pretty bad shape right now, for numerous reasons:
@ -36,11 +36,11 @@ Next month hopefully we'll be able to get a proper UI working, now that mapping
See my [merge request](https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/1370) and Jeremy's UI [merge request](https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/1379). See my [merge request](https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/1370) and Jeremy's UI [merge request](https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/1379).
## Tokodon changes # Tokodon changes
I landed a bunch of features in Tokodon this month, including some much needed bugfixes for some rough edges of the project. I landed a bunch of features in Tokodon this month, including some much needed bugfixes for some rough edges of the project.
### Web+ap support ## Web+ap support
I landed support for the [web+ap url scheme](https://github.com/fedi-to/fedi-to.github.io/blob/main/webap.md) used to open ActivityPub objects in Tokodon! Just like matrix.to links in NeoChat, these allow linking to ActivityPub objects online. Once everything is in place, we will be one of the first clients to natively support it! I landed support for the [web+ap url scheme](https://github.com/fedi-to/fedi-to.github.io/blob/main/webap.md) used to open ActivityPub objects in Tokodon! Just like matrix.to links in NeoChat, these allow linking to ActivityPub objects online. Once everything is in place, we will be one of the first clients to natively support it!
@ -48,7 +48,7 @@ If you can't wait, it's also possible to open up regular `https` linked posts in
See the [merge request](https://invent.kde.org/network/tokodon/-/merge_requests/150) and the [wishlist bug](https://bugs.kde.org/464376). See the [merge request](https://invent.kde.org/network/tokodon/-/merge_requests/150) and the [wishlist bug](https://bugs.kde.org/464376).
### Post language support ## Post language support
You can now select the language you're posting in! You can't view a post's language or filter them from within Tokodon yet, but it's a start[^1]. Your preferred languages (chosen through the Languages & Formats KCM if you're using KDE) is shown at the top of the list. You can now select the language you're posting in! You can't view a post's language or filter them from within Tokodon yet, but it's a start[^1]. Your preferred languages (chosen through the Languages & Formats KCM if you're using KDE) is shown at the top of the list.
@ -56,7 +56,7 @@ You can now select the language you're posting in! You can't view a post's langu
See the [merge request](https://invent.kde.org/network/tokodon/-/merge_requests/156). See the [merge request](https://invent.kde.org/network/tokodon/-/merge_requests/156).
### Poll support ## Poll support
Tokodon has supported viewing polls already, but not posting them. Now you can create polls! All of your usual options are exposed, including some not even shown on Mastodon Web. This is not merged yet, but will be soon. Tokodon has supported viewing polls already, but not posting them. Now you can create polls! All of your usual options are exposed, including some not even shown on Mastodon Web. This is not merged yet, but will be soon.
@ -71,7 +71,7 @@ See the [merge request]https://invent.kde.org/network/tokodon/-/merge_requests/1
* Posting is much more reliable in general, and it's clearer when an error has occurred. Hopefully no more of your toots get eaten. See the [merge request](https://invent.kde.org/network/tokodon/-/merge_requests/162). * Posting is much more reliable in general, and it's clearer when an error has occurred. Hopefully no more of your toots get eaten. See the [merge request](https://invent.kde.org/network/tokodon/-/merge_requests/162).
* The README finally includes a screenshot! See the [merge request](https://invent.kde.org/network/tokodon/-/merge_requests/167). * The README finally includes a screenshot! See the [merge request](https://invent.kde.org/network/tokodon/-/merge_requests/167).
## NeoChat Notification Badge # NeoChat Notification Badge
One thing that always irked me with Neochat is the notification badge. The number never feels right, and no matter how many rooms I read it never changes: One thing that always irked me with Neochat is the notification badge. The number never feels right, and no matter how many rooms I read it never changes:
@ -79,7 +79,7 @@ One thing that always irked me with Neochat is the notification badge. The numbe
Now the badge will actually update based on your current notification count, hurrah! See the [merge request](https://invent.kde.org/network/neochat/-/merge_requests/810). Now the badge will actually update based on your current notification count, hurrah! See the [merge request](https://invent.kde.org/network/neochat/-/merge_requests/810).
## PulseAudio KCM # PulseAudio KCM
Last month I redid the Window Decoration KCM, and this month I did the same for the PulseAudio KCM, although the changes needed where much smaller. Last month I redid the Window Decoration KCM, and this month I did the same for the PulseAudio KCM, although the changes needed where much smaller.
@ -87,7 +87,7 @@ Last month I redid the Window Decoration KCM, and this month I did the same for
See the [merge request](https://invent.kde.org/plasma/plasma-pa/-/merge_requests/157). See the [merge request](https://invent.kde.org/plasma/plasma-pa/-/merge_requests/157).
## Kirigami and QQC2 Desktop Style # Kirigami and QQC2 Desktop Style
For Kirigami, I tried to focus on fixing up Dialog behavior to mixed results. I wanted to change [the dialog closePolicy](https://invent.kde.org/frameworks/kirigami/-/merge_requests/960), but that's been more complex than expected. I attempted to fix [the extra horizontal scrolling bug in Dialogs](https://invent.kde.org/frameworks/kirigami/-/merge_requests/966)[^2], but that has unintended regressions in Discover and I'm not really happy with the solution. I also have [a bunch of OverlaySheet fixes that I need to rebase](https://invent.kde.org/frameworks/kirigami/-/merge_requests/957)[^3] :) So a bunch of half-baked things I should start finishing next month! For Kirigami, I tried to focus on fixing up Dialog behavior to mixed results. I wanted to change [the dialog closePolicy](https://invent.kde.org/frameworks/kirigami/-/merge_requests/960), but that's been more complex than expected. I attempted to fix [the extra horizontal scrolling bug in Dialogs](https://invent.kde.org/frameworks/kirigami/-/merge_requests/966)[^2], but that has unintended regressions in Discover and I'm not really happy with the solution. I also have [a bunch of OverlaySheet fixes that I need to rebase](https://invent.kde.org/frameworks/kirigami/-/merge_requests/957)[^3] :) So a bunch of half-baked things I should start finishing next month!
@ -95,7 +95,7 @@ I noticed an issue [where Breeze Icons on Android wouldn't work](https://invent.
For qqc2-desktop-style, I [fixed an odd case where you could select text in TextAreas](https://invent.kde.org/frameworks/qqc2-desktop-style/-/merge_requests/230) that explicitly disabled it by using the right-click context menu. For qqc2-desktop-style, I [fixed an odd case where you could select text in TextAreas](https://invent.kde.org/frameworks/qqc2-desktop-style/-/merge_requests/230) that explicitly disabled it by using the right-click context menu.
## Plasma Welcome # Plasma Welcome
Oliver landed the Plasma Welcome redesign for 6.0, which looks _wonderful_. As with all great features, this has had it's fair share of technical issues which I had the pleasure of helping with, including fixing this bug: Oliver landed the Plasma Welcome redesign for 6.0, which looks _wonderful_. As with all great features, this has had it's fair share of technical issues which I had the pleasure of helping with, including fixing this bug:
@ -109,7 +109,7 @@ There's one lingering issue -- KDeclarative get's a little bit too greedy with t
See Oliver's [merge request](https://invent.kde.org/plasma/plasma-welcome/-/merge_requests/41). See Oliver's [merge request](https://invent.kde.org/plasma/plasma-welcome/-/merge_requests/41).
## Fun with Doxygen # Fun with Doxygen
This month we had a strange incident where [api.kde.org](https://invent.kde.org/frameworks/kapidox/-/issues/17) fails to generate a page for IconItem, but why? This month we had a strange incident where [api.kde.org](https://invent.kde.org/frameworks/kapidox/-/issues/17) fails to generate a page for IconItem, but why?
@ -127,19 +127,19 @@ With this new caveat in mind, I submitted two MRs to hopefully fix the documenta
... Except that I forgot about the KF5/KF6 split, which makes this harder. Next month will be focusing on rebasing those into KF5, and then creating KF6-specific MRs if needed (but a lot of fat is being cut here, so it might not be). ... Except that I forgot about the KF5/KF6 split, which makes this harder. Next month will be focusing on rebasing those into KF5, and then creating KF6-specific MRs if needed (but a lot of fat is being cut here, so it might not be).
## KDevelop.org # KDevelop.org
I took the responsibility of converting the bitrotting kdevelop.org site to Hugo, which should be live soon! Most of the old site content is brought over (and converted to Markdown) while pages are updated where needed. The new site is now live at [kdevelop.org](https://kdevelop.org)! I took the responsibility of converting the bitrotting kdevelop.org site to Hugo, which should be live soon! Most of the old site content is brought over (and converted to Markdown) while pages are updated where needed. The new site is now live at [kdevelop.org](https://kdevelop.org)!
See the [new repository](https://invent.kde.org/websites/kdevelop-org). See the [new repository](https://invent.kde.org/websites/kdevelop-org).
## Updating go-kde-org # Updating go-kde-org
I opened an MR to update the matrix.to redirector hosted at [go.kde.org](go.kde.org/matrix) which should include a link to open in NeoChat! Once it's merged, I plan on replacing the links on the KDE Community Wiki with these instead of the WebChat links we have now. I opened an MR to update the matrix.to redirector hosted at [go.kde.org](go.kde.org/matrix) which should include a link to open in NeoChat! Once it's merged, I plan on replacing the links on the KDE Community Wiki with these instead of the WebChat links we have now.
See the [merge request](https://invent.kde.org/websites/go-kde-org/-/merge_requests/1). See the [merge request](https://invent.kde.org/websites/go-kde-org/-/merge_requests/1).
## Changing Notification History Order # Changing Notification History Order
This is something that's been sitting on my backlog, but I'm super annoyed about the ordering of notification history. Whenever I miss a notification[^4] I scroll through my notification history. However, it's ordered seemingly randomly, because it's sorted by "type and urgency". That's not too helpful because neither criteria is really exposed in the UI. I propose changing it to "Date" which makes way more sense for a history view of notifications. This is something that's been sitting on my backlog, but I'm super annoyed about the ordering of notification history. Whenever I miss a notification[^4] I scroll through my notification history. However, it's ordered seemingly randomly, because it's sorted by "type and urgency". That's not too helpful because neither criteria is really exposed in the UI. I propose changing it to "Date" which makes way more sense for a history view of notifications.

View file

@ -13,25 +13,25 @@ This is a non-comprehensive list of all of the major work I've done for KDE this
Sorry that it's pretty much only text, a lot of this stuff isn't either not screenshottable or I'm too lazy to attach an image. Next month should be better! Sorry that it's pretty much only text, a lot of this stuff isn't either not screenshottable or I'm too lazy to attach an image. Next month should be better!
## Custom icon theme in Tokodon # Custom icon theme in Tokodon
I threw all of the custom icons we use in Tokodon into a proper custom icon theme, which _should_ automatically match your theme and includes a dark theme variant. In the future, I'd like to recolor these better and eventually upstream them into Breeze. I threw all of the custom icons we use in Tokodon into a proper custom icon theme, which _should_ automatically match your theme and includes a dark theme variant. In the future, I'd like to recolor these better and eventually upstream them into Breeze.
See the [merge request](https://invent.kde.org/network/tokodon/-/merge_requests/130). See the [merge request](https://invent.kde.org/network/tokodon/-/merge_requests/130).
## KXMLGUI tooltips # KXMLGUI tooltips
As part of cleaning up some KDE games-related stuff, I also looked into the issue of duplicate "What's This?" tooltips. This also fixes that visual bug where you can close normal tooltips that don't have "What's This?" information to actually open. As part of cleaning up some KDE games-related stuff, I also looked into the issue of duplicate "What's This?" tooltips. This also fixes that visual bug where you can close normal tooltips that don't have "What's This?" information to actually open.
See the [merge request](https://invent.kde.org/frameworks/kxmlgui/-/merge_requests/139). See the [merge request](https://invent.kde.org/frameworks/kxmlgui/-/merge_requests/139).
## KBlocks background changes # KBlocks background changes
This one isn't merged yet, but in the future - KBlock themes authors will be able to specify where to pin the background instead of having it stretched by default. This one isn't merged yet, but in the future - KBlock themes authors will be able to specify where to pin the background instead of having it stretched by default.
See the [merge request](https://invent.kde.org/games/kblocks/-/merge_requests/18). See the [merge request](https://invent.kde.org/games/kblocks/-/merge_requests/18).
## Kirigami "About KDE" dialog # Kirigami "About KDE" dialog
I added something that's been wanted for a while, Kirigami's own "About KDE" dialog! It's currently sitting in Add-ons, but will most likely be moved in the future. If you would like to suggest what we do about the About pages/windows in KDE, please [check out the proposal](https://invent.kde.org/libraries/kirigami-addons/-/issues/6). I added something that's been wanted for a while, Kirigami's own "About KDE" dialog! It's currently sitting in Add-ons, but will most likely be moved in the future. If you would like to suggest what we do about the About pages/windows in KDE, please [check out the proposal](https://invent.kde.org/libraries/kirigami-addons/-/issues/6).
@ -39,7 +39,7 @@ I added something that's been wanted for a while, Kirigami's own "About KDE" dia
See the [merge request](https://invent.kde.org/libraries/kirigami-addons/-/merge_requests/70). See the [merge request](https://invent.kde.org/libraries/kirigami-addons/-/merge_requests/70).
## Media improvements in Tokodon # Media improvements in Tokodon
I did a lot of work improving media in Tokodon this month, including fixing the aspect ratios scaling correctly, video support (not merged yet) and other miscellaneous fixes. I also caught a bunch of blurhash bugs along with making the timeline fixed-width so images aren't absurdly sized on a typical desktop display. I did a lot of work improving media in Tokodon this month, including fixing the aspect ratios scaling correctly, video support (not merged yet) and other miscellaneous fixes. I also caught a bunch of blurhash bugs along with making the timeline fixed-width so images aren't absurdly sized on a typical desktop display.
@ -47,7 +47,7 @@ I did a lot of work improving media in Tokodon this month, including fixing the
See the [media layout fixes](https://invent.kde.org/network/tokodon/-/merge_requests/124), [three attachment fix](https://invent.kde.org/network/tokodon/-/merge_requests/131), and the [video support](https://invent.kde.org/network/tokodon/-/merge_requests/143) merge requests. See the [media layout fixes](https://invent.kde.org/network/tokodon/-/merge_requests/124), [three attachment fix](https://invent.kde.org/network/tokodon/-/merge_requests/131), and the [video support](https://invent.kde.org/network/tokodon/-/merge_requests/143) merge requests.
## Krita.org dark theme # Krita.org dark theme
I'm starting to get involved in improving the KDE websites, and currently working on the new Krita.org website and adding a proper dark theme to it. I'm starting to get involved in improving the KDE websites, and currently working on the new Krita.org website and adding a proper dark theme to it.
@ -55,29 +55,29 @@ I'm starting to get involved in improving the KDE websites, and currently workin
See the work-in-progress [merge request](https://invent.kde.org/websites/krita-org/-/merge_requests/18). See the work-in-progress [merge request](https://invent.kde.org/websites/krita-org/-/merge_requests/18).
## Gwenview MPRIS fixes # Gwenview MPRIS fixes
Not merged yet (due to MPRIS bugginess in general?) but I cracked a shot at improving the MPRIS situation with Gwenview. Notably, slideshow controls no longer "hang around" until a slideshow is actually happening. Not merged yet (due to MPRIS bugginess in general?) but I cracked a shot at improving the MPRIS situation with Gwenview. Notably, slideshow controls no longer "hang around" until a slideshow is actually happening.
See the open [merge request](https://invent.kde.org/graphics/gwenview/-/merge_requests/180). See the open [merge request](https://invent.kde.org/graphics/gwenview/-/merge_requests/180).
## CMake Package Installer # CMake Package Installer
I worked a little on solving the kdesrc-build issue of manual package lists, and created cmake-package-installer. It parses your CMake log and installs the relevant packages for you. I want to start looking into hooking this into kdesrc-build! I worked a little on solving the kdesrc-build issue of manual package lists, and created cmake-package-installer. It parses your CMake log and installs the relevant packages for you. I want to start looking into hooking this into kdesrc-build!
See the [repository](https://invent.kde.org/redstrate/cmake-package-installer). See the [repository](https://invent.kde.org/redstrate/cmake-package-installer).
## KDE Wiki improvements # KDE Wiki improvements
I made some misc changes to the Community Wiki this month, mostly centered around fixing some long-standing formatting issues I've noticed. The homepage should be more descriptive, important pages no longer misformatted (or just missing?) and the [Get Involved/Development](https://community.kde.org/Get_Involved/development#Set_up_kdesrc-build) page should be better organized. I made some misc changes to the Community Wiki this month, mostly centered around fixing some long-standing formatting issues I've noticed. The homepage should be more descriptive, important pages no longer misformatted (or just missing?) and the [Get Involved/Development](https://community.kde.org/Get_Involved/development#Set_up_kdesrc-build) page should be better organized.
## Misc Qt patches # Misc Qt patches
I cherry-picked a Qt6 commit fixing video playback in QML, which should appear in the next Qt KDE Patch collection update, mostly for use in Tokodon when video support lands. I also submitted an upstream Qt patch fixing WebP loading, meant for NeoChat where I see the most WebP images. I cherry-picked a Qt6 commit fixing video playback in QML, which should appear in the next Qt KDE Patch collection update, mostly for use in Tokodon when video support lands. I also submitted an upstream Qt patch fixing WebP loading, meant for NeoChat where I see the most WebP images.
See the [GStreamer cherry-pick](https://invent.kde.org/qt/qt/qtmultimedia/-/merge_requests/3) and the [WebP patch](https://codereview.qt-project.org/c/qt/qtimageformats/+/455097). See the [GStreamer cherry-pick](https://invent.kde.org/qt/qt/qtmultimedia/-/merge_requests/3) and the [WebP patch](https://codereview.qt-project.org/c/qt/qtimageformats/+/455097).
## Window Decoration KCM overhaul # Window Decoration KCM overhaul
This isn't merged yet (but it's close!) so it barely misses the mark for January, but I'll include it anyway. I'm working on making the Window Decoration KCM frameless and give it a new look that matches the other KCMs. This isn't merged yet (but it's close!) so it barely misses the mark for January, but I'll include it anyway. I'm working on making the Window Decoration KCM frameless and give it a new look that matches the other KCMs.

View file

@ -11,7 +11,7 @@ tags:
Another month in the year, another collection of bugfixes and features I contributed to KDE! Another month in the year, another collection of bugfixes and features I contributed to KDE!
## Documentation Improvements # Documentation Improvements
Something I want to improve for KDE Frameworks 6 is the API documentation, it's pretty bad Something I want to improve for KDE Frameworks 6 is the API documentation, it's pretty bad
sometimes: sometimes:
@ -26,7 +26,7 @@ adding import statement hints to the page:
![Example of the new doxyqml output](image.png) ![Example of the new doxyqml output](image.png)
## Plasma 6 Porting # Plasma 6 Porting
Early this month, I ended up porting most of our applets to Plasma 6! The current Early this month, I ended up porting most of our applets to Plasma 6! The current
hitlist is: hitlist is:
@ -55,7 +55,7 @@ I also [fixed activity switching](https://invent.kde.org/frameworks/kactivities/
For those who are building Plasma 6 for the first time, [extragear modules are now built by default](https://invent.kde.org/sdk/kdesrc-build/-/merge_requests/208)! For those who are building Plasma 6 for the first time, [extragear modules are now built by default](https://invent.kde.org/sdk/kdesrc-build/-/merge_requests/208)!
## PlasmaTube # PlasmaTube
I started using PlasmaTube which is KDE's Youtube Client, to replace FreeTube. I started by I started using PlasmaTube which is KDE's Youtube Client, to replace FreeTube. I started by
[cleaning up and overhauling the account management](https://invent.kde.org/multimedia/plasmatube/-/merge_requests/43), so it flows better. [cleaning up and overhauling the account management](https://invent.kde.org/multimedia/plasmatube/-/merge_requests/43), so it flows better.
@ -65,21 +65,21 @@ I started using PlasmaTube which is KDE's Youtube Client, to replace FreeTube. I
I also made the [info chips non-interactable](https://invent.kde.org/multimedia/plasmatube/-/merge_requests/41), fixed the [spacing on video grid text](https://invent.kde.org/multimedia/plasmatube/-/merge_requests/40), added [more loading placeholders](https://invent.kde.org/multimedia/plasmatube/-/merge_requests/42) and I also made the [info chips non-interactable](https://invent.kde.org/multimedia/plasmatube/-/merge_requests/41), fixed the [spacing on video grid text](https://invent.kde.org/multimedia/plasmatube/-/merge_requests/40), added [more loading placeholders](https://invent.kde.org/multimedia/plasmatube/-/merge_requests/42) and
[stop desktop users from being able to drag the video page](https://invent.kde.org/multimedia/plasmatube/-/merge_requests/38). [stop desktop users from being able to drag the video page](https://invent.kde.org/multimedia/plasmatube/-/merge_requests/38).
## Ruqola # Ruqola
Because of `$work`, I discovered that we have a Rocket.chat client! I miss being able to quickly switch my presence Because of `$work`, I discovered that we have a Rocket.chat client! I miss being able to quickly switch my presence
via the tray icon, so that's the first thing I opened a [merge request](https://invent.kde.org/network/ruqola/-/merge_requests/110) for. via the tray icon, so that's the first thing I opened a [merge request](https://invent.kde.org/network/ruqola/-/merge_requests/110) for.
![Screenshot of the presence context menu](indicator.webp) ![Screenshot of the presence context menu](indicator.webp)
## Dr. Konqi # Dr. Konqi
Someone pointed out that the margins in the bug reporting wizard was terrible, so I [started a redesign of the whole UI](https://invent.kde.org/plasma/drkonqi/-/merge_requests/96) trying to update it to look similar to our modern applications: Someone pointed out that the margins in the bug reporting wizard was terrible, so I [started a redesign of the whole UI](https://invent.kde.org/plasma/drkonqi/-/merge_requests/96) trying to update it to look similar to our modern applications:
![WIP Bug Context Page](bugcontext.webp) ![WIP Bug Context Page](bugcontext.webp)
![WIP Backtrace Page](crash.webp) ![WIP Backtrace Page](crash.webp)
## Tokodon # Tokodon
In preparation for the 23.04 gear release, I added a slew of new features and bugfixes! In preparation for the 23.04 gear release, I added a slew of new features and bugfixes!
@ -104,7 +104,7 @@ As a treat for people who manage popular accounts - like our great KDE and Krita
![Screenshot of the notification grouping (work in progress)](grouping.webp) ![Screenshot of the notification grouping (work in progress)](grouping.webp)
## Miscellaneous # Miscellaneous
* Finished Nate's work on [hiding separators when the kickoff is sorted alphabetically](https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/1433), this will land in 5.27! * Finished Nate's work on [hiding separators when the kickoff is sorted alphabetically](https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/1433), this will land in 5.27!
* Added a [unit test to Kalendar](https://invent.kde.org/pim/kalendar/-/merge_requests/325). * Added a [unit test to Kalendar](https://invent.kde.org/pim/kalendar/-/merge_requests/325).

View file

@ -23,7 +23,7 @@ _Graphics Dump_ is a new articles series I'm starting, geared towards tutorials
{{<toc>}} {{<toc>}}
### Introduction # Introduction
Since other operating systems hide these processes away from you, it is fortunate that Linux exists to easily showcase how typical desktop graphics systems function! Of course other systems like Windows, macOS, and other operating systems function differently - but a lot of the same concepts apply (API call dispatch, userspace graphics drivers, and display planes as some good examples.) Since other operating systems hide these processes away from you, it is fortunate that Linux exists to easily showcase how typical desktop graphics systems function! Of course other systems like Windows, macOS, and other operating systems function differently - but a lot of the same concepts apply (API call dispatch, userspace graphics drivers, and display planes as some good examples.)
@ -31,7 +31,7 @@ However, the scope of this article has ballooned tremendously, so I had to split
This article is geared towards understanding the Linux graphics stack to graphics developers like me, who primarily work with graphics APIs and sort of is confused by Mesa, DRM and other such projects. As such, I kind of hand-waive over stuff like device creation, low-level GPU functions and other terms I expect you should know already or I'm not qualified to cover. This article is geared towards understanding the Linux graphics stack to graphics developers like me, who primarily work with graphics APIs and sort of is confused by Mesa, DRM and other such projects. As such, I kind of hand-waive over stuff like device creation, low-level GPU functions and other terms I expect you should know already or I'm not qualified to cover.
### Vulkan # Vulkan
I don't intend to talk much about Vulkan itself here, as this is an article dedicated to the graphics stack as a whole, not just one API. However I want to clarify some misconceptions about Vulkan first. I don't intend to talk much about Vulkan itself here, as this is an article dedicated to the graphics stack as a whole, not just one API. However I want to clarify some misconceptions about Vulkan first.
@ -41,13 +41,13 @@ I don't intend to talk much about Vulkan itself here, as this is an article dedi
With that out of the way, let's talk about how Vulkan applications typically interact with your system: With that out of the way, let's talk about how Vulkan applications typically interact with your system:
#### Calling Vulkan ## Calling Vulkan
Let's say we have a very simple Vulkan program, all it does is open a window and draw a triangle. The reason why I chose Vulkan as the graphics API for this article is because it is so involved: you need to create a device, create shader pipelines, render passes and submit draw calls and perform explicit presentation sync. Vulkan's explicit swapchain management and synchronization makes it much easier to show what happens for the purpose of these articles. OpenGL and other API hide that information from you. Let's say we have a very simple Vulkan program, all it does is open a window and draw a triangle. The reason why I chose Vulkan as the graphics API for this article is because it is so involved: you need to create a device, create shader pipelines, render passes and submit draw calls and perform explicit presentation sync. Vulkan's explicit swapchain management and synchronization makes it much easier to show what happens for the purpose of these articles. OpenGL and other API hide that information from you.
When we call something like `vkCreatePipeline` (a call that bundles some draw information with one or more shaders) the first library you will encounter is the _"Vulkan Loader"_, not any graphics driver. The Vulkan Loader is an independent project not related to Linux graphics at all. When we call something like `vkCreatePipeline` (a call that bundles some draw information with one or more shaders) the first library you will encounter is the _"Vulkan Loader"_, not any graphics driver. The Vulkan Loader is an independent project not related to Linux graphics at all.
#### Vulkan Loader ## Vulkan Loader
The Vulkan Loader does a lot more than wrap Vulkan calls, but the one that is relevant to us is that handling ICDs. "ICD" stands for _"Installable Client Driver"_, this is the actual graphics driver. The Vulkan Loader does a lot more than wrap Vulkan calls, but the one that is relevant to us is that handling ICDs. "ICD" stands for _"Installable Client Driver"_, this is the actual graphics driver.
@ -67,7 +67,7 @@ On Linux, the Vulkan Loader is installed as `libvulkan.so`, but let's dig a litt
ICDs are defined in plain JSON and we can find the driver library in `library_path`. We're focusing on AMD hardware in this article, but you can apply the same processes to Intel hardware and any other Mesa-supported driver. ICDs are defined in plain JSON and we can find the driver library in `library_path`. We're focusing on AMD hardware in this article, but you can apply the same processes to Intel hardware and any other Mesa-supported driver.
#### Inside of an ICD ## Inside of an ICD
Let's start by running `objdump` on our driver, so we can get a complete list of functions: Let's start by running `objdump` on our driver, so we can get a complete list of functions:
@ -92,7 +92,7 @@ However, if you haven't noticed already - there is functionally no difference be
The answer is simple, it just calls all of them! When you call a Vulkan function through the Vulkan Loader system, if it's a device-level call it simply passes it down to the driver that the device belongs to - but if it's an instance-level function, it actually "aggregates" the data from the relevant drivers. This is what is called the "Loader Terminator". The answer is simple, it just calls all of them! When you call a Vulkan function through the Vulkan Loader system, if it's a device-level call it simply passes it down to the driver that the device belongs to - but if it's an instance-level function, it actually "aggregates" the data from the relevant drivers. This is what is called the "Loader Terminator".
#### How the Loader Terminator Works ## How the Loader Terminator Works
A good example to showcase this is `vkEnumeratePhysicalDevices`, and as the name implies, gives you a list of the physical devices on the machine. If you have a Intel integrated GPU and say, a NVIDIA GPU, this is what the loader terminator might do: A good example to showcase this is `vkEnumeratePhysicalDevices`, and as the name implies, gives you a list of the physical devices on the machine. If you have a Intel integrated GPU and say, a NVIDIA GPU, this is what the loader terminator might do:
@ -103,7 +103,7 @@ A good example to showcase this is `vkEnumeratePhysicalDevices`, and as the name
This is actually a really smart design, since it would be near-useless if `vkEnumeratePhysicalDevices` only listed devices from _one_ ICD. And then once you create the logical device from that ICD's physical device, the Loader takes care of figuring out which ICD you actually want to talk to without you even realizing it. The fact that I didn't even know what a "loader terminator" was or that it even did this in the first place is a testament to how nicely this system functions. This is actually a really smart design, since it would be near-useless if `vkEnumeratePhysicalDevices` only listed devices from _one_ ICD. And then once you create the logical device from that ICD's physical device, the Loader takes care of figuring out which ICD you actually want to talk to without you even realizing it. The fact that I didn't even know what a "loader terminator" was or that it even did this in the first place is a testament to how nicely this system functions.
#### Overview ## Overview
That was a _lot_ of information to parse, so let me give a quick overview of how Vulkan calls eventually each your graphics driver: That was a _lot_ of information to parse, so let me give a quick overview of how Vulkan calls eventually each your graphics driver:
@ -114,7 +114,7 @@ That was a _lot_ of information to parse, so let me give a quick overview of how
This is of course assuming there are no layers activated (which are simply other programs that can intercept Vulkan calls) which may change the route your call makes. Now let's take a look at what your graphics driver actually is, and it's more complex than you might think. This is of course assuming there are no layers activated (which are simply other programs that can intercept Vulkan calls) which may change the route your call makes. Now let's take a look at what your graphics driver actually is, and it's more complex than you might think.
### Mesa # Mesa
Mesa is the next piece of software in this call stack (the ICD). It does most of the heavy lifting here, and is an important piece of the Linux graphics stack. However, I've seen people confused on _what_ Mesa is - so let's take a look at their [website](https://mesa3d.org): Mesa is the next piece of software in this call stack (the ICD). It does most of the heavy lifting here, and is an important piece of the Linux graphics stack. However, I've seen people confused on _what_ Mesa is - so let's take a look at their [website](https://mesa3d.org):
@ -143,7 +143,7 @@ that sits on top of that kernel layer and interacts with applications. Mesa impl
Let's take a look at how Mesa is structured, and how they can reuse code between many devices and drivers. This will also explain the curious structure of the `objdump` from earlier, and what the `radv` prefix is referring to. Let's take a look at how Mesa is structured, and how they can reuse code between many devices and drivers. This will also explain the curious structure of the `objdump` from earlier, and what the `radv` prefix is referring to.
#### Mesa Drivers ## Mesa Drivers
Mesa comes with many drivers, and each driver has a name (`radv`, `iris`, etc) which is unique even across different APIs: Mesa comes with many drivers, and each driver has a name (`radv`, `iris`, etc) which is unique even across different APIs:
@ -155,7 +155,7 @@ Mesa comes with many drivers, and each driver has a name (`radv`, `iris`, etc) w
However Mesa has a _lot_ of drivers, and you might think it become unmaintainable - I mean supporting one graphics API is trouble enough, but Mesa somehow supports all of these drivers and all of these APIs? How do they accomplish such a feat? However Mesa has a _lot_ of drivers, and you might think it become unmaintainable - I mean supporting one graphics API is trouble enough, but Mesa somehow supports all of these drivers and all of these APIs? How do they accomplish such a feat?
#### Gallium ## Gallium
Let's take a look at how their OpenGL support works first, which is easier to explain. This is so incredibly fascinating because for the longest time - whenever I think of "Gallium", and other people Let's take a look at how their OpenGL support works first, which is easier to explain. This is so incredibly fascinating because for the longest time - whenever I think of "Gallium", and other people
probably relate - I think of [Gallium Nine](https://docs.mesa3d.org/gallium-nine.html) which is the way to run DX9 almost natively on your system via Mesa. However, Gallium Nine is simply another frontend to Gallium. probably relate - I think of [Gallium Nine](https://docs.mesa3d.org/gallium-nine.html) which is the way to run DX9 almost natively on your system via Mesa. However, Gallium Nine is simply another frontend to Gallium.
@ -164,7 +164,7 @@ Gallium is a framework to reduce the amount of driver code needed to write OpenG
However you might be wondering how Mesa structures it's installed OpenGL drivers. Mesa provides `libGL.so` which plays a similar role to `libvulkan.so`, and selects the correct OpenGL driver at runtime[^5]. However you might be wondering how Mesa structures it's installed OpenGL drivers. Mesa provides `libGL.so` which plays a similar role to `libvulkan.so`, and selects the correct OpenGL driver at runtime[^5].
#### Vulkan ## Vulkan
Now unfortunately Mesa doesn't have a fancy name for its Vulkan driver framework (as far as I know!) because this is mostly a new development. Previously, a lot of Mesa's Vulkan drivers implemented a whole of duplicate Vulkan work (like in instance-level functions, but also a lot of queue-related things) which wasn't a huge deal, but now that Mesa has way more Vulkan drivers (they have RADV, ANV, and soon NVK - and that's not all of them!) the work was piling up and implementations started to drift apart. Apparently a lot of RADV and subsequent Vulkan drivers were based off of ANV, and then common Vulkan code got lifted outside of the drivers later. As Jason Ekstrand says in ["Introducing NVK"](https://www.collabora.com/news-and-blog/news-and-events/introducing-nvk.html): Now unfortunately Mesa doesn't have a fancy name for its Vulkan driver framework (as far as I know!) because this is mostly a new development. Previously, a lot of Mesa's Vulkan drivers implemented a whole of duplicate Vulkan work (like in instance-level functions, but also a lot of queue-related things) which wasn't a huge deal, but now that Mesa has way more Vulkan drivers (they have RADV, ANV, and soon NVK - and that's not all of them!) the work was piling up and implementations started to drift apart. Apparently a lot of RADV and subsequent Vulkan drivers were based off of ANV, and then common Vulkan code got lifted outside of the drivers later. As Jason Ekstrand says in ["Introducing NVK"](https://www.collabora.com/news-and-blog/news-and-events/introducing-nvk.html):
@ -174,13 +174,13 @@ As we've seen though, the RADV ICD simply contains _both_ the common Vulkan code
Now that we covered how Mesa separates and abstracts drivers for Vulkan and OpenGL, how do the device drivers actually function? Well depending on the structure of the hardware and its unique quirks, a lot of care has to go into optimizing the API the driver is handling. But how does it actually _interact_ with the hardware? Now that we covered how Mesa separates and abstracts drivers for Vulkan and OpenGL, how do the device drivers actually function? Well depending on the structure of the hardware and its unique quirks, a lot of care has to go into optimizing the API the driver is handling. But how does it actually _interact_ with the hardware?
### DRI # DRI
The answer is not so simple. You may have heard terms like DRI, DRM, KMS, DRM KMS and other things but these aren't very well explained. Mesa uses something called DRI. The answer is not so simple. You may have heard terms like DRI, DRM, KMS, DRM KMS and other things but these aren't very well explained. Mesa uses something called DRI.
DRI stands for _"Direct Rendering Infrastructure"_ and is something specific to Linux. The DRI is an umbrella term also covering _DRM_ and _DRM KMS_. DRI stands for _"Direct Rendering Infrastructure"_ and is something specific to Linux. The DRI is an umbrella term also covering _DRM_ and _DRM KMS_.
#### DRM ## DRM
DRM stands for _"Direct Rendering Manager"_ and refers to the DRM system that exists in the kernel. This is what the AMDGPU kernel module implements, and consequently how Mesa is able to interface with the GPU at all. It basically creates an API for userspace applications to access your GPU. The kernel module handles facilitating I/O, loading firmware and other low level things. To find the in-tree DRM kernel modules, see `drivers/gpu/drm`. DRM stands for _"Direct Rendering Manager"_ and refers to the DRM system that exists in the kernel. This is what the AMDGPU kernel module implements, and consequently how Mesa is able to interface with the GPU at all. It basically creates an API for userspace applications to access your GPU. The kernel module handles facilitating I/O, loading firmware and other low level things. To find the in-tree DRM kernel modules, see `drivers/gpu/drm`.
@ -196,17 +196,17 @@ Jackpot! What is this `libdrm` it mentions? It actually is specifically referrin
So, the Mesa drivers doesn't interface with the kernel directly, but rather access all the device-specific functionality _through_ libdrm. This is because kernel interfaces are not truly stable and the interface isn't really meant for application consumption anyway, libdrm handles all of that for Mesa. This is also might be why Mesa doesn't define a specific kernel requirement, because it technically doesn't depend on their DRM interface. So, the Mesa drivers doesn't interface with the kernel directly, but rather access all the device-specific functionality _through_ libdrm. This is because kernel interfaces are not truly stable and the interface isn't really meant for application consumption anyway, libdrm handles all of that for Mesa. This is also might be why Mesa doesn't define a specific kernel requirement, because it technically doesn't depend on their DRM interface.
#### DRM KMS ## DRM KMS
The other major part of the DRI project is "DRM KMS", one part we now know is "Direct Rendering Manager" but what is "KMS"? It stands for "Kernel Mode Setting" and is used on modern Linux systems to initialize and configure the framebuffer. You might think that "DRM KMS" stands for a type of "KMS" but really it can't exist _without_ using DRM. You'll also sometimes see it written as "DRM/KMS" which is weird but I guess it's typical in the Linux world (like GNU/Linux.) The other major part of the DRI project is "DRM KMS", one part we now know is "Direct Rendering Manager" but what is "KMS"? It stands for "Kernel Mode Setting" and is used on modern Linux systems to initialize and configure the framebuffer. You might think that "DRM KMS" stands for a type of "KMS" but really it can't exist _without_ using DRM. You'll also sometimes see it written as "DRM/KMS" which is weird but I guess it's typical in the Linux world (like GNU/Linux.)
Modesetting refers to initializing the display, handling EDIDs and all of that fun stuff. "KMS" is then referring to doing this in the kernel instead of in user space. You might be thinking that meant that user space was initializing the GPU's connected screen and you'll be right, which was slow especially when switching to things like the TTY (which is handled by the kernel) since it had no idea what the user space was doing. Modesetting refers to initializing the display, handling EDIDs and all of that fun stuff. "KMS" is then referring to doing this in the kernel instead of in user space. You might be thinking that meant that user space was initializing the GPU's connected screen and you'll be right, which was slow especially when switching to things like the TTY (which is handled by the kernel) since it had no idea what the user space was doing.
#### Quick Note about DRI versions ## Quick Note about DRI versions
You may have noticed this already, but there are things called DRI1, DRI2, DRI3. There are actually three different versions of DRI, which has evolved as the needs of graphics drivers and desktop compositors changed. We're currently on DRI3 and that's what I'll be covering once we get into presentation and synchronization. You may have noticed this already, but there are things called DRI1, DRI2, DRI3. There are actually three different versions of DRI, which has evolved as the needs of graphics drivers and desktop compositors changed. We're currently on DRI3 and that's what I'll be covering once we get into presentation and synchronization.
### Conclusion # Conclusion
I hope this gives you a nice overview of what libraries are involved when dealing with Linux graphics, and an explanation of some of the terms you might have seen before. As stated in the beginning, this has grew and grew in scope so I'm cutting the article here so I can get it published first. I hope this gives you a nice overview of what libraries are involved when dealing with Linux graphics, and an explanation of some of the terms you might have seen before. As stated in the beginning, this has grew and grew in scope so I'm cutting the article here so I can get it published first.
@ -214,7 +214,7 @@ In the next part we'll be covering how windowing, synchronization and presentati
I'm not a Mesa nor an AMD developer, so if you see any mistakes feel free to contact me! Otherwise please enjoy and make sure to check out these other fine webpages below. I'm not a Mesa nor an AMD developer, so if you see any mistakes feel free to contact me! Otherwise please enjoy and make sure to check out these other fine webpages below.
### See Also # See Also
* [Mesa Documentation](https://docs.mesa3d.org/index.html) * [Mesa Documentation](https://docs.mesa3d.org/index.html)
* [Mesa Source Code](https://gitlab.freedesktop.org/mesa/mesa) * [Mesa Source Code](https://gitlab.freedesktop.org/mesa/mesa)

View file

@ -40,7 +40,7 @@ print(p.format(deg_char='°', min_char='\'', sec_char=''))
3. Then, simply click an address in KAddressBook, and it'll open up in KDE Marble! 3. Then, simply click an address in KAddressBook, and it'll open up in KDE Marble!
### More Details # More Details
This is actually quite interesting, as I would think KAddressBook would have this functionality out of the box, however it is more work than you might think it is. First, KAddressBook stores the address of your contacts literally, like a string - it stores the Address, Region, and Location separately (this is the `%s`, `%l`, `%r` variables as shown above). However, KDE Marble only accepts longitude and latitude as command line arguments. This is actually quite interesting, as I would think KAddressBook would have this functionality out of the box, however it is more work than you might think it is. First, KAddressBook stores the address of your contacts literally, like a string - it stores the Address, Region, and Location separately (this is the `%s`, `%l`, `%r` variables as shown above). However, KDE Marble only accepts longitude and latitude as command line arguments.

View file

@ -14,7 +14,7 @@ These two months contain some pretty big changes I made to Prism, following a sh
If you've never heard of Prism before, it's my ultimate graphics study project that is the culmination of everything I've learned in graphics development so far. It is built upon years of hard effort/learning and also extremely valuable help from multiple people in the graphics community. You can find the complete source code and even more information on it's [GitHub repository](https://www.github.com/redstrate/prism). If you've never heard of Prism before, it's my ultimate graphics study project that is the culmination of everything I've learned in graphics development so far. It is built upon years of hard effort/learning and also extremely valuable help from multiple people in the graphics community. You can find the complete source code and even more information on it's [GitHub repository](https://www.github.com/redstrate/prism).
### Vulkan is now moving to being a first-class backend # Vulkan is now moving to being a first-class backend
The Vulkan backend is moving very quickly to reach feature parity soon with the Metal version, but now it is The Vulkan backend is moving very quickly to reach feature parity soon with the Metal version, but now it is
fully usable for most tasks on Windows and Linux! The main roadblock right now is implementing the last of the fully usable for most tasks on Windows and Linux! The main roadblock right now is implementing the last of the
@ -23,7 +23,7 @@ functionality required for IBL and some other graphical features.
![Screenshot of the material editor](PrismEditor_BT44VWksFY.webp) ![Screenshot of the material editor](PrismEditor_BT44VWksFY.webp)
_This is the Material editor running on Vulkan, on Windows_ _This is the Material editor running on Vulkan, on Windows_
### SDL2 is the new default windowing system for Windows and Linux # SDL2 is the new default windowing system for Windows and Linux
Previously, I had handwritten Win32 code and XCB/XLib code for the Windows and Linux backends respectively. However, I had run into a few issues: Previously, I had handwritten Win32 code and XCB/XLib code for the Windows and Linux backends respectively. However, I had run into a few issues:
@ -35,13 +35,13 @@ Thus, this is where using SDL2 became the perfect solution - I could have the _s
Right now SDL is used for Windows and Linux, and I have no plans on supporting it on macOS at the moment (even though it theoretically could). That's just because the macOS backend is the most feature complete, and the SDL2 backend is notably missing automatic theme detection as shown in the Windows screenshot featured above. Right now SDL is used for Windows and Linux, and I have no plans on supporting it on macOS at the moment (even though it theoretically could). That's just because the macOS backend is the most feature complete, and the SDL2 backend is notably missing automatic theme detection as shown in the Windows screenshot featured above.
### Windows now has multiviewports! # Windows now has multiviewports!
{{< video "weewoo.webm" >}} {{< video "weewoo.webm" >}}
This is a pretty and clear nice benefit from using the SDL backend, because now it gets multiviewport support for free! If you've never seen this [dear imgui feature before](https://github.com/ocornut/imgui/wiki/Multi-Viewports), it's really cool to see it in action. It allows regular imgui windows to be dragged outside the main window, and enables some really cool workflows and use-cases you would normally see in other GUI toolkits like Qt and GTK. This is a pretty and clear nice benefit from using the SDL backend, because now it gets multiviewport support for free! If you've never seen this [dear imgui feature before](https://github.com/ocornut/imgui/wiki/Multi-Viewports), it's really cool to see it in action. It allows regular imgui windows to be dragged outside the main window, and enables some really cool workflows and use-cases you would normally see in other GUI toolkits like Qt and GTK.
### The new render target system # The new render target system
Before if you wanted to render to another window, static image, viewport you were required to create a whole new renderer instance. This was bad design for a multitude of reasons - duplicated work, resources and lack of proper cohesion or synchronization. This was because a single renderer instance only supported rendering to one target. Now everything is reworked and I can use just one renderer instance for the whole engine, even down to the tooling! Before if you wanted to render to another window, static image, viewport you were required to create a whole new renderer instance. This was bad design for a multitude of reasons - duplicated work, resources and lack of proper cohesion or synchronization. This was because a single renderer instance only supported rendering to one target. Now everything is reworked and I can use just one renderer instance for the whole engine, even down to the tooling!
@ -61,7 +61,7 @@ resizing, destruction, etc. When you want to render, simply pass it to the `rend
renderer->render(commandbuffer, scene, render_target, -1); renderer->render(commandbuffer, scene, render_target, -1);
``` ```
### Shader live editing # Shader live editing
As part of my ongoing shader editing effort, I have finally implemented a form of shader editing you can perform in-engine: As part of my ongoing shader editing effort, I have finally implemented a form of shader editing you can perform in-engine:
@ -77,7 +77,7 @@ associate_shader_reload("sky.vert", [this] {
Not only that, but it's built on top of preexisting GFX and Shader Compiler APIs, meaning that as long as your backend supports both it will happen transparently! This is fully supported by the Vulkan and Metal backends. Not only that, but it's built on top of preexisting GFX and Shader Compiler APIs, meaning that as long as your backend supports both it will happen transparently! This is fully supported by the Vulkan and Metal backends.
### New class and variable naming style # New class and variable naming style
I have finally decided on a new, standard naming style for everything in Prism. It is pretty much the same style that the C++ STL uses, and I thought it would be the best going forward: I have finally decided on a new, standard naming style for everything in Prism. It is pretty much the same style that the C++ STL uses, and I thought it would be the best going forward:
@ -87,7 +87,7 @@ auto imgui = std::make_unique<prism::imgui_backend>();
Now everything is `snake_case`, following the function naming I'm already using. Private member variables are now changed to remove any underscores. I also used this chance to _finally_ move every class that I own into the `prism` namespace to reduce naming conflicts, which happen more often than you think (believe it or not, a lot of operating systems have a `Rectangle` structure!) It is still an ongoing process, but a lot of the major classes are already refactored. Now everything is `snake_case`, following the function naming I'm already using. Private member variables are now changed to remove any underscores. I also used this chance to _finally_ move every class that I own into the `prism` namespace to reduce naming conflicts, which happen more often than you think (believe it or not, a lot of operating systems have a `Rectangle` structure!) It is still an ongoing process, but a lot of the major classes are already refactored.
### What's Next? # What's Next?
In the short term I want to keep working on polishing the Vulkan stuff, so I can eventually start working on some cooler things like VR support. I also plan to keep working on the example app more, so it can serve as a better showcase. In the short term I want to keep working on polishing the Vulkan stuff, so I can eventually start working on some cooler things like VR support. I also plan to keep working on the example app more, so it can serve as a better showcase.

View file

@ -14,7 +14,7 @@ It's uh, been a while since the last Prism changelog :-) Haha, well there's as a
<!--more--> <!--more-->
### To WebGPU and no WebGPU # To WebGPU and no WebGPU
If you've been paying attention to [my](https://git.sr.ht/~redstrate/prism/commit/a0d92be759450f09343bb04f4da913ccef505bbd) [recent](https://git.sr.ht/~redstrate/prism/commit/3229c4fa2cbb294e6af18649ce826831cd85eada) [commits](https://git.sr.ht/~redstrate/prism/commit/0a95ee2fa8fbf23ba8b3a17c78d6d3dc35ecfcd9), you'll see that I have done a ton of work to support WebGPU, but now I'm probably going to be reverting those changes - for a [myriad of reasons](https://knockout.chat/thread/21724/37#post-1210400). If you've been paying attention to [my](https://git.sr.ht/~redstrate/prism/commit/a0d92be759450f09343bb04f4da913ccef505bbd) [recent](https://git.sr.ht/~redstrate/prism/commit/3229c4fa2cbb294e6af18649ce826831cd85eada) [commits](https://git.sr.ht/~redstrate/prism/commit/0a95ee2fa8fbf23ba8b3a17c78d6d3dc35ecfcd9), you'll see that I have done a ton of work to support WebGPU, but now I'm probably going to be reverting those changes - for a [myriad of reasons](https://knockout.chat/thread/21724/37#post-1210400).
@ -22,20 +22,22 @@ First, I'm not a huge fan of the opinionated sense of the WebGPU design at all.
It wasn't until I realized that I'm pulling apart my engine for no good reason just to support WebGPU that I realized it's not worth it. Maybe if I had designed the engine from the start to support it, things would've turned out differently, but unfortunately I'm not convinced this is a part of Prism's future. For now, I'm going to refocus my efforts on the usual desktop-class graphics APIs. It wasn't until I realized that I'm pulling apart my engine for no good reason just to support WebGPU that I realized it's not worth it. Maybe if I had designed the engine from the start to support it, things would've turned out differently, but unfortunately I'm not convinced this is a part of Prism's future. For now, I'm going to refocus my efforts on the usual desktop-class graphics APIs.
### DirectX12 support has begun # DirectX12 support has begun
I recently was able to get a [nice Windows setup going](https://knockout.chat/thread/25747/28#post-1207745), so now DX12 support is going to finally begin. This is one of the last APIs I plan to support officially, so this is exciting. Now I don't have any real excuse to not support this API. I recently was able to get a [nice Windows setup going](https://knockout.chat/thread/25747/28#post-1207745), so now DX12 support is going to finally begin. This is one of the last APIs I plan to support officially, so this is exciting. Now I don't have any real excuse to not support this API.
![Picture of my Linux/Windows desktop](IMG_0246.webp) ![Picture of my Linux/Windows desktop](IMG_0246.webp)
### Moving away from Objective-C # Moving away from Objective-C
In an effort to reduce my usage of Objective-c in the Metal backend, the whole backend is now C++ and uses metal-cpp which is Apple's official C++ wrapper. It works pretty great, and now my static analysis tools work great with it too. In an effort to reduce my usage of Objective-c in the Metal backend, the whole backend is now C++ and uses metal-cpp which is Apple's official C++ wrapper. It works pretty great, and now my static analysis tools work great with it too.
### Move to sourcehut # Move to sourcehut
Prism now is primarily hosted on sourcehut, with mirrors on GitHub and ryne.moe. This is a pretty important goal for reducing my need on centralized services, and I'll be putting in some work to move off of GitHub wiki as well - just like I did with astra. Prism now is primarily hosted on sourcehut, with mirrors on GitHub and ryne.moe. This is a pretty important goal for reducing my need on centralized services, and I'll be putting in some work to move off of GitHub wiki as well - just like I did with astra.
### Multiple GFX support # Multiple GFX support
There is now support for using more than one GFX backend (although not at the same time), and is now supported by the SDL backend and the offline shader compiler will automatically pick out which shader files to compile for you. This is important, as some platforms are now capable of using more than one. Right now, the priority is as follows: There is now support for using more than one GFX backend (although not at the same time), and is now supported by the SDL backend and the offline shader compiler will automatically pick out which shader files to compile for you. This is important, as some platforms are now capable of using more than one. Right now, the priority is as follows:
``` ```
@ -44,21 +46,25 @@ DirectX12 -> Metal -> Vulkan -> Dummy
Of course, this is only if the platform supports those APIs, and it's significantly shorter in the real world. And of course, you can override these at runtime with flags like `-vulkan` or `-metal`. Of course, this is only if the platform supports those APIs, and it's significantly shorter in the real world. And of course, you can override these at runtime with flags like `-vulkan` or `-metal`.
### Vulkan is now a first-class GFX backend # Vulkan is now a first-class GFX backend
You've seen that Vulkan has been a focus in the last changelog, but now since then it's now has first-class support for all the available graphics functions. There's also a slew of renderer changes that exclusively focus around fixing some broken PCSS among other things, in preparation of making a nicer example app. You've seen that Vulkan has been a focus in the last changelog, but now since then it's now has first-class support for all the available graphics functions. There's also a slew of renderer changes that exclusively focus around fixing some broken PCSS among other things, in preparation of making a nicer example app.
Also part of this slew of changes is MoltenVK being fully supported by the Vulkan backend. More is detailed [in the related blog post]({{< ref "death-of-gfx" >}}), but we enable the portability subset if detected. Also part of this slew of changes is MoltenVK being fully supported by the Vulkan backend. More is detailed [in the related blog post]({{< ref "death-of-gfx" >}}), but we enable the portability subset if detected.
### Example application available # Example application available
There's now a real, working example application available There's now a real, working example application available
right in the source code repository. This has technically been around since the last changelog, but now it's way more involved and focused around recreating some nice screenshots in the README. right in the source code repository. This has technically been around since the last changelog, but now it's way more involved and focused around recreating some nice screenshots in the README.
{{< video "JezVKVk.webm" >}} {{< video "JezVKVk.webm" >}}
### Material system is being reworked # Material system is being reworked
I ripped out the old material system, and now it's going to be replaced with something way, way simpler. It was insanely complex, and had really no reason to exist. It was also the cause of a bunch of bugs. I ripped out the old material system, and now it's going to be replaced with something way, way simpler. It was insanely complex, and had really no reason to exist. It was also the cause of a bunch of bugs.
### Model compiler improvements # Model compiler improvements
The model compiler saw a bunch of improvements recently, as part of it was caused by me actually using it to import models into the example app. Materials are now imported automatically for you, in the future textures will be copied as well but this makes it much easier to actually use this to import more complex scenes. The model compiler saw a bunch of improvements recently, as part of it was caused by me actually using it to import models into the example app. Materials are now imported automatically for you, in the future textures will be copied as well but this makes it much easier to actually use this to import more complex scenes.
Sorry about the really low-level and framework related changes this time around - there's basically no changes in the rendering or core libraries. In the next few months I want to actually use Prism to build something interested, so stay tuned! Sorry about the really low-level and framework related changes this time around - there's basically no changes in the rendering or core libraries. In the next few months I want to actually use Prism to build something interested, so stay tuned!

View file

@ -14,7 +14,7 @@ Seeing the "collapse" of Twitter (although that's overstated) means a lot more p
<!--more--> <!--more-->
The focus isn't what's going wrong with Twitter right now, but trying to clear up some common misconceptions about Mastodon and the Fediverse in general, following questions I've seen in the relevant Knockout thread. The focus isn't what's going wrong with Twitter right now, but trying to clear up some common misconceptions about Mastodon and the Fediverse in general, following questions I've seen in the relevant Knockout thread.
### Mastodon is siloed, and general server moderation thoughts # Mastodon is siloed, and general server moderation thoughts
A lot of people are naturally worried about the state of server ownership in the Fediverse world, and "siloing". To put it simply, people A lot of people are naturally worried about the state of server ownership in the Fediverse world, and "siloing". To put it simply, people
don't trust server owners and they are generally worried about how some servers are blocked. A lot of people tend to go for the "email" approach to don't trust server owners and they are generally worried about how some servers are blocked. A lot of people tend to go for the "email" approach to
@ -29,7 +29,7 @@ people don't really know what to expect when you say "Fediverse servers work lik
This is **why I think Mastodon wins**: If you don't have access to Twitter, there is basically no other way to interoperate with it. If your Mastodon server This is **why I think Mastodon wins**: If you don't have access to Twitter, there is basically no other way to interoperate with it. If your Mastodon server
gets theoretically blocked, whatever - just import your following list (or if your server is still accessible, transfer your followers too - a native feature of Mastodon) and keep going on with your day. Bookmarks, block lists, and other similar data can be imported as shown above. In most cases though, servers are blocked for a good reason (white supremacists, nazis, loli and other content usually make up most block lists). Most of the time the good of the server system outweights the negatives, and again if you ever feel like you don't fit in with your server - you can always move and take most of your things with you! gets theoretically blocked, whatever - just import your following list (or if your server is still accessible, transfer your followers too - a native feature of Mastodon) and keep going on with your day. Bookmarks, block lists, and other similar data can be imported as shown above. In most cases though, servers are blocked for a good reason (white supremacists, nazis, loli and other content usually make up most block lists). Most of the time the good of the server system outweights the negatives, and again if you ever feel like you don't fit in with your server - you can always move and take most of your things with you!
### Should I run my own server? Is it worth it? # Should I run my own server? Is it worth it?
I summarized this point in some random thread on Knockout, but wanted to explain it better here. In most cases, which is strange - I recommend not doing so. Here's why: I summarized this point in some random thread on Knockout, but wanted to explain it better here. In most cases, which is strange - I recommend not doing so. Here's why:
@ -45,7 +45,7 @@ Also as a single user Mastodon instance, it's going to be really hard to get goi
Mastodon in general is designed (perhaps intentionally or not) for communities to form around multiple servers, and something like a single-user Mastodon instance is niche, and nigh unusable (in my opinion, as someone who has tried to run one before). In this way, it actually differs from hosting your own email. Mastodon in general is designed (perhaps intentionally or not) for communities to form around multiple servers, and something like a single-user Mastodon instance is niche, and nigh unusable (in my opinion, as someone who has tried to run one before). In this way, it actually differs from hosting your own email.
### Other nice things to know # Other nice things to know
Here's some smaller Mastodon features that I think are neat: Here's some smaller Mastodon features that I think are neat:

View file

@ -21,23 +21,23 @@ This is the crux of the issue - many of these websites fizzle out after a decade
However the problem is that artists _depend_ on them too much, and they especially build _their identity_ around them. How many artists are sticking to Twitter because thats where they get the most likes? What will happen if Twitter _does_ disappear by the end of the year[^3]? What I suggest to artists is simple: **build your own website.** However the problem is that artists _depend_ on them too much, and they especially build _their identity_ around them. How many artists are sticking to Twitter because thats where they get the most likes? What will happen if Twitter _does_ disappear by the end of the year[^3]? What I suggest to artists is simple: **build your own website.**
### Is it too expensive? # Is it too expensive?
**NO!** This is probably the biggest hurdle for most artists to understand, that hosting a website can either be very cheap or completely free. There are lots of drag-and-drop website builders[^4], but if you're more technically minded there are very cheap servers available from reputable providers to host something like [WordPress](https://wordpress.org) or even build a website in something like [Hugo](https://gohugo.io) (hi!) **NO!** This is probably the biggest hurdle for most artists to understand, that hosting a website can either be very cheap or completely free. There are lots of drag-and-drop website builders[^4], but if you're more technically minded there are very cheap servers available from reputable providers to host something like [WordPress](https://wordpress.org) or even build a website in something like [Hugo](https://gohugo.io) (hi!)
However one of the more expensive costs is a _domain name_[^5], which is a fancy TLD like `myart.com` instead of your hosting provider like `myart.wordpress.com`. I highly suggest buying a domain name if you have an alias, but this is optional - what's important is that you're hosting your content on your terms and a domain name is just one part of strengthening your identity. However one of the more expensive costs is a _domain name_[^5], which is a fancy TLD like `myart.com` instead of your hosting provider like `myart.wordpress.com`. I highly suggest buying a domain name if you have an alias, but this is optional - what's important is that you're hosting your content on your terms and a domain name is just one part of strengthening your identity.
### Is it hard? # Is it hard?
**NO!** Depending on how complex you want to be, it can be tough but for most people their site builder ([Wix](https://www.wix.com), [WordPress.com](https://wordpress.com), etc) will allow them to easily create galleries, link their social media and so on. Even a blank white website with a list of your social media will work. **NO!** Depending on how complex you want to be, it can be tough but for most people their site builder ([Wix](https://www.wix.com), [WordPress.com](https://wordpress.com), etc) will allow them to easily create galleries, link their social media and so on. Even a blank white website with a list of your social media will work.
In my opinion, if you're capable of drawing, making music, pottery or another profession in the first place, then you're perfectly capable of displaying the same passion on a website - it's another skill! In my opinion, if you're capable of drawing, making music, pottery or another profession in the first place, then you're perfectly capable of displaying the same passion on a website - it's another skill!
### What's difference between X (Tumblr, Twitter, Newgrounds)? # What's difference between X (Tumblr, Twitter, Newgrounds)?
When you choose to host your own website, **you** choose to present your content on your own terms[^6]. There are no _"Site Admins"_, there are no _"Shareholders"_ seeking to remove yet another customization choice from your profile. If Twitter shuts down tomorrow, Pixiv decides to crack down on R-18, or some other major event - you know what you can do? Sit back and enjoy that you're part of the independent web. You don't need to abandon Twitter, but realize that you should get a backup plan. When you choose to host your own website, **you** choose to present your content on your own terms[^6]. There are no _"Site Admins"_, there are no _"Shareholders"_ seeking to remove yet another customization choice from your profile. If Twitter shuts down tomorrow, Pixiv decides to crack down on R-18, or some other major event - you know what you can do? Sit back and enjoy that you're part of the independent web. You don't need to abandon Twitter, but realize that you should get a backup plan.
### Backups # Backups
Here's just a small thing partially related to the topic of this article, **please keep backups**! I have (most) of my art backed up since 2016, and every time I access my archive I'm thanking myself over and over. Even if it's some bad sketch or music demo, I highly suggest keeping the source file and/or a rendered copy of it. Make sure to keep a copy on your website but also off-line as well, in case your hosting provider goes off-line or you lose access in some way. Here's just a small thing partially related to the topic of this article, **please keep backups**! I have (most) of my art backed up since 2016, and every time I access my archive I'm thanking myself over and over. Even if it's some bad sketch or music demo, I highly suggest keeping the source file and/or a rendered copy of it. Make sure to keep a copy on your website but also off-line as well, in case your hosting provider goes off-line or you lose access in some way.

View file

@ -6,32 +6,32 @@ I'm open for art commission work!
![Commission sheet containg prices, information and rules](comshet.webp) ![Commission sheet containg prices, information and rules](comshet.webp)
## Contact # Contact
For commission work, please use my [Ko-Fi](https://ko-fi.com/redstrate/commissions), [Pixiv](https://www.pixiv.net/en/users/58118005/request) or [PayPal](https://paypal.me/redstrate) me directly. For commission work, please use my [Ko-Fi](https://ko-fi.com/redstrate/commissions), [Pixiv](https://www.pixiv.net/en/users/58118005/request) or [PayPal](https://paypal.me/redstrate) me directly.
## Rules # Rules
* Payments must go through PayPal, Pixiv or Ko-Fi. No exceptions, no trades. * Payments must go through PayPal, Pixiv or Ko-Fi. No exceptions, no trades.
* NSFW (R-18) requests are allowed at my discretion. * NSFW (R-18) requests are allowed at my discretion.
* Prices are non-negotiable, but I give an estimate and I'll cover major discrepancies. * Prices are non-negotiable, but I give an estimate and I'll cover major discrepancies.
* You can request any number of characters of any complexity, and any background but expect price to change accordingly. * You can request any number of characters of any complexity, and any background but expect price to change accordingly.
## Sketch # Sketch
Sketchy drawing and optional colors. Colors may add additional hours depending on complexity. Sketchy drawing and optional colors. Colors may add additional hours depending on complexity.
Expected Price: $22-44 Expected Price: $22-44
* Price can vary due to request, this is just an estimate. * Price can vary due to request, this is just an estimate.
## Simple # Simple
Nice clean linework, colors and optional simple shading. Shading may increase work hours depending on request. Nice clean linework, colors and optional simple shading. Shading may increase work hours depending on request.
Expected Price: $110-132 Expected Price: $110-132
* Price can vary due to request, this is just an estimate. * Price can vary due to request, this is just an estimate.
## Full Package # Full Package
Nice linework, colors and shading, background included! Nice linework, colors and shading, background included!

View file

@ -8,13 +8,13 @@ I host downloads for things that I either want to archive, or worried we might l
{{< toc >}} {{< toc >}}
## Source Map Archive # Source Map Archive
https://archive.ryne.moe/source https://archive.ryne.moe/source
I host a mirror of the [Source Map Archive](https://knockout.chat/thread/32805), provided by some users on Knockout! I host a mirror of the [Source Map Archive](https://knockout.chat/thread/32805), provided by some users on Knockout!
## TF2 2012 Main Menu # TF2 2012 Main Menu
This is a redistribution of CblpBoPTy's TF2 mod series unofficially called "PotatoHud". This is a redistribution of CblpBoPTy's TF2 mod series unofficially called "PotatoHud".
@ -26,7 +26,7 @@ _"hi, i closed the projects and don't do modding anymore. I lost the necessary k
Unfortunately I like their HUDs too much for it to go to waste, so fortunately there was _one_ version they forgot to private and I have it permanently archived [here](https://git.sr.ht/~redstrate/tf2-2012-menu). Right now, their mod is licensed under _"Creative Commons Attribution-NonCommercial-NoDerivs 4.0 Unported"_ so while I can technically redistribute this version, I cannot modify it. However the mod still works on recent game versions as of Scream Fortress 2022. Unfortunately I like their HUDs too much for it to go to waste, so fortunately there was _one_ version they forgot to private and I have it permanently archived [here](https://git.sr.ht/~redstrate/tf2-2012-menu). Right now, their mod is licensed under _"Creative Commons Attribution-NonCommercial-NoDerivs 4.0 Unported"_ so while I can technically redistribute this version, I cannot modify it. However the mod still works on recent game versions as of Scream Fortress 2022.
## XC2 Graphics Settings Mod # XC2 Graphics Settings Mod
This is a romfs mod that tweaks the graphics settings of Xenoblade Chronicles 2. By default the game looks over-sharpened and downscales the image a lot. This is especially problematic for emulators since you typically want a better image quality than the Switch. This is a romfs mod that tweaks the graphics settings of Xenoblade Chronicles 2. By default the game looks over-sharpened and downscales the image a lot. This is especially problematic for emulators since you typically want a better image quality than the Switch.

View file

@ -7,11 +7,11 @@ free time, but donations help me do the stuff I want and possibly the things you
If you wish to receive something material in return for your money, I'm [open for art commissions!](/commission) If you wish to receive something material in return for your money, I'm [open for art commissions!](/commission)
## Ko-Fi # Ko-Fi
[Ko-Fi is preferred](https://ko-fi.com/redstrat) because it's easy, and they take no processing fees. You can even set a little comment to go [Ko-Fi is preferred](https://ko-fi.com/redstrat) because it's easy, and they take no processing fees. You can even set a little comment to go
along with your donation! along with your donation!
## PayPal # PayPal
You can use [PayPal directly](https://paypal.me/redstrate) too if you want to! You can use [PayPal directly](https://paypal.me/redstrate) too if you want to!

View file

@ -3,7 +3,7 @@ title: "Imprint"
--- ---
### This Website and Related Services # This Website and Related Services
Connections to my server may be logged for abuse, but I do not care to track you. Connections to my server may be logged for abuse, but I do not care to track you.
@ -16,12 +16,12 @@ Links to external websites are clearly marked with an external link icon, althou
I do not use any analytics services. I do not use any analytics services.
### Silica Viewer # Silica Viewer
Silica Viewer _does not_ collect any information about your device, and doesn't contact any server. The app has no networking functionality and runs inside the secure macOS sandbox. The only analytics collected are those which Apple collects and I Silica Viewer _does not_ collect any information about your device, and doesn't contact any server. The app has no networking functionality and runs inside the secure macOS sandbox. The only analytics collected are those which Apple collects and I
cannot turn off, such as when you report a crash. cannot turn off, such as when you report a crash.
## Licensing # Licensing
All work showcased on this site (including images, source code, etc.) are hereby licensed under All work showcased on this site (including images, source code, etc.) are hereby licensed under
[CC BY-NC-SA 3.0]({{<ref "/license">}}) _unless_ otherwise specified. [CC BY-NC-SA 3.0]({{<ref "/license">}}) _unless_ otherwise specified.

View file

@ -4,14 +4,14 @@ title: "Layout Archive"
Here is a collection of previous website layouts! Here is a collection of previous website layouts!
## June 2022 # June 2022
![June 2022](june2022.webp) ![June 2022](june2022.webp)
## August 2021 # August 2021
![August 2021](aug2021.webp) ![August 2021](aug2021.webp)
## January 2021 # January 2021
![January 2021](jan2021.webp) ![January 2021](jan2021.webp)

View file

@ -12,7 +12,7 @@ host the image on your own server if you can!
![Banner 2](/banner2.webp) ![Banner 2](/banner2.webp)
## Outgoing # Outgoing
If you wish to be added and I missed you, or I made a horrific mistake, please [contact me](/contact). Websites without banners to be added later. If you wish to be added and I missed you, or I made a horrific mistake, please [contact me](/contact). Websites without banners to be added later.

View file

@ -0,0 +1 @@
<h{{ add .Level 2 }} id="{{ .Anchor | safeURL }}">{{ .Text | safeHTML }} <a href="#{{ .Anchor | safeURL }}">#</a></h{{ .Level }}>