Compare commits

..

20 commits

Author SHA1 Message Date
5b576ab199 fix: Typo
Some checks failed
/ build (push) Successful in 23s
/ reuse-compliance (push) Failing after 28s
2025-11-29 12:25:47 +01:00
6c763b8eb3 Merge pull request 'Add new article about my username' (#11) from name-article into master
Some checks failed
/ build (push) Successful in 23s
/ reuse-compliance (push) Failing after 37s
Reviewed-on: #11
2025-11-29 12:17:04 +01:00
27a71f035d Add new article about my username
Some checks failed
/ build (push) Successful in 26s
/ reuse-compliance (push) Failing after 28s
/ build (pull_request) Successful in 26s
/ reuse-compliance (pull_request) Failing after 39s
2025-11-26 16:25:16 +01:00
9a0457a79b Update sass/_base.scss
Some checks failed
/ build (push) Successful in 41s
/ reuse-compliance (push) Failing after 58s
Fix pixelart rendering on chrome
2025-11-26 08:59:13 +01:00
c66c9a0b00 Update config.toml
Some checks failed
/ build (push) Successful in 36s
/ reuse-compliance (push) Failing after 50s
2025-11-08 22:26:17 +01:00
3a6f09c978 Merge pull request '24px prideflags' (#10) from 24px-prideflag into master
Some checks failed
/ build (push) Successful in 30s
/ reuse-compliance (push) Failing after 37s
Reviewed-on: #10
2025-10-26 17:22:47 +01:00
1a47e69aca 24px prideflags
Some checks failed
/ build (push) Successful in 32s
/ reuse-compliance (push) Failing after 47s
/ build (pull_request) Successful in 34s
/ reuse-compliance (pull_request) Failing after 33s
2025-10-26 17:21:14 +01:00
ac09c212d5 Merge pull request 'Make images smaller' (#9) from pixel-pride into master
All checks were successful
/ build (push) Successful in 55s
/ reuse-compliance (push) Successful in 10s
Reviewed-on: #9
2025-09-17 22:21:01 +02:00
5d68b9af0e
Make images smaller
All checks were successful
/ build (push) Successful in 33s
/ reuse-compliance (push) Successful in 9s
/ build (pull_request) Successful in 31s
/ reuse-compliance (pull_request) Successful in 10s
2025-09-17 22:19:02 +02:00
00cfa6c4f5 Merge pull request 'OpenGraph compatibility' (#8) from pixel-pride into master
All checks were successful
/ build (push) Successful in 34s
/ reuse-compliance (push) Successful in 11s
Reviewed-on: #8
2025-09-17 22:05:54 +02:00
77bec1d487
OpenGraph compatibility
All checks were successful
/ build (push) Successful in 38s
/ reuse-compliance (push) Successful in 10s
/ build (pull_request) Successful in 35s
/ reuse-compliance (pull_request) Successful in 10s
2025-09-17 22:03:39 +02:00
726301cde4 Merge pull request 'pixel-pride' (#7) from pixel-pride into master
All checks were successful
/ build (push) Successful in 59s
/ reuse-compliance (push) Successful in 10s
Reviewed-on: #7
2025-09-15 21:04:37 +02:00
3b25dec341 Update content/project/pixel-pride/index.md
All checks were successful
/ build (push) Successful in 7m5s
/ reuse-compliance (push) Successful in 10s
/ build (pull_request) Successful in 32s
/ reuse-compliance (pull_request) Successful in 9s
2025-09-15 21:04:03 +02:00
6c3f3dc098
First draft
All checks were successful
/ build (push) Successful in 45s
/ reuse-compliance (push) Successful in 53s
2025-09-14 18:26:50 +02:00
b002863bdd Merge pull request 'new pfp' (#6) from new-pfp into master
All checks were successful
/ build (push) Successful in 25s
/ reuse-compliance (push) Successful in 13s
Reviewed-on: #6
2025-08-24 21:00:07 +02:00
ac9a1758d6
new pfp
All checks were successful
/ build (push) Successful in 33s
/ reuse-compliance (push) Successful in 37s
/ build (pull_request) Successful in 26s
/ reuse-compliance (pull_request) Successful in 10s
2025-06-14 18:14:33 +02:00
c79918f357 Merge pull request 'improve fediverse integration' (#5) from new-mastodon into master
All checks were successful
/ build (push) Successful in 24s
/ reuse-compliance (push) Successful in 11s
Reviewed-on: #5
2025-06-14 17:53:38 +02:00
e1d046ad6d
improve fediverse integration
All checks were successful
/ build (push) Successful in 25s
/ reuse-compliance (push) Successful in 10s
/ build (pull_request) Successful in 25s
/ reuse-compliance (pull_request) Successful in 9s
2025-06-14 17:47:27 +02:00
e241637069 Merge pull request 'reword index page' (#4) from frontpage-rewording into master
All checks were successful
/ build (push) Successful in 25s
/ reuse-compliance (push) Successful in 13s
Reviewed-on: #4
2025-06-14 14:51:45 +02:00
bb0fff2712
reword index page
All checks were successful
/ build (push) Successful in 31s
/ reuse-compliance (push) Successful in 35s
/ build (pull_request) Successful in 24s
/ reuse-compliance (pull_request) Successful in 9s
2025-06-14 14:49:16 +02:00
36 changed files with 166 additions and 37 deletions

4
.gitattributes vendored
View file

@ -1,5 +1,7 @@
# SPDX-FileCopyrightText: 2025 Ncam Gnrvngu <info@ncamgnrvngu.eu>
#
# SPDX-License-Identifier: AGPL-3.0-or-later
*.mp3 filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.ase filter=lfs diff=lfs merge=lfs -text
*.tiff filter=lfs diff=lfs merge=lfs -text

View file

@ -26,5 +26,7 @@ highlight_theme = "Catpuccin Mocha"
[extra]
# Put all your custom variables here
mastodon_url = "https://mstdn.social/@Ncamgnrvngu"
matrix_user = "@ncamgnrvngu:matrix.org"
mastodon_url = "https://nerdculture.de/@NcamGnrvngu"
mastodon_user = "@NcamGnrvngu@nerdculture.de"
matrix_user = "@ncamgnrvngu:stratum0.org"
bookwyrm_url = "https://bookrastinating.com/user/NcamGnrvngu"

View file

@ -0,0 +1,31 @@
+++
title = "About my name"
date = "2025-11-26"
+++
As you probably know since you landed here I have a really weird name. Naturally this confuses a lot of beings so heres the looong explanation of what's up with my name.
# How it all began
In the summer of 2021 younger me made a new Discord account. As younger me always did with new accounts I wanted to give it a new unique name. But not just any boring name. It had to be something special. Something meaningful. Younger me had an idea: How about I take this very sophisticated makeshift encryption I thought of (It really was makeshift and it really isn't sophisticated) and encrypt something as my username. So younger me did that. I threw *something* through that encryption cypher and out popped this abomination: "Ncam Gnrvngu".
# The consequences
Being cyphertext it really looks like I hit my head a little too hard on the keyboard. While it might have looked cool in the begining this username does have some downsides that I discovered since I started using it more and more:
1. Nobody can pronounce it (Including me lol)
1. It regularly confuses other beings
1. Nobody can remember it
Even though this username is confusing and complicated it's still very near and dear to my heart. It's something I've lived with for a relatively long time and its cleartext is also still relevant to me (and weirdly getting more relevant).
# The solutions
So as I don't want to get rid of this name anytime soon, I (and others) had to come up with some solutions
### Nobody can pronounce it
This is one of the most common questions I get about this name: *How the heck do I pronounce that?* I genuinely had no real answer to this for a long time. But then I registered an account on [schenklradio.de](https://schenklradio.de), a web radio station with lots of community involvment, mostly consisting of community members voting on what songs should be played next. That presented a relatively hard problem for the hosts on Schenklradio: When a song gets played, the hosts usually read out the names of the users that whished fo it. That of course gets quite complicated with a username like mine. However being a really kind and welcoming community, I was presented with a very creative solution: If you ignore the first part of my name, throw in ungodly amounts of imagination and gently stir you could see "Guru" in there. Which is great. It's short. Everybody knows how to pronounce it. Sure its kind of complicated to get from "Ncam Gnrvngu" to "Guru" but hey: It does its job.
**Disclaimer:** "Guru" is not supposed to mean that I claim to be a guru at anything. It simply is the best solution I have found for pronouncing my name.
### It regularly confuses other beings
You're reading the solution to this problem right now! Having a blog gives me the opportunity to create this article as a reference that I can point people to in case of confusion. A comprehensive ressource covering everything from how I got here to how to use it. Being a webpage I also have the option to update this article to improve it: So if this thing needs aditional context, clarification or leaves a question unanswered: Do hit me up so I can improve it!
### Nobody can remember it
This honestly is the hardest problem to solve. I don't think theres a real solution for it. I can however make life less cumbersome for everyone by making, again, this webpage. It provides a central hub from which I can link to all socials and whatnot so you just have to click a link and don't have to type in everything. Of course you also have to get here. To make that easier I will try to link to this page from as many places as possible so you can just click on it and voila: You're here.
# So what does it mean?
Having already written down a lot of things I still haven't answered the most important question: *But what does it mean??* Now of course I could just write it down here and call it a day. But where's the fun in that? The encryption really isn't hard to break so I present you with an offer: If you manage to decrypt whatever the heck young me encrypted in my name, I will tell you what it means. So if you manage to decrypt it, text me on Matrix, Fedi or Signal! I just have one demand: Please don't spoil the fun for other beings and tell them what it means.

View file

@ -1,31 +0,0 @@
+++
title = "Rant: Links in Emails"
date = "2025-06-02"
+++
# Phishing
A phishing attack requires two steps.
1. Bring users onto a fake website
2. Ask for their credentials
This means there are two ways of stopping phishing for your service. You can either implement secure, phishing resistent 2FA like FIDO-2 or Passkeys or you can prevent useres from getting onto fake websites.
There are of course a lot of ways how an individual can be phished. The more obvious ones are for example typosquatting, where malicious actors register common typos of popular domain names. A phisher would for example register aamazon.com and hope someone mistypes amazon.com.
This is of course a very inefficient way of aquiring targets and can be easily prevented by just registering these typos yourself. gooogle.com for example redirects to google.com.
There is however another highly efficient way of getting people onto your phishing website: E-Mails. Just send the user a fake security alert with a nice little "More info" button et voila: You have a victim.
# Why this works
This method, of course, only works because the users are used to the pattern of links in E-Mails. For years companys have been sending email confirmations, 2FA mails and security alerts with a link that contains a long token and that users can just conveniently click on.
From a security standpoint this is great. Links allow you to use really long tokens because there is no need to type them into your website. Users can just click and go. Links can however be faked. The link text has no relationship with the actual URL it points to.
"But E-Mail clients show the URL when you hover over a link". Yes they do. Do you always check the link?. And is live.com an official Microsoft domain? Yes you should always check the links you click on. This can however be difficult, especially in the stress situations that spam mails seek to create.
So how could this be prevented.
# How can we fix it
There are of course multiple solutions to this problem. You could just stop sending E-Mails in favour of more secure communication channels or 2FA methods. This solution would be nice in a utopia where everything is secure and everyone cares about security, but is not possible in our current world.
We can however fix this with another pattern that is commonly used for 2FA: Codes in E-Mails. Security codes require the user to navigate to the website the're for manually. Sure you could send someone a fake code via E-Mail. But if they enter that code on the official website you gain nothing.
This pattern is nowadays mostly used for 2FA. That does not have to be so. Instead of sending a link with a token in your security warning you could then just ask the user to log in and ask for a code that is then sent to their inbox.
Of course these codes are shorter and therefore eaier to bruteforce than long tokens in links. This can however be circumvented by expiring the token after a couple of minutes. As a bonus the expiration also minimises the amount of time that a sensitive token is stored on an unencrypted E-Mail server.
Paired with a warning that "<insert company name here> will never send you links in E-Mails" this could irradicate most phishing scams.
I think thats enough gramatically questionable screaming into the void for now. I hope you enjoyed my first little blog post. Let me know on Mastodon what you think of it.

BIN
content/project/pixel-pride/Pride-12-non-nb.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
content/project/pixel-pride/Pride-12.ase (Stored with Git LFS) Normal file

Binary file not shown.

BIN
content/project/pixel-pride/Pride-12.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
content/project/pixel-pride/Pride-24-non-nb.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
content/project/pixel-pride/Pride-24.ase (Stored with Git LFS) Normal file

Binary file not shown.

BIN
content/project/pixel-pride/Pride-24.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
content/project/pixel-pride/Pride-30-a8.tiff (Stored with Git LFS) Normal file

Binary file not shown.

BIN
content/project/pixel-pride/Pride-30-extended.ase (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
content/project/pixel-pride/Pride-30-non-nb.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
content/project/pixel-pride/Pride-30.ase (Stored with Git LFS) Normal file

Binary file not shown.

BIN
content/project/pixel-pride/Pride-30.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
content/project/pixel-pride/Pride-42-non-nb.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
content/project/pixel-pride/Pride-42.ase (Stored with Git LFS) Normal file

Binary file not shown.

BIN
content/project/pixel-pride/Pride-42.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -0,0 +1,50 @@
+++
title = "Pixel Art Prideflags"
date = "2025-09-15"
updated = "2025-10-26"
[extra]
image = "sticker-box.webp"
+++
As you can maybe guess from my magnificent profile picture I really like pride flags. I also really like pixel art. So why not throw these two together, gently stir and create some beautiful images in different resolutions (12, 24 (*new!*), 30 and 42 pixels high) for you and me to use and enjoy.
So I did that.
Here are the original .ase files I created using [Libresprite](https://libresprite.github.io) (Which is awesome btw; Go check it out!). The files are organized in 4 layers: A basic rainbow flag, the progress "arrow", the intersex circle and a try to include the non-binary flag in the intersex arrow (credits to [Gender Transition For Dummies](https://www.dummies.com/book/body-mind-spirit/relationships-family/sex-gender/gender-transition-for-dummies-302707/) for the idea!).
Click on the images to download them.
<a href="Pride-12.ase" download>
<img src="Pride-12.png" class="pixelart"/>
</a>
<a href="Pride-24.ase" download>
<img src="Pride-24.png" class="pixelart"/>
</a>
<a href="Pride-30.ase" download>
<img src="Pride-30.png" class="pixelart"/>
</a>
<a href="Pride-42.ase" download>
<img src="Pride-42.png" class="pixelart"/>
</a>
You can also download these images as a png:
<a href="Pride-12.png" download>12px (with non-binary)</a>
<a href="Pride-12-non-nb.png" download>12px (without non-binary)</a>
<a href="Pride-24.png" download>24px (with non-binary)</a>
<a href="Pride-24-non-nb.png" download>24px (without non-binary)</a>
<a href="Pride-30.png" download>30px (with non-binary)</a>
<a href="Pride-30-non-nb.png" download>30px (without non-binary)</a>
<a href="Pride-42.png" download>42px (with non-binary)</a>
<a href="Pride-42-non-nb.png" download>42px (without non-binary)</a>
If the CC BY-NC-SA license on these images would prohibit your use of them, do hit me up so we can find a solution for your specific use.
On a related note: I also really like stickers. So I made some!
<img src="sticker-box.webp"/>
I will bring these to the next chaos events I'm attending so feel free to ask me for some! You can download the file I used to order these stickers (CMYK colors; DIN A8 600dpi; includes 3mm margin on all sides) <a href="Pride-30-a8.tiff">here</a>

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

View file

@ -129,3 +129,7 @@ code {
#license a {
margin: 0;
}
.pixelart {
image-rendering: pixelated
}

View file

@ -14,3 +14,9 @@
font-size: 40pt;
margin-bottom: 10px;
}
img {
width: 600px;
max-width: 90%;
margin-bottom: 10px;
}

View file

@ -24,6 +24,7 @@
}
#greeter img {
image-rendering: crisp-edges;
width: 20%;
height: auto;
margin: auto;
@ -41,7 +42,7 @@
margin-bottom: 5px;
}
#greeter div h2 {
font-size: min(2.9cqw, 20pt);
font-size: min(2.7cqw, 18pt);
font-weight: 600;
color: c.$subtext1;
margin-top: 5px;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 324 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 974 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 129 B

Before After
Before After

View file

@ -36,6 +36,9 @@
{% if config.extra.matrix_user %}
<a href="https://matrix.to/#/{{ config.extra.matrix_user }}">Matrix</a>
{% endif %}
{% if config.extra.bookwyrm_url %}
<a href="{{ config.extra.bookwyrm_url }}">Bookwyrm</a>
{% endif %}
<p id="license">
Except where otherwise noted, the content on this site is licensed under <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">CC BY-NC-SA 4.0</a>
</p>

View file

@ -2,10 +2,10 @@
{% block title %}Ncam Gnrvngu{% endblock title %}
{% block content %}
<div id="greeter">
<img src="/logo.jpg">
<img src="/logo.png">
<div>
<h1>Hey I'm Ncam Gnrvngu</h1>
<h2>I'm a programmer and musician</h3>
<h2>I cosplay as a programmer and musician</h3>
</div>
</div>
<div id="categories">

View file

@ -13,4 +13,23 @@
<div id="page_content">
{{ page.content | safe }}
</div>
{% if config.extra.mastodon_user %}
<meta name="fediverse:creator" content="{{ config.extra.mastodon_user}}"/>
{% endif %}
<meta name="og:title" content="{{ page.title }}"/>
<meta name="og:type" content="article"/>
<meta name="article:published_time" content="{{ page.date }}"/>
{% if page.updated %}
<meta name="article:modified_time" content="{{ page.updated }}"/>
{% endif %}
{% if page.authors[0] %}
<meta name="og:article:author" content="{{ page.authors[0] }}"/>
{% elif config.author %}
<meta name="og:article:author" content="{{ config.author }}"/>
{% endif %}
<meta name="og:url" content="{{ page.permalink }}"/>
{% if page.extra.image %}
<meta name="og:image" content="{{ page.permalink }}{{ page.extra.image }}"/>
{% endif %}
{% endblock content %}