diff --git a/_site/2020-04-27-quiz-your-friends-xss.html b/_site/2020-04-27-quiz-your-friends-xss.html index 7b94d42..db1966e 100644 --- a/_site/2020-04-27-quiz-your-friends-xss.html +++ b/_site/2020-04-27-quiz-your-friends-xss.html @@ -37,10 +37,10 @@

While filling in one of my friend’s surveys I thought it would be funny for them to know it is me without anyone else knowing. -We were young and had Inspect Elemented a few things together, +We were young and had Inspect Elemented a few things together, so it was a safe bet that an HTML joke would let them know.

-

I decided to write my name like so: <b>Steve</b>. +

I decided to write my name like so: <b>Steve</b>. Steve is in reference to the main character in the video game Minecraft.

@@ -69,13 +69,13 @@ How did this happen? You might wonder.

Here is a great demonstration why you should do most of your validation on the server side. As a user, I can edit any of the HTML, CSS, or Javascript your server serves to me.

-

Quiz your friends uses the maxlength=20 HTML attribute on the name input field. -Imagine trying to fit in a script tag doing anything useful with 20 characters! Don’t forget that includes the <script> tag. +

Quiz your friends uses the maxlength=20 HTML attribute on the name input field. +Imagine trying to fit in a script tag doing anything useful with 20 characters! Don’t forget that includes the <script> tag. That would leave 13 characters for Javascript. Although I’m sure a genius would be able to code golf that, I know I couldn’t.

Now obviously I can edit any HTML that a server has sent to me. -If I open up my inspect element window, I can go ahead and change that maxlength attribute to anything I want. +If I open up my inspect element window, I can go ahead and change that maxlength attribute to anything I want. Let’s change it to 100!

@@ -96,9 +96,9 @@ Imagine being able to send entire executable programs as your “name” in one

So I went on my merry way thinking about ways to use malicious javascript. Then, I thought that might be mean, so I decided to warn users instead. -I filled in the name with a script tag and a call to alert() to warn the user about this site.

+I filled in the name with a script tag and a call to alert() to warn the user about this site.

-

JAVASCRIPT_NAME.JPG

+

JAVASCRIPT_NAME.JPG

I ran out of room before I could finish it. Hmmm. What if I do “Inspect Element” and manually override the max-length attribute?

@@ -121,13 +121,13 @@ How can this be done?

Here is my quiz below:

-

CREATING_QUIZ.IMG

+

CREATING_QUIZ.IMG

Setting A Name With an HTML Tag

Just like the image above, about how I found out about this vulnerability: go ahead and use an HTML tag in your name to test this out.

-

BOLD_ITALIC_STEVE.JPG

+

BOLD_ITALIC_STEVE.JPG

diff --git a/_site/2020/01/22/padding-and-margin.html b/_site/2020/01/22/padding-and-margin.html index 3f9bfb7..cde799d 100644 --- a/_site/2020/01/22/padding-and-margin.html +++ b/_site/2020/01/22/padding-and-margin.html @@ -39,11 +39,11 @@

Now although this image shows all the different types of spacing as equal, the majority of the time these will mostly be padding (inner) and margin (outer). Padding is the inner space between the element and its border; margin is the outer space between two different elements.

-

Within the margin the user is unable to press any links or execute any javascript code. It is empty space. If each <link> on your navigation bar has 10 pixels of margin, then there would be 20 pixels in between each <link> that would not be clickable by the user.

+

Within the margin the user is unable to press any links or execute any javascript code. It is empty space. If each <link> on your navigation bar has 10 pixels of margin, then there would be 20 pixels in between each <link> that would not be clickable by the user.

-

If you have <link>s on your navigation bar with padding set to 20 pixels, however, then there will be 20 pixels on each side of the <link> text where the user is able to click.

+

If you have <link>s on your navigation bar with padding set to 20 pixels, however, then there will be 20 pixels on each side of the <link> text where the user is able to click.

-

If that part is confusing, try thinking about it in terms of whether background-color would apply.

+

If that part is confusing, try thinking about it in terms of whether background-color would apply.

@@ -60,7 +60,7 @@ - + @@ -69,9 +69,9 @@

In summary:

I hope this covers the basics of margin and padding! Happy coding!

diff --git a/_site/2020/02/19/rsa2.html b/_site/2020/02/19/rsa2.html index 7a30681..1d1d498 100644 --- a/_site/2020/02/19/rsa2.html +++ b/_site/2020/02/19/rsa2.html @@ -107,9 +107,9 @@ In this case, “Hello!” would become “Ifmmp!” That is just using a shift of one. You can use a shift of seven, for example, and then you would shift letters like so:

When you reach the end of the alphabet, wrap around to the beginning to find the encrypted letter.

diff --git a/_site/2020/04/06/rsa4.html b/_site/2020/04/06/rsa4.html index c07c197..0a6bf50 100644 --- a/_site/2020/04/06/rsa4.html +++ b/_site/2020/04/06/rsa4.html @@ -56,7 +56,7 @@ You have been warned.

Step 0: Setup

-

We will be using the utility gpg for this tutorial.

+

We will be using the utility gpg for this tutorial.

The other thing to note: The character ‘$’ (dollar sign) is usually not typed when shown in a command. It simply indicates that you do not need administrative privilages to run these commands.

@@ -84,7 +84,7 @@ License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html

To encrypt a document with somebody’s public key, you need to first obtain it. My public key is available at this link, and you can use it to send me encrypted stuff.

-

If you are on a linux terminal, you can use the curl or wget command to download it.

+

If you are on a linux terminal, you can use the curl or wget command to download it.

wget:

@@ -130,7 +130,7 @@ Please select what kind of key you want:
 Your selection? 
 
-

Select the option 1. You want two keys, both RSA.

+

Select the option 1. You want two keys, both RSA.

Next we will select the key size:

@@ -164,9 +164,9 @@ Key expires at Tue Apr  7 02:24:23 2020 UTC
 Is this correct? (y/N) 
 
-

Type y to confirm your choice.

+

Type y to confirm your choice.

-

Now gpg is going to ask you to create a user id to indetify this key. +

Now gpg is going to ask you to create a user id to indetify this key. Use some test data for now. User input is in bold, feel free to follow along or to put your own test data in.

@@ -190,7 +190,7 @@ If you are simply using this for test purposes, then you can feel free to set it to something like “test”. When create a long-term use pulbic key make sure to make the password very secure.

-

During the process of creating your key, gpg may warn you with this message:

+

During the process of creating your key, gpg may warn you with this message:

 We need to generate a lot of random bytes. It is a good idea to perform
@@ -236,8 +236,8 @@ $ gpg --export --armour "<test@test.org>" > public-key.asc
 
 

Step 2: Import Public Key

-

This list of keys that gpg keeps on tap so to speak, is called our “keyring”. -Your will need to import a new public key to encrypt files with gpg.

+

This list of keys that gpg keeps on tap so to speak, is called our “keyring”. +Your will need to import a new public key to encrypt files with gpg.

If you already created your own public key, then this step is not necessary unless you want to also encrypt something for me :)

@@ -248,7 +248,7 @@ Your will need to import a new public key to encrypt files with --import option of gpg. Like so:

+

To import a public key to use for encrypting files, use the --import option of gpg. Like so:

 $ gpg --import public-key.asc
@@ -262,7 +262,7 @@ gpg:               imported: 1
 

Step 3: Have A Message To Encrypt

You can make a new file which holds some important, secret data. -Feel free to use a graphical editor if you have one, if not, nano works alright too.

+Feel free to use a graphical editor if you have one, if not, nano works alright too.

   Rules Of A Good Life:
@@ -273,21 +273,21 @@ Feel free to use a graphical editor if you have one, if not, , and we’ll use that name later.

+

Save this file as something like test-pgp.txt, and we’ll use that name later.

Step 4: Encrypt A Message

Now that we have a message to send and person to send to, all we have to do is encrypt this message and it’ll be on its merry way! -To do so, we must specify two new options to gpg.

+To do so, we must specify two new options to gpg.

-

The first is --recipient. -This tells gpg to encrypt using a certin public key that we have in our keyring. +

The first is --recipient. +This tells gpg to encrypt using a certin public key that we have in our keyring. You can use the person’s name, email address, or the key’s uid.

-

The second is --encrypt.

+

The second is --encrypt.

-

You will also specify the --armour option to use ASCII armoured files. Put this option after --encrypt, and put the file name after --armour. See below.

+

