wonderingwanderer

joined 8 months ago
[–] wonderingwanderer@sopuli.xyz 1 points 2 hours ago (1 children)

That stuff is mostly editorialized later by the people who wrote the books with various agendas. In the Book of Matthew at least, he does very little claiming to be god or the only path to salvation.

It's more like "You religious hypocrites and rich fucks better stop being such goddamn assholes and start actually taking care of people or so help me I swear I will incinerate you."

Paraphrasing, of course.

To everyone else he's like "Y'all are alright, just take care of each other and stop being so damn forlorn all the time."

And yeah he let himself be a martyr. I guess he took his pacifism seriously, or maybe he didn't want his followers to all get slaughtered if they tried fighting for him. It's hard to say exactly, but I don't think "He got beaten, insulted, and killed by the entrenched powers because he wouldn't stop making them look like the self-centered and greedy idiots that they are" is a very good argument for "actually he was a psycho narcissist who never knew when to stop."

[–] wonderingwanderer@sopuli.xyz 5 points 2 hours ago

I changed the $ in bash to § because fuck capitalism, keep your currency out of my free software

[–] wonderingwanderer@sopuli.xyz 0 points 2 hours ago (3 children)

That was a metaphor for why he shouldn't have to heal the Greek woman, who then ended up convincing him that he was wrong and should heal her anyway. If he was a delusional narcissist he would have doubled down on never being wrong or changing his mind about anything ever. Narcissists don't say "Hey actually yeah, you're right and I was wrong. Here you go."

Bear in mind, the Greeks had previously conquered the region and were viewed as basically settler-colonialists there at the time. It would be like a French person in Algiers begging a local Algerian community leader for free handouts

[–] wonderingwanderer@sopuli.xyz 1 points 2 hours ago

"Yeah it was so obvious that I'm wrong that you're basically an idiot for expressing disagreement. I WIN, LOSER!" said nobody rational, ever.

[–] wonderingwanderer@sopuli.xyz 2 points 2 hours ago (1 children)

Probably cheap in Italy. In the US if you grow your own basil you don't really want to publicize that cause you'll be labeled as bougie

And some people won't eat anything that seems too "foreign," like good bread and most spices and herbs.

[–] wonderingwanderer@sopuli.xyz 1 points 2 hours ago

THAT... THING ATE WORMY!

[–] wonderingwanderer@sopuli.xyz 2 points 2 hours ago

There's research done on our nervous systems and stress responses, and how they evolved in an environment that we're so estranged from today that they're basically irrelevant and maladaptive, but they haven't caught up to modern lifestyles.

Basically we have the same stress/anxiety/fear responses that have been hardwired since we were hunter gatherers. Back then, threats were acute and immediate. You see a big cat with sharp teeth, you have a sympathetic nervous response where you feel an adrenaline kick, you run away or you face it with a spear. You either get away from or eliminate the threat, or you die. Either way, it's over in like twenty minutes tops, and then the parasympathetic response kicks in. It purges all the stress hormones from your blood, replaces them with endorphins, and within ten minutes all your body's systems equalize and reset to their calmer baselines. Respiratory rate, heartbeat, digestion and metabolism, etc.

Nowadays, the perceived threats we face each day aren't like that. Deadlines, performance reports, layoffs, getting yelled at by your boss; being left by your partner for someone else; climate change, cost of living crisis, nuclear annihilation, random mass shooters, the list goes on. All these lingering threats that never quite go away and are always just hovering over us. Not quite enough to trigger a full fight-or-flight response. Just enough to let out a trickle of constant cortisol. And never really being resolved so that your parasympathetic response kicks in and replaces all those stress hormones with feel-good hormones.

A lot of modern self-care techniques are basically "body hacks" designed to use this notion. Grounding techniques to concentrate on something calm to move focus away from the stressors and activate the calming response. Focused breathing to tell your body it's safe and slow your heart rate. Watch a horror movie to activate a full adrenaline response so that your body can recalibrate when it passes. Go for a run or an intense workout to release endorphins and flush out all that cortisol.

