shift2
This commit is contained in:
parent
2b200eaa5a
commit
e72c824912
@ -1,18 +1,14 @@
|
||||
<div class="container">
|
||||
<hr>
|
||||
<!-- <div id="particles-js"></div> -->
|
||||
|
||||
<div class="container foot" style="text-align:center;">
|
||||
<br>
|
||||
<span class="site-info">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: {{site.time}}
|
||||
</span>
|
||||
</div>
|
||||
<nav class="navbar navbar-expand-lg ">
|
||||
|
||||
<!-- Navbar content -->
|
||||
<div class="container">
|
||||
|
||||
<span class="navbar-text">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: {{site.time}}
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
|
||||
@ -59,6 +55,15 @@
|
||||
|
||||
|
||||
<!-- particles -->
|
||||
<script>
|
||||
var body = document.body
|
||||
|
||||
var particles = document.getElementById("particles-js")
|
||||
|
||||
particles.style.height = body.scrollHeight + "px"
|
||||
|
||||
console.log(body.scrollHeight)
|
||||
</script>
|
||||
<script src="/assets/js/particles.min.js"></script>
|
||||
<script>
|
||||
particlesJS.load('particles-js', '/assets/js/particles.json', function () {
|
||||
|
@ -9,4 +9,5 @@
|
||||
<link rel="stylesheet" href="{{site.baseurl}}/assets/css/main.css">
|
||||
<link rel="stylesheet" href="{{site.baseurl}}/assets/css/github-syntax.css">
|
||||
<link href="https://fonts.googleapis.com/css?family=IBM+Plex+Mono:400,400i|IBM+Plex+Sans:100,100i,400,400i,700,700i" rel="stylesheet">
|
||||
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
|
||||
</head>
|
@ -12,8 +12,8 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="reactive-bg" >
|
||||
<div class="home container" >
|
||||
<div class="reactive-bg">
|
||||
<div class="home container">
|
||||
<div class="profile">
|
||||
<img src="{{site.baseurl}}/assets/images/human-profile.jpg">
|
||||
</div>
|
||||
@ -63,6 +63,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
{% include footer.html %}
|
||||
|
||||
|
@ -18,10 +18,18 @@
|
||||
|
||||
<div class="reactive-bg">
|
||||
<div class="post container">
|
||||
<h1>{{page.title}}</h1>
|
||||
<h4>{{page.description}}</h4>
|
||||
<h1>{{page.title}}
|
||||
|
||||
</h1>
|
||||
<h4>{{page.description}}
|
||||
|
||||
</h4>
|
||||
<hr>
|
||||
<p><em>{{page.date}}</em></p>
|
||||
<p><em>{{page.date}}
|
||||
{% if page.is_short %}
|
||||
<span class="badge badge-secondary">Mini Post</span>
|
||||
{% endif %}
|
||||
</em></p>
|
||||
|
||||
<br>
|
||||
|
||||
@ -31,5 +39,6 @@
|
||||
|
||||
</div>
|
||||
{% include footer.html %}
|
||||
|
||||
|
||||
</body>
|
@ -15,31 +15,51 @@
|
||||
</div>
|
||||
<div class="header-gap"></div>
|
||||
</div> -->
|
||||
|
||||
|
||||
<div class="reactive-bg">
|
||||
<div class="post container" >
|
||||
<div class="post container">
|
||||
<h1>Blog Posts</h1>
|
||||
<hr>
|
||||
|
||||
{% assign i = 0 %}
|
||||
{% for post in site.posts %}
|
||||
|
||||
{% if i == 0 %}
|
||||
<div class="post-preview">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
Featured Post
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">{{post.title}}</h5>
|
||||
<p class="card-text">{{post.description}}</p>
|
||||
<a href="{{post.url}}" class="btn btn-primary">View</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="height:50px"></div>
|
||||
<div class="list-group" id="posts">
|
||||
<a href="#posts" class="list-group-item list-group-item-action list-group-item-dark">Other Posts</a>
|
||||
<a href="#posts" class="list-group-item list-group-item-action list-group-item-dark">Featured
|
||||
Post</a>
|
||||
|
||||
{% assign i = 0 %}
|
||||
{% for post in site.posts %}
|
||||
|
||||
{% if i == 0 %}
|
||||
<!-- <div class="post-preview">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
Featured Post
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">{{post.title}}
|
||||
{% if post.is_short %}
|
||||
<span class="badge badge-secondary">Mini Post</span>
|
||||
{% endif %}
|
||||
</h5>
|
||||
<p class="card-text">{{post.description}}</p>
|
||||
<a href="{{post.url}}" class="btn btn-primary">View</a>
|
||||
</div>
|
||||
</div>
|
||||
</div> -->
|
||||
|
||||
<a href="{{post.url}}" class="list-group-item list-group-item-action">
|
||||
<div class="d-flex w-100 justify-content-between">
|
||||
<div class="card-body">
|
||||
<h5 class="mb-1">{{post.title}}
|
||||
{% if post.is_short %}
|
||||
<span class="badge badge-secondary">Mini Post</span>
|
||||
{% endif %}
|
||||
</h5>
|
||||
<p class="card-text">{{post.description}}</p>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
|
||||
{% else %}
|
||||
|
||||
|
||||
@ -58,6 +78,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% include footer.html %}
|
||||
|
||||
|
||||
|
58
_posts/2019-08-24-Shift2.md
Normal file
58
_posts/2019-08-24-Shift2.md
Normal file
@ -0,0 +1,58 @@
|
||||
---
|
||||
layout: post
|
||||
title: "Keyed data encoding with Python"
|
||||
description: "XOR is pretty cool"
|
||||
date: 2019-08-24 13:13:00
|
||||
categories: projects
|
||||
---
|
||||
|
||||
I have always been interested in text and data encoding, so last year, I made my first encoding tool. [Shift64](https://github.com/Ewpratten/shift64) was designed to take plaintext data with a key, and convert it into a block of base64 that could, in theory, only be decoded with the original key. I had a lot of fun with this tool, and a very stripped down version of it actually ended up as a bonus question on the [5024 Programming Test](https://github.com/frc5024/Programming-Test/blob/master/test.md) for 2018/2019. Yes, the key was in fact `5024`.
|
||||
|
||||
This tool had some issues. Firstly, the code was a mess and only accepted hard-coded values. This made it very impractical as an every-day tool, and a nightmare to continue developing. Secondly, the encoder made use of entropy bits, and self modifying keys that would end up producing encoded files >1GB from just the word *hello*.
|
||||
|
||||
## Shift2
|
||||
One of the oldest items on my TODO list has been to rewrite shift64, so I made a brand new tool out of it. [Shift2](https://github.com/Ewpratten/shift) is both a command-line tool, and a Python3 library that can efficiently encode and decode text data with a single key (unlike shift64, which used two keys concatenated into a single string, and separated by a colon).
|
||||
|
||||
### How it works
|
||||
Shift2 has two inputs. A `file`, and a `key`. These two strings are used to produce a single output, the `message`.
|
||||
|
||||
When encoding a file, shift2 starts by encoding the raw data with [base85](https://en.wikipedia.org/wiki/Ascii85), to ensure that all data being passed to the next stage can be represented as a UTF-8 string (even binary data). This base85 data is then XOR encrypted with a rotating key. This operation can be expressed with the following (this example ignores the base85 encoding steps):
|
||||
```python
|
||||
file = "Hello reader! I am some input that needs to be encoded"
|
||||
key = "ewpratten"
|
||||
|
||||
message = ""
|
||||
|
||||
for i, char in enumerate(file):
|
||||
message += chr(
|
||||
ord(char) ^ ord(key[i % len(key) - 1])
|
||||
)
|
||||
|
||||
```
|
||||
|
||||
The output of this contains non-displayable characters. A second base85 encoding is used to fix this. Running the example snippet above, then base85 encoding the `message` once results in:
|
||||
```
|
||||
CIA~89YF>W1PTBJQBo*W6$nli7#$Zu9U2uI5my8n002}A3jh-XQWYCi2Ma|K9uW=@5di
|
||||
```
|
||||
|
||||
If using the shift2 commandline tool, you would see a different output:
|
||||
```
|
||||
B2-is8Y&4!ED2H~Ix<~LOCfn@P;xLjM_E8(awt`1YC<SaOLbpaL^T!^W_ucF8Er~?NnC$>e0@WAWn2bqc6M1yP+DqF4M_kSCp0uA5h->H
|
||||
```
|
||||
|
||||
This is for a few reasons. Firstly, as mentioned above, shift2 uses base85 **twice**. Once before, and once after XOR encryption. Secondly, a file header is prepended to the output to help the decoder read the file. This header contains version info, the file length, and the encoding type.
|
||||
|
||||
### Try it yourself
|
||||
I have published shift2 on [pypi.org](https://pypi.org/project/shift-tool/) for use with PIP. To install shift2, ensure both `python3` and `python3-pip` are installed on your computer, then run:
|
||||
```sh
|
||||
# Install shift2
|
||||
pip3 install shift-tool
|
||||
|
||||
# View the help for shift2
|
||||
shift2 -h
|
||||
```
|
||||
|
||||
### Future plans
|
||||
Due to the fact that shift2 can also be used as a library (as outlined in the [README](https://github.com/Ewpratten/shift/blob/master/README.md)), I would like to write a program that allows users to talk to eachother IRC style over a TCP port. This program would use either a pre-shared, or generated key to encode / decode messages on the fly.
|
||||
|
||||
If you are interested in helping out, or taking on this idea for yourself, send me an email.
|
@ -9,6 +9,7 @@
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="stylesheet" href="/assets/css/github-syntax.css">
|
||||
<link href="https://fonts.googleapis.com/css?family=IBM+Plex+Mono:400,400i|IBM+Plex+Sans:100,100i,400,400i,700,700i" rel="stylesheet">
|
||||
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@ -103,6 +104,26 @@ sub rsa4096/0xA61A2F1676E35144 2019-08-11 [] [expires: 2025-08-09]
|
||||
<li><a data-toggle="modal" data-target="#snapcode" href="">Snapchat</a></li>
|
||||
</ul>
|
||||
|
||||
<h2 id="my-gear">My gear</h2>
|
||||
<p>Currently, I use the following hardware:</p>
|
||||
|
||||
<ul>
|
||||
<li>Lenovo T480
|
||||
<ul>
|
||||
<li>16GB of RAM</li>
|
||||
<li>500GB Crucial SSD</li>
|
||||
<li>1080p display</li>
|
||||
<li>Ubuntu 18.04 minimal</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Google Pixel 3a XL
|
||||
<ul>
|
||||
<li>Stock android</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>HP 27es monitor</li>
|
||||
</ul>
|
||||
|
||||
<!-- devRant disclaimer -->
|
||||
<div class="modal fade" id="devrant-disclaimer" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
@ -150,21 +171,17 @@ sub rsa4096/0xA61A2F1676E35144 2019-08-11 [] [expires: 2025-08-09]
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="container">
|
||||
<hr>
|
||||
<!-- <div id="particles-js"></div> -->
|
||||
|
||||
<div class="container foot" style="text-align:center;">
|
||||
<br>
|
||||
<span class="site-info">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-24 15:35:35 -0400
|
||||
</span>
|
||||
</div>
|
||||
<nav class="navbar navbar-expand-lg ">
|
||||
|
||||
<!-- Navbar content -->
|
||||
<div class="container">
|
||||
|
||||
<span class="navbar-text">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-21 12:48:55 -0400
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
|
||||
@ -211,6 +228,15 @@ sub rsa4096/0xA61A2F1676E35144 2019-08-11 [] [expires: 2025-08-09]
|
||||
|
||||
|
||||
<!-- particles -->
|
||||
<script>
|
||||
var body = document.body
|
||||
|
||||
var particles = document.getElementById("particles-js")
|
||||
|
||||
particles.style.height = body.scrollHeight + "px"
|
||||
|
||||
console.log(body.scrollHeight)
|
||||
</script>
|
||||
<script src="/assets/js/particles.min.js"></script>
|
||||
<script>
|
||||
particlesJS.load('particles-js', '/assets/js/particles.json', function () {
|
||||
|
@ -10,6 +10,15 @@ body{
|
||||
|
||||
}
|
||||
|
||||
.foot{
|
||||
|
||||
}
|
||||
|
||||
.site-info{
|
||||
color:rgb(199, 195, 195);
|
||||
background-color: #FFF;
|
||||
}
|
||||
|
||||
.header-gap{
|
||||
/* height: 30px;
|
||||
background-color: #ebeef1; */
|
||||
@ -147,4 +156,31 @@ a h5 {
|
||||
.info h1 {
|
||||
/* padding: 20px; */
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
/* #particles-js{
|
||||
position: absolute;
|
||||
} */
|
||||
/*
|
||||
.reactive-bg{
|
||||
position:relative
|
||||
} */
|
||||
|
||||
#particles-js canvas {
|
||||
display: block;
|
||||
vertical-align: bottom;
|
||||
-webkit-transform: scale(1);
|
||||
-ms-transform: scale(1);
|
||||
transform: scale(1);
|
||||
opacity: 1;
|
||||
-webkit-transition: opacity .8s ease, -webkit-transform 1.4s ease;
|
||||
transition: opacity .8s ease, transform 1.4s ease
|
||||
}
|
||||
|
||||
#particles-js {
|
||||
width: 100%;
|
||||
position: absolute;
|
||||
z-index: -10;
|
||||
top: 0;
|
||||
left: 0
|
||||
}
|
@ -9,6 +9,7 @@
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="stylesheet" href="/assets/css/github-syntax.css">
|
||||
<link href="https://fonts.googleapis.com/css?family=IBM+Plex+Mono:400,400i|IBM+Plex+Sans:100,100i,400,400i,700,700i" rel="stylesheet">
|
||||
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@ -46,10 +47,16 @@
|
||||
|
||||
<div class="reactive-bg">
|
||||
<div class="post container">
|
||||
<h1>Using a python script to create devRant posts based on the style and content of another user</h1>
|
||||
<h4>if/else ++</h4>
|
||||
<h1>Using a python script to create devRant posts based on the style and content of another user
|
||||
|
||||
</h1>
|
||||
<h4>if/else ++
|
||||
|
||||
</h4>
|
||||
<hr>
|
||||
<p><em>2018-06-27 14:32:00 -0400</em></p>
|
||||
<p><em>2018-06-27 14:32:00 -0400
|
||||
|
||||
</em></p>
|
||||
|
||||
<br>
|
||||
|
||||
@ -109,21 +116,17 @@ pip3 install tensorflow-gpu #for gpu processing
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="container">
|
||||
<hr>
|
||||
<!-- <div id="particles-js"></div> -->
|
||||
|
||||
<div class="container foot" style="text-align:center;">
|
||||
<br>
|
||||
<span class="site-info">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-24 15:35:35 -0400
|
||||
</span>
|
||||
</div>
|
||||
<nav class="navbar navbar-expand-lg ">
|
||||
|
||||
<!-- Navbar content -->
|
||||
<div class="container">
|
||||
|
||||
<span class="navbar-text">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-21 12:48:55 -0400
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
|
||||
@ -170,11 +173,21 @@ pip3 install tensorflow-gpu #for gpu processing
|
||||
|
||||
|
||||
<!-- particles -->
|
||||
<script>
|
||||
var body = document.body
|
||||
|
||||
var particles = document.getElementById("particles-js")
|
||||
|
||||
particles.style.height = body.scrollHeight + "px"
|
||||
|
||||
console.log(body.scrollHeight)
|
||||
</script>
|
||||
<script src="/assets/js/particles.min.js"></script>
|
||||
<script>
|
||||
particlesJS.load('particles-js', '/assets/js/particles.json', function () {
|
||||
console.log('callback - particles.js config loaded');
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
@ -9,6 +9,7 @@
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="stylesheet" href="/assets/css/github-syntax.css">
|
||||
<link href="https://fonts.googleapis.com/css?family=IBM+Plex+Mono:400,400i|IBM+Plex+Sans:100,100i,400,400i,700,700i" rel="stylesheet">
|
||||
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@ -46,10 +47,16 @@
|
||||
|
||||
<div class="reactive-bg">
|
||||
<div class="post container">
|
||||
<h1>The language hunt</h1>
|
||||
<h4></h4>
|
||||
<h1>The language hunt
|
||||
|
||||
</h1>
|
||||
<h4>
|
||||
|
||||
</h4>
|
||||
<hr>
|
||||
<p><em>2019-04-30 14:32:00 -0400</em></p>
|
||||
<p><em>2019-04-30 14:32:00 -0400
|
||||
|
||||
</em></p>
|
||||
|
||||
<br>
|
||||
|
||||
@ -73,21 +80,17 @@
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="container">
|
||||
<hr>
|
||||
<!-- <div id="particles-js"></div> -->
|
||||
|
||||
<div class="container foot" style="text-align:center;">
|
||||
<br>
|
||||
<span class="site-info">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-24 15:35:35 -0400
|
||||
</span>
|
||||
</div>
|
||||
<nav class="navbar navbar-expand-lg ">
|
||||
|
||||
<!-- Navbar content -->
|
||||
<div class="container">
|
||||
|
||||
<span class="navbar-text">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-21 12:48:55 -0400
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
|
||||
@ -134,11 +137,21 @@
|
||||
|
||||
|
||||
<!-- particles -->
|
||||
<script>
|
||||
var body = document.body
|
||||
|
||||
var particles = document.getElementById("particles-js")
|
||||
|
||||
particles.style.height = body.scrollHeight + "px"
|
||||
|
||||
console.log(body.scrollHeight)
|
||||
</script>
|
||||
<script src="/assets/js/particles.min.js"></script>
|
||||
<script>
|
||||
particlesJS.load('particles-js', '/assets/js/particles.json', function () {
|
||||
console.log('callback - particles.js config loaded');
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
@ -9,6 +9,7 @@
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="stylesheet" href="/assets/css/github-syntax.css">
|
||||
<link href="https://fonts.googleapis.com/css?family=IBM+Plex+Mono:400,400i|IBM+Plex+Sans:100,100i,400,400i,700,700i" rel="stylesheet">
|
||||
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@ -46,10 +47,16 @@
|
||||
|
||||
<div class="reactive-bg">
|
||||
<div class="post container">
|
||||
<h1>Building a safe and easy system for sending computer vision data from a raspberry pi to a roborio</h1>
|
||||
<h4></h4>
|
||||
<h1>Building a safe and easy system for sending computer vision data from a raspberry pi to a roborio
|
||||
|
||||
</h1>
|
||||
<h4>
|
||||
|
||||
</h4>
|
||||
<hr>
|
||||
<p><em>2019-05-27 05:22:00 -0400</em></p>
|
||||
<p><em>2019-05-27 05:22:00 -0400
|
||||
|
||||
</em></p>
|
||||
|
||||
<br>
|
||||
|
||||
@ -86,21 +93,17 @@
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="container">
|
||||
<hr>
|
||||
<!-- <div id="particles-js"></div> -->
|
||||
|
||||
<div class="container foot" style="text-align:center;">
|
||||
<br>
|
||||
<span class="site-info">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-24 15:35:35 -0400
|
||||
</span>
|
||||
</div>
|
||||
<nav class="navbar navbar-expand-lg ">
|
||||
|
||||
<!-- Navbar content -->
|
||||
<div class="container">
|
||||
|
||||
<span class="navbar-text">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-21 12:48:55 -0400
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
|
||||
@ -147,11 +150,21 @@
|
||||
|
||||
|
||||
<!-- particles -->
|
||||
<script>
|
||||
var body = document.body
|
||||
|
||||
var particles = document.getElementById("particles-js")
|
||||
|
||||
particles.style.height = body.scrollHeight + "px"
|
||||
|
||||
console.log(body.scrollHeight)
|
||||
</script>
|
||||
<script src="/assets/js/particles.min.js"></script>
|
||||
<script>
|
||||
particlesJS.load('particles-js', '/assets/js/particles.json', function () {
|
||||
console.log('callback - particles.js config loaded');
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
@ -9,6 +9,7 @@
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="stylesheet" href="/assets/css/github-syntax.css">
|
||||
<link href="https://fonts.googleapis.com/css?family=IBM+Plex+Mono:400,400i|IBM+Plex+Sans:100,100i,400,400i,700,700i" rel="stylesheet">
|
||||
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@ -46,10 +47,16 @@
|
||||
|
||||
<div class="reactive-bg">
|
||||
<div class="post container">
|
||||
<h1>GitHub's CSS is boring. So I refreshed the design</h1>
|
||||
<h4></h4>
|
||||
<h1>GitHub's CSS is boring. So I refreshed the design
|
||||
|
||||
</h1>
|
||||
<h4>
|
||||
|
||||
</h4>
|
||||
<hr>
|
||||
<p><em>2019-06-12 09:09:00 -0400</em></p>
|
||||
<p><em>2019-06-12 09:09:00 -0400
|
||||
|
||||
</em></p>
|
||||
|
||||
<br>
|
||||
|
||||
@ -97,21 +104,17 @@
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="container">
|
||||
<hr>
|
||||
<!-- <div id="particles-js"></div> -->
|
||||
|
||||
<div class="container foot" style="text-align:center;">
|
||||
<br>
|
||||
<span class="site-info">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-24 15:35:35 -0400
|
||||
</span>
|
||||
</div>
|
||||
<nav class="navbar navbar-expand-lg ">
|
||||
|
||||
<!-- Navbar content -->
|
||||
<div class="container">
|
||||
|
||||
<span class="navbar-text">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-21 12:48:55 -0400
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
|
||||
@ -158,11 +161,21 @@
|
||||
|
||||
|
||||
<!-- particles -->
|
||||
<script>
|
||||
var body = document.body
|
||||
|
||||
var particles = document.getElementById("particles-js")
|
||||
|
||||
particles.style.height = body.scrollHeight + "px"
|
||||
|
||||
console.log(body.scrollHeight)
|
||||
</script>
|
||||
<script src="/assets/js/particles.min.js"></script>
|
||||
<script>
|
||||
particlesJS.load('particles-js', '/assets/js/particles.json', function () {
|
||||
console.log('callback - particles.js config loaded');
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
@ -9,6 +9,7 @@
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="stylesheet" href="/assets/css/github-syntax.css">
|
||||
<link href="https://fonts.googleapis.com/css?family=IBM+Plex+Mono:400,400i|IBM+Plex+Sans:100,100i,400,400i,700,700i" rel="stylesheet">
|
||||
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@ -46,10 +47,16 @@
|
||||
|
||||
<div class="reactive-bg">
|
||||
<div class="post container">
|
||||
<h1>Graphing the relation between wheels and awards for FRC</h1>
|
||||
<h4>AKA. Why programmer + reddit + matplotlib is a bad idea.</h4>
|
||||
<h1>Graphing the relation between wheels and awards for FRC
|
||||
|
||||
</h1>
|
||||
<h4>AKA. Why programmer + reddit + matplotlib is a bad idea.
|
||||
|
||||
</h4>
|
||||
<hr>
|
||||
<p><em>2019-06-16 11:51:00 -0400</em></p>
|
||||
<p><em>2019-06-16 11:51:00 -0400
|
||||
|
||||
</em></p>
|
||||
|
||||
<br>
|
||||
|
||||
@ -111,21 +118,17 @@
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="container">
|
||||
<hr>
|
||||
<!-- <div id="particles-js"></div> -->
|
||||
|
||||
<div class="container foot" style="text-align:center;">
|
||||
<br>
|
||||
<span class="site-info">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-24 15:35:35 -0400
|
||||
</span>
|
||||
</div>
|
||||
<nav class="navbar navbar-expand-lg ">
|
||||
|
||||
<!-- Navbar content -->
|
||||
<div class="container">
|
||||
|
||||
<span class="navbar-text">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-21 12:48:55 -0400
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
|
||||
@ -172,11 +175,21 @@
|
||||
|
||||
|
||||
<!-- particles -->
|
||||
<script>
|
||||
var body = document.body
|
||||
|
||||
var particles = document.getElementById("particles-js")
|
||||
|
||||
particles.style.height = body.scrollHeight + "px"
|
||||
|
||||
console.log(body.scrollHeight)
|
||||
</script>
|
||||
<script src="/assets/js/particles.min.js"></script>
|
||||
<script>
|
||||
particlesJS.load('particles-js', '/assets/js/particles.json', function () {
|
||||
console.log('callback - particles.js config loaded');
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
@ -9,6 +9,7 @@
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="stylesheet" href="/assets/css/github-syntax.css">
|
||||
<link href="https://fonts.googleapis.com/css?family=IBM+Plex+Mono:400,400i|IBM+Plex+Sans:100,100i,400,400i,700,700i" rel="stylesheet">
|
||||
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@ -46,10 +47,16 @@
|
||||
|
||||
<div class="reactive-bg">
|
||||
<div class="post container">
|
||||
<h1>I made a new song!</h1>
|
||||
<h4>Releasing a new song with friends at school</h4>
|
||||
<h1>I made a new song!
|
||||
|
||||
</h1>
|
||||
<h4>Releasing a new song with friends at school
|
||||
|
||||
</h4>
|
||||
<hr>
|
||||
<p><em>2019-06-17 06:20:00 -0400</em></p>
|
||||
<p><em>2019-06-17 06:20:00 -0400
|
||||
|
||||
</em></p>
|
||||
|
||||
<br>
|
||||
|
||||
@ -70,21 +77,17 @@ Your browser does not support audio players
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="container">
|
||||
<hr>
|
||||
<!-- <div id="particles-js"></div> -->
|
||||
|
||||
<div class="container foot" style="text-align:center;">
|
||||
<br>
|
||||
<span class="site-info">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-24 15:35:35 -0400
|
||||
</span>
|
||||
</div>
|
||||
<nav class="navbar navbar-expand-lg ">
|
||||
|
||||
<!-- Navbar content -->
|
||||
<div class="container">
|
||||
|
||||
<span class="navbar-text">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-21 12:48:55 -0400
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
|
||||
@ -131,11 +134,21 @@ Your browser does not support audio players
|
||||
|
||||
|
||||
<!-- particles -->
|
||||
<script>
|
||||
var body = document.body
|
||||
|
||||
var particles = document.getElementById("particles-js")
|
||||
|
||||
particles.style.height = body.scrollHeight + "px"
|
||||
|
||||
console.log(body.scrollHeight)
|
||||
</script>
|
||||
<script src="/assets/js/particles.min.js"></script>
|
||||
<script>
|
||||
particlesJS.load('particles-js', '/assets/js/particles.json', function () {
|
||||
console.log('callback - particles.js config loaded');
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
@ -9,6 +9,7 @@
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="stylesheet" href="/assets/css/github-syntax.css">
|
||||
<link href="https://fonts.googleapis.com/css?family=IBM+Plex+Mono:400,400i|IBM+Plex+Sans:100,100i,400,400i,700,700i" rel="stylesheet">
|
||||
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@ -45,10 +46,16 @@
|
||||
|
||||
<div class="reactive-bg">
|
||||
<div class="post container">
|
||||
<h1>What I have learned from 2 years of FRC programming</h1>
|
||||
<h4>Robots are pretty cool</h4>
|
||||
<h1>What I have learned from 2 years of FRC programming
|
||||
|
||||
</h1>
|
||||
<h4>Robots are pretty cool
|
||||
|
||||
</h4>
|
||||
<hr>
|
||||
<p><em>2019-06-21 11:14:00 -0400</em></p>
|
||||
<p><em>2019-06-21 11:14:00 -0400
|
||||
|
||||
</em></p>
|
||||
|
||||
<br>
|
||||
|
||||
@ -110,21 +117,17 @@
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="container">
|
||||
<hr>
|
||||
<!-- <div id="particles-js"></div> -->
|
||||
|
||||
<div class="container foot" style="text-align:center;">
|
||||
<br>
|
||||
<span class="site-info">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-24 15:35:35 -0400
|
||||
</span>
|
||||
</div>
|
||||
<nav class="navbar navbar-expand-lg ">
|
||||
|
||||
<!-- Navbar content -->
|
||||
<div class="container">
|
||||
|
||||
<span class="navbar-text">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-21 12:48:55 -0400
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
|
||||
@ -165,11 +168,21 @@
|
||||
|
||||
|
||||
<!-- particles -->
|
||||
<script>
|
||||
var body = document.body
|
||||
|
||||
var particles = document.getElementById("particles-js")
|
||||
|
||||
particles.style.height = body.scrollHeight + "px"
|
||||
|
||||
console.log(body.scrollHeight)
|
||||
</script>
|
||||
<script src="/assets/js/particles.min.js"></script>
|
||||
<script>
|
||||
particlesJS.load('particles-js', '/assets/js/particles.json', function () {
|
||||
console.log('callback - particles.js config loaded');
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
@ -9,6 +9,7 @@
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="stylesheet" href="/assets/css/github-syntax.css">
|
||||
<link href="https://fonts.googleapis.com/css?family=IBM+Plex+Mono:400,400i|IBM+Plex+Sans:100,100i,400,400i,700,700i" rel="stylesheet">
|
||||
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@ -46,10 +47,16 @@
|
||||
|
||||
<div class="reactive-bg">
|
||||
<div class="post container">
|
||||
<h1>I gave Google's CTF a short try and learned a thing or two</h1>
|
||||
<h4>But exams got in the way and took all the fun</h4>
|
||||
<h1>I gave Google's CTF a short try and learned a thing or two
|
||||
|
||||
</h1>
|
||||
<h4>But exams got in the way and took all the fun
|
||||
|
||||
</h4>
|
||||
<hr>
|
||||
<p><em>2019-06-23 18:04:00 -0400</em></p>
|
||||
<p><em>2019-06-23 18:04:00 -0400
|
||||
|
||||
</em></p>
|
||||
|
||||
<br>
|
||||
|
||||
@ -68,21 +75,17 @@
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="container">
|
||||
<hr>
|
||||
<!-- <div id="particles-js"></div> -->
|
||||
|
||||
<div class="container foot" style="text-align:center;">
|
||||
<br>
|
||||
<span class="site-info">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-24 15:35:35 -0400
|
||||
</span>
|
||||
</div>
|
||||
<nav class="navbar navbar-expand-lg ">
|
||||
|
||||
<!-- Navbar content -->
|
||||
<div class="container">
|
||||
|
||||
<span class="navbar-text">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-21 12:48:55 -0400
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
|
||||
@ -129,11 +132,21 @@
|
||||
|
||||
|
||||
<!-- particles -->
|
||||
<script>
|
||||
var body = document.body
|
||||
|
||||
var particles = document.getElementById("particles-js")
|
||||
|
||||
particles.style.height = body.scrollHeight + "px"
|
||||
|
||||
console.log(body.scrollHeight)
|
||||
</script>
|
||||
<script src="/assets/js/particles.min.js"></script>
|
||||
<script>
|
||||
particlesJS.load('particles-js', '/assets/js/particles.json', function () {
|
||||
console.log('callback - particles.js config loaded');
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
@ -9,6 +9,7 @@
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="stylesheet" href="/assets/css/github-syntax.css">
|
||||
<link href="https://fonts.googleapis.com/css?family=IBM+Plex+Mono:400,400i|IBM+Plex+Sans:100,100i,400,400i,700,700i" rel="stylesheet">
|
||||
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@ -46,10 +47,16 @@
|
||||
|
||||
<div class="reactive-bg">
|
||||
<div class="post container">
|
||||
<h1>The language hunt: Part 2</h1>
|
||||
<h4>A quick followup</h4>
|
||||
<h1>The language hunt: Part 2
|
||||
|
||||
</h1>
|
||||
<h4>A quick followup
|
||||
|
||||
</h4>
|
||||
<hr>
|
||||
<p><em>2019-06-24 17:36:00 -0400</em></p>
|
||||
<p><em>2019-06-24 17:36:00 -0400
|
||||
|
||||
</em></p>
|
||||
|
||||
<br>
|
||||
|
||||
@ -68,21 +75,17 @@
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="container">
|
||||
<hr>
|
||||
<!-- <div id="particles-js"></div> -->
|
||||
|
||||
<div class="container foot" style="text-align:center;">
|
||||
<br>
|
||||
<span class="site-info">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-24 15:35:35 -0400
|
||||
</span>
|
||||
</div>
|
||||
<nav class="navbar navbar-expand-lg ">
|
||||
|
||||
<!-- Navbar content -->
|
||||
<div class="container">
|
||||
|
||||
<span class="navbar-text">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-21 12:48:55 -0400
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
|
||||
@ -129,11 +132,21 @@
|
||||
|
||||
|
||||
<!-- particles -->
|
||||
<script>
|
||||
var body = document.body
|
||||
|
||||
var particles = document.getElementById("particles-js")
|
||||
|
||||
particles.style.height = body.scrollHeight + "px"
|
||||
|
||||
console.log(body.scrollHeight)
|
||||
</script>
|
||||
<script src="/assets/js/particles.min.js"></script>
|
||||
<script>
|
||||
particlesJS.load('particles-js', '/assets/js/particles.json', function () {
|
||||
console.log('callback - particles.js config loaded');
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
@ -9,6 +9,7 @@
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="stylesheet" href="/assets/css/github-syntax.css">
|
||||
<link href="https://fonts.googleapis.com/css?family=IBM+Plex+Mono:400,400i|IBM+Plex+Sans:100,100i,400,400i,700,700i" rel="stylesheet">
|
||||
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@ -46,10 +47,16 @@
|
||||
|
||||
<div class="reactive-bg">
|
||||
<div class="post container">
|
||||
<h1>BashSmash</h1>
|
||||
<h4>A tool for driving people crazy</h4>
|
||||
<h1>BashSmash
|
||||
|
||||
</h1>
|
||||
<h4>A tool for driving people crazy
|
||||
|
||||
</h4>
|
||||
<hr>
|
||||
<p><em>2019-06-26 11:48:00 -0400</em></p>
|
||||
<p><em>2019-06-26 11:48:00 -0400
|
||||
|
||||
</em></p>
|
||||
|
||||
<br>
|
||||
|
||||
@ -177,21 +184,17 @@ __<span class="o">()</span> <span class="o">{</span>/???/???/???n?f <span class=
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="container">
|
||||
<hr>
|
||||
<!-- <div id="particles-js"></div> -->
|
||||
|
||||
<div class="container foot" style="text-align:center;">
|
||||
<br>
|
||||
<span class="site-info">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-24 15:35:35 -0400
|
||||
</span>
|
||||
</div>
|
||||
<nav class="navbar navbar-expand-lg ">
|
||||
|
||||
<!-- Navbar content -->
|
||||
<div class="container">
|
||||
|
||||
<span class="navbar-text">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-21 12:48:55 -0400
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
|
||||
@ -238,11 +241,21 @@ __<span class="o">()</span> <span class="o">{</span>/???/???/???n?f <span class=
|
||||
|
||||
|
||||
<!-- particles -->
|
||||
<script>
|
||||
var body = document.body
|
||||
|
||||
var particles = document.getElementById("particles-js")
|
||||
|
||||
particles.style.height = body.scrollHeight + "px"
|
||||
|
||||
console.log(body.scrollHeight)
|
||||
</script>
|
||||
<script src="/assets/js/particles.min.js"></script>
|
||||
<script>
|
||||
particlesJS.load('particles-js', '/assets/js/particles.json', function () {
|
||||
console.log('callback - particles.js config loaded');
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
@ -9,6 +9,7 @@
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="stylesheet" href="/assets/css/github-syntax.css">
|
||||
<link href="https://fonts.googleapis.com/css?family=IBM+Plex+Mono:400,400i|IBM+Plex+Sans:100,100i,400,400i,700,700i" rel="stylesheet">
|
||||
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@ -46,10 +47,16 @@
|
||||
|
||||
<div class="reactive-bg">
|
||||
<div class="post container">
|
||||
<h1>I had some fun with a router</h1>
|
||||
<h4>cleartext passwords + external management = death wish</h4>
|
||||
<h1>I had some fun with a router
|
||||
|
||||
</h1>
|
||||
<h4>cleartext passwords + external management = death wish
|
||||
|
||||
</h4>
|
||||
<hr>
|
||||
<p><em>2019-06-27 13:16:00 -0400</em></p>
|
||||
<p><em>2019-06-27 13:16:00 -0400
|
||||
|
||||
</em></p>
|
||||
|
||||
<br>
|
||||
|
||||
@ -98,21 +105,17 @@
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="container">
|
||||
<hr>
|
||||
<!-- <div id="particles-js"></div> -->
|
||||
|
||||
<div class="container foot" style="text-align:center;">
|
||||
<br>
|
||||
<span class="site-info">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-24 15:35:35 -0400
|
||||
</span>
|
||||
</div>
|
||||
<nav class="navbar navbar-expand-lg ">
|
||||
|
||||
<!-- Navbar content -->
|
||||
<div class="container">
|
||||
|
||||
<span class="navbar-text">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-21 12:48:55 -0400
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
|
||||
@ -159,11 +162,21 @@
|
||||
|
||||
|
||||
<!-- particles -->
|
||||
<script>
|
||||
var body = document.body
|
||||
|
||||
var particles = document.getElementById("particles-js")
|
||||
|
||||
particles.style.height = body.scrollHeight + "px"
|
||||
|
||||
console.log(body.scrollHeight)
|
||||
</script>
|
||||
<script src="/assets/js/particles.min.js"></script>
|
||||
<script>
|
||||
particlesJS.load('particles-js', '/assets/js/particles.json', function () {
|
||||
console.log('callback - particles.js config loaded');
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
@ -9,6 +9,7 @@
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="stylesheet" href="/assets/css/github-syntax.css">
|
||||
<link href="https://fonts.googleapis.com/css?family=IBM+Plex+Mono:400,400i|IBM+Plex+Sans:100,100i,400,400i,700,700i" rel="stylesheet">
|
||||
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@ -46,10 +47,16 @@
|
||||
|
||||
<div class="reactive-bg">
|
||||
<div class="post container">
|
||||
<h1>Hunting snakes with a shotgun</h1>
|
||||
<h4>Python is a little too forgiving</h4>
|
||||
<h1>Hunting snakes with a shotgun
|
||||
|
||||
</h1>
|
||||
<h4>Python is a little too forgiving
|
||||
|
||||
</h4>
|
||||
<hr>
|
||||
<p><em>2019-06-27 03:00:00 -0400</em></p>
|
||||
<p><em>2019-06-27 03:00:00 -0400
|
||||
|
||||
</em></p>
|
||||
|
||||
<br>
|
||||
|
||||
@ -163,21 +170,17 @@
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="container">
|
||||
<hr>
|
||||
<!-- <div id="particles-js"></div> -->
|
||||
|
||||
<div class="container foot" style="text-align:center;">
|
||||
<br>
|
||||
<span class="site-info">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-24 15:35:35 -0400
|
||||
</span>
|
||||
</div>
|
||||
<nav class="navbar navbar-expand-lg ">
|
||||
|
||||
<!-- Navbar content -->
|
||||
<div class="container">
|
||||
|
||||
<span class="navbar-text">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-21 12:48:55 -0400
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
|
||||
@ -224,11 +227,21 @@
|
||||
|
||||
|
||||
<!-- particles -->
|
||||
<script>
|
||||
var body = document.body
|
||||
|
||||
var particles = document.getElementById("particles-js")
|
||||
|
||||
particles.style.height = body.scrollHeight + "px"
|
||||
|
||||
console.log(body.scrollHeight)
|
||||
</script>
|
||||
<script src="/assets/js/particles.min.js"></script>
|
||||
<script>
|
||||
particlesJS.load('particles-js', '/assets/js/particles.json', function () {
|
||||
console.log('callback - particles.js config loaded');
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
@ -9,6 +9,7 @@
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="stylesheet" href="/assets/css/github-syntax.css">
|
||||
<link href="https://fonts.googleapis.com/css?family=IBM+Plex+Mono:400,400i|IBM+Plex+Sans:100,100i,400,400i,700,700i" rel="stylesheet">
|
||||
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@ -45,10 +46,16 @@
|
||||
|
||||
<div class="reactive-bg">
|
||||
<div class="post container">
|
||||
<h1>devDNS</h1>
|
||||
<h4>The DNS over devRant service</h4>
|
||||
<h1>devDNS
|
||||
|
||||
</h1>
|
||||
<h4>The DNS over devRant service
|
||||
|
||||
</h4>
|
||||
<hr>
|
||||
<p><em>2019-07-01 18:13:00 -0400</em></p>
|
||||
<p><em>2019-07-01 18:13:00 -0400
|
||||
|
||||
</em></p>
|
||||
|
||||
<br>
|
||||
|
||||
@ -87,21 +94,17 @@
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="container">
|
||||
<hr>
|
||||
<!-- <div id="particles-js"></div> -->
|
||||
|
||||
<div class="container foot" style="text-align:center;">
|
||||
<br>
|
||||
<span class="site-info">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-24 15:35:35 -0400
|
||||
</span>
|
||||
</div>
|
||||
<nav class="navbar navbar-expand-lg ">
|
||||
|
||||
<!-- Navbar content -->
|
||||
<div class="container">
|
||||
|
||||
<span class="navbar-text">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-21 12:48:55 -0400
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
|
||||
@ -142,11 +145,21 @@
|
||||
|
||||
|
||||
<!-- particles -->
|
||||
<script>
|
||||
var body = document.body
|
||||
|
||||
var particles = document.getElementById("particles-js")
|
||||
|
||||
particles.style.height = body.scrollHeight + "px"
|
||||
|
||||
console.log(body.scrollHeight)
|
||||
</script>
|
||||
<script src="/assets/js/particles.min.js"></script>
|
||||
<script>
|
||||
particlesJS.load('particles-js', '/assets/js/particles.json', function () {
|
||||
console.log('callback - particles.js config loaded');
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
@ -9,6 +9,7 @@
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="stylesheet" href="/assets/css/github-syntax.css">
|
||||
<link href="https://fonts.googleapis.com/css?family=IBM+Plex+Mono:400,400i|IBM+Plex+Sans:100,100i,400,400i,700,700i" rel="stylesheet">
|
||||
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@ -46,10 +47,16 @@
|
||||
|
||||
<div class="reactive-bg">
|
||||
<div class="post container">
|
||||
<h1>Scraping FRC team's GitHub accounts to gather large amounts of data</h1>
|
||||
<h4>There are a lot of teams...</h4>
|
||||
<h1>Scraping FRC team's GitHub accounts to gather large amounts of data
|
||||
|
||||
</h1>
|
||||
<h4>There are a lot of teams...
|
||||
|
||||
</h4>
|
||||
<hr>
|
||||
<p><em>2019-07-06 11:08:00 -0400</em></p>
|
||||
<p><em>2019-07-06 11:08:00 -0400
|
||||
|
||||
</em></p>
|
||||
|
||||
<br>
|
||||
|
||||
@ -160,21 +167,17 @@
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="container">
|
||||
<hr>
|
||||
<!-- <div id="particles-js"></div> -->
|
||||
|
||||
<div class="container foot" style="text-align:center;">
|
||||
<br>
|
||||
<span class="site-info">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-24 15:35:35 -0400
|
||||
</span>
|
||||
</div>
|
||||
<nav class="navbar navbar-expand-lg ">
|
||||
|
||||
<!-- Navbar content -->
|
||||
<div class="container">
|
||||
|
||||
<span class="navbar-text">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-21 12:48:55 -0400
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
|
||||
@ -221,11 +224,21 @@
|
||||
|
||||
|
||||
<!-- particles -->
|
||||
<script>
|
||||
var body = document.body
|
||||
|
||||
var particles = document.getElementById("particles-js")
|
||||
|
||||
particles.style.height = body.scrollHeight + "px"
|
||||
|
||||
console.log(body.scrollHeight)
|
||||
</script>
|
||||
<script src="/assets/js/particles.min.js"></script>
|
||||
<script>
|
||||
particlesJS.load('particles-js', '/assets/js/particles.json', function () {
|
||||
console.log('callback - particles.js config loaded');
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
@ -9,6 +9,7 @@
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="stylesheet" href="/assets/css/github-syntax.css">
|
||||
<link href="https://fonts.googleapis.com/css?family=IBM+Plex+Mono:400,400i|IBM+Plex+Sans:100,100i,400,400i,700,700i" rel="stylesheet">
|
||||
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@ -46,10 +47,16 @@
|
||||
|
||||
<div class="reactive-bg">
|
||||
<div class="post container">
|
||||
<h1>Taking a look back at GMAD</h1>
|
||||
<h4>Fun, Simple, and Quick</h4>
|
||||
<h1>Taking a look back at GMAD
|
||||
|
||||
</h1>
|
||||
<h4>Fun, Simple, and Quick
|
||||
|
||||
</h4>
|
||||
<hr>
|
||||
<p><em>2019-07-13 10:43:00 -0400</em></p>
|
||||
<p><em>2019-07-13 10:43:00 -0400
|
||||
|
||||
</em></p>
|
||||
|
||||
<br>
|
||||
|
||||
@ -81,21 +88,17 @@
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="container">
|
||||
<hr>
|
||||
<!-- <div id="particles-js"></div> -->
|
||||
|
||||
<div class="container foot" style="text-align:center;">
|
||||
<br>
|
||||
<span class="site-info">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-24 15:35:35 -0400
|
||||
</span>
|
||||
</div>
|
||||
<nav class="navbar navbar-expand-lg ">
|
||||
|
||||
<!-- Navbar content -->
|
||||
<div class="container">
|
||||
|
||||
<span class="navbar-text">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-21 12:48:55 -0400
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
|
||||
@ -142,11 +145,21 @@
|
||||
|
||||
|
||||
<!-- particles -->
|
||||
<script>
|
||||
var body = document.body
|
||||
|
||||
var particles = document.getElementById("particles-js")
|
||||
|
||||
particles.style.height = body.scrollHeight + "px"
|
||||
|
||||
console.log(body.scrollHeight)
|
||||
</script>
|
||||
<script src="/assets/js/particles.min.js"></script>
|
||||
<script>
|
||||
particlesJS.load('particles-js', '/assets/js/particles.json', function () {
|
||||
console.log('callback - particles.js config loaded');
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
@ -9,6 +9,7 @@
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="stylesheet" href="/assets/css/github-syntax.css">
|
||||
<link href="https://fonts.googleapis.com/css?family=IBM+Plex+Mono:400,400i|IBM+Plex+Sans:100,100i,400,400i,700,700i" rel="stylesheet">
|
||||
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@ -46,10 +47,16 @@
|
||||
|
||||
<div class="reactive-bg">
|
||||
<div class="post container">
|
||||
<h1>Mind map generation with Python</h1>
|
||||
<h4>Step 1</h4>
|
||||
<h1>Mind map generation with Python
|
||||
|
||||
</h1>
|
||||
<h4>Step 1
|
||||
|
||||
</h4>
|
||||
<hr>
|
||||
<p><em>2019-07-15 14:38:00 -0400</em></p>
|
||||
<p><em>2019-07-15 14:38:00 -0400
|
||||
|
||||
</em></p>
|
||||
|
||||
<br>
|
||||
|
||||
@ -173,21 +180,17 @@
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="container">
|
||||
<hr>
|
||||
<!-- <div id="particles-js"></div> -->
|
||||
|
||||
<div class="container foot" style="text-align:center;">
|
||||
<br>
|
||||
<span class="site-info">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-24 15:35:35 -0400
|
||||
</span>
|
||||
</div>
|
||||
<nav class="navbar navbar-expand-lg ">
|
||||
|
||||
<!-- Navbar content -->
|
||||
<div class="container">
|
||||
|
||||
<span class="navbar-text">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-21 12:48:55 -0400
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
|
||||
@ -234,11 +237,21 @@
|
||||
|
||||
|
||||
<!-- particles -->
|
||||
<script>
|
||||
var body = document.body
|
||||
|
||||
var particles = document.getElementById("particles-js")
|
||||
|
||||
particles.style.height = body.scrollHeight + "px"
|
||||
|
||||
console.log(body.scrollHeight)
|
||||
</script>
|
||||
<script src="/assets/js/particles.min.js"></script>
|
||||
<script>
|
||||
particlesJS.load('particles-js', '/assets/js/particles.json', function () {
|
||||
console.log('callback - particles.js config loaded');
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
@ -9,6 +9,7 @@
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="stylesheet" href="/assets/css/github-syntax.css">
|
||||
<link href="https://fonts.googleapis.com/css?family=IBM+Plex+Mono:400,400i|IBM+Plex+Sans:100,100i,400,400i,700,700i" rel="stylesheet">
|
||||
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@ -45,10 +46,16 @@
|
||||
|
||||
<div class="reactive-bg">
|
||||
<div class="post container">
|
||||
<h1>My weird piece of EDC</h1>
|
||||
<h4>Reasons why I always carry NFC cards with me</h4>
|
||||
<h1>My weird piece of EDC
|
||||
|
||||
</h1>
|
||||
<h4>Reasons why I always carry NFC cards with me
|
||||
|
||||
</h4>
|
||||
<hr>
|
||||
<p><em>2019-08-10 16:57:00 -0400</em></p>
|
||||
<p><em>2019-08-10 16:57:00 -0400
|
||||
|
||||
</em></p>
|
||||
|
||||
<br>
|
||||
|
||||
@ -93,21 +100,17 @@
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="container">
|
||||
<hr>
|
||||
<!-- <div id="particles-js"></div> -->
|
||||
|
||||
<div class="container foot" style="text-align:center;">
|
||||
<br>
|
||||
<span class="site-info">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-24 15:35:35 -0400
|
||||
</span>
|
||||
</div>
|
||||
<nav class="navbar navbar-expand-lg ">
|
||||
|
||||
<!-- Navbar content -->
|
||||
<div class="container">
|
||||
|
||||
<span class="navbar-text">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-21 12:48:55 -0400
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
|
||||
@ -148,11 +151,21 @@
|
||||
|
||||
|
||||
<!-- particles -->
|
||||
<script>
|
||||
var body = document.body
|
||||
|
||||
var particles = document.getElementById("particles-js")
|
||||
|
||||
particles.style.height = body.scrollHeight + "px"
|
||||
|
||||
console.log(body.scrollHeight)
|
||||
</script>
|
||||
<script src="/assets/js/particles.min.js"></script>
|
||||
<script>
|
||||
particlesJS.load('particles-js', '/assets/js/particles.json', function () {
|
||||
console.log('callback - particles.js config loaded');
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
@ -9,6 +9,7 @@
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="stylesheet" href="/assets/css/github-syntax.css">
|
||||
<link href="https://fonts.googleapis.com/css?family=IBM+Plex+Mono:400,400i|IBM+Plex+Sans:100,100i,400,400i,700,700i" rel="stylesheet">
|
||||
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@ -45,10 +46,16 @@
|
||||
|
||||
<div class="reactive-bg">
|
||||
<div class="post container">
|
||||
<h1>How I set up ひらがな input on my laptop</h1>
|
||||
<h4>I3wm makes everything 10x harder than it should be</h4>
|
||||
<h1>How I set up ひらがな input on my laptop
|
||||
|
||||
</h1>
|
||||
<h4>I3wm makes everything 10x harder than it should be
|
||||
|
||||
</h4>
|
||||
<hr>
|
||||
<p><em>2019-08-12 15:40:00 -0400</em></p>
|
||||
<p><em>2019-08-12 15:40:00 -0400
|
||||
|
||||
</em></p>
|
||||
|
||||
<br>
|
||||
|
||||
@ -138,21 +145,17 @@ ibus-daemon <span class="nt">-drx</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="container">
|
||||
<hr>
|
||||
<!-- <div id="particles-js"></div> -->
|
||||
|
||||
<div class="container foot" style="text-align:center;">
|
||||
<br>
|
||||
<span class="site-info">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-24 15:35:35 -0400
|
||||
</span>
|
||||
</div>
|
||||
<nav class="navbar navbar-expand-lg ">
|
||||
|
||||
<!-- Navbar content -->
|
||||
<div class="container">
|
||||
|
||||
<span class="navbar-text">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-21 12:48:55 -0400
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
|
||||
@ -193,11 +196,21 @@ ibus-daemon <span class="nt">-drx</span>
|
||||
|
||||
|
||||
<!-- particles -->
|
||||
<script>
|
||||
var body = document.body
|
||||
|
||||
var particles = document.getElementById("particles-js")
|
||||
|
||||
particles.style.height = body.scrollHeight + "px"
|
||||
|
||||
console.log(body.scrollHeight)
|
||||
</script>
|
||||
<script src="/assets/js/particles.min.js"></script>
|
||||
<script>
|
||||
particlesJS.load('particles-js', '/assets/js/particles.json', function () {
|
||||
console.log('callback - particles.js config loaded');
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
181
_site/blog/2019/08/24/shift2.html
Normal file
181
_site/blog/2019/08/24/shift2.html
Normal file
@ -0,0 +1,181 @@
|
||||
<head>
|
||||
<title>Evan Pratten</title>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
|
||||
|
||||
|
||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
|
||||
integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="stylesheet" href="/assets/css/github-syntax.css">
|
||||
<link href="https://fonts.googleapis.com/css?family=IBM+Plex+Mono:400,400i|IBM+Plex+Sans:100,100i,400,400i,700,700i" rel="stylesheet">
|
||||
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div class="site-ctr">
|
||||
<!-- Navbar -->
|
||||
<nav class="navbar navbar-dark sticky-top bg-dark navbar-expand-lg">
|
||||
<!-- Navbar content -->
|
||||
<!-- <div class="container"> -->
|
||||
<a class="navbar-brand" href="/">Evan Pratten</a>
|
||||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNavAltMarkup">
|
||||
<div class="navbar-nav ml-auto">
|
||||
<a class="nav-item nav-link" href="/blog">Blog</a>
|
||||
<a class="nav-item nav-link" href="/projects">Projects</a>
|
||||
<!-- <a class="nav-item nav-link" href="/documentation">Documentation</a> -->
|
||||
<a class="nav-item nav-link" href="/about">About</a>
|
||||
</div>
|
||||
<!-- </div> -->
|
||||
</div>
|
||||
</nav>
|
||||
<!-- <div style="height:5vh"></div> -->
|
||||
|
||||
<!-- Header -->
|
||||
<!-- <div class="header">
|
||||
<div class="container">
|
||||
<div class="content">
|
||||
</div>
|
||||
</div>
|
||||
<div class="header-gap"></div>
|
||||
</div> -->
|
||||
|
||||
<div class="reactive-bg">
|
||||
<div class="post container">
|
||||
<h1>Keyed data encoding with Python
|
||||
|
||||
</h1>
|
||||
<h4>XOR is pretty cool
|
||||
|
||||
</h4>
|
||||
<hr>
|
||||
<p><em>2019-08-24 09:13:00 -0400
|
||||
|
||||
</em></p>
|
||||
|
||||
<br>
|
||||
|
||||
<p>I have always been interested in text and data encoding, so last year, I made my first encoding tool. <a href="https://github.com/Ewpratten/shift64">Shift64</a> was designed to take plaintext data with a key, and convert it into a block of base64 that could, in theory, only be decoded with the original key. I had a lot of fun with this tool, and a very stripped down version of it actually ended up as a bonus question on the <a href="https://github.com/frc5024/Programming-Test/blob/master/test.md">5024 Programming Test</a> for 2018/2019. Yes, the key was in fact <code class="highlighter-rouge">5024</code>.</p>
|
||||
|
||||
<p>This tool had some issues. Firstly, the code was a mess and only accepted hard-coded values. This made it very impractical as an every-day tool, and a nightmare to continue developing. Secondly, the encoder made use of entropy bits, and self modifying keys that would end up producing encoded files >1GB from just the word <em>hello</em>.</p>
|
||||
|
||||
<h2 id="shift2">Shift2</h2>
|
||||
<p>One of the oldest items on my TODO list has been to rewrite shift64, so I made a brand new tool out of it. <a href="https://github.com/Ewpratten/shift">Shift2</a> is both a command-line tool, and a Python3 library that can efficiently encode and decode text data with a single key (unlike shift64, which used two keys concatenated into a single string, and separated by a colon).</p>
|
||||
|
||||
<h3 id="how-it-works">How it works</h3>
|
||||
<p>Shift2 has two inputs. A <code class="highlighter-rouge">file</code>, and a <code class="highlighter-rouge">key</code>. These two strings are used to produce a single output, the <code class="highlighter-rouge">message</code>.</p>
|
||||
|
||||
<p>When encoding a file, shift2 starts by encoding the raw data with <a href="https://en.wikipedia.org/wiki/Ascii85">base85</a>, to ensure that all data being passed to the next stage can be represented as a UTF-8 string (even binary data). This base85 data is then XOR encrypted with a rotating key. This operation can be expressed with the following (this example ignores the base85 encoding steps):</p>
|
||||
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">file</span> <span class="o">=</span> <span class="s">"Hello reader! I am some input that needs to be encoded"</span>
|
||||
<span class="n">key</span> <span class="o">=</span> <span class="s">"ewpratten"</span>
|
||||
|
||||
<span class="n">message</span> <span class="o">=</span> <span class="s">""</span>
|
||||
|
||||
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">char</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="nb">file</span><span class="p">):</span>
|
||||
<span class="n">message</span> <span class="o">+=</span> <span class="nb">chr</span><span class="p">(</span>
|
||||
<span class="nb">ord</span><span class="p">(</span><span class="n">char</span><span class="p">)</span> <span class="o">^</span> <span class="nb">ord</span><span class="p">(</span><span class="n">key</span><span class="p">[</span><span class="n">i</span> <span class="o">%</span> <span class="nb">len</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">])</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
</code></pre></div></div>
|
||||
|
||||
<p>The output of this contains non-displayable characters. A second base85 encoding is used to fix this. Running the example snippet above, then base85 encoding the <code class="highlighter-rouge">message</code> once results in:</p>
|
||||
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>CIA~89YF>W1PTBJQBo*W6$nli7#$Zu9U2uI5my8n002}A3jh-XQWYCi2Ma|K9uW=@5di
|
||||
</code></pre></div></div>
|
||||
|
||||
<p>If using the shift2 commandline tool, you would see a different output:</p>
|
||||
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>B2-is8Y&4!ED2H~Ix<~LOCfn@P;xLjM_E8(awt`1YC<SaOLbpaL^T!^W_ucF8Er~?NnC$>e0@WAWn2bqc6M1yP+DqF4M_kSCp0uA5h->H
|
||||
</code></pre></div></div>
|
||||
|
||||
<p>This is for a few reasons. Firstly, as mentioned above, shift2 uses base85 <strong>twice</strong>. Once before, and once after XOR encryption. Secondly, a file header is prepended to the output to help the decoder read the file. This header contains version info, the file length, and the encoding type.</p>
|
||||
|
||||
<h3 id="try-it-yourself">Try it yourself</h3>
|
||||
<p>I have published shift2 on <a href="https://pypi.org/project/shift-tool/">pypi.org</a> for use with PIP. To install shift2, ensure both <code class="highlighter-rouge">python3</code> and <code class="highlighter-rouge">python3-pip</code> are installed on your computer, then run:</p>
|
||||
<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Install shift2</span>
|
||||
pip3 <span class="nb">install </span>shift-tool
|
||||
|
||||
<span class="c"># View the help for shift2</span>
|
||||
shift2 <span class="nt">-h</span>
|
||||
</code></pre></div></div>
|
||||
|
||||
<h3 id="future-plans">Future plans</h3>
|
||||
<p>Due to the fact that shift2 can also be used as a library (as outlined in the <a href="https://github.com/Ewpratten/shift/blob/master/README.md">README</a>), I would like to write a program that allows users to talk to eachother IRC style over a TCP port. This program would use either a pre-shared, or generated key to encode / decode messages on the fly.</p>
|
||||
|
||||
<p>If you are interested in helping out, or taking on this idea for yourself, send me an email.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- <div id="particles-js"></div> -->
|
||||
|
||||
<div class="container foot" style="text-align:center;">
|
||||
<br>
|
||||
<span class="site-info">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-24 15:35:35 -0400
|
||||
</span>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
|
||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
|
||||
|
||||
<!-- Offsets for links -->
|
||||
<script>
|
||||
(function ($, window) {
|
||||
var adjustAnchor = function () {
|
||||
|
||||
var $anchor = $(':target'),
|
||||
fixedElementHeight = 100;
|
||||
|
||||
if ($anchor.length > 0) {
|
||||
|
||||
window.scrollTo(0, $anchor.offset().top - fixedElementHeight);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
$(window).on('hashchange load', function () {
|
||||
adjustAnchor();
|
||||
});
|
||||
|
||||
})(jQuery, window);
|
||||
</script>
|
||||
|
||||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-74118570-2"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag() { dataLayer.push(arguments); }
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'UA-74118570-2');
|
||||
</script>
|
||||
|
||||
|
||||
<!-- particles -->
|
||||
<script>
|
||||
var body = document.body
|
||||
|
||||
var particles = document.getElementById("particles-js")
|
||||
|
||||
particles.style.height = body.scrollHeight + "px"
|
||||
|
||||
console.log(body.scrollHeight)
|
||||
</script>
|
||||
<script src="/assets/js/particles.min.js"></script>
|
||||
<script>
|
||||
particlesJS.load('particles-js', '/assets/js/particles.json', function () {
|
||||
console.log('callback - particles.js config loaded');
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
@ -9,6 +9,7 @@
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="stylesheet" href="/assets/css/github-syntax.css">
|
||||
<link href="https://fonts.googleapis.com/css?family=IBM+Plex+Mono:400,400i|IBM+Plex+Sans:100,100i,400,400i,700,700i" rel="stylesheet">
|
||||
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@ -43,36 +44,67 @@
|
||||
</div>
|
||||
<div class="header-gap"></div>
|
||||
</div> -->
|
||||
|
||||
|
||||
<div class="reactive-bg">
|
||||
<div class="post container" >
|
||||
<div class="post container">
|
||||
<h1>Blog Posts</h1>
|
||||
<hr>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="post-preview">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
Featured Post
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">How I set up ひらがな input on my laptop</h5>
|
||||
<p class="card-text">I3wm makes everything 10x harder than it should be</p>
|
||||
<a href="/blog/2019/08/12/setting-up-ja" class="btn btn-primary">View</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="height:50px"></div>
|
||||
<div class="list-group" id="posts">
|
||||
<a href="#posts" class="list-group-item list-group-item-action list-group-item-dark">Other Posts</a>
|
||||
<a href="#posts" class="list-group-item list-group-item-action list-group-item-dark">Featured
|
||||
Post</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- <div class="post-preview">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
Featured Post
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Keyed data encoding with Python
|
||||
|
||||
</h5>
|
||||
<p class="card-text">XOR is pretty cool</p>
|
||||
<a href="/blog/2019/08/24/shift2" class="btn btn-primary">View</a>
|
||||
</div>
|
||||
</div>
|
||||
</div> -->
|
||||
|
||||
<a href="/blog/2019/08/24/shift2" class="list-group-item list-group-item-action">
|
||||
<div class="d-flex w-100 justify-content-between">
|
||||
<div class="card-body">
|
||||
<h5 class="mb-1">Keyed data encoding with Python
|
||||
|
||||
</h5>
|
||||
<p class="card-text">XOR is pretty cool</p>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="/blog/2019/08/12/setting-up-ja" class="list-group-item list-group-item-action">
|
||||
<div class="d-flex w-100 justify-content-between">
|
||||
<h5 class="mb-1">How I set up ひらがな input on my laptop</h5>
|
||||
<!-- <small>2019-08-12 15:40:00 -0400</small> -->
|
||||
</div>
|
||||
<p class="card-text">I3wm makes everything 10x harder than it should be</p>
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="/blog/2019/08/10/why-i-carry-nfc" class="list-group-item list-group-item-action">
|
||||
@ -87,7 +119,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="/blog/2019/07/15/mindmap" class="list-group-item list-group-item-action">
|
||||
@ -102,7 +134,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="/blog/2019/07/13/lookback-gmad" class="list-group-item list-group-item-action">
|
||||
@ -117,7 +149,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="/blog/2019/07/06/scrapingfrcgithub" class="list-group-item list-group-item-action">
|
||||
@ -132,7 +164,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="/blog/2019/07/01/devdns" class="list-group-item list-group-item-action">
|
||||
@ -147,7 +179,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="/blog/2019/06/27/pwnlink" class="list-group-item list-group-item-action">
|
||||
@ -162,7 +194,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="/blog/2019/06/27/python" class="list-group-item list-group-item-action">
|
||||
@ -177,7 +209,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="/blog/2019/06/26/bashsmash" class="list-group-item list-group-item-action">
|
||||
@ -192,7 +224,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="/blog/2019/06/24/languagehunt2" class="list-group-item list-group-item-action">
|
||||
@ -207,7 +239,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="/blog/2019/06/23/googlectf" class="list-group-item list-group-item-action">
|
||||
@ -222,7 +254,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="/blog/2019/06/21/robot-experiences" class="list-group-item list-group-item-action">
|
||||
@ -237,7 +269,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="/blog/2019/06/17/amm2m1-release" class="list-group-item list-group-item-action">
|
||||
@ -252,7 +284,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="/blog/2019/06/16/graphing-w2a" class="list-group-item list-group-item-action">
|
||||
@ -267,7 +299,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="/blog/2019/06/12/styiling-github" class="list-group-item list-group-item-action">
|
||||
@ -282,7 +314,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="/blog/2019/05/27/building-safe-vision-comms" class="list-group-item list-group-item-action">
|
||||
@ -297,7 +329,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="/blog/2019/04/30/frc-languages" class="list-group-item list-group-item-action">
|
||||
@ -312,7 +344,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="/blog/2018/06/27/becomeranter" class="list-group-item list-group-item-action">
|
||||
@ -330,21 +362,18 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container">
|
||||
<hr>
|
||||
|
||||
<!-- <div id="particles-js"></div> -->
|
||||
|
||||
<div class="container foot" style="text-align:center;">
|
||||
<br>
|
||||
<span class="site-info">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-24 15:35:35 -0400
|
||||
</span>
|
||||
</div>
|
||||
<nav class="navbar navbar-expand-lg ">
|
||||
|
||||
<!-- Navbar content -->
|
||||
<div class="container">
|
||||
|
||||
<span class="navbar-text">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-21 12:48:55 -0400
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
|
||||
@ -391,6 +420,15 @@
|
||||
|
||||
|
||||
<!-- particles -->
|
||||
<script>
|
||||
var body = document.body
|
||||
|
||||
var particles = document.getElementById("particles-js")
|
||||
|
||||
particles.style.height = body.scrollHeight + "px"
|
||||
|
||||
console.log(body.scrollHeight)
|
||||
</script>
|
||||
<script src="/assets/js/particles.min.js"></script>
|
||||
<script>
|
||||
particlesJS.load('particles-js', '/assets/js/particles.json', function () {
|
||||
|
@ -9,6 +9,7 @@
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="stylesheet" href="/assets/css/github-syntax.css">
|
||||
<link href="https://fonts.googleapis.com/css?family=IBM+Plex+Mono:400,400i|IBM+Plex+Sans:100,100i,400,400i,700,700i" rel="stylesheet">
|
||||
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@ -44,21 +45,17 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container">
|
||||
<hr>
|
||||
<!-- <div id="particles-js"></div> -->
|
||||
|
||||
<div class="container foot" style="text-align:center;">
|
||||
<br>
|
||||
<span class="site-info">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-24 15:35:35 -0400
|
||||
</span>
|
||||
</div>
|
||||
<nav class="navbar navbar-expand-lg ">
|
||||
|
||||
<!-- Navbar content -->
|
||||
<div class="container">
|
||||
|
||||
<span class="navbar-text">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-21 12:48:55 -0400
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
|
||||
@ -105,6 +102,15 @@
|
||||
|
||||
|
||||
<!-- particles -->
|
||||
<script>
|
||||
var body = document.body
|
||||
|
||||
var particles = document.getElementById("particles-js")
|
||||
|
||||
particles.style.height = body.scrollHeight + "px"
|
||||
|
||||
console.log(body.scrollHeight)
|
||||
</script>
|
||||
<script src="/assets/js/particles.min.js"></script>
|
||||
<script>
|
||||
particlesJS.load('particles-js', '/assets/js/particles.json', function () {
|
||||
|
@ -1,4 +1,49 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.8.6">Jekyll</generator><link href="http://0.0.0.0:4000/feed.xml" rel="self" type="application/atom+xml" /><link href="http://0.0.0.0:4000/" rel="alternate" type="text/html" /><updated>2019-08-21T12:48:55-04:00</updated><id>http://0.0.0.0:4000/feed.xml</id><title type="html">Evan Pratten</title><subtitle>Computer wizard, student, <a href="https://frc5024.github.io">@frc5024</a> programming team lead, and radio enthusiast.</subtitle><entry><title type="html">How I set up ひらがな input on my laptop</title><link href="http://0.0.0.0:4000/blog/2019/08/12/setting-up-ja" rel="alternate" type="text/html" title="How I set up ひらがな input on my laptop" /><published>2019-08-12T15:40:00-04:00</published><updated>2019-08-12T15:40:00-04:00</updated><id>http://0.0.0.0:4000/blog/2019/08/12/Setting-up-JA</id><content type="html" xml:base="http://0.0.0.0:4000/blog/2019/08/12/setting-up-ja"><p>I am currently working with <a href="https://en.wikipedia.org/wiki/Hiragana">ひらがな</a>, <a href="https://en.wikipedia.org/wiki/Katakana">かたかな</a>, and, <a href="https://en.wikipedia.org/wiki/Kanji">かんじ</a> in some projects, and needed a more reliable way to write than running some <a href="https://en.wikipedia.org/wiki/Romanization_of_Japanese">romaji</a> through an online translator. So, this post will detail what I did to enable native inputs on my laptop. This guide is specifically for <a href="https://i3wm.org/">i3wm</a>, because it does not obey system settings for languages and inputs.</p>
|
||||
<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.8.6">Jekyll</generator><link href="http://0.0.0.0:4000/feed.xml" rel="self" type="application/atom+xml" /><link href="http://0.0.0.0:4000/" rel="alternate" type="text/html" /><updated>2019-08-24T15:35:35-04:00</updated><id>http://0.0.0.0:4000/feed.xml</id><title type="html">Evan Pratten</title><subtitle>Computer wizard, student, <a href="https://frc5024.github.io">@frc5024</a> programming team lead, and radio enthusiast.</subtitle><entry><title type="html">Keyed data encoding with Python</title><link href="http://0.0.0.0:4000/blog/2019/08/24/shift2" rel="alternate" type="text/html" title="Keyed data encoding with Python" /><published>2019-08-24T09:13:00-04:00</published><updated>2019-08-24T09:13:00-04:00</updated><id>http://0.0.0.0:4000/blog/2019/08/24/Shift2</id><content type="html" xml:base="http://0.0.0.0:4000/blog/2019/08/24/shift2"><p>I have always been interested in text and data encoding, so last year, I made my first encoding tool. <a href="https://github.com/Ewpratten/shift64">Shift64</a> was designed to take plaintext data with a key, and convert it into a block of base64 that could, in theory, only be decoded with the original key. I had a lot of fun with this tool, and a very stripped down version of it actually ended up as a bonus question on the <a href="https://github.com/frc5024/Programming-Test/blob/master/test.md">5024 Programming Test</a> for 2018/2019. Yes, the key was in fact <code class="highlighter-rouge">5024</code>.</p>
|
||||
|
||||
<p>This tool had some issues. Firstly, the code was a mess and only accepted hard-coded values. This made it very impractical as an every-day tool, and a nightmare to continue developing. Secondly, the encoder made use of entropy bits, and self modifying keys that would end up producing encoded files &gt;1GB from just the word <em>hello</em>.</p>
|
||||
|
||||
<h2 id="shift2">Shift2</h2>
|
||||
<p>One of the oldest items on my TODO list has been to rewrite shift64, so I made a brand new tool out of it. <a href="https://github.com/Ewpratten/shift">Shift2</a> is both a command-line tool, and a Python3 library that can efficiently encode and decode text data with a single key (unlike shift64, which used two keys concatenated into a single string, and separated by a colon).</p>
|
||||
|
||||
<h3 id="how-it-works">How it works</h3>
|
||||
<p>Shift2 has two inputs. A <code class="highlighter-rouge">file</code>, and a <code class="highlighter-rouge">key</code>. These two strings are used to produce a single output, the <code class="highlighter-rouge">message</code>.</p>
|
||||
|
||||
<p>When encoding a file, shift2 starts by encoding the raw data with <a href="https://en.wikipedia.org/wiki/Ascii85">base85</a>, to ensure that all data being passed to the next stage can be represented as a UTF-8 string (even binary data). This base85 data is then XOR encrypted with a rotating key. This operation can be expressed with the following (this example ignores the base85 encoding steps):</p>
|
||||
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">file</span> <span class="o">=</span> <span class="s">"Hello reader! I am some input that needs to be encoded"</span>
|
||||
<span class="n">key</span> <span class="o">=</span> <span class="s">"ewpratten"</span>
|
||||
|
||||
<span class="n">message</span> <span class="o">=</span> <span class="s">""</span>
|
||||
|
||||
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">char</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="nb">file</span><span class="p">):</span>
|
||||
<span class="n">message</span> <span class="o">+=</span> <span class="nb">chr</span><span class="p">(</span>
|
||||
<span class="nb">ord</span><span class="p">(</span><span class="n">char</span><span class="p">)</span> <span class="o">^</span> <span class="nb">ord</span><span class="p">(</span><span class="n">key</span><span class="p">[</span><span class="n">i</span> <span class="o">%</span> <span class="nb">len</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">])</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
</code></pre></div></div>
|
||||
|
||||
<p>The output of this contains non-displayable characters. A second base85 encoding is used to fix this. Running the example snippet above, then base85 encoding the <code class="highlighter-rouge">message</code> once results in:</p>
|
||||
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>CIA~89YF&gt;W1PTBJQBo*W6$nli7#$Zu9U2uI5my8n002}A3jh-XQWYCi2Ma|K9uW=@5di
|
||||
</code></pre></div></div>
|
||||
|
||||
<p>If using the shift2 commandline tool, you would see a different output:</p>
|
||||
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>B2-is8Y&amp;4!ED2H~Ix&lt;~LOCfn@P;xLjM_E8(awt`1YC&lt;SaOLbpaL^T!^W_ucF8Er~?NnC$&gt;e0@WAWn2bqc6M1yP+DqF4M_kSCp0uA5h-&gt;H
|
||||
</code></pre></div></div>
|
||||
|
||||
<p>This is for a few reasons. Firstly, as mentioned above, shift2 uses base85 <strong>twice</strong>. Once before, and once after XOR encryption. Secondly, a file header is prepended to the output to help the decoder read the file. This header contains version info, the file length, and the encoding type.</p>
|
||||
|
||||
<h3 id="try-it-yourself">Try it yourself</h3>
|
||||
<p>I have published shift2 on <a href="https://pypi.org/project/shift-tool/">pypi.org</a> for use with PIP. To install shift2, ensure both <code class="highlighter-rouge">python3</code> and <code class="highlighter-rouge">python3-pip</code> are installed on your computer, then run:</p>
|
||||
<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Install shift2</span>
|
||||
pip3 <span class="nb">install </span>shift-tool
|
||||
|
||||
<span class="c"># View the help for shift2</span>
|
||||
shift2 <span class="nt">-h</span>
|
||||
</code></pre></div></div>
|
||||
|
||||
<h3 id="future-plans">Future plans</h3>
|
||||
<p>Due to the fact that shift2 can also be used as a library (as outlined in the <a href="https://github.com/Ewpratten/shift/blob/master/README.md">README</a>), I would like to write a program that allows users to talk to eachother IRC style over a TCP port. This program would use either a pre-shared, or generated key to encode / decode messages on the fly.</p>
|
||||
|
||||
<p>If you are interested in helping out, or taking on this idea for yourself, send me an email.</p></content><author><name></name></author><summary type="html">I have always been interested in text and data encoding, so last year, I made my first encoding tool. Shift64 was designed to take plaintext data with a key, and convert it into a block of base64 that could, in theory, only be decoded with the original key. I had a lot of fun with this tool, and a very stripped down version of it actually ended up as a bonus question on the 5024 Programming Test for 2018/2019. Yes, the key was in fact 5024.</summary></entry><entry><title type="html">How I set up ひらがな input on my laptop</title><link href="http://0.0.0.0:4000/blog/2019/08/12/setting-up-ja" rel="alternate" type="text/html" title="How I set up ひらがな input on my laptop" /><published>2019-08-12T15:40:00-04:00</published><updated>2019-08-12T15:40:00-04:00</updated><id>http://0.0.0.0:4000/blog/2019/08/12/Setting-up-JA</id><content type="html" xml:base="http://0.0.0.0:4000/blog/2019/08/12/setting-up-ja"><p>I am currently working with <a href="https://en.wikipedia.org/wiki/Hiragana">ひらがな</a>, <a href="https://en.wikipedia.org/wiki/Katakana">かたかな</a>, and, <a href="https://en.wikipedia.org/wiki/Kanji">かんじ</a> in some projects, and needed a more reliable way to write than running some <a href="https://en.wikipedia.org/wiki/Romanization_of_Japanese">romaji</a> through an online translator. So, this post will detail what I did to enable native inputs on my laptop. This guide is specifically for <a href="https://i3wm.org/">i3wm</a>, because it does not obey system settings for languages and inputs.</p>
|
||||
|
||||
<h2 id="adding-font-support-to-linux">Adding font support to Linux</h2>
|
||||
<p>Firstly, we need fonts. Depending on your system, these may already be installed. For Japanese, I only used <code class="highlighter-rouge">vlgothic</code>, so here in the package for it:</p>
|
||||
@ -640,13 +685,4 @@ __<span class="o">()</span> <span class="o"&g
|
||||
<h2 id="why-do-you-have-a-desire-to-break-things-with-python">Why do you have a desire to break things with python</h2>
|
||||
<p>Because it is fun. Give it a try!</p>
|
||||
|
||||
<p>I will have a post here at some point about the weird things I do in my python code and why I do them.</p></content><author><name></name></author><category term="projects" /><summary type="html">I was watching this great Liveoverflow video yesterday, and really liked the idea of building escape sequences with strings. So, I built a new tool, BashSmash.</summary></entry><entry><title type="html">The language hunt: Part 2</title><link href="http://0.0.0.0:4000/blog/2019/06/24/languagehunt2" rel="alternate" type="text/html" title="The language hunt: Part 2" /><published>2019-06-24T17:36:00-04:00</published><updated>2019-06-24T17:36:00-04:00</updated><id>http://0.0.0.0:4000/blog/2019/06/24/LanguageHunt2</id><content type="html" xml:base="http://0.0.0.0:4000/blog/2019/06/24/languagehunt2"><p>This is a very short post, just to explain the result of <a href="/frc/2019/04/30/FRC-Languages.html">The language Hunt</a>.</p>
|
||||
|
||||
<h2 id="our-choice">Our choice</h2>
|
||||
<p>For our upcoming 2020 season and for the forseeable future, we have chosen Java as our programming language for direct hardware interfacing, and Python for networking, vision, and other smaller tasks.</p>
|
||||
|
||||
<h2 id="what-does-this-mean-for-the-team">What does this mean for the team?</h2>
|
||||
<p>Not too much. Aside from learning new syntax, tools, and no longer worrying about linker errors, Java and C++ have no real difference. Most of the reason Java was chosen was based on support instead of functionality. Java is much better supported by FIRST, WPILib, and other vendors. Java is also taught in the school 5024 is based from. For a more detailed explanation of the benefits of each language, take a look at Chief Delphi. There are plenty of posts there explaining the choices of many teams and their reasoning.</p>
|
||||
|
||||
<h2 id="side-note">Side note</h2>
|
||||
<p>I am experimenting with various post formats (This being a short post). Let me know which you prefer via the social platform of your choice.</p></content><author><name></name></author><summary type="html">This is a very short post, just to explain the result of The language Hunt.</summary></entry></feed>
|
||||
<p>I will have a post here at some point about the weird things I do in my python code and why I do them.</p></content><author><name></name></author><category term="projects" /><summary type="html">I was watching this great Liveoverflow video yesterday, and really liked the idea of building escape sequences with strings. So, I built a new tool, BashSmash.</summary></entry></feed>
|
@ -9,6 +9,7 @@
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="stylesheet" href="/assets/css/github-syntax.css">
|
||||
<link href="https://fonts.googleapis.com/css?family=IBM+Plex+Mono:400,400i|IBM+Plex+Sans:100,100i,400,400i,700,700i" rel="stylesheet">
|
||||
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@ -46,10 +47,16 @@
|
||||
|
||||
<div class="reactive-bg">
|
||||
<div class="post container">
|
||||
<h1>FOSS/L RSS Feeds</h1>
|
||||
<h4>RSS feeds from our blogs</h4>
|
||||
<h1>FOSS/L RSS Feeds
|
||||
|
||||
</h1>
|
||||
<h4>RSS feeds from our blogs
|
||||
|
||||
</h4>
|
||||
<hr>
|
||||
<p><em></em></p>
|
||||
<p><em>
|
||||
|
||||
</em></p>
|
||||
|
||||
<br>
|
||||
|
||||
@ -74,21 +81,17 @@ https://blog.mrtnrdl.de/feed.xml
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="container">
|
||||
<hr>
|
||||
<!-- <div id="particles-js"></div> -->
|
||||
|
||||
<div class="container foot" style="text-align:center;">
|
||||
<br>
|
||||
<span class="site-info">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-24 15:35:35 -0400
|
||||
</span>
|
||||
</div>
|
||||
<nav class="navbar navbar-expand-lg ">
|
||||
|
||||
<!-- Navbar content -->
|
||||
<div class="container">
|
||||
|
||||
<span class="navbar-text">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-21 12:48:55 -0400
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
|
||||
@ -135,11 +138,21 @@ https://blog.mrtnrdl.de/feed.xml
|
||||
|
||||
|
||||
<!-- particles -->
|
||||
<script>
|
||||
var body = document.body
|
||||
|
||||
var particles = document.getElementById("particles-js")
|
||||
|
||||
particles.style.height = body.scrollHeight + "px"
|
||||
|
||||
console.log(body.scrollHeight)
|
||||
</script>
|
||||
<script src="/assets/js/particles.min.js"></script>
|
||||
<script>
|
||||
particlesJS.load('particles-js', '/assets/js/particles.json', function () {
|
||||
console.log('callback - particles.js config loaded');
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
@ -9,6 +9,7 @@
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="stylesheet" href="/assets/css/github-syntax.css">
|
||||
<link href="https://fonts.googleapis.com/css?family=IBM+Plex+Mono:400,400i|IBM+Plex+Sans:100,100i,400,400i,700,700i" rel="stylesheet">
|
||||
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@ -40,8 +41,8 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="reactive-bg" >
|
||||
<div class="home container" >
|
||||
<div class="reactive-bg">
|
||||
<div class="home container">
|
||||
<div class="profile">
|
||||
<img src="/assets/images/human-profile.jpg">
|
||||
</div>
|
||||
@ -91,22 +92,19 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="container">
|
||||
<hr>
|
||||
<!-- <div id="particles-js"></div> -->
|
||||
|
||||
<div class="container foot" style="text-align:center;">
|
||||
<br>
|
||||
<span class="site-info">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-24 15:35:35 -0400
|
||||
</span>
|
||||
</div>
|
||||
<nav class="navbar navbar-expand-lg ">
|
||||
|
||||
<!-- Navbar content -->
|
||||
<div class="container">
|
||||
|
||||
<span class="navbar-text">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-21 12:48:55 -0400
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
|
||||
@ -153,6 +151,15 @@
|
||||
|
||||
|
||||
<!-- particles -->
|
||||
<script>
|
||||
var body = document.body
|
||||
|
||||
var particles = document.getElementById("particles-js")
|
||||
|
||||
particles.style.height = body.scrollHeight + "px"
|
||||
|
||||
console.log(body.scrollHeight)
|
||||
</script>
|
||||
<script src="/assets/js/particles.min.js"></script>
|
||||
<script>
|
||||
particlesJS.load('particles-js', '/assets/js/particles.json', function () {
|
||||
|
@ -9,6 +9,7 @@
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="stylesheet" href="/assets/css/github-syntax.css">
|
||||
<link href="https://fonts.googleapis.com/css?family=IBM+Plex+Mono:400,400i|IBM+Plex+Sans:100,100i,400,400i,700,700i" rel="stylesheet">
|
||||
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@ -138,21 +139,17 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container">
|
||||
<hr>
|
||||
<!-- <div id="particles-js"></div> -->
|
||||
|
||||
<div class="container foot" style="text-align:center;">
|
||||
<br>
|
||||
<span class="site-info">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-24 15:35:35 -0400
|
||||
</span>
|
||||
</div>
|
||||
<nav class="navbar navbar-expand-lg ">
|
||||
|
||||
<!-- Navbar content -->
|
||||
<div class="container">
|
||||
|
||||
<span class="navbar-text">
|
||||
Site design by: <a href="https://retrylife.ca">Evan Pratten</a> |
|
||||
|
||||
This site was last updated at: 2019-08-21 12:48:55 -0400
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
|
||||
@ -193,6 +190,15 @@
|
||||
|
||||
|
||||
<!-- particles -->
|
||||
<script>
|
||||
var body = document.body
|
||||
|
||||
var particles = document.getElementById("particles-js")
|
||||
|
||||
particles.style.height = body.scrollHeight + "px"
|
||||
|
||||
console.log(body.scrollHeight)
|
||||
</script>
|
||||
<script src="/assets/js/particles.min.js"></script>
|
||||
<script>
|
||||
particlesJS.load('particles-js', '/assets/js/particles.json', function () {
|
||||
|
12
about.md
12
about.md
@ -45,6 +45,18 @@ I exist in various places around the internet. Mainly:
|
||||
- [Keybase](https://keybase.com/{{site.keybase_username}})
|
||||
- <a data-toggle="modal" data-target="#snapcode" href="">Snapchat</a>
|
||||
|
||||
## My gear
|
||||
Currently, I use the following hardware:
|
||||
|
||||
- Lenovo T480
|
||||
- 16GB of RAM
|
||||
- 500GB Crucial SSD
|
||||
- 1080p display
|
||||
- Ubuntu 18.04 minimal
|
||||
- Google Pixel 3a XL
|
||||
- Stock android
|
||||
- HP 27es monitor
|
||||
|
||||
|
||||
|
||||
<!-- devRant disclaimer -->
|
||||
|
@ -10,6 +10,15 @@ body{
|
||||
|
||||
}
|
||||
|
||||
.foot{
|
||||
|
||||
}
|
||||
|
||||
.site-info{
|
||||
color:rgb(199, 195, 195);
|
||||
background-color: #FFF;
|
||||
}
|
||||
|
||||
.header-gap{
|
||||
/* height: 30px;
|
||||
background-color: #ebeef1; */
|
||||
@ -147,4 +156,31 @@ a h5 {
|
||||
.info h1 {
|
||||
/* padding: 20px; */
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
/* #particles-js{
|
||||
position: absolute;
|
||||
} */
|
||||
/*
|
||||
.reactive-bg{
|
||||
position:relative
|
||||
} */
|
||||
|
||||
#particles-js canvas {
|
||||
display: block;
|
||||
vertical-align: bottom;
|
||||
-webkit-transform: scale(1);
|
||||
-ms-transform: scale(1);
|
||||
transform: scale(1);
|
||||
opacity: 1;
|
||||
-webkit-transition: opacity .8s ease, -webkit-transform 1.4s ease;
|
||||
transition: opacity .8s ease, transform 1.4s ease
|
||||
}
|
||||
|
||||
#particles-js {
|
||||
width: 100%;
|
||||
position: absolute;
|
||||
z-index: -10;
|
||||
top: 0;
|
||||
left: 0
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user