You will also specify the --armour option to use ASCII armoured files. Put this option after --encrypt, and put the file name after --armour. See below.

You can either use your own public key name to encrypt a document (allowng only you to decrypt it), or you can use my public key that we imported earlier (allowing only me to decrypt it). @@ -329,10 +329,10 @@ nv117moLfK22Mst/

Step 5: Decryption (optional)

If you created your own public/private keypair in step 1, -and you encryped using --recipient "Your Test Name", +and you encryped using --recipient "Your Test Name", then you can decrypt your document as well!

-

You will need to specify --decrypt, and that’s all folks!

+

You will need to specify --decrypt, and that’s all folks!

 $ gpg --decrypt test-gpg.txt.asc
diff --git a/_site/2020/04/12/nas1.html b/_site/2020/04/12/nas1.html
index 7d55224..ca4544e 100644
--- a/_site/2020/04/12/nas1.html
+++ b/_site/2020/04/12/nas1.html
@@ -69,7 +69,7 @@ this system can withstand the failure of two drives.

  1. Celery Stick. An old grey HP laptop with a Braille stickered keyboard. Does not work right now; bad thermal paste job.
  2. A Dell laptop lent to me by my school during my studies.
  3. -
  4. Houston. A 21-inch 2011 iMac for which the screen does not work under Linux (excep with the nomodeset kernel option enabled).
  5. +
  6. Houston. A 21-inch 2011 iMac for which the screen does not work under Linux (excep with the nomodeset kernel option enabled).
  7. An Old Toshiba laptop (circa 2010) that I got for $50 to test with OpenBSD (works….sometimes).
  8. Main Rig. My main laptop is an ASUS-705 TUF gaming laptop.
diff --git a/_site/2020/04/25/xss.html b/_site/2020/04/25/xss.html index fb1beb3..6ffde06 100644 --- a/_site/2020/04/25/xss.html +++ b/_site/2020/04/25/xss.html @@ -51,7 +51,7 @@ by linking to Javascript code stored on another server.

I have a file on my website called hacked.js. If I was able to run this javascript file on anybody visiting a certain website that is not mine, this would be called cross-site scripting.

-

Click the above hacked.js link to view the code I use to “hack” this website. +

Click the above hacked.js link to view the code I use to “hack” this website. It’s safe, I promise ;)

Now, how can we get this code to execute when a user visits this site? @@ -62,11 +62,11 @@ To explain, I will start with some of the underlying technologies.

No, this is not a Sherlock Holmes novel!

If we suppose that a website is built with sequences like these (called “tags”): -<body>, <p> (for paragraph), <link> and <b> for bold, +<body>, <p> (for paragraph), <link> and <b> for bold, then why can you see the left and right angle bracket characters? Don’t they mean something? Shouldn’t they be telling the browser: “Hey! Make me bold!”? -Why doesn’t everything after me typing <b> turn bold?

+Why doesn’t everything after me typing <b> turn bold?

The answer is:

@@ -83,7 +83,7 @@ If I use the left and right brackets on my keyboard however, things will indeed <b>show up bold</b>.
-

Notice how all visible left angle brackets use an &lt; to show them?

+

Notice how all visible left angle brackets use an &lt; to show them?

These are called escape characters. They tell a system, in this case your web browser: @@ -91,12 +91,12 @@ They tell a system, in this case your web browser:

Sanitization

-

Most of the time XSS attacks are done using poorly sanitized HTML <input> elements.

+

Most of the time XSS attacks are done using poorly sanitized HTML <input> elements.

Sanitization is when a program (usually on the server side), -will remove characters like < and replace them with the aforementioned “escape characters”. -Internally this would be something like &lt;, -but they would show up to a user as <.

+will remove characters like < and replace them with the aforementioned “escape characters”. +Internally this would be something like &lt;, +but they would show up to a user as <.

When inputs are not properly sanitized and the input is shown to the user in another part of the website, then a malicous user can type in HTML that will run whenever anybody tries to look at what they typed. @@ -110,16 +110,16 @@ Although this may annoy your victim it is not dangerous security wise.

There is one tag however, that is scary…

-

<script>

+

<script>

-

The <script> tag allows you to write code that can:

+

The <script> tag allows you to write code that can:

  1. Change the page contents.
  2. Redirect the user to a new page automatically.
  3. Get a user’s location.
  4. Open a user’s microphone/webcam.
  5. -
  6. With the src attribute you can also load a script from another site. (This is XSS)
  7. +
  8. With the src attribute you can also load a script from another site. (This is XSS)

Those last two will ask for permission from the user (if their browser isn’t insanely insecure).

diff --git a/_site/2020/05/01/nginx-socket-io-projects.html b/_site/2020/05/01/nginx-socket-io-projects.html index f21553a..7d4524d 100644 --- a/_site/2020/05/01/nginx-socket-io-projects.html +++ b/_site/2020/05/01/nginx-socket-io-projects.html @@ -32,16 +32,16 @@

Despite the long name of the article, I have a feeling this may apply to more people than I might think. -If you have a Node.js application which needs socket.io connections that you want to pass throgh nginx’s reverse_proxy directive then this is the article for you!

+If you have a Node.js application which needs socket.io connections that you want to pass throgh nginx’s reverse_proxy directive then this is the article for you!

You must seperate the socket.io sockets and the static resources.

    -
  • The socket connections can be routed through the default $host/socket.io if you want to ease modifications to the source code.
  • +
  • The socket connections can be routed through the default $host/socket.io if you want to ease modifications to the source code.
  • The connections to your main npm Node.js application can be routed through the relevant directory.
-

Here is the relevant part of my projects.tait.tech.conf file:

+