It all centers on "how do we shift away from the body's stress response and activate the calming response?" And it's only necessary because of how radically different the modern context is from the one where those systems developed originally.

[–] wonderingwanderer@sopuli.xyz 1 points 3 hours ago

I mean I’m addicted to nicotine

"Just smoke less. It'll reduce your risk for cancer. You just need some self-control."

That's what you sound like.

[–] wonderingwanderer@sopuli.xyz 1 points 3 hours ago

Yeah but the point is that trawling the entire internet and scanning every single image with OCR would take way more compute than just scanning particular images on demand which is what happens when you test it on google.

[–] wonderingwanderer@sopuli.xyz 1 points 3 hours ago (1 children)

leaves me puzzled as to how much of Europe is getting it wrong when Italy is right there.

That's the part you're not getting. Europe isn't the one "getting it wrong." If you want to claim that only one way is correct, then the US is the incorrect way.

A country's proximity to italy is irrelevant. There's literally an Italian in this thread who says margherita pizza in italy just means cheese pizza.

It's like claiming Germany does bratwurst wrong because it doesn't taste like the ones you get from the supermarket in the US.

[–] wonderingwanderer@sopuli.xyz 2 points 4 hours ago

Mmm, the terephthalate adds extra crunch

[–] wonderingwanderer@sopuli.xyz 3 points 4 hours ago

People really need to stop writing about the torment nexus because all it's doing is giving the oligarchs more ideas...

 

Hi, I'm not sure if this is the right place to ask this question, as previous posts seem to all be articles about historic artifacts, not necessarily personally owned swords and repair. If there's a better place to ask, let me know and I'll move this there.

Anyway, a couple years ago I bought a sword, but I should have done more research into trustworthy retailers first because this one was not full-tang. It had a bolt welded onto the bottom of the blade where the tang would be, and the hilt went over the bolt and the pommel screwed on at the end to hold the assembly together.

So I did what any reasonable person would do (/s), I took off the hilt assembly and tested the strength of the weld. It was not strong, and the bolt broke off easily.

So now I have a bare sword blade with no hilt, and no way to remount the hilt without modifications. But I'm having trouble finding any tutorials about how to do this. It seems it's not a common problem.

The blade itself isn't bad, so I don't want to junk it, but it's been sitting on a shelf for a couple years. It's Damascus steel, single-edged cut-and-thrust style. The false edge is just squared off so I'm thinking about using a grinder/router to give it a bevel or fillet, but that's not a high priority.

The main thing is that I want to attach a hilt to the tang, so that the blade will be shorter but full-tang. I'll probably use the original hilt if I a can make it work, but I might replace the cross guard if I can. The original one looked like it had more hand protection, similar to a swept hilt, but the photo was only from one angle, and when the item came I realized the guard is actually flat and doesn't wrap around. But I don't know how I would acquire a replacement other than having a custom one made somewhere (or building my own smithy), and that might be more than I'm willing to lut into it.

So that brings me to the main task. My initial idea is simply to grind the tang so that it fits snugly inside the grip, although I haven't decided how to attach the pommel yet. I could weld on a bolt, but I don't have a welder or any experience welding. I could solder it on but it would be weaker. I could try using a threading die to attach the pommel directly to the tang, but I don't know how well that would work on layered steel. And I'm out of ideas.

Does anyone have any knowledge or experience with this to share? Know of any tutorials or blogs that will tell me what I need to know?

It's not a huge priority, so even if this post becomes old, any response would still be appreciated.

Thanks in advance.

 

So I was doing groceries and I thought some edamame would be nice. There was store brand, and also one with a label in Japanese, which I mistakenly assumed meant that it was imported from Japan.

Now I happen to like Japanese food from Japan better than Japanese food from America, so I went with the bag with the Japanese label.

Well, I pulled it out today to cook some and noticed that it has a Proposition 65 label mentioning lead exposure. I'm not used to seeing this on food. I also thought it was strange, because Japanese goods usually have better quality than this.

