Recently I got myself a small keyboard. A Keychron Q1. With the numpad gone, the Keyboard takes up less space on my desk and typing feels smooth. But soon I encountered a small issue. Some programs and games use keys on the numpad. For example you can use the „+“ and „-“ key in Gimp to zoom in and out. Or in the game Factorio you use the same keys to change the brush size for you concrete or landfill. Yes the same can be achieved with holding the shift key and using the Mouse wheel but then I found the real issue. The alt codes for special ASCII symbols. Yes I use these maybe once every 6 months but it still bothered me.
Luckily Keychron keyboards are VIA compatible. This gives me to option to reprogram every keys function that I can access with the „Fn“ key. So I just reconfigured the Numbers 1-0 on the 4th Layer to represent the numpad keys and now I can access all the alt keys. For example ALT+FN+3 writes a ♥ Every key on my keyboard can now be assigned with a second function which makes me think if I should have gone for a 65% keyboard or even smaller.
It was all over the news. „Comet light up night sky“ and „comet reaches −4 mag, visible to the naked eye“. Visible to the naked eye, if the sky is visible. Since I am not an early bird, I waited till the 10th of October for the comet to pass the sun and be visible in the evening rather than the morning. But for the last two weeks we had just rain and cloudy skies. I waited for two weeks for a good weather and when it finally cleared up on the 21th of October the comet wasn’t as bright as it used to be. But i got a nice shot at dusk with the comet barely visible. Photographed with a Samsung Galaxy S22, Exposure time of 30 seconds and edited with GIMP.
I finally found some time to look into post processing on my tries in Astrophotography. Since i have still a lot to learn and didn’t want to spend a lot of money i choose GIMP. First because it’s free and second because i already know how to use it from other projects. Since i hadn’t much time and the weather was cloudy i used my old picture from 2022.
The final result (right side) is a clear improvement from the original (left side). First i reduced the shadows and highlights, to get rid of the blur and make the features more visible in the exposed parts. Then i added a little bit more contrast to the picture and in the end i put the sharpen(unsharp mask) filter on top of the image. I am surprised how a picture can get enhanced with just some simple steps. I hope i can put my new knowledge to use for something i plan this August.
Since i first started developing things, i was fascinated with random name generators, but never had any real application for it. Until i developed my Pen & Paper Village Generator.
The easy way
The easiest way is to work with two lists of predetermined names. One for first and the other for last names.
ID
first
last
1
Thorin
Wildaxe
2
Balin
Whitebeard
3
Dwalin
Underhill
4
Oin
Oakenshield
5
Gloin
Stonefall
6
Dori
Stoneskin
7
Ori
Grimface
8
Nori
Stronghand
9
Ori
Two lists of dwarfen first and last names.
Now you generate a random number between 1 and how many entries the list „first“ has, and pick the corresponding name. Then you do the same with the second list, and combine these two names. The code would look something like this:
function randnumber(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
let dwarfname = data["first"][randnumber(1,Object.keys(data["first"]).length)] +
data["last"][randnumber(1,Object.keys(data["last"]).length)];
Now you have a generator for dwarfen names. This is how the Fantasy Name Generator by Emily works. With the list above you get 72 unique names. But 72 is not that many names. You will see a lot of reiterating names even if you extend the list.
Generating one letter at the time
This solution gives you random names, without providing a template. But they are less specific on a race or gender.
const vocals = ["a", "e", "i", "o", "u"]; //defines the vocals.
const consonants = ["w", "r", "t", "z", "p", "s", "d", "f", "g", "h", "j", "k", "l", "c", "v", "b", "n", "m"]; //defines the consonants except Q,X,Y,
function GenerateRandomName(){
let lenght = randnumber(3,8); //defines the length of the name
let name = "";
for ( let i = 1; i <= lenght; i++){
let lastchar = name.charAt(name.length - 1) //outputs the last charakter in the name
if (consonants.includes(lastchar)) { //checks if the last letter was a consonant
name = name + vocals[randnumber(0,vocals.length -1)]; //pushes a vocal into the name
}else{
name = name + consonants[randnumber(0,consonants.length -1)]; //pushes a consonant into the name
}
}
return name.charAt(0).toUpperCase() + name.slice(1); //makes the first letter uppercase
}
After it has decided how long the name should be, the program will pick either a random vocal or a random consonant. Before picking the next letter it checks if the last letter was a consonant. If so the next letter must be a vocal. After a vocal must follow a consonant. This is to prevent non pronounceable letter strings like „kzpg“ or „iiie“. Switching between vocals and consonants makes the Names more pronounceable. For this reason i haven’t included the letters Q, X and Y in the consonant array. This will output funny names like: „Desali“ or „Nejinow“, perfect if you need a stupid name for an NPC.
Combining the two methods
If you combine these two methods you get a solid name generator. For example the first name is generated by a list, but the last name is generated letter by letter. This will give you a name that sounds dwarfen, but if you need several names for a town with multiple dwarfs you don’t end up with NPCs with the same name. This improves if you choos at random if the first or the last name is generated letter by letter.
The first try to photograph the moon with my old 70mm refractor telescope with a 700mm focal length through my Samsung Galaxy S22 phone. The image is mirrored and has not been edited.