Here is the relevant part of my projects.tait.tech.conf file:

 location /socket.io {
@@ -64,13 +64,13 @@ location /ttrpg {
 

Explaination:

For this application, -I needed the /ttrpg directory to connect to my main Node.js instance. This was going to be the root of a ttrpg project. +I needed the /ttrpg directory to connect to my main Node.js instance. This was going to be the root of a ttrpg project. It was to have static files served form my Node.js application.

-

I also needed /socket.io to conenct to my running npm instance. -When I tried to route all the traffic through the /trrpg location directive +

I also needed /socket.io to conenct to my running npm instance. +When I tried to route all the traffic through the /trrpg location directive I had no luck whatsoever; -$host/ttrpg/socket.io/* calls always failed with a 404.

+$host/ttrpg/socket.io/* calls always failed with a 404.

Having two seperate blocks forwarding in different ways seems to fix this. I am not knowledgable enough to understand how.

@@ -79,7 +79,7 @@ I am not knowledgable enough to understand how.

Happy hacking!

-

P.S. I forgot to mention I also symbolically linked the socket.io.js file (that node is supposed to serve automatically) to the static client dir. +

P.S. I forgot to mention I also symbolically linked the socket.io.js file (that node is supposed to serve automatically) to the static client dir. For some reson the node instance would not serve this file without that.

diff --git a/_site/2020/06/04/site-update.html b/_site/2020/06/04/site-update.html
index 7923ba5..2a6a668 100644
--- a/_site/2020/06/04/site-update.html
+++ b/_site/2020/06/04/site-update.html
@@ -35,7 +35,7 @@
 
 

Also, Clue has been delayed due to my partner in crime on the project wokring too many hours.

-

I also posted a new project called Caesar Cipher in C. It will be an intermediate example of how to use build systems like make.

+

I also posted a new project called Caesar Cipher in C. It will be an intermediate example of how to use build systems like make.

diff --git a/_site/2020/06/25/tmux-minecraft.html b/_site/2020/06/25/tmux-minecraft.html index 1fe86de..962c579 100644 --- a/_site/2020/06/25/tmux-minecraft.html +++ b/_site/2020/06/25/tmux-minecraft.html @@ -45,18 +45,18 @@ Especially when I really just want to be playing games but I just need to check

Solution

-

So to solve this interesting problem, I decided to use tmux. -tmux is a tterminal multiplexer. +

So to solve this interesting problem, I decided to use tmux. +tmux is a tterminal multiplexer. This allows you to run a terminal session, then detach fromc it while it still runs in the background.

This is very valuable when running command line applications that need to have an active console connection, like a Minecraft server.

-

So first I looked at the tmux command send-keys.

+

So first I looked at the tmux command send-keys.

-

send-keys

+

send-keys

-

send-keys allows you to send text, and key presses to a tmux session. -Now assuming this tmux session is attached to a Minecraft server, +

send-keys allows you to send text, and key presses to a tmux session. +Now assuming this tmux session is attached to a Minecraft server, there is no reason you could not run a command like this:

@@ -70,9 +70,9 @@ Then, it will hit the newline character, this will execute the command.

But how do we get information about who is typing what in the Minecraft chat?

-

tmux’s capture-pane is painful

+

tmux’s capture-pane is painful

-

So in the manual page for tmux I can see a section recorded below for options I can give to the capture-pane subcommand.

+

So in the manual page for tmux I can see a section recorded below for options I can give to the capture-pane subcommand.

   -S and -E specify the starting and ending line numbers,
@@ -82,10 +82,10 @@ Then, it will hit the newline character, this will execute the command.

default is to capture only the visible contents of the pane.
-

What it seems to be saying is I can start at line -S n and end at line -E n. -Negative numbers start from the bottom, so in theory I can do the following: tmux capture-pane -S -1 should capture only the last line, because I’m starting from the last line. Right?

+

What it seems to be saying is I can start at line -S n and end at line -E n. +Negative numbers start from the bottom, so in theory I can do the following: tmux capture-pane -S -1 should capture only the last line, because I’m starting from the last line. Right?

-

No. It just doesn’t work. Negative numbers do not work with the tmux capture-pane subcommand.

+

No. It just doesn’t work. Negative numbers do not work with the tmux capture-pane subcommand.

So I did some simple UNIX piping, like so, to get just the last thing in the chat.

@@ -95,19 +95,19 @@ $ tmux capture-pane -p -t steve | tail -n1

TaterTheTot is my Minecraft username :)

-

-p prints the result to the terminal/stdout.

+

-p prints the result to the terminal/stdout.

-

steve is the name of the tmux session I’m trying to pull form.

+

steve is the name of the tmux session I’m trying to pull form.

So that’s done! Beauty!

Now that we have that, how can we extract the username and the message from the latest line?

-

grep

+

grep

-

grep is a command to find patterns of text. -grep has an option to only show a matching pattern of text. -This option is -o.

+

grep is a command to find patterns of text. +grep has an option to only show a matching pattern of text. +This option is -o.

Let’s see how we can use this in conjunction with our latest line of server output to get our results.

@@ -117,11 +117,11 @@ $ echo "[DEBUG] [SERVER] blah blah: <TaterTheTot> MY_MESAGE" | grep -o "&l

Now, that’s my name with the < and > attached. Not bad! -We can use the sed command to clean it up a bit.

+We can use the sed command to clean it up a bit.

-

The syntax is like so: select/somepattern/replacewith/global

+

The syntax is like so: select/somepattern/replacewith/global

-

So the following command is: s/[<>]//g

+

So the following command is: s/[<>]//g

Select any characters that are either < or >. Replace with nothing. @@ -138,7 +138,7 @@ TaterTheTot

Now what about that pesky message?

-

more grep; more sed

+

more grep; more sed

Simple: capture everything after the >. Leaving the user’s message entirely in tact.

diff --git a/_site/2020/07/19/multicraft-php-gentoo.html b/_site/2020/07/19/multicraft-php-gentoo.html index 1d2ee8e..0cd7198 100644 --- a/_site/2020/07/19/multicraft-php-gentoo.html +++ b/_site/2020/07/19/multicraft-php-gentoo.html @@ -33,20 +33,20 @@

In a very odd combination of requirements, I needed to install MultiCraft on a Gentoo Linux system. -The PHP USE flags are important so you don’t have to recompile it three times like I did.

+The PHP USE flags are important so you don’t have to recompile it three times like I did.

Here are some useful tips I came across:

-

PHP USE flags

+

PHP USE flags

-

In /etc/portage/package.use/php I placed the following line:

+

In /etc/portage/package.use/php I placed the following line:

 dev-lang/php cgi mysql mysqli fpm pdo gd truetype
 

This should give you enough for a mysql backended MultiCraft installation. -The cgi option may not be required as fpm stands for FastCGI Process Managment. +The cgi option may not be required as fpm stands for FastCGI Process Managment. I don’t know for sure though.

Paper

@@ -80,7 +80,7 @@ This completely stalled any work getting done with a ton of ‘permission denied

Security

If the panel is in the root directory of your NGINX web server, -use the following in your server block to deny access to the /protected directory.

+use the following in your server block to deny access to the /protected directory.

 location /protected {
diff --git a/_site/2020/08/18/django-deployment.html b/_site/2020/08/18/django-deployment.html
index 39de08e..6ae494b 100644
--- a/_site/2020/08/18/django-deployment.html
+++ b/_site/2020/08/18/django-deployment.html
@@ -49,7 +49,7 @@ It focuses on speed, which is a priority, especially when using the ASGI protoco
 $ uvicorn --reload myapp.asgi:application
 
-

The --reload option says to reload the server if any of the files get updated. +

The --reload option says to reload the server if any of the files get updated. This is not recommended in production. Sadly, I thought this meant I would need to do a hard shutdown of the server process every time I wanted to update. This turned out to not be the case.

@@ -58,7 +58,7 @@ This turned out to not be the case.

There is another equine-named program called gunicorn which can hold a number of processes under its control. -An interesting feature of gunicorn is that it will gracefully switch from an old to a new deployment, +An interesting feature of gunicorn is that it will gracefully switch from an old to a new deployment, replacing the subprocesses one-by-one and eventually having only the new deployment active on all subprocesses. The greatest part? Zero down time. The server keeps any old processes open if there is communication with them, @@ -67,13 +67,13 @@ This was a very cool feature I wanted to take advantage of.

“Now hold on!” you might protest. “gunicorn is a WSGI server!” … oh you got me there! -Yes, that’s right, gunicorn is paired with uvicorn to serve my files.

+Yes, that’s right, gunicorn is paired with uvicorn to serve my files.

systemd

-

Love it or hate it, the majority of Linux distributions use the systemd init system. +

Love it or hate it, the majority of Linux distributions use the systemd init system. I decided it would be very convenient to have a .service file for my Django application to run automatically at boot. -Systemd allows me to do this with a file like the following one I stored in /lib/systemd/system/lamegames.service.

+Systemd allows me to do this with a file like the following one I stored in /lib/systemd/system/lamegames.service.

 [Unit]
@@ -100,11 +100,11 @@ To configure my nginx installation, I used the following few directives to:

  1. Redirect most traffic towards the gunicorn server.
  2. -
  3. Redirect statically served files (CSS, JS, images) to the directory specified in the STATIC_ROOT variable of my settings.py file.
  4. +
  5. Redirect statically served files (CSS, JS, images) to the directory specified in the STATIC_ROOT variable of my settings.py file.
  6. Use TLS to enable https://
-

Serving the static files from nginx as opposed to the gunicorn server is necessary. +

Serving the static files from nginx as opposed to the gunicorn server is necessary. Gunicorn and other production A/WSGI web server will not set the proper MIME type over TLS. This will cause your browser to not load the Javascript/CSS.

@@ -141,7 +141,7 @@ server { # systemctl enable lamegames
-

This enabled my gunicorn server to run once the server started. +

This enabled my gunicorn server to run once the server started. NGINX is that way be default.

And tada! You now have a working Django project on a production server!

diff --git a/_site/2020/09/12/minesweeper.html b/_site/2020/09/12/minesweeper.html index 7c6176d..a8a5eaa 100644 --- a/_site/2020/09/12/minesweeper.html +++ b/_site/2020/09/12/minesweeper.html @@ -65,7 +65,7 @@ there will be code equivalents to the math.

import random
 # r <= 0 <= W*H
-r = random.randint(1, W*H)-1
+r = random.randint(1, W*H)-1
 
 # x = r mod W
 x = r % W
@@ -99,7 +99,7 @@ Whenever a player clicks a tile, the following logic should be used:

you_lose() return # if the bomb number is more than 0 - already_revealed.append((nx, ny)) + already_revealed.append((nx, ny)) # from -1 to 1 for xd in range(-1, 2): diff --git a/_site/assets/css/style.css b/_site/assets/css/style.css index 54b4799..2baafe5 100644 --- a/_site/assets/css/style.css +++ b/_site/assets/css/style.css @@ -65,14 +65,7 @@ img { display: block; width: 55%; margin-left: auto; margin-right: auto; } blockquote { font-style: italic; } -@media screen and (max-width: 600px) { #menu, label[for="menu"] { text-align: left; display: inline-block; font-size: 20px; } - body { width: 90%; } - #info { margin: 0 7px; } - .menu-content { max-height: 0; overflow: hidden; } - nav { text-align: left; width: 100%; } - nav a { display: block; text-align: left; padding-left: 0; margin-left: 0; } - #menu { display: none; } - input:checked ~ .menu-content { max-height: 100%; border-bottom: 1px solid #aaa; color: red; } } +@media screen and (max-width: 600px) { #menu, label[for="menu"] { text-align: left; display: inline-block; font-size: 20px; } body { width: 90%; } #info { margin: 0 7px; } .menu-content { max-height: 0; overflow: hidden; } nav { text-align: left; width: 100%; } nav a { display: block; text-align: left; padding-left: 0; margin-left: 0; } #menu { display: none; } input:checked ~ .menu-content { max-height: 100%; border-bottom: 1px solid #aaa; color: red; } } .contact-info { width: 90%; margin: auto; word-wrap: break-word; } diff --git a/_site/assets/css/style.css.map b/_site/assets/css/style.css.map index 677de60..11b8c82 100644 --- a/_site/assets/css/style.css.map +++ b/_site/assets/css/style.css.map @@ -10,5 +10,5 @@ "$normal-text-color: #444444;\n$nav-link-color: #333;\n$nav-link-hover-color: black;\n$link-color: #47a;\n$visited-link-color: #941452;\n\n$last-p-padd: 1.5em;\n$nav-padd: 1em;\n$line-under: 1px solid #aaa; \n\nbody {\n background-color: #fefefe;\n padding: 15px;\n font-family: -apple-system, helvetica, arial, sans-serif;\n}\n#wrapper {\n max-width: 800px;\n margin: auto;\n color: $normal-text-color;\n font-size: 14px;\n}\n#main-name {\n color: #aaaaaa;\n}\n\nli {\n line-height: 1.5em;\n}\n\nh1 {\n font-size: 2.5em;\n}\nh2 {\n font-size: 2.0em;\n}\nh3 {\n font-size: 1.6em;\n}\nh4 {\n font-size: 1.3em;\n}\nh5 {\n font-size: 1.1em;\n}\na {\n text-decoration: underline;\n color: $link-color;\n} \na:visited {\n color: $visited-link-color;\n}\na.nav-link,\na.post-title-link {\n color: $nav-link-color;\n text-decoration: none;\n}\na.citation-link {\n text-decoration: none;\n}\n\n#img-wrapper img {\n margin-bottom: 10px;\n}\n\n#img-wrapper label {\n margin-left: 10px;\n}\n\nlabel {\n font-size: 12px;\n}\n\n#menu,\nlabel[for=\"menu\"]{\n display: none;\n}\n\nnav {\n text-align: center;\n padding: $nav-padd 0px;\n margin: 0px;\n}\nnav a:first-of-type {\n margin-left: 0;\n}\nnav a {\n margin: 1em;\n color: $nav-link-color;\n font-weight: bold;\n font-style: none;\n}\n/* TODO: Does not work */\n.on-page {\n color: #000;\n}\nnav a:hover {\n text-decoration: underline; \n}\n\nli {\n margin: .5em;\n}\n\n#main-img {\n width: 100%;\n}\np {\n font-size: 15px;\n line-height: 1.5;\n padding: .1em 0;\n}\n.line-under {\n padding-bottom: $last-p-padd;\n border-bottom: $line-under;\n}\n.article a:hover {\n color: #aaa;\n}\n\ntable,\ntable tr,\ntable td,\ntable th{\n border: 1px solid #aaa;\n border-collapse: collapse;\n padding: 5px;\n font-weight: normal;\n}\ntable th {\n font-weight: bold;\n}\ntable {\n width: 75%;\n margin: auto;\n}\n\ntable.post-list,\ntable.post-list tr,\ntable.post-list td {\n width: 100%;\n border: none;\n padding-left: 0;\n}\nimg {\n display: block;\n width: 55%;\n margin-left: auto;\n margin-right: auto;\n}\n\nblockquote {\n font-style: italic;\n}\n\n@media screen and (max-width: 600px){\n #menu,\n label[for=\"menu\"]{\n text-align: left;\n display: inline-block;\n font-size: 20px;\n }\n body {\n width: 90%;\n }\n #info {\n margin: 0 7px;\n }\n .menu-content {\n max-height: 0;\n overflow: hidden;\n }\n nav {\n text-align: left;\n width: 100%;\n }\n nav a {\n display: block;\n text-align: left;\n padding-left: 0;\n margin-left: 0;\n }\n #menu {\n display: none;\n }\n input:checked ~ .menu-content {\n max-height: 100%;\n border-bottom: $line-under;\n color: red;\n }\n}\n\n.contact-info {\n width: 90%;\n margin: auto;\n word-wrap: break-word;\n}\n.contact-info p {\n margin: 7px;\n padding: 0;\n}\n\n.mono {\n font-family: monospace;\n}\n\n.bold {\n font-weight: bold;\n}\n\nsup {\n margin: 0;\n padding: 0;\n}\n\nfigcaption {\n margin-top: 10px;\n font-size: .8em;\n text-decoration: italic;\n}\n\nfooter {\n border-top: $line-under; \n padding-top: 16px;\n margin-bottom: 100px;\n}\n\n.terminal {\n line-height: 1em;\n overflow: scroll;\n padding: 10px; \n color: #00FF41;\n margin: 0px;\n background-color: #151515;\n}\n\n.file {\n overflow: scroll;\n padding: 10px;\n margin: 0px;\n line-height: 1.2em;\n background-color: #dfdfdf;\n color: #000;\n}\n\n.small-image {\n width: 100%;\n}\n\n.post-date {\n font-size: 17px;\n text-transform: uppercase;\n font-weight: bold;\n color: #777;\n}\n\n.post-excerpt {\n margin: 15px;\n margin-bottom: 0;\n}\n\nhr {\n border: none;\n border-bottom: 1px solid #999;\n}\n\n/* code highlghting */\n.highlight .hll { background-color: #ffffcc }\n.highlight { background: #f0f0f0; }\n.highlight .c { color: #60a0b0; font-style: italic } /* Comment */\n.highlight .err { border: 1px solid #FF0000 } /* Error */\n.highlight .k { color: #007020; font-weight: bold } /* Keyword */\n.highlight .o { color: #666666 } /* Operator */\n.highlight .ch { color: #60a0b0; font-style: italic } /* Comment.Hashbang */\n.highlight .cm { color: #60a0b0; font-style: italic } /* Comment.Multiline */\n.highlight .cp { color: #007020 } /* Comment.Preproc */\n.highlight .cpf { color: #60a0b0; font-style: italic } /* Comment.PreprocFile */\n.highlight .c1 { color: #60a0b0; font-style: italic } /* Comment.Single */\n.highlight .cs { color: #60a0b0; background-color: #fff0f0 } /* Comment.Special */\n.highlight .gd { color: #A00000 } /* Generic.Deleted */\n.highlight .ge { font-style: italic } /* Generic.Emph */\n.highlight .gr { color: #FF0000 } /* Generic.Error */\n.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n.highlight .gi { color: #00A000 } /* Generic.Inserted */\n.highlight .go { color: #888888 } /* Generic.Output */\n.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */\n.highlight .gs { font-weight: bold } /* Generic.Strong */\n.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n.highlight .gt { color: #0044DD } /* Generic.Traceback */\n.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */\n.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */\n.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */\n.highlight .kp { color: #007020 } /* Keyword.Pseudo */\n.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */\n.highlight .kt { color: #902000 } /* Keyword.Type */\n.highlight .m { color: #40a070 } /* Literal.Number */\n.highlight .s { color: #4070a0 } /* Literal.String */\n.highlight .na { color: #4070a0 } /* Name.Attribute */\n.highlight .nb { color: #007020 } /* Name.Builtin */\n.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */\n.highlight .no { color: #60add5 } /* Name.Constant */\n.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */\n.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */\n.highlight .ne { color: #007020 } /* Name.Exception */\n.highlight .nf { color: #06287e } /* Name.Function */\n.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */\n.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */\n.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */\n.highlight .nv { color: #bb60d5 } /* Name.Variable */\n.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */\n.highlight .w { color: #bbbbbb } /* Text.Whitespace */\n.highlight .mb { color: #40a070 } /* Literal.Number.Bin */\n.highlight .mf { color: #40a070 } /* Literal.Number.Float */\n.highlight .mh { color: #40a070 } /* Literal.Number.Hex */\n.highlight .mi { color: #40a070 } /* Literal.Number.Integer */\n.highlight .mo { color: #40a070 } /* Literal.Number.Oct */\n.highlight .sa { color: #4070a0 } /* Literal.String.Affix */\n.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */\n.highlight .sc { color: #4070a0 } /* Literal.String.Char */\n.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */\n.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */\n.highlight .s2 { color: #4070a0 } /* Literal.String.Double */\n.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */\n.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */\n.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */\n.highlight .sx { color: #c65d09 } /* Literal.String.Other */\n.highlight .sr { color: #235388 } /* Literal.String.Regex */\n.highlight .s1 { color: #4070a0 } /* Literal.String.Single */\n.highlight .ss { color: #517918 } /* Literal.String.Symbol */\n.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */\n.highlight .fm { color: #06287e } /* Name.Function.Magic */\n.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */\n.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */\n.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */\n.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */\n.highlight .il { color: #40a070 } /* Literal.Number.Integer.Long */\n\n/* ADDED CUSTOM */\n.highlight .n { color: #000; } /* General name */\n\ndiv.highlight {\n padding: 0px 5px;\n width: 85%;\n margin: auto;\n overflow-x: scroll;\n}\n" ], "names": [], - "mappings": "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" + "mappings": "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" } \ No newline at end of file diff --git a/_site/blog/index.html b/_site/blog/index.html index f8368a5..dbc8a64 100644 --- a/_site/blog/index.html +++ b/_site/blog/index.html @@ -91,7 +91,7 @@ In this article, I will explain how you can do the same.

In a very odd combination of requirements, I needed to install MultiCraft on a Gentoo Linux system. -The PHP USE flags are important so you don’t have to recompile it three times like I did.

+The PHP USE flags are important so you don’t have to recompile it three times like I did.

@@ -145,7 +145,7 @@ Clue.

How to use NGINX as a reverse-proxy server for a Node.js application using socket.io

Despite the long name of the article, I have a feeling this may apply to more people than I might think. -If you have a Node.js application which needs socket.io connections that you want to pass throgh nginx’s reverse_proxy directive then this is the article for you!

+If you have a Node.js application which needs socket.io connections that you want to pass throgh nginx’s reverse_proxy directive then this is the article for you!

diff --git a/_site/feed.xml b/_site/feed.xml index 059e9d2..0a0d089 100644 --- a/_site/feed.xml +++ b/_site/feed.xml @@ -1,4 +1,4 @@ -Jekyll2020-09-13T01:20:44+00:00http://192.168.1.101:4000/feed.xmlMinesweeper Bomb Generation And Tile Revealing2020-09-12T00:00:00+00:002020-09-12T00:00:00+00:00http://192.168.1.101:4000/2020/09/12/minesweeper<p>When I was creating a little Minesweeper game, I got confused at some points. +Jekyll2020-09-13T01:36:31+00:00http://localhost:4000/feed.xmlMinesweeper Bomb Generation And Tile Revealing2020-09-12T00:00:00+00:002020-09-12T00:00:00+00:00http://localhost:4000/2020/09/12/minesweeper<p>When I was creating a little Minesweeper game, I got confused at some points. My bomb generation didn’t look quite right, and I for sure didn’t quite get the whole cascading tile reveal thing. With a bit of internet research, I found what I was looking for. I’ll explain it all in one place for my own research purposes.</p> @@ -31,7 +31,7 @@ there will be code equivalents to the math.</p> <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">random</span> <span class="c1"># r &lt;= 0 &lt;= W*H -</span><span class="n">r</span> <span class="o">=</span> <span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">W</span><span class="o">*</span><span class="n">H</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span> +</span><span class="n">r</span> <span class="o">=</span> <span class="n">random</span><span class="p">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">W</span><span class="o">*</span><span class="n">H</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span> <span class="c1"># x = r mod W </span><span class="n">x</span> <span class="o">=</span> <span class="n">r</span> <span class="o">%</span> <span class="n">W</span> @@ -65,7 +65,7 @@ Whenever a player clicks a tile, the following logic should be used:</p> <span class="n">you_lose</span><span class="p">()</span> <span class="k">return</span> <span class="c1"># if the bomb number is more than 0 -</span> <span class="n">already_revealed</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">nx</span><span class="p">,</span> <span class="n">ny</span><span class="p">))</span> +</span> <span class="n">already_revealed</span><span class="p">.</span><span class="n">append</span><span class="p">((</span><span class="n">nx</span><span class="p">,</span> <span class="n">ny</span><span class="p">))</span> <span class="c1"># from -1 to 1 </span> <span class="k">for</span> <span class="n">xd</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">):</span> @@ -88,7 +88,7 @@ I hope that this helps you with getting the general idea of a Minesweeper game. The completed version of this game is available on my <a href="https://lamegames.tait.tech/">lamegames</a> site. Let me know what you think!</p> -<p>Happy hacking!</p>When I was creating a little Minesweeper game, I got confused at some points. My bomb generation didn’t look quite right, and I for sure didn’t quite get the whole cascading tile reveal thing. With a bit of internet research, I found what I was looking for. I’ll explain it all in one place for my own research purposes.lamegames.tait.tech2020-09-09T00:00:00+00:002020-09-09T00:00:00+00:00http://192.168.1.101:4000/2020/09/09/lamegames<p>This is an announcement for a new project of mine: +<p>Happy hacking!</p>When I was creating a little Minesweeper game, I got confused at some points. My bomb generation didn’t look quite right, and I for sure didn’t quite get the whole cascading tile reveal thing. With a bit of internet research, I found what I was looking for. I’ll explain it all in one place for my own research purposes.lamegames.tait.tech2020-09-09T00:00:00+00:002020-09-09T00:00:00+00:00http://localhost:4000/2020/09/09/lamegames<p>This is an announcement for a new project of mine: <a href="https://lamegames.tait.tech">lamegames.tait.tech</a>.</p> <p>This is something I’m really excited to work on!</p> @@ -96,7 +96,7 @@ Let me know what you think!</p> <p>Right now, I’ve just got a rock-paper-scissors game. A chat function, and a few simple card games to come.</p> -<p>Check out the repository on my <a href="https://github.com/TTWNO/lamegames.io">Github</a>.</p>This is an announcement for a new project of mine: lamegames.tait.tech.How to Solve The Django Deployment Puzzle2020-08-18T00:00:00+00:002020-08-18T00:00:00+00:00http://192.168.1.101:4000/2020/08/18/django-deployment<p>A few days ago I had a Django project I wanted to put on a real server. +<p>Check out the repository on my <a href="https://github.com/TTWNO/lamegames.io">Github</a>.</p>This is an announcement for a new project of mine: lamegames.tait.tech.How to Solve The Django Deployment Puzzle2020-08-18T00:00:00+00:002020-08-18T00:00:00+00:00http://localhost:4000/2020/08/18/django-deployment<p>A few days ago I had a Django project I wanted to put on a real server. This project is still in its infancy, but I thought it would be nice to put it on my resume and show my friends. Little did I know the headache coming my way. Here are some tips to help you not make the same mistakes as me.</p> @@ -114,7 +114,7 @@ It focuses on speed, which is a priority, especially when using the ASGI protoco $ uvicorn --reload myapp.asgi:application </pre> -<p>The <code class="highlighter-rouge">--reload</code> option says to reload the server if any of the files get updated. +<p>The <code class="language-plaintext highlighter-rouge">--reload</code> option says to reload the server if any of the files get updated. This is not recommended in production. Sadly, I thought this meant I would need to do a hard shutdown of the server process every time I wanted to update. This turned out to not be the case.</p> @@ -123,7 +123,7 @@ This turned out to not be the case.</p> <p>There is another equine-named program called <a href="https://gunicorn.org/">gunicorn</a> which can hold a number of processes under its control. -An interesting feature of <code class="highlighter-rouge">gunicorn</code> is that it will gracefully switch from an old to a new deployment, +An interesting feature of <code class="language-plaintext highlighter-rouge">gunicorn</code> is that it will gracefully switch from an old to a new deployment, replacing the subprocesses one-by-one and eventually having only the new deployment active on all subprocesses. The greatest part? Zero down time. The server keeps any old processes open if there is communication with them, @@ -132,13 +132,13 @@ This was a very cool feature I wanted to take advantage of.</p> <p>“Now hold on!” you might protest. “gunicorn is a WSGI server!” … oh you got me there! -Yes, that’s right, <code class="highlighter-rouge">gunicorn</code> is paired with <code class="highlighter-rouge">uvicorn</code> to serve my files.</p> +Yes, that’s right, <code class="language-plaintext highlighter-rouge">gunicorn</code> is paired with <code class="language-plaintext highlighter-rouge">uvicorn</code> to serve my files.</p> <h3 id="systemd">systemd</h3> -<p>Love it or hate it, the majority of Linux distributions use the <code class="highlighter-rouge">systemd</code> init system. +<p>Love it or hate it, the majority of Linux distributions use the <code class="language-plaintext highlighter-rouge">systemd</code> init system. I decided it would be very convenient to have a .service file for my Django application to run automatically at boot. -<code class="highlighter-rouge">Systemd</code> allows me to do this with a file like the following one I stored in <code class="highlighter-rouge">/lib/systemd/system/lamegames.service</code>.</p> +<code class="language-plaintext highlighter-rouge">Systemd</code> allows me to do this with a file like the following one I stored in <code class="language-plaintext highlighter-rouge">/lib/systemd/system/lamegames.service</code>.</p> <pre class="file"> [Unit] @@ -165,11 +165,11 @@ To configure my nginx installation, I used the following few directives to:</ <ol> <li>Redirect most traffic towards the gunicorn server.</li> - <li>Redirect statically served files (CSS, JS, images) to the directory specified in the STATIC_ROOT variable of my <code class="highlighter-rouge">settings.py</code> file.</li> + <li>Redirect statically served files (CSS, JS, images) to the directory specified in the STATIC_ROOT variable of my <code class="language-plaintext highlighter-rouge">settings.py</code> file.</li> <li>Use TLS to enable https://</li> </ol> -<p>Serving the static files from nginx as opposed to the <code class="highlighter-rouge">gunicorn</code> server is necessary. +<p>Serving the static files from nginx as opposed to the <code class="language-plaintext highlighter-rouge">gunicorn</code> server is necessary. Gunicorn and other production A/WSGI web server will not set the proper MIME type over TLS. This will cause your browser to not load the Javascript/CSS.</p> @@ -206,7 +206,7 @@ server { # systemctl enable lamegames </pre> -<p>This enabled my <code class="highlighter-rouge">gunicorn</code> server to run once the server started. +<p>This enabled my <code class="language-plaintext highlighter-rouge">gunicorn</code> server to run once the server started. NGINX is that way be default.</p> <p>And tada! You now have a working Django project on a production server!</p> @@ -216,7 +216,7 @@ NGINX is that way be default.</p> <ul> <li>If using ws:// websockets, change them to wss:// for secure web sockets.</li> <li>Make sure to use channels.routing.get_default_application() instead of django.get_asgi_application() if your’re wanting to use channels/redis WebSockets.</li> -</ul>A few days ago I had a Django project I wanted to put on a real server. This project is still in its infancy, but I thought it would be nice to put it on my resume and show my friends. Little did I know the headache coming my way. Here are some tips to help you not make the same mistakes as me.BSD Journey, Part 12020-08-15T00:00:00+00:002020-08-15T00:00:00+00:00http://192.168.1.101:4000/2020/08/15/openbsd1<p>As Linux becomes controlled by corporate sponsors and becomes more full of proprietary blobs, drivers, and even closed-source software like Steam, +</ul>A few days ago I had a Django project I wanted to put on a real server. This project is still in its infancy, but I thought it would be nice to put it on my resume and show my friends. Little did I know the headache coming my way. Here are some tips to help you not make the same mistakes as me.BSD Journey, Part 12020-08-15T00:00:00+00:002020-08-15T00:00:00+00:00http://localhost:4000/2020/08/15/openbsd1<p>As Linux becomes controlled by corporate sponsors and becomes more full of proprietary blobs, drivers, and even closed-source software like Steam, One may wonder if there are other options out there. For me, somebody that is intensely interested in security, there is one option: OpenBSD.</p> @@ -249,7 +249,7 @@ Maybe he was right, maybe not. What I know is I am excited to find out!</p> <p>Wish my luck on my OpenBSD journey. I will post updates here along the way.</p> -<p>Happy hacking!</p>As Linux becomes controlled by corporate sponsors and becomes more full of proprietary blobs, drivers, and even closed-source software like Steam, One may wonder if there are other options out there. For me, somebody that is intensely interested in security, there is one option: OpenBSD.Know How Your Representative Votes In Parliament2020-07-30T00:00:00+00:002020-07-30T00:00:00+00:00http://192.168.1.101:4000/2020/07/30/canadian-parliament<p>As an advocate for openness, I had an idea to make a project out of the government of Canada’s <a href="https://open.canada.ca/en/open-data">Open Data</a> +<p>Happy hacking!</p>As Linux becomes controlled by corporate sponsors and becomes more full of proprietary blobs, drivers, and even closed-source software like Steam, One may wonder if there are other options out there. For me, somebody that is intensely interested in security, there is one option: OpenBSD.Know How Your Representative Votes In Parliament2020-07-30T00:00:00+00:002020-07-30T00:00:00+00:00http://localhost:4000/2020/07/30/canadian-parliament<p>As an advocate for openness, I had an idea to make a project out of the government of Canada’s <a href="https://open.canada.ca/en/open-data">Open Data</a> initiative to take a look at how my local MP voted on various pieces of legislation. It turns out though that this was not necessary due to how easy it was to find this information on the government’s own website. In this article, I will explain how you can do the same.</p> @@ -292,22 +292,22 @@ or read the actual text by clicking the <strong>View this Bill on LEGISinf <p>I thought this was pretty cool! It was <em>way</em> simpler than I thought it would be.</p> -<p>Thanks, Canada!</p>As an advocate for openness, I had an idea to make a project out of the government of Canada’s Open Data initiative to take a look at how my local MP voted on various pieces of legislation. It turns out though that this was not necessary due to how easy it was to find this information on the government’s own website. In this article, I will explain how you can do the same.Installing MultiCraft on Gentoo Linux2020-07-19T00:00:00+00:002020-07-19T00:00:00+00:00http://192.168.1.101:4000/2020/07/19/multicraft-php-gentoo<p>In a very odd combination of requirements, +<p>Thanks, Canada!</p>As an advocate for openness, I had an idea to make a project out of the government of Canada’s Open Data initiative to take a look at how my local MP voted on various pieces of legislation. It turns out though that this was not necessary due to how easy it was to find this information on the government’s own website. In this article, I will explain how you can do the same.Installing MultiCraft on Gentoo Linux2020-07-19T00:00:00+00:002020-07-19T00:00:00+00:00http://localhost:4000/2020/07/19/multicraft-php-gentoo<p>In a very odd combination of requirements, I needed to install <a href="https://multicraft.org">MultiCraft</a> on a Gentoo Linux system. -The PHP <code class="highlighter-rouge">USE</code> flags are important so you don’t have to recompile it three times like I did.</p> +The PHP <code class="language-plaintext highlighter-rouge">USE</code> flags are important so you don’t have to recompile it three times like I did.</p> <p>Here are some useful tips I came across:</p> -<h3 id="php-use-flags">PHP <code class="highlighter-rouge">USE</code> flags</h3> +<h3 id="php-use-flags">PHP <code class="language-plaintext highlighter-rouge">USE</code> flags</h3> -<p>In <code class="highlighter-rouge">/etc/portage/package.use/php</code> I placed the following line:</p> +<p>In <code class="language-plaintext highlighter-rouge">/etc/portage/package.use/php</code> I placed the following line:</p> <pre class="terminal"> dev-lang/php cgi mysql mysqli fpm pdo gd truetype </pre> <p>This should give you enough for a mysql backended MultiCraft installation. -The <code class="highlighter-rouge">cgi</code> option may not be required as <code class="highlighter-rouge">fpm</code> stands for <em>FastCGI Process Managment</em>. +The <code class="language-plaintext highlighter-rouge">cgi</code> option may not be required as <code class="language-plaintext highlighter-rouge">fpm</code> stands for <em>FastCGI Process Managment</em>. I don’t know for sure though.</p> <h3 id="paper">Paper</h3> @@ -341,7 +341,7 @@ This completely stalled any work getting done with a ton of ‘permission denied <h4 id="security">Security</h4> <p>If the panel is in the root directory of your NGINX web server, -use the following in your server block to deny access to the <code class="highlighter-rouge">/protected</code> directory.</p> +use the following in your server block to deny access to the <code class="language-plaintext highlighter-rouge">/protected</code> directory.</p> <pre class="terminal"> location /protected { @@ -385,7 +385,7 @@ Query OK, 0 rows affected (0.01 sec) Database 1 is the panel database. Database 2 is the daemon database.</p> -<p>Happy hacking :)</p>In a very odd combination of requirements, I needed to install MultiCraft on a Gentoo Linux system. The PHP USE flags are important so you don’t have to recompile it three times like I did.Independence2020-07-12T00:00:00+00:002020-07-12T00:00:00+00:00http://192.168.1.101:4000/2020/07/12/independence<blockquote> +<p>Happy hacking :)</p>In a very odd combination of requirements, I needed to install MultiCraft on a Gentoo Linux system. The PHP USE flags are important so you don’t have to recompile it three times like I did.Independence2020-07-12T00:00:00+00:002020-07-12T00:00:00+00:00http://localhost:4000/2020/07/12/independence<blockquote> <p>“When given a choice between independence and dependence, always choose independence; you will never regret that choice!”—Luke Smith</p> </blockquote> @@ -423,7 +423,7 @@ know where I live, where I am going, who are my friends, what do I believe; in t <p>Your website is pulled for controversial views: switch hosts.</p> <p>Protect yourself; give yourself choices. -Why give others that power when you could have it for yourself?</p>“When given a choice between independence and dependence, always choose independence; you will never regret that choice!”—Luke SmithHow to use tmux to send and receive things from your Minecraft server2020-06-25T00:00:00+00:002020-06-25T00:00:00+00:00http://192.168.1.101:4000/2020/06/25/tmux-minecraft<p>So recently I had problem. +Why give others that power when you could have it for yourself?</p>“When given a choice between independence and dependence, always choose independence; you will never regret that choice!”—Luke SmithHow to use tmux to send and receive things from your Minecraft server2020-06-25T00:00:00+00:002020-06-25T00:00:00+00:00http://localhost:4000/2020/06/25/tmux-minecraft<p>So recently I had problem. I run a Minecraft server on a big Linux computer I have running in my room. Now, as a system administrator it is very helpful to be able to run some simple commands without needing to login with my key, password, TFA, etc. It is, frankly, a lot of work. @@ -437,18 +437,18 @@ Especially when I really just want to be playing games but I just need to check <h2 id="solution">Solution</h2> -<p>So to solve this interesting problem, I decided to use <code class="highlighter-rouge">tmux</code>. -<code class="highlighter-rouge">tmux</code> is a <strong>t</strong>terminal <strong>mu</strong>ltiple<strong>x</strong>er. +<p>So to solve this interesting problem, I decided to use <code class="language-plaintext highlighter-rouge">tmux</code>. +<code class="language-plaintext highlighter-rouge">tmux</code> is a <strong>t</strong>terminal <strong>mu</strong>ltiple<strong>x</strong>er. This allows you to run a terminal session, then detach fromc it while it still runs in the background.</p> <p>This is very valuable when running command line applications that need to have an active console connection, like a Minecraft server.</p> -<p>So first I looked at the <code class="highlighter-rouge">tmux</code> command <code class="highlighter-rouge">send-keys</code>.</p> +<p>So first I looked at the <code class="language-plaintext highlighter-rouge">tmux</code> command <code class="language-plaintext highlighter-rouge">send-keys</code>.</p> -<h4 id="send-keys"><code class="highlighter-rouge">send-keys</code></h4> +<h4 id="send-keys"><code class="language-plaintext highlighter-rouge">send-keys</code></h4> -<p><code class="highlighter-rouge">send-keys</code> allows you to send text, and key presses to a <code class="highlighter-rouge">tmux</code> session. -Now assuming this <code class="highlighter-rouge">tmux</code> session is attached to a Minecraft server, +<p><code class="language-plaintext highlighter-rouge">send-keys</code> allows you to send text, and key presses to a <code class="language-plaintext highlighter-rouge">tmux</code> session. +Now assuming this <code class="language-plaintext highlighter-rouge">tmux</code> session is attached to a Minecraft server, there is no reason you could not run a command like this:</p> <pre class="terminal"> @@ -462,9 +462,9 @@ Then, it will hit the newline character, this will execute the command.</p> <p>But how do we get information about who is typing what in the Minecraft chat?</p> -<h3 id="tmuxs-capture-pane-is-painful"><code class="highlighter-rouge">tmux</code>’s <code class="highlighter-rouge">capture-pane</code> is painful</h3> +<h3 id="tmuxs-capture-pane-is-painful"><code class="language-plaintext highlighter-rouge">tmux</code>’s <code class="language-plaintext highlighter-rouge">capture-pane</code> is painful</h3> -<p>So in the manual page for <code class="highlighter-rouge">tmux</code> I can see a section recorded below for options I can give to the <code class="highlighter-rouge">capture-pane</code> subcommand.</p> +<p>So in the manual page for <code class="language-plaintext highlighter-rouge">tmux</code> I can see a section recorded below for options I can give to the <code class="language-plaintext highlighter-rouge">capture-pane</code> subcommand.</p> <pre class="terminal"> -S and -E specify the starting and ending line numbers, @@ -474,10 +474,10 @@ Then, it will hit the newline character, this will execute the command.</p> default is to capture only the visible contents of the pane. </pre> -<p>What it seems to be saying is I can start at line <code class="highlighter-rouge">-S n</code> and end at line <code class="highlighter-rouge">-E n</code>. -Negative numbers start from the bottom, so <em>in theory</em> I can do the following: <code class="highlighter-rouge">tmux capture-pane -S -1</code> should capture only the last line, because I’m starting from the last line. Right?</p> +<p>What it seems to be saying is I can start at line <code class="language-plaintext highlighter-rouge">-S n</code> and end at line <code class="language-plaintext highlighter-rouge">-E n</code>. +Negative numbers start from the bottom, so <em>in theory</em> I can do the following: <code class="language-plaintext highlighter-rouge">tmux capture-pane -S -1</code> should capture only the last line, because I’m starting from the last line. Right?</p> -<p>No. It just doesn’t work. Negative numbers do <em>not</em> work with the <code class="highlighter-rouge">tmux capture-pane</code> subcommand.</p> +<p>No. It just doesn’t work. Negative numbers do <em>not</em> work with the <code class="language-plaintext highlighter-rouge">tmux capture-pane</code> subcommand.</p> <p>So I did some simple UNIX piping, like so, to get just the last thing in the chat.</p> @@ -487,19 +487,19 @@ $ tmux capture-pane -p -t steve | tail -n1 </pre> <p>TaterTheTot is my Minecraft username :)</p> -<p><code class="highlighter-rouge">-p</code> prints the result to the terminal/stdout.</p> +<p><code class="language-plaintext highlighter-rouge">-p</code> prints the result to the terminal/stdout.</p> -<p><code class="highlighter-rouge">steve</code> is the name of the tmux session I’m trying to pull form.</p> +<p><code class="language-plaintext highlighter-rouge">steve</code> is the name of the tmux session I’m trying to pull form.</p> <p>So that’s done! Beauty!</p> <p>Now that we have that, how can we extract the username and the message from the latest line?</p> -<h3 id="grep"><code class="highlighter-rouge">grep</code></h3> +<h3 id="grep"><code class="language-plaintext highlighter-rouge">grep</code></h3> -<p><code class="highlighter-rouge">grep</code> is a command to find patterns of text. -<code class="highlighter-rouge">grep</code> has an option to only show a matching pattern of text. -This option is <code class="highlighter-rouge">-o</code>.</p> +<p><code class="language-plaintext highlighter-rouge">grep</code> is a command to find patterns of text. +<code class="language-plaintext highlighter-rouge">grep</code> has an option to only show a matching pattern of text. +This option is <code class="language-plaintext highlighter-rouge">-o</code>.</p> <p>Let’s see how we can use this in conjunction with our latest line of server output to get our results.</p> @@ -509,11 +509,11 @@ $ echo "[DEBUG] [SERVER] blah blah: &lt;TaterTheTot&gt; MY_MESAGE&q </pre> <p>Now, that’s my name with the &lt; and &gt; attached. Not bad! -We can use the <code class="highlighter-rouge">sed</code> command to clean it up a bit.</p> +We can use the <code class="language-plaintext highlighter-rouge">sed</code> command to clean it up a bit.</p> -<p>The syntax is like so: <code class="highlighter-rouge">select/somepattern/replacewith/global</code></p> +<p>The syntax is like so: <code class="language-plaintext highlighter-rouge">select/somepattern/replacewith/global</code></p> -<p>So the following command is: <code class="highlighter-rouge">s/[&lt;&gt;]//g</code></p> +<p>So the following command is: <code class="language-plaintext highlighter-rouge">s/[&lt;&gt;]//g</code></p> <p>Select any characters that are either &lt; or &gt;. Replace with nothing. @@ -530,7 +530,7 @@ TaterTheTot <p>Now what about that pesky message?</p> -<h3 id="more-grep-more-sed">more <code class="highlighter-rouge">grep</code>; more <code class="highlighter-rouge">sed</code></h3> +<h3 id="more-grep-more-sed">more <code class="language-plaintext highlighter-rouge">grep</code>; more <code class="language-plaintext highlighter-rouge">sed</code></h3> <p>Simple: capture everything after the &gt;. Leaving the user’s message entirely in tact.</p> @@ -553,11 +553,11 @@ And, we have a way to respond.</p> <p>Remember to checkout the git repository to see what I did with it: <a href="https://github.com/TTWNO/termcraft">https://github.com/TTWNO/termcraft</a>.</p> -<p>Happy hacking!</p>So recently I had problem. I run a Minecraft server on a big Linux computer I have running in my room. Now, as a system administrator it is very helpful to be able to run some simple commands without needing to login with my key, password, TFA, etc. It is, frankly, a lot of work. Especially when I really just want to be playing games but I just need to check something quickly.Site Update2020-06-04T00:00:00+00:002020-06-04T00:00:00+00:00http://192.168.1.101:4000/2020/06/04/site-update<p>I updated the site with some easier to identify information about me and my projects :)</p> +<p>Happy hacking!</p>So recently I had problem. I run a Minecraft server on a big Linux computer I have running in my room. Now, as a system administrator it is very helpful to be able to run some simple commands without needing to login with my key, password, TFA, etc. It is, frankly, a lot of work. Especially when I really just want to be playing games but I just need to check something quickly.Site Update2020-06-04T00:00:00+00:002020-06-04T00:00:00+00:00http://localhost:4000/2020/06/04/site-update<p>I updated the site with some easier to identify information about me and my projects :)</p> <p>Also, Clue has been delayed due to my partner in crime on the project wokring too many hours.</p> -<p>I also posted a new project called <em><a href="https://github.com/TTWNO/caesar-cipher">Caesar Cipher</a></em> in C. It will be an intermediate example of how to use build systems like <code class="highlighter-rouge">make</code>.</p>I updated the site with some easier to identify information about me and my projects :)New Game: Clue (coming soon)2020-05-19T00:00:00+00:002020-05-19T00:00:00+00:00http://192.168.1.101:4000/2020/05/19/clue-announcement<p>Ooo! Exciting! +<p>I also posted a new project called <em><a href="https://github.com/TTWNO/caesar-cipher">Caesar Cipher</a></em> in C. It will be an intermediate example of how to use build systems like <code class="language-plaintext highlighter-rouge">make</code>.</p>I updated the site with some easier to identify information about me and my projects :)New Game: Clue (coming soon)2020-05-19T00:00:00+00:002020-05-19T00:00:00+00:00http://localhost:4000/2020/05/19/clue-announcement<p>Ooo! Exciting! Today I want to announce a new project I’ll be working on which should be live within the month of May: Clue.</p> diff --git a/_site/resume/index.html b/_site/resume/index.html index 19409dc..6776ba3 100644 --- a/_site/resume/index.html +++ b/_site/resume/index.html @@ -38,7 +38,7 @@

Dartmouth College (Open Corseware)—Professional Certificate / C Programming with Linux (2020)

-

A certification in C programming, the gcc compiler, and the make compilation system.

+

A certification in C programming, the gcc compiler, and the make compilation system.

Projects

diff --git a/_site/robots.txt b/_site/robots.txt index 6799904..d297064 100644 --- a/_site/robots.txt +++ b/_site/robots.txt @@ -1 +1 @@ -Sitemap: http://192.168.1.101:4000/sitemap.xml +Sitemap: http://localhost:4000/sitemap.xml diff --git a/_site/sitemap.xml b/_site/sitemap.xml index 79086fd..b7e9300 100644 --- a/_site/sitemap.xml +++ b/_site/sitemap.xml @@ -1,112 +1,112 @@ -http://192.168.1.101:4000/2020/01/22/padding-and-margin.html +http://localhost:4000/2020/01/22/padding-and-margin.html 2020-01-22T00:00:00+00:00 -http://192.168.1.101:4000/2020/01/26/rsa1.html +http://localhost:4000/2020/01/26/rsa1.html 2020-01-26T00:00:00+00:00 -http://192.168.1.101:4000/2020/02/19/rsa2.html +http://localhost:4000/2020/02/19/rsa2.html 2020-02-19T00:00:00+00:00 -http://192.168.1.101:4000/2020/04/02/rsa3.html +http://localhost:4000/2020/04/02/rsa3.html 2020-04-02T00:00:00+00:00 -http://192.168.1.101:4000/2020/04/06/rsa4.html +http://localhost:4000/2020/04/06/rsa4.html 2020-04-06T00:00:00+00:00 -http://192.168.1.101:4000/2020/04/12/nas1.html +http://localhost:4000/2020/04/12/nas1.html 2020-04-12T00:00:00+00:00 -http://192.168.1.101:4000/2020/04/21/rfi.html +http://localhost:4000/2020/04/21/rfi.html 2020-04-21T00:00:00+00:00 -http://192.168.1.101:4000/2020/04/25/xss.html +http://localhost:4000/2020/04/25/xss.html 2020-04-25T00:00:00+00:00 -http://192.168.1.101:4000/2020/05/01/nginx-socket-io-projects.html +http://localhost:4000/2020/05/01/nginx-socket-io-projects.html 2020-05-01T00:00:00+00:00 -http://192.168.1.101:4000/2020/05/19/clue-announcement.html +http://localhost:4000/2020/05/19/clue-announcement.html 2020-05-19T00:00:00+00:00 -http://192.168.1.101:4000/2020/06/04/site-update.html +http://localhost:4000/2020/06/04/site-update.html 2020-06-04T00:00:00+00:00 -http://192.168.1.101:4000/2020/06/25/tmux-minecraft.html +http://localhost:4000/2020/06/25/tmux-minecraft.html 2020-06-25T00:00:00+00:00 -http://192.168.1.101:4000/2020/07/12/independence.html +http://localhost:4000/2020/07/12/independence.html 2020-07-12T00:00:00+00:00 -http://192.168.1.101:4000/2020/07/19/multicraft-php-gentoo.html +http://localhost:4000/2020/07/19/multicraft-php-gentoo.html 2020-07-19T00:00:00+00:00 -http://192.168.1.101:4000/2020/07/30/canadian-parliament.html +http://localhost:4000/2020/07/30/canadian-parliament.html 2020-07-30T00:00:00+00:00 -http://192.168.1.101:4000/2020/08/15/openbsd1.html +http://localhost:4000/2020/08/15/openbsd1.html 2020-08-15T00:00:00+00:00 -http://192.168.1.101:4000/2020/08/18/django-deployment.html +http://localhost:4000/2020/08/18/django-deployment.html 2020-08-18T00:00:00+00:00 -http://192.168.1.101:4000/2020/09/09/lamegames.html +http://localhost:4000/2020/09/09/lamegames.html 2020-09-09T00:00:00+00:00 -http://192.168.1.101:4000/2020/09/12/minesweeper.html +http://localhost:4000/2020/09/12/minesweeper.html 2020-09-12T00:00:00+00:00 -http://192.168.1.101:4000/2020-04-27-quiz-your-friends-xss.html +http://localhost:4000/2020-04-27-quiz-your-friends-xss.html -http://192.168.1.101:4000/blog/ +http://localhost:4000/blog/ -http://192.168.1.101:4000/tutoring/ +http://localhost:4000/tutoring/ -http://192.168.1.101:4000/cover-letters/bloombase/ +http://localhost:4000/cover-letters/bloombase/ -http://192.168.1.101:4000/resume/ +http://localhost:4000/resume/ -http://192.168.1.101:4000/links/ +http://localhost:4000/links/ -http://192.168.1.101:4000/cover-letter-vcc/ +http://localhost:4000/cover-letter-vcc/ -http://192.168.1.101:4000/contact/ +http://localhost:4000/contact/ -http://192.168.1.101:4000/about/ +http://localhost:4000/about/ -http://192.168.1.101:4000/scholarships/2020/cnib/ +http://localhost:4000/scholarships/2020/cnib/ -http://192.168.1.101:4000/ +http://localhost:4000/
between elements
background-color appliesbackground-color applies Yes No