As it turns out, it's not from Japan at all. It was imported from China!

On its own, importing soybeans from China doesn't sound that awful. But they didn't just import soybeans. They called them Edamame, which is specifically the Japanese word for soybeans. Not only that, but they wrote "Mukimi Edamame" in big Japanese letters at the top of the front of the packaging, to fool unsuspecting shoppers like me into thinking it's a product of Japan.

If it weren't for the lead contamination, then this would only be a simple matter of cultural appropriation, and possibly false advertising. But no, apparently they contain lead. Why are US stores even allowed to sell this? Why was it allowed through customs? What US distributor decided to import a bunch of lead contaminated soybeans?

This is not okay!

A bag of frozen vegetables labeled "Mukimi Edamame" in Japanese characters

The back side of the same bag, with a label that says "Warning: Consuming this product can expose you to chemicals including lead, which is known to the State of California to cause cancer and birth defects or other reproductive harm. For more information go to www.P65Warnings.ca.gov/food"

Another view of the back side of the bag, with a label that says "Product of China"

 

cross-posted from: https://sopuli.xyz/post/45002077

If this isn't the right community for this post, let me know and I'll move it somewhere else.

I'm working my way through nandgame, and I'm stuck on the "call" macro in the function calls section of the stack machine unit. These are the instructions:

