diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index ee10a7e..4500f5f 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -7,7 +7,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ["pypy3.9", "pypy3.10", "3.9", "3.10", "3.11", "3.12"] + python-version: ["3.12"] steps: - uses: actions/checkout@v4 # this Action should follow steps to set up Python build environment diff --git a/blog-posts/Changing_the_Light-mode.md b/blog-posts/Changing_the_Light-mode.md new file mode 100644 index 0000000..1a0ec9a --- /dev/null +++ b/blog-posts/Changing_the_Light-mode.md @@ -0,0 +1,5 @@ +--- +title: Changing the light-mode +date: 2021 Sep 11 +--- +As of currently, the light mode on this site doesn't live up to what I want it to be.
I want it to be something that is the opposite of the dark mode, and it really isn't that. Expect it to change. But, in case you do still want to view it, here are the current css variable colors:
html.l {
--navCo: #0F0089;
--headCo: #3700FF;
--linkCo: #F7E45D;
--maCo: #0044F7;
--maTxtCo: #C2FFBA;
--buCo: #F09;
--buTxtCo: #0FF;
--buBoCo: #fff;
--noteCo: #f25;
--noteTxtCo: #ccc;
--inCo: #0bf;
--inlinkCo: #05c;
--selCo: #f51;
--selTxtCo: #059;
--taCo: #cf4;
--taTxtCo: black;
}
\ No newline at end of file diff --git a/blog-posts/Creating_HTML_DD_List.md b/blog-posts/Creating_HTML_DD_List.md new file mode 100644 index 0000000..5419e5c --- /dev/null +++ b/blog-posts/Creating_HTML_DD_List.md @@ -0,0 +1,5 @@ +--- +title: Creating a HTML drop-down list +date: 2021 Oct 01 +--- +Inorder to create a drop-down selection list in HTML, we must first understand why they are important.
Drop-down lists can be used in lots of ways, from creating a way for people to chose from a strict set of options, to making an on-off switch(even though you should use buttons for that)
Before we start, here is an example:
Select Image:
Images from Wikipedia, on Oct. 2nd & 1st, 2021
For some weird reason, it's not in
<input>
It has it's own tags, know as <select> and <option>. Using these is alittle like making a list, if you've ever made one. Here's an example bit of HTML.
<select>
<option>op 1</option>
<option>op 2</option>
</select>
Next we want to add values to <options>, and an id(#) to <select>.
You most-likely already know how to do ids, and maybe also values(if you have used input in any way), so I'll leave it up to you.
However, you may not know some things that could be useful here, such as preselections, or making things update upon being changed, well, you can do preselections with selected in the <option> that you want to be preselected. Changes done the page upon the change of the selection in the drop-down(or anything else that can be changed by the user) is onchange="submitFunction()" being placed in the <select>.
Let's check back on the code that we made at the code example:
<select onchange="submitFunction()" id="selection">
<option value="op1" selected>op 1</option>
<option value="op2">op 2</option>
</select>
Inorder to access the selected option with JavaScript, use document.getElementById("selection").value
That's basically it, feel free to CTRL + C CTRL + V it. /s \ No newline at end of file diff --git a/blog-posts/How-To-make-mockups.md b/blog-posts/How-To-make-mockups.md new file mode 100644 index 0000000..0949fe4 --- /dev/null +++ b/blog-posts/How-To-make-mockups.md @@ -0,0 +1,5 @@ +--- +title: How to make mockups +date: 2021 Apr 22 +--- +
This post isn't very good, and I'm not proud of it.
The first step to making a mockup is to open up the inpect menu, you may be able to do this using ctrl+shifT+i(or f12)
this will be different from browser to browser.
once you see inspect element open, simply go to the page you're making a mockup for(ex. MyStuff; or if you're making a new page, go to the page that looks the closest.), and press ctrl+shifT+c, and click on the area that you want to change(ex. the + New Project button.

now that you've selected the element, let's learn how to edit it! You should see the element that you clicked on(using the ctrl+shifT+c command) highlighted in blue. Inside of the element(if you selected text, or even an image), you should see a darker area, that isn't red, double click on it, it should now be hilighted, now type in whatever you want(if it's an image, make sure to put in an image link, ex. https://imagehoster.com/png/png.png; if you clicked on a link(in the "" in "a href=''", unselect it and select the part ""here"").

anyways... if you don't have the monna lisa yet, just give up /s \ No newline at end of file diff --git a/blog-posts/How-to-Store-Passwords.md b/blog-posts/How-to-Store-Passwords.md new file mode 100644 index 0000000..c2043ef --- /dev/null +++ b/blog-posts/How-to-Store-Passwords.md @@ -0,0 +1,35 @@ +--- +title: How to Store a Passwords +date: 2023 Nov 2 +--- +**Disclaimer**: The world of cyber-security is an incredibly complex and constantly evolving topic, and I am not a cyber-security researcher; I create projects for fun. + +Storing a password in a server can be intimidating. Password management is incredibly tricky, as anything you mess up could compromise your users' password(s). Thankfully, random websites you've never visited before have a pure HTML blog post from 2023 about that exact topic, and how to do it properly. + +Basically, it's just this sequence of steps: + +* Generate a long random sequence of characters, this is called a *[salt](https://en.wikipedia.org/wiki/Salt_(cryptography))*(generate for each user, do not use a master salt) +* Prepend(or append, it doesn't matter, just keep it consistent) this to the user's password +* Use a [hashing algorithm](https://en.wikipedia.org/wiki/Hash_function), such as [PBKDF2](https://en.wikipedia.org/wiki/PBKDF2), to generate a unique sequence of characters that will uniquely identify that password. +* Store the salt and hash in the same place, *do not* store the password on it's own. + +And to check if a password is right, repeat the steps, except rather than generating a random sequence of characters, get the sequence of characters that you've stored along with the hash. + +## Why Do *This*? +You might be thinking: *That's a bit arbitrary innit?* And if you aren't then you can stop reading now. + +This method of storing passwords is the only way to ensure that you are securely storing them. So let's go through some other ways, and why they aren't so good. + +### Plaintext Passwords + +Storing your passwords in plaintext allows anyone who can get into your server to easily take any password they want, as no matter how good your users' password is, their account will be hacked if an unauthorized or malicious individual is able to get in. + +### Encrypted Passwords + +This is basically just plaintext with additional steps. As long as your master-key is stored somewhere, it will get stolen as soon as somebody manages to get into your system. + +### Bare Hashing + +A hash isn't able to be undone, meaning theoretically you should be able to *just* hash your password. This, while a fair assumption, has unfortunately been incorrect for quite some time. There are databases online that store every word in the english language(or just some words) in addition to common passwords and their hashes, and users will often use words for their passwords, even though it's insecure. + +This is where salts come in. Due to the nature of hashes, even a single change in a string will entirely change it's hash, as such, if you add a random sequence of characters to a string, then you can entirely change it's hash. \ No newline at end of file diff --git a/blog-posts/How-to-copy-and-paste-on-mobile.md b/blog-posts/How-to-copy-and-paste-on-mobile.md new file mode 100644 index 0000000..4449272 --- /dev/null +++ b/blog-posts/How-to-copy-and-paste-on-mobile.md @@ -0,0 +1,5 @@ +--- +title: How to Copy & Paste on mobile +date: 2021 May 05 +--- +
This post isn't very good, and I'm not proud of it.
Recently, I've been seeing a lot of people coming up with one excuse for not linking the dupelicate topic in the suggestions forum. They say something like,
I'm on mobile!!!!! 😖😭😫
this is not a correct argument, so I've decided to make this post to prove it.

Safari/iOS

the way that you copy and paste on Safari is by double taping on the text, then dragging until you've selected all the text(the next bit works for links, not this)

Coping links

tap and hold on the link until you see:open, open in background, open in new window, download link file, add to reading list, *copy*, share

Paste

going to any textbox, in the top-lefT-hand conner, you should see a little clipboard icon(as long as you aren't selecting any text), press it. tap "copy(circled in red)"
🏷Note: I don't own an android tablet or phone, so take this with a grain of salt

Chrome/Android

press and hold until a few selection boxes come up(might work for links)

pasting

tap and hold int the text box, you should see "paste," now click that(boxed in :Image Source \ No newline at end of file diff --git a/blog-posts/How_To_Make_Tea.md b/blog-posts/How_To_Make_Tea.md new file mode 100644 index 0000000..f6a1e34 --- /dev/null +++ b/blog-posts/How_To_Make_Tea.md @@ -0,0 +1,5 @@ +--- +title: How to Make the perfect Tea. +date: 2021 Sep 28 +--- +
this is opinion based, there's no perfect tea
Tea is the perfect fit for most meals, breakfast, 2nd breakfast, morning tea, lunch, afTernoon tea, dinner, or supper.
But how do I make it? Here's how I make my tea.

Step 1

The first step is to get the brand of tea you like. I personally like stuff such as Mighty Leaf, it tastes strong, and your able to use it 3 times without it getting weaker, and even then, you can still use it more, it really doesn't lose it's weakness.

Step 2

Get a mug, or tea cup. I personally like mugs, as they are normally bigger, meaning you don't have to refill as much as a tea cup.

Step 3

Get your tea, if you're using loose leaf, I'd use a smaller cup to make it, then use a strainer to the leaves out, as it adds texture that I don't like personally, otherwise just put the tea bag in, it is at this point that I like to stir it.

Final Step

Enjoy.
You can add sugar and milk cream, if you're into those kinda things... even lemon if you really want.
\ No newline at end of file diff --git a/blog-posts/Is_Kris_the_Knight.md b/blog-posts/Is_Kris_the_Knight.md new file mode 100644 index 0000000..ecfce53 --- /dev/null +++ b/blog-posts/Is_Kris_the_Knight.md @@ -0,0 +1,5 @@ +--- +title: Is Kris the Knight? +date: 2021 Oct 23 +--- +Is Kris the Knight? At face value, this seemes insain. Right? Well, let's look at the evidence
First and formost, the Knight opens Dark Fountains. Now, what does Kris do at the end of Chapter 2? They create a Dark Fountain.
Second, what does Kris look like in Dark Worlds? That's right, a Knight.
This is what Kris looks like in a Dark World, they're wearing plated armor. They even have a sword(not shown in image).
We know that Kris made a Dark Fountain at the end of Chapter 2, so is it really that far off to assume that they also made the one in the librarby's computer lab? Or the on in the closet for that matter. Well, we know that they had thier knife at the end of chapter 1, and only Toby Fox knows what they did before chapter 1.
In the end of chapter 2, they rips they soul out before creating the new fountain, and shuffeling around outside; and slashing Torial's tires. Infact, they rips out their heart in the end of chapter 1, too. Afterward, they presumably went to librarby and made a fountain in the computer lab.
This is a really common thereoy, but it really needs more evidence to be collected, and more speculating to be done.
taken from Fandom. \ No newline at end of file diff --git a/blog-posts/Merging_Blog_to_the_main_site.md b/blog-posts/Merging_Blog_to_the_main_site.md new file mode 100644 index 0000000..c591904 --- /dev/null +++ b/blog-posts/Merging_Blog_to_the_main_site.md @@ -0,0 +1,5 @@ +--- +title: Merging the Blog repo in the main one +date: 2021 Sep 16 +--- +The blog for the repository has recently been merged into the main one, it used to be it's own repository, but now it's part of this repo.
I hope this change isn't horrible, I did it for the simple fact that it makes the whole site easier to make, just because of the fact that I don't need to make 2 repls that have the same look, and are for the same site.
The blog repo is now read only, or archived, and has been unpinned from my profile. This shouldn't cause any slowdowns for the site. \ No newline at end of file diff --git a/blog-posts/The_song_that_we_didnt_get_in_undertale.md b/blog-posts/The_song_that_we_didnt_get_in_undertale.md new file mode 100644 index 0000000..90cebfb --- /dev/null +++ b/blog-posts/The_song_that_we_didnt_get_in_undertale.md @@ -0,0 +1,5 @@ +--- +title: The Song we didn't get in Undertale +date: 2021 Dec 20 +--- +

Undertale is an amazing game. I really enjoyed my time playing it. I listen to the sound track a lot(I'm doing it as I write this). I even read a fanmade AU called Inverted Fate. The only thing that I haven't done(and don't intend on doing) is a Genocide Run. But, there's one thing that's kinda been bugging me since it first found out about it. It's the fact that their's a version of Undertale(the song) that wasn't added, and instead was replaced with the version we have now.

The Current Version

The version we got of Undertale was a pretty good one. It's a little sad, while also filled with hope(just like the monsters in the neutral route. It is kinda the song of their hope, since it only plays during the end of the neutral route). Below is the version we got in the game.

The One that could have been

This one is also greate, and I personally think I like it a lot better than the one we have. I feel like it's more happy in tone. Even if it might not fit with what the game would have been trying to fit it's context into, it's still a good song on it's own.

\ No newline at end of file diff --git a/blog-posts/What-about-the-second-site.md b/blog-posts/What-about-the-second-site.md new file mode 100644 index 0000000..2b64da6 --- /dev/null +++ b/blog-posts/What-about-the-second-site.md @@ -0,0 +1,5 @@ +--- +title: What about the second site? +date: 2021 Sep 01 +--- +So you may know about StevesGreatness.Repl.Co, or, the second site.
It contains more than what this one does, but also less. It doesn't have a blog, information about my alts on Scratch, or even addition projects. However, it does have a page for testing, an about me, a list of my accounts on other sites, and a list of my repls(which I want to eventually turn into a list of my repos, and Scratch projects as well). \ No newline at end of file diff --git a/blog-posts/Why-inspect-element-is-a-useful-tool.md b/blog-posts/Why-inspect-element-is-a-useful-tool.md new file mode 100644 index 0000000..c1fafb1 --- /dev/null +++ b/blog-posts/Why-inspect-element-is-a-useful-tool.md @@ -0,0 +1,5 @@ +--- +title: Why inspect-element is useful +date: 2021 May 17 +--- +
This post isn't very good, and I'm not proud of it.
So, as of currently, my Ocular Status is Mobile needs a better browser! #MobileSmartBrowser! (Er/Him). Part of the reason for this is so that inspect can be on mobile.

but what makes inspect so important?

Well I'm glad I asked!
So on GitHub, you only have 2000 actions you can do(on the free plan). So that means you need to use them carefully, make sure that you won't do something that wastes an action.
It helps you fix any mistake, before you make anymore.
Of course, you can always download the file, and edit it offline. But inspect element is easier, live, and requires less space in your hard-drive.
Thanks for coming to my Ted-talk.😜🤪 \ No newline at end of file diff --git a/blog-posts/Youtube_needs_a_Rest_API.md b/blog-posts/Youtube_needs_a_Rest_API.md new file mode 100644 index 0000000..2276465 --- /dev/null +++ b/blog-posts/Youtube_needs_a_Rest_API.md @@ -0,0 +1,5 @@ +--- +title: YouTube needs to have an open REST API +date: 2021 Sep 29 +--- +Youtube needs an open Rest API. Here are some reasons:
  1. It makes my life easier, as I don't need to write a billion lines of code, and not go throught the paid service known as google cloud console, to get an api key.
  2. It means that you only need to use fetch() on it.
  3. We don't need the most in depth api.
\ No newline at end of file diff --git a/blog-posts/checkbox-custom-styles.md b/blog-posts/checkbox-custom-styles.md new file mode 100644 index 0000000..7347f12 --- /dev/null +++ b/blog-posts/checkbox-custom-styles.md @@ -0,0 +1,5 @@ +--- +title: Customize an HTML Checkbox +date: 2022 Feb 19 +--- +

Checkboxes are hard to style. But when you're making a website, they may look ugly.

As you can see here, this bland checkbox does not fit into my clearly great website(/s). But really, it does not fit in at all.

The first step toward styling it how we want it is to give it an appearence of none, and a width and height that are what you want.

input[type="checkbox"] {
appearance: none;
width: 15px;
height: 15px;
}

Now we can do whatever we want to it. Also, remeber to add a checked pseudo

input[type="checkbox"] {
appearance: none;
width: 15px;
height: 15px;
background: #555;
border: 1px #252525 solid;
border-radius: 2px;
}

input[type="checkbox"]:checked {
background: #ce5aff;
}
\ No newline at end of file diff --git a/blog-posts/creating_a_theme_switch.md b/blog-posts/creating_a_theme_switch.md new file mode 100644 index 0000000..adab41e --- /dev/null +++ b/blog-posts/creating_a_theme_switch.md @@ -0,0 +1,5 @@ +--- +title: Creating a simple theme switcher +date: 2021 Dec 08 +--- +This is a simple tutorial on how to make a simple theme switcher.

Step 1: Creating the themes

The first step is to create the themes in your stylesheet, you can have as many as you want. Just make sure to remeber all their names within your CSS.

Step 2: Making an array

This is why you need to remeber all their names within the CSS. You need to add them all to an array in your JS. Below is an example of an array containing some themes.

const themes = ["light", "dark", "gamer"]

Step 3: Switching themes

This is the part you've been waiting for! The actual content switcher. It's surprisingly simple.

First, get the index of the current theme using let currentTheme = themes.indexOf(document.documentElement.className). Then, use an if statement to see if it's more than or equal to the length of the array containing your themes.

if (currentTheme + 1 >= themes.length) {
document.documentElement.className = themes[0]
} else {
document.documentElement.className = themes[currentTheme + 1]
}
Now just add a listener to the button(using event listener, getElement.onclick, or onclick)

Final Product

In the end, what you just made should look something like the iFrame below.
\ No newline at end of file diff --git a/blog-posts/creatingaswitch.md b/blog-posts/creatingaswitch.md new file mode 100644 index 0000000..34e4b30 --- /dev/null +++ b/blog-posts/creatingaswitch.md @@ -0,0 +1,5 @@ +--- +title: Creating a Switch in HTML and CSS +date: 2022 Feb 11 +--- +

A switch is something that is basically just a nicer checkbox. Here, I'll be showing you how to make one.

The first step is to create checkbox with any classname; I'll be using switch.
<style>
input[type=checkbox].switch {}
</style>
<input type="checkbox" class="switch">

Next step is to add an appearance of none to the CSS--make sure to add -moz- and -webkit-. After that, you're going to want to set it so that the checkbox a rectangle--make sure it's in px. We also want to set the position to relative

<style>
input[type=checkbox].switch {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
position: relative;
width: 30px;
height: 16px;
}
</style>
<input type="checkbox" class="switch">

Next we want to create a ::before pseudo. In there we want to make it have a position of relative, a width and height that are abit less than the height of the main switch, a display of inline-block, a top and left of 0, a content of anything, color of transparent, and a background color that's different from the one in the main switch.

<style>
input[type=checkbox].switch {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
position: relative;
width: 30px;
height: 16px;
}
input[type=checkbox].switch::before {
top: 0;
left: 0;
position: relative;
background: red;
content: ".";
color: transparent;
width: 14px;
height: 14px;
}
</style>
<input type="checkbox" class="switch">

Finally add a pseudo called :checked which checks if a checkbox, or a radio, was checked; you'll want to change the before pseudo if the the checkbox is checked. You need to set the left to a bit less than the width of the checkbox; you can adjust it until it looks right to you.

Now, let's look at what it looks like
\ No newline at end of file diff --git a/blog-posts/dividing-by-0.md b/blog-posts/dividing-by-0.md new file mode 100644 index 0000000..94a7111 --- /dev/null +++ b/blog-posts/dividing-by-0.md @@ -0,0 +1,5 @@ +--- +title: Dividing by 0 +date: 2021 May 24 +--- +
This post isn't very good, and I'm not proud of it.
This post is not fact, the word problems are wrong, and it would never be x*0, rather, it would be 0*x
So, lets say you own a hotel(just go along with it).

You have 2 rooms, and 0 people, if each room gets an equal amount of people(not including decimals, you can't have half, or a quarter of a person without them being dead)

common sense would tell you that you need that there would be 0 people in each room, right? Wrong, and now ever mathematician in the world will hunt you down.
Wait, if that's not correct, what is the right answer? Thanks for asking... me. The answer is, infinity... but why?

Well, according to the mathematicians, it's because you can fit infinite 0s of people into 1 room.
It's weird... I know. So why don't we correct this? Because the mathematicians decided that x/0=infinity... and ifyou know one, you'd know that they don't really like to be corrected. But we can still correct, we just need to get the current mathematician out of their seats... hm...
\ No newline at end of file diff --git a/blog-posts/fizzbuzz.md b/blog-posts/fizzbuzz.md new file mode 100644 index 0000000..f8d7250 --- /dev/null +++ b/blog-posts/fizzbuzz.md @@ -0,0 +1,5 @@ +--- +title: The FizzBuzz Program +date: 2022 Feb 20 +--- +

A FizzBuzz Program is a program used in many job interviews to see if a programmer is good at problem solving. There are many ways to make one.

First let me tell you why I write these programs. These programs, at least in my opinion, are good when you're learning a new programming language. It gives you a problem to solve, and all you need to do to solve it. Incase you're wondering, the problem is to make a program that counts from 1 to 100 and replaces all multiples of 3 with Fizz, all multiples of 5 with Buzz, and multiples of both with FizzBuzz. Generally in interviews, they also ask you to add on more multiples, such as multiples of 7 are replaced with Fuzz, and multiples of 11 are replaced with Bizz.

Now that I've told you what a FizzBuzz Program is, let me show you how I make them in Psuedo-Code.

for i in 1-100 {
toPrint = ""
print(toPrint)
}

The first thing I do is I create a for loop, and within it I put a print statement and a variable named toPrint.

def check(checktomulti, multi, toreturn) {
if checktomulti % multi == 0 {
return toreturn
}
return ""
}
def checkEmpty(string, number) {
if string == "" {
return number
}
return string
}
for i in 1-100 {
toPrint = checkEmpty(check(i, 3, "Fizz") + check(i, 5, "Buzz"), i)
print(toPrint)
}

The next thing I do is I define a function that checks if one number is a multiple of another, and if it is, then it returns the string, otherwise, it returns an empty string.

Then I make a function that checks if a string is an empty one, if it is, then it returns a number.

Once I have these 2 functions, I go back into the for loop and make the toPrint variable have the variable for checking if a string is empty(and if it is replace it with a number) check if 2 of the other function that check if one number is a multiple of another(and if it is, return a string). Finally, it prints the output.

I've tried this method many times. Below are some examples of this method in action!

\ No newline at end of file diff --git a/blog-posts/fortress-forever-on-linux.md b/blog-posts/fortress-forever-on-linux.md new file mode 100644 index 0000000..5b762c9 --- /dev/null +++ b/blog-posts/fortress-forever-on-linux.md @@ -0,0 +1,14 @@ +--- +title: Fortress Forever on Linux! +date: 2022 Dec 16 +updated: 2023 Jan 1 +--- +Fortress Forever is finally playable fully on Linux using Proton-GE version 7-41(note: if you change the setting you will have to reboot the game). + +If you need a quick rundown on how to download and install Proton-GE, [I've made a video about that already](https://youtu.be/B2LZ8nYd3Bw). It is technically about a different game, however, the problem is still similar enough to apply pretty much the same steps. + +It plays pretty well, the only problem is when a local server changes maps, and the font for some of the menus(and the chat) being very... bad looking. It's not the game's fault for the second one, however, it is still something that's annoying if you don't want to do too much tinkering. + +I'm glad to be able to play this great game on my daily OS without having to open Bottles every time I want to play Fortress Forever. + +Whenever I'm playing Fortress Forever, I'm usually on [MaxTF's Midwest server](https://www.gametracker.com/server_info/server2.maxcommunity.net:27015/)... I have the lowest ping there, not good though. \ No newline at end of file diff --git a/blog-posts/macos-page-tab-nav.md b/blog-posts/macos-page-tab-nav.md new file mode 100644 index 0000000..7235d5e --- /dev/null +++ b/blog-posts/macos-page-tab-nav.md @@ -0,0 +1,9 @@ +--- +title: Page Keyboard Navigation on MacOS +date: 2022 Feb 26 +--- +Ok, so I feel like a complete idiot right now. + +When I've been trying(and failing) to use the tab key on my computer(it's a Macbook) for what feels like forever now. Turns out, it was as simple as hitting control + fn + <<(<< is F7). + +To be honest, I thought that it was just an issue with FireFox, and then I read [Browser keyboard navigation in macOS](https://www.a11yproject.com/posts/macos-browser-keyboard-navigation/) and realized that it was an issue with MacOS! This should really be an option enabled by default, but Apple is stupid. \ No newline at end of file diff --git a/blog-posts/md.md b/blog-posts/md.md new file mode 100644 index 0000000..7bdb4b4 --- /dev/null +++ b/blog-posts/md.md @@ -0,0 +1,7 @@ +--- +title: MD now works here :) +date: 2022 Jan 20 +--- +I'd just like to say that my blog now works with _mark down_. So that's cool. + +Incase you're wondering, I used a library called [marked.js](https://marked.js.org/)(a popular library used to convert `markdown` to `html`) \ No newline at end of file diff --git a/blog-posts/satisfactory-farming-idea.md b/blog-posts/satisfactory-farming-idea.md new file mode 100644 index 0000000..07bbb25 --- /dev/null +++ b/blog-posts/satisfactory-farming-idea.md @@ -0,0 +1,54 @@ +--- +title: Satisfactory Concept: Farming +date: 2023 Apr 16 +--- +Here is my idea for automating the collection of healing materials(such as Beryl Nuts) in Satisfactory + +## Plant Pods + +Plant pods would be researchable in the Nutrients section of the MAM. It would cost: +* 5 modular frames +* 10 steel pipes +* 20 biofuel + +to research. + +You'd be able to build it in a new _Farming_ section in the production category of the build menu. It would cost the user: +* 4 steel pipes +* 2 quickwire +* 5 biofuel + +to build. It would require 1 MW of power to function. Plants that are left without power while in there will not continue growing or providing harvest, however they will not die(that'd be annoying if they did). + +The user would be able to interact with the planting pod to bring up a menu that tells them what stage of growing it's at(baby, growing, fully grown), how ripe for harvest the plant is(out of 3 states: none, starting, ripe). The UI will have a button to harvest at the bottom, and a box that will allow the plant to be exchanged for another--which would give you a few leaves, proportional to how long it's been growing(0 if baby, 4 if growing, 10 if fully grown), and the amount of fruit they would have gotten from the harvest + 1 extra(for the fruit they put in). + +## Robot Farmers + +Researchable under the _Crystal Oscillator_. The research cost is: +* 10 Crystal Oscillators +* 5 AI limiter +* 3 quickwire + +These little farmers need power to survive, which is why the _ROBOT charger_ is unlocked with them. +This building can be built in the power section. They cost: +* 15 quickwire +* 2 modular frames +* 5 crystal oscillators + +to build. + +Once built, this building acts like the truck station, but instead of coal, it loads power, and it can only unload items from the bot's inventory. + +The Robo-Farmer is then buildable under the _Farming_ section in the production category of the build menu. It costs : +* 1 Factory Cart +* 2 Crystal Oscillators +* 1 AI limiter +* 3 quickwire +* 5 steal pipes + +to build. + +These little robots have themselves a little UI that allows you to select items they should farm. Once given a task, these robots will always return to the nearest _ROBOT charger_ when their inventory is full, or they are running low on power(robots will always attempt to keep themselves powered). If the robot cannot find a plant within range that is harvestable, then the they will wait until there is one. + +## Getting the most out of these resources +Robot Farmers are best at traversing on foundations(they spend less power). As such, it is recommended, that the player create a flat platform that has plant pods with some space between for the bots to traverse between them. In the center, the player should build a _ROBOT charger_, as it will allow the robots the run around equally in each direction. Players should also utilize the _Conveyor Lift_ to bring materials to a layer above for sorting, or other purposes. diff --git a/blog-posts/singular-blog.md b/blog-posts/singular-blog.md new file mode 100644 index 0000000..2befef5 --- /dev/null +++ b/blog-posts/singular-blog.md @@ -0,0 +1,8 @@ +--- +title: My blog is now in one place +date: 2024 Jan 1 +--- + +Alright, I've now moved all my full blog posts over to this one website. There might be other I miss in other places, but I'll add them here soon. I will not be moving over my micro-blogs, however. Those are too small, and I'd rather keep those separated anyway. + +I'm not a fan of how I wrote before December of 2022, everything there is filled with spelling mistakes and grammar issues, I also think most of it was rude towards the reader, which is not a good impression. \ No newline at end of file diff --git a/blog-posts/symbols.md b/blog-posts/symbols.md new file mode 100644 index 0000000..8bae273 --- /dev/null +++ b/blog-posts/symbols.md @@ -0,0 +1,5 @@ +--- +title: Symbols +date: 2021 Oct 10 +--- +In our lifes on the internet, we see alot of characters that we don't normally see. Like @, #, &, [], {}, \, ;, and |. But what are thier names, what are their origins, and why do they look like they do? I'm going to try and find out!
Let's start with what they are used for most of the time on the web.
  1. @ is used to mean at. It can also be used to define a username(@user), or even emails(person@emailprovider.topleveldomain)
  2. The hashtag, #, is used for tagging posts to topics(#NumberOneProgrammer). It is also sometimes used to define a number(#1). It's also used in CSS to define IDs, and in urls to scroll down to a certain part of the page(#theMan).
  3. & is a symbol used to mean "and"(the dog & the cat). It is also used in urls to be an addition to the search(?q=look%20mom%20no%hands%21&images)
  4. Square brackets([]), are used to define a list in the most widely used programming language on the web, JavaScript(["the dog", "the cat", "the bird", "the plane"]). They can also be used in the middle of quotes to give context("Have a nice day!" [The mayor] shouted)
  5. Curly brackets({}) are used to define a JavaScript object( {person: "Jim", car: "JavaScript car :)"} )
  6. backslash(\) is used in markdown, and JavaScript strings, to define a character that should remain itself, such as \# showing up as a # instead of a heading.
  7. Semi-collins(;) are used to define the end of a command in lots of programming languages, like JavaScript(alert("hello world");), PHP(echo "hello world";)
  8. |, or Vertical bar, has no real use on the web.
  9. ~, or tilde, also, doesn't find much use
  10. Grave accents(`) are used to define a multi-lined JavaScript string(`this has
    2 lines`)
Those are what they are, but what about their original meanings?
  1. The At-Sign(@) is used to mean at(they're @ their house), it could also be used for a price(@10 pence)
  2. #(pound-sign, hashtag, number-sign, octothorpe, sharp-sign), it's used to mean lb(10 #), define numbers(#10), define a tag in social media(#NumberOneCoder), to define the musical notes that are sharp, or used on telephones to do... something.
  3. Ampersands(&) are used as &, that's it(doges & golden retrievers).
  4. [Square Brackets] are used as a way to add context to the middle of a sentence, like "he ate the sausage", but we don't know who "he" is, and what kind of sausage he is eating, so it should be "[the young boy] ate the [cheese filled] sausage"
  5. {Curly Brackets} don't get much use. They would be used for {defining words, lines, sentences as being in a group}.
  6. |s are used to define absolute value, like |-2| = 2. It can also be used as a replacement for periods, and forward slashed
  7. The backslash doesn't get much real use in writing. In math, it is used to represent the set difference(which I won't really explain), such as a\n
  8. The Semicolon is used to seperate ideas in a sentence filled with commas, add seperation between an explaination; and a seperator(,) in a list, and merge 2 sentences together without a compound(and, but, or). Such as "I am so happy for them, and I am proud" & "I am so happy; I am proud." act the same. If you'd like a better explaination, I'd suggest you to check out How to use a semicolon by Ted-Ed, it's a great whatch, and it's presented in an interesting and fun style.
  9. Grave accents(`) are used in some words from other languages, but not much in English. However it can be used in songs and poems to indicate that silent letters aren't silent.
  10. Tildes(~) can be used in a sentence to mean about, for example, ~10.
\ No newline at end of file diff --git a/blog-posts/tf2-disguise-cmd.md b/blog-posts/tf2-disguise-cmd.md new file mode 100644 index 0000000..7fc7160 --- /dev/null +++ b/blog-posts/tf2-disguise-cmd.md @@ -0,0 +1,62 @@ +--- +title: TF2 disguise Command +date: 2022 Dec 17 +updated: 2022 Dec 24 +--- +A Spy class-specific command + +## Layout + +The basic layout of the disguise command is very simple. + +``` +disguise [class : number] [team : number] +``` + +## `class` Parameter + +`1` : Scout + +`2` : Sniper + +`3` : Soldier + +`4` : Demoman + +`5` : Medic + +`6` : Heavy + +`7` : Pyro + +`8` : Spy + +`9` : Engineer + +The reason the classes are in this order is that they were added in that order. As mentioned in the [Team Fortress wiki's article on _Quake World Team Fortress_](https://wiki.teamfortress.com/wiki/Team_Fortress#Versions)(A.K.A. _Quake Team Fortress_, or just _Team Fortress_), it mentions the classes were added in the order of _scout_, _sniper_, _soldier_, _demoman_, and _medic_; then _heavy_; _pyro_; and finally _spy_ and _engineer_. + +## `team` Parameter + +These depend upon what team you're on. + +`-1` : Enemy Team + +`-2` : Friendly Team + +### Specific Teams + +These aren't extremely useful, but they exist. They are independent of the team you're on. + +`1` : Blu Team + +`2` : Red Team + +## Example + +Normally, when you disguise as a spy of your team, you undisguise. This also applies to the disguise command, allowing for an "undisguise" command. + +``` +disguise "8" "-2" +``` + +You're also able to put this into a bind, allowing for an undisguise bind. \ No newline at end of file diff --git a/blog-posts/whyLocalVarCallLet.md b/blog-posts/whyLocalVarCallLet.md new file mode 100644 index 0000000..0d3ebbe --- /dev/null +++ b/blog-posts/whyLocalVarCallLet.md @@ -0,0 +1,5 @@ +--- +title: Why local variables are called "let" +date: 2022 Jan 10 +--- +

In JavaScript there are 3 different kinds of variables, global variables(using var), constants(const, and local variables(let). All of the act allittle differently from eachother. Allow me to explain what they do.

Global variables, made using var, are as they sound, global variables. Once defined, they can be used, edited, or redefind anywhere.

Constants, defined with const, are constant, they cannot change, at all.

Local variables, defined with let, are variables that can only be used in the place that it is defined, like a function, and it's children.

Now that we has that established, let's talk about how local variables got their name.

Turns out "let" is a mathematical term. The "let" expression may also be defined in mathematics, where it associates a Boolean condition with a restricted scope. [source]. It was first used in programming in early languages like Basic.

In case you're wondering, the main source is this answer on Stack Overflow. \ No newline at end of file diff --git a/build.py b/build.py index 5b2d700..43c5868 100644 --- a/build.py +++ b/build.py @@ -4,6 +4,7 @@ from os import mkdir as CreateDirectory, listdir as ListDirectory, unlink as DeleteFile from os.path import isfile as IsFile, exists as PathExists from distutils.dir_util import copy_tree as CopyDirectory +from datetime import datetime GITHUB_BUILD_DIR = "docs" # Separate because this site is built with an action that won't work if they aren't LOCAL_BUILD_DIR = "build" @@ -27,17 +28,21 @@ def WipeFinalDir(): continue DeleteDirectory(path) +def PostSortHelper(Post): + return datetime.strptime(Post["date"], "%Y %b %d") + def GetBlogList(): PostSlugs = ListDirectory("blog-posts") Posts = [] for slug in PostSlugs: - with open("blog-posts/" + slug) as MDFile: + with open("blog-posts/" + slug, encoding="utf-8") as MDFile: PostHTML = RenderMarkdown(MDFile.read()) Item = PostHTML.metadata Item["content"] = PostHTML Item["pathname"] = slug.replace(".md", ".html") Posts.append(Item) - return Posts + PostsByDate = sorted(Posts, key=PostSortHelper, reverse=True) + return PostsByDate PostList = GetBlogList() @@ -45,16 +50,16 @@ def RenderPosts(): for post in ListDirectory("blog-posts"): path = "blog-posts/" + post RenderedHTML: str - with open(path, "r") as PostContent: + with open(path, "r", encoding="utf-8") as PostContent: PostHTML = RenderMarkdown(PostContent.read()) Title = PostHTML.metadata["title"] PostDate = PostHTML.metadata["date"] RenderedHTML = RenderTemplate("blog-post.html", Title=Title, PostDate=PostDate, Content=PostHTML) - with open(BUILD_DIRECTORY + "/blog/" + post.replace(".md", ".html"), "w") as PostLocation: + with open(BUILD_DIRECTORY + "/blog/" + post.replace(".md", ".html"), "w", encoding="utf-8") as PostLocation: PostLocation.write(RenderedHTML) def RenderPage(PageInput: str, ContentDest: str, **kwargs): - with open(BUILD_DIRECTORY + "/" + ContentDest, "w") as DestLocation: + with open(BUILD_DIRECTORY + "/" + ContentDest, "w", encoding="utf-8") as DestLocation: DestLocation.write(RenderTemplate(PageInput, **kwargs)) if __name__ == "__main__":