I was stuck on it for a while, so I looked up the solution and am going off the one given here (it's the only one I could find).

So far, I haven't gotten it to work. At first, it was giving me syntax errors because the labels weren't defined, so I replaced A = [LABEL] with label [LABEL] followed by A = [CONST], according to the specified calling convention. It also gave me a similar syntax error for TEMP_ADDR, which is never specified in the instructions, so I assigned it 0x7f00. So here is what I end up with (all in Assembly):

(note: the stack pointer, SP, is defined by a shared constant SP = 0)

Test code:

init.stack
call functionName 0
stop

function FunctionName 0
push.value x42
return

Macro: call

# Assembler code
## Push the current ARGS and LOCALS on the stack
push.static ARGS
push.static LOCALS

## Push the return address.
push.value after

## Set ARGS to point to the start of the arguments
A = SP
D = *A
A = argumentCount
D = D - A
A = 3
D = D - A
label ARGS
A = 1
*A = D

## Jump to functionName.
goto functionName

## Set return address:
label after

## Restore ARGS and LOCALS from the stack
A = ARGS
D = *A
label TEMP_ADDR
A = 0x7f00
*A = D
pop.D
label LOCALS
A = 2
*A = D
pop.D
A = ARGS
*A = D

## Push RETVAL.
label RETVAL
A = 6
D = *A
push.D

Macro: function

# Assembler code
## Define a label functionName
label functionName

## Set LOCALS to the current SP
A = SP
D = *A
label LOCALS
A = 2
*A = D

## Advance SP by localsCount
A = localsCount
D = A
A = SP
D = D + *A
*A = D

Macro: return

# Assembler Code
## Pop the top value into RETVAL
pop.D
label RETVAL
A = 6
*A = D

## Set SP to LOCALS
label LOCALS
A = 2
D = *A
A = SP
*A = D

# Pop the return address and jump to it
pop.D
A = D
JMP

Note: functionName, argumentsCount, and localsCount are all listed as placeholders above the relevant macro, but it doesn't describe how to define these. I'm guessing that comes in a later unit. The code block for the call macro gives me a red bar for each line with a placeholder, but this doesn't happen for the function macro which also includes placeholders. In any case, this doesn't seem to get in the way of the program as it still runs smoothly.

So as it is, when I run it, everything seems to work as intended. This is the result when it reaches the stop macro (infinite loop):

Which looks like it's doing everything it's supposed to do. But when I click "Check solution", this is what it says:

("Expected SP (RAM address 0) to be hex 101. (Was 104)")

Which is strange, because in the computer section you can clearly see that the SP content is hex 0101. So I don't know what's going wrong.

I stepped through the program tick by tick, and the only place SP ever reaches 104 is after the function macro, when it runs push.value x42, after which it runs the return macro which begins with pop.D, reducing SP back to 103.

Could it be the evaluator is assessing the value of SP at the end of the code block, instead of where it runs the stop macro? So perhaps I could try replacing stop with a jump to the end, followed by stop... Now that I think of that, I think it might work. I'm still going to post this though, because I already went through all the trouble. And in case it doesn't work, if anyone else has any ideas please share them!

I can expand the rest of the macros if need be, but they already passed the evaluation so they're all working according to specs.

Thanks in advance!

Edit:

I thought for sure that would work. I changed the test code block to this:

init.stack
call functionName 0
A = end
JMP

function FunctionName 0
push.value x42
return
label end
stop

The program runs exactly as it's supposed to, except now the stop loop is at the end of the code. The computer output still looks the same, except now the program counter loops between 60 and 61 at the end (as expected). But the evaluator is still giving me the same error! I'm stumped...

Edit 2: added annotations to code blocks to make it easier to read

 

cross-posted from: https://sopuli.xyz/post/45002077

If this isn't the right community for this post, let me know and I'll move it somewhere else.

I'm working my way through nandgame, and I'm stuck on the "call" macro in the function calls section of the stack machine unit. These are the instructions:

I was stuck on it for a while, so I looked up the solution and am going off the one given here (it's the only one I could find).

So far, I haven't gotten it to work. At first, it was giving me syntax errors because the labels weren't defined, so I replaced A = [LABEL] with label [LABEL] followed by A = [CONST], according to the specified calling convention. It also gave me a similar syntax error for TEMP_ADDR, which is never specified in the instructions, so I assigned it 0x7f00. So here is what I end up with (all in Assembly):

(note: the stack pointer, SP, is defined by a shared constant SP = 0)

Test code:

init.stack
call functionName 0
stop

function FunctionName 0
push.value x42
return

Macro: call

# Assembler code
## Push the current ARGS and LOCALS on the stack
push.static ARGS
push.static LOCALS

## Push the return address.
push.value after

## Set ARGS to point to the start of the arguments
A = SP
D = *A
A = argumentCount
D = D - A
A = 3
D = D - A
label ARGS
A = 1
*A = D

## Jump to functionName.
goto functionName

## Set return address:
label after

## Restore ARGS and LOCALS from the stack
A = ARGS
D = *A
label TEMP_ADDR
A = 0x7f00
*A = D
pop.D
label LOCALS
A = 2
*A = D
pop.D
A = ARGS
*A = D

## Push RETVAL.
label RETVAL
A = 6
D = *A
push.D

Macro: function

# Assembler code
## Define a label functionName
label functionName

## Set LOCALS to the current SP
A = SP
D = *A
label LOCALS
A = 2
*A = D

## Advance SP by localsCount
A = localsCount
D = A
A = SP
D = D + *A
*A = D

Macro: return

# Assembler Code
## Pop the top value into RETVAL
pop.D
label RETVAL
A = 6
*A = D

## Set SP to LOCALS
label LOCALS
A = 2
D = *A
A = SP
*A = D

# Pop the return address and jump to it
pop.D
A = D
JMP

Note: functionName, argumentsCount, and localsCount are all listed as placeholders above the relevant macro, but it doesn't describe how to define these. I'm guessing that comes in a later unit. The code block for the call macro gives me a red bar for each line with a placeholder, but this doesn't happen for the function macro which also includes placeholders. In any case, this doesn't seem to get in the way of the program as it still runs smoothly.

So as it is, when I run it, everything seems to work as intended. This is the result when it reaches the stop macro (infinite loop):

Which looks like it's doing everything it's supposed to do. But when I click "Check solution", this is what it says:

("Expected SP (RAM address 0) to be hex 101. (Was 104)")

Which is strange, because in the computer section you can clearly see that the SP content is hex 0101. So I don't know what's going wrong.

I stepped through the program tick by tick, and the only place SP ever reaches 104 is after the function macro, when it runs push.value x42, after which it runs the return macro which begins with pop.D, reducing SP back to 103.

Could it be the evaluator is assessing the value of SP at the end of the code block, instead of where it runs the stop macro? So perhaps I could try replacing stop with a jump to the end, followed by stop... Now that I think of that, I think it might work. I'm still going to post this though, because I already went through all the trouble. And in case it doesn't work, if anyone else has any ideas please share them!

I can expand the rest of the macros if need be, but they already passed the evaluation so they're all working according to specs.

Thanks in advance!

Edit:

I thought for sure that would work. I changed the test code block to this:

init.stack
call functionName 0
A = end
JMP

function FunctionName 0
push.value x42
return
label end
stop

The program runs exactly as it's supposed to, except now the stop loop is at the end of the code. The computer output still looks the same, except now the program counter loops between 60 and 61 at the end (as expected). But the evaluator is still giving me the same error! I'm stumped...

Edit 2: added annotations to code blocks to make it easier to read

 

If this isn't the right community for this post, let me know and I'll move it somewhere else.

I'm working my way through nandgame, and I'm stuck on the "call" macro in the function calls section of the stack machine unit. These are the instructions:

I was stuck on it for a while, so I looked up the solution and am going off the one given here (it's the only one I could find).

So far, I haven't gotten it to work. At first, it was giving me syntax errors because the labels weren't defined, so I replaced A = [LABEL] with label [LABEL] followed by A = [CONST], according to the specified calling convention. It also gave me a similar syntax error for TEMP_ADDR, which is never specified in the instructions, so I assigned it 0x7f00. So here is what I end up with (all in Assembly):

(note: the stack pointer, SP, is defined by a shared constant SP = 0)

Test code:

init.stack
call functionName 0
stop

function FunctionName 0
push.value x42
return

Macro: call

# Assembler code
## Push the current ARGS and LOCALS on the stack
push.static ARGS
push.static LOCALS

## Push the return address.
push.value after

## Set ARGS to point to the start of the arguments
A = SP
D = *A
A = argumentCount
D = D - A
A = 3
D = D - A
label ARGS
A = 1
*A = D

## Jump to functionName.
goto functionName

## Set return address:
label after

## Restore ARGS and LOCALS from the stack
A = ARGS
D = *A
label TEMP_ADDR
A = 0x7f00
*A = D
pop.D
label LOCALS
A = 2
*A = D
pop.D
A = ARGS
*A = D

## Push RETVAL.
label RETVAL
A = 6
D = *A
push.D

Macro: function

# Assembler code
## Define a label functionName
label functionName

## Set LOCALS to the current SP
A = SP
D = *A
label LOCALS
A = 2
*A = D

## Advance SP by localsCount
A = localsCount
D = A
A = SP
D = D + *A
*A = D

Macro: return

# Assembler Code
## Pop the top value into RETVAL
pop.D
label RETVAL
A = 6
*A = D

## Set SP to LOCALS
label LOCALS
A = 2
D = *A
A = SP
*A = D

# Pop the return address and jump to it
pop.D
A = D
JMP

Note: functionName, argumentsCount, and localsCount are all listed as placeholders above the relevant macro, but it doesn't describe how to define these. I'm guessing that comes in a later unit. The code block for the call macro gives me a red bar for each line with a placeholder, but this doesn't happen for the function macro which also includes placeholders. In any case, this doesn't seem to get in the way of the program as it still runs smoothly.

So as it is, when I run it, everything seems to work as intended. This is the result when it reaches the stop macro (infinite loop):

Which looks like it's doing everything it's supposed to do. But when I click "Check solution", this is what it says:

("Expected SP (RAM address 0) to be hex 101. (Was 104)")

Which is strange, because in the computer section you can clearly see that the SP content is hex 0101. So I don't know what's going wrong.

I stepped through the program tick by tick, and the only place SP ever reaches 104 is after the function macro, when it runs push.value x42, after which it runs the return macro which begins with pop.D, reducing SP back to 103.

Could it be the evaluator is assessing the value of SP at the end of the code block, instead of where it runs the stop macro? So perhaps I could try replacing stop with a jump to the end, followed by stop... Now that I think of that, I think it might work. I'm still going to post this though, because I already went through all the trouble. And in case it doesn't work, if anyone else has any ideas please share them!

I can expand the rest of the macros if need be, but they already passed the evaluation so they're all working according to specs.

Thanks in advance!

Edit:

I thought for sure that would work. I changed the test code block to this:

init.stack
call functionName 0
A = end
JMP

function FunctionName 0
push.value x42
return
label end
stop

The program runs exactly as it's supposed to, except now the stop loop is at the end of the code. The computer output still looks the same, except now the program counter loops between 60 and 61 at the end (as expected). But the evaluator is still giving me the same error! I'm stumped...

Edit 2: added annotations to code blocks to make it easier to read

 

I wasn't gonna make a post today, because nothing broke and it wasn't that exciting. But what the hell.

Anyway, there's still a couple things wonky, probably from the mishaps yesterday and the day before. The main thing is just a "failed to delete autoinstaller.sh" error on the script that runs when I do a "switch user", so I wonder if I broke something non-essential when I killed the PIDs yesterday...

It was also prompting me for a password whenever I tried to make it go to sleep, which would wake it up and basically make it impossible to put in sleep mode. But it think I fixed that somehow. Or maybe it only works when I press the sleep button. I have to test if it still happens when I simply close the laptop, which is what I had been doing after a switch user. So yes, that means I would come back to it later and it wouldn't be asleep, and would prompt me for a password after signing back in and loading the desktop.

I didn't even get to doing the security stuff today. I started off this morning by making a list of all the configurations that I've tweaked manually. It's a small list, but it will probably grow, and that will help me if I ever break something but also it'll help me keep track of all my changes so that I can easily undo them later if I want to, or remember what to do if I ever need to manually rebuild my system.

Then I played around in System Monitor, got a page exactly how I liked it, saved it as an export file for backup, and set it as my default page to open to. I learned about some of the metrics I was unfamiliar with, like PSI for instance. Now I want to get a vertical second display and just have System Monitor up on it all the time 😩

After that I went through my notes from yesterday and typed up a document with all the steps I took for the configurations, in case I ever have to do them again. That took up most of the day, honestly. Some of the commands are starting to feel more familiar. Ones that come up a lot at least, like journalctl, systemctl, cat, ps aux, grep, and nano. Some still look like gibberish to me though.

I spent most of the evening trying to figure out those two problems I mentioned, and made another document for more troubleshooting commands.

And then I finally got around to changing my username, which I did through the GUI because sudo usermod didn't work. So it didn't update the /home directory, which saves me some work updating pathways but it's kind of annoying cause that means they'll just stay under the default username, even though the ownership updated to the new one.

That's mostly all I did. Just fun boring stuff that didn't break anything and didn't seem to justify making a third post. But I'm making one anyway.

Now, tomorrow for sure I'll get to the security stuff!

So far that list includes setting up secure boot, locking the bootloader if it's not already, password protecting UEFI, encrypting the swap space (if it's not already and if I can do so without wiping my drive), configuring my firewall, setting up dnscrypt-proxy, and TPM! And then after that there's some software stuff like AppArmor, ClamAV, LMP, a rootkit hunter, an NGFW, and a locally-hosted password manager.

I'm not sure if any of that's redundant but if so I'll find out while I'm reading about it. It seems like a lot, though. It would be overwhelming if I wasn't excited about it. Maybe I should adjust my expectations though, cause it might take me a week just to set it all up. I still need to set up borg too, for backing up /home/ so I can exclude it from rsync...

And then after that there's more to do, but I'll be able to start shifting away from initial setup to exploring different kinds of software and actually using my system.

 

Spoiler: I fixed it again.

So basically, when I woke up this morning my intention was to harden my system's security a bit. I was gonna spend some time reading about a few different things until I felt like I could understand them and the process of setting them up.

After my experience yesterday, I thought it would be a good idea to create a backup first before getting into any of that, so I spent the first part of my day reading about that.

I read around on some forums and determined I needed to do three things: use rsync to create a system snapshot of everything but /home/, use borg to backup everything in /home/, and do something involving "pacman -Q" to backup all the packages I have installed.

Sounds simple, right? Well...

I spent some more time reading about how to do each of these things, until I finally felt ready to give it a go. The first thing I did was create the pacman lists of all my installed packages (one list for explicit installs, and one that includes all dependencies). Easy enough. The reason I did this first was so it would be included in my rsync backup, which is what I decided to do next.

Before even worrying about backing up to my external drive, I wanted to test it out first locally, so I made a "backups" folder in /home/, and used that as the destination for rsync.

Since I didn't have Borg set up yet, and I wanted to harden my system's security before connecting to the internet to download outside packages, I decided not to exclude /home/ from this first rsync backup. Are you starting to see where this is going?

When I ran the command in Bash, of course I didn't know what to expect. At first I was a bit startled at all the outputs zooming by, but I decided this was probably normal, so I pulled up System Monitor and just watched for a while. I was somewhat surprised to see so many flatpaks, since I'm on Endeavour, but I guess that's normal too.

I didn't realize something was wrong until I noticed the pathways in the outputs kept cycling through the folder under "backups" that I titled specifically for the rsync. And every couple of minutes, the pathways got slightly longer, as if they expanded an extra layer. It dawned on me that I had created an endless loop when I put my destination folder in /home/, though I didn't make an exclusion for it.

So I panicked a bit, as one does, and since I didn't know that I could simply abort the process with ctl+c, I closed Bash. Not a great idea, but I didn't know what else to do.

Anyway, so I checked the backup that I had created and it was quite large. About 27 GiB. Not enormous, but definitely larger than it had to be. I tried deleting it but it wouldn't let me.

So I sought a solution and tried a fuser command, and got a big long list of leftover PIDs that I was apparently supposed to kill to conclude the processes that got cut off when I closed Bash in the middle of a script. That seemed a little overwhelming though and I didn't feel quite comfortable with it, so I decided to try rebooting instead...

...and the result was that it got stuck on some sort of dracut initqueue hook with no time limit while attempting to boot. So, once again despairing, I walked away for a while and tried searching for a fix on my phone. Fortunately by the time I came back it had miraculously booted up.

Assuming this had cleared the stuck processes preventing me from deleting the rogue backup file, I tried deleting it again and it still wouldn't let me. So I reran the fuser command and killed all the leftover PIDs and my screen immediately went black. I shut it down from the power button, and turned it back on, and thankfully it booted up fine (better than the previous time, at least).

So long story short, I ended up doing a sudo -rm -rf on the rogue backup and that worked like a charm. Then I reran rsync with an exclusion for the folder the destination was in, and it went much better. Still a big rush of outputs, which makes total sense, but it concluded on its own after a couple minutes and the total size was only about 18GiB (talk about bloat on a fresh install!!!). Not bad, though.

I poked around a little trying to optimize it with more exclusions, or alternatively with a white list inclusion command, but I used a du command to see what folders were taking up the most space and ultimately I really could've only saved a few GiB by excluding some var/cache/ folders, but it wouldn't really have been worth the added inconvenience if I ever have to do a complete system restore. A big chunk of it was the /home/ folder anyway, and that won't be included in future backups once I get borg set up.

So that's mostly it. It was already evening at this point, and I had mostly forgotten to eat during the thick of it, so I ate some dinner and then got out my external hard drive to try to make a real backup.

My first attempt failed, of course, because it wasn't formatted (as I soon learned). I noticed a lot of errors in the outputs so I did a ctl+c this time, which ended the process much more neatly than before.

So then I learned how to format a hard drive as a btrfs, and then I decided while I was at it that I might as well learn how to encrypt it, so I did that too. And then I had to format it again, so I did. And then I reran the rsync and it worked perfectly!

Then I unmounted the drive and closed the encrypted container before unplugging it, and that concludes my first real external backup on linux! I did not expect it to take all day, but next time will be much smoother.

Tomorrow I will finally get to harden my system security, and if that doesn't take all day then I'll install borg and back up my /home/ folder. After that, I'll be ready to install some more software and start playing around to see what my system can do!

 

Well I guess I didn't really break it. A KDE update broke it. After updating I rebooted, and then when I tried to log in, the screen went black and got stuck like that.

Anyway, I read on the forums that the fixed involved adding a parameter to some line in the kernel options, which I had no clue how to do. I also didn't know I could enter the terminal from a frozen screen. So I tried the grub menu. But I didn't know what I was doing and was scared to mess things up, and for some reason I thought the answer was in the UEFI screen.

Now I knew that I was treading in dangerous waters, so I was trying not to touch anything while poking around the menus trying to figure out where I needed to go. But apparently I touched something I wasn't supposed to, cause my computer tried booting from the spare SSD, which isn't mounted yet and don't know how to decrypt it. So I got stuck for a while, tried the grub rescue in the command line because it was the only option I seemed to have, didn't understand it, panicked for a while, and eventually found out I could press f2 on startup to go straight to the UEFI screen. So then I went back to the menu where I messed things up and made sure to click on the correct disk.

So I was quite relieved when I was able to decrypt it and it brought me back to the Endeavour grub menu (the purple screen), and then booted up as it was supposed to. I tried logging in again and it still froze, but at this point I had learned I could press some hotkeys to get to the terminal. So I went in there and followed some instructions I found, ultimately only really learning what the problem wasn't. It turns out the parameter I was supposed to add to fix the issue was already there!

So I found out how to revert kde desktop and workspace to a previous version from the cache, and I did that, but when I rebooted and tried logging in again it still froze.

Luckily I had previously made a guest account so I logged in there and it worked. So then I learned that that means the issue was in the user-level configurations.

So I followed some more instructions to back up my KDE configs, moved the existing ones to somewhere else, then killed and restarted plasmashell to create new default config files.

And then I tried logging in, and it worked! This was an hours-long process, so it definitely felt good to have a working system again.

Luckily most of my settings and my favorited items in the app launcher were still intact. I hadn't moved my global shortcuts config file either, so my keybindings were preserved. The only things missing were my pinned icons on the app manager toolbar at the bottom of the screen.

So I went into my backup file for the plasma appletsrc configs, and I found the line that listed the apps I had pinned, and I copied it and used nano to paste into the current version in same place it would have been.

So even though it was tragic and frustrating and a bit gut-wrenching at times, I learned a LOT today. I gained some familiarity with grub, UEFI, terminal, basic shell commands, restoring previous versions of software from the cache, logging and troubleshooting, backups, configurations, and the basic system architectures, and the anatomy of the KDE environment.

I'm still no power user, and I still have a lot to learn, but I came a long way in just one day. Now, I'm tired.

There's lots more to set up tomorrow, but at least walking into it I won't feel so lost!

 

So I was researching different distros, and I stumbled upon one called Poseidon (based on Ubuntu) which was intended primarily for scientific modeling. However, it hasn't been active since 2018; also, after Poseidon 4, they shifted to focus primarily on oceanography.

So my question is, firstly, is there an active distro that has a similar intended purpose, and comes with all the relevant software? Barring that, is it easy enough to replicate just by downloading the relevant packages?

If the answer to both is no, my question is, how could one best go about resurrecting it as a fork? Would it be better to start from either Poseidon 9 (the latest) or Poseidon 4 (before they shifted direction), and then try to update all the core components? Or to start with the latest Ubuntu (or better yet Debian), and then simply install all the software needed to make it functionally identical to Poseidon?

Bonus question: if you start with an OS, and gradually replace one component at a time until all components have been replaced, is it still the same OS? (Theseus was a son of Poseidon, but unfortunately the name is already taken)

view more: next ›