Initial commit - code done, other stuff partial
This commit is contained in:
commit
0f497ee7c2
11 changed files with 392 additions and 0 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
site-files/index.html
|
||||||
|
output
|
2
Dockerfile
Normal file
2
Dockerfile
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
FROM python:slim-bookworm
|
||||||
|
RUN apt update && apt install -y pandoc
|
31
README.md
Normal file
31
README.md
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
# F E E D T H E V O I D
|
||||||
|
<!-- Note that there's a zero-width space between the spaces so that all 3 render -->
|
||||||
|
|
||||||
|
![Useful Linux Tips: Run dd if=/dev/zero of=/dev/null to feed nothing to the void](/feed-the-void.png)
|
||||||
|
|
||||||
|
**Witness the void consume zeroes for all eternity**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
This puts the output of `dd` into a file, which is then read and made into a webpage every second. It's just a bodged-together mess, but it works*
|
||||||
|
|
||||||
|
\* Disclaimer: No idea if this works, I'm from the past where the program wasn't done yet.
|
||||||
|
|
||||||
|
## Docker
|
||||||
|
|
||||||
|
`docker run`:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
docker run -v .:/data registry.askiiart.net/askiiart/feed-the-void
|
||||||
|
```
|
||||||
|
|
||||||
|
`docker-compose.yml`:
|
||||||
|
|
||||||
|
```yml
|
||||||
|
version: "3.7"
|
||||||
|
services:
|
||||||
|
feed-the-void:
|
||||||
|
image: registry.askiiart.net/askiiart/feed-the-void
|
||||||
|
volumes:
|
||||||
|
- .:/data
|
||||||
|
```
|
21
dd-progress-to-file.py
Normal file
21
dd-progress-to-file.py
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# From https://stackoverflow.com/a/25755038
|
||||||
|
from subprocess import Popen, PIPE, STDOUT
|
||||||
|
from os import remove
|
||||||
|
|
||||||
|
shell = Popen(['dd', 'if=/dev/zero', 'of=/dev/null', 'status=progress'],
|
||||||
|
stdout=PIPE, stderr=STDOUT, universal_newlines=True, bufsize=1)
|
||||||
|
|
||||||
|
remove('output')
|
||||||
|
try:
|
||||||
|
for line in iter(shell.stdout.readline, b''):
|
||||||
|
f = open('output', 'w')
|
||||||
|
if (line.strip() != ''): # Ignore empty lines (always 1 at the start)
|
||||||
|
line = line.rstrip()
|
||||||
|
print(line)
|
||||||
|
f.write(line)
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
f.close()
|
||||||
|
exit()
|
BIN
site-files/feed-the-void.png
Normal file
BIN
site-files/feed-the-void.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 628 KiB |
12
site-files/index.md
Normal file
12
site-files/index.md
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
# F E E D T H E V O I D
|
||||||
|
<!-- Note that there's a zero-width space between the spaces so that all 3 render -->
|
||||||
|
|
||||||
|
```sh
|
||||||
|
dd if=/dev/zero of=/dev/null status=progress
|
||||||
|
```
|
||||||
|
|
||||||
|
```txt
|
||||||
|
output here
|
||||||
|
```
|
||||||
|
|
||||||
|
![Useful Linux Tips: Run dd if=/dev/zero of=/dev/null to feed nothing to the void](feed-the-void.png)
|
11
site-files/make-page.sh
Executable file
11
site-files/make-page.sh
Executable file
|
@ -0,0 +1,11 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
dir=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
|
||||||
|
pandoc -f markdown-smart --data-dir . --template ${dir}/template.html -t html -o $dir/tmp.html $dir/index.md --metadata title="$(grep -m 1 -oP '(?<=^# ).*' $dir/index.md | cat)"
|
||||||
|
sed -i "s/output here/$(sed 's/\//\\\//g' $dir/../output)/g" $dir/tmp.html
|
||||||
|
sed "s/sourceCode /language-/g" $dir/tmp.html > $dir/index.html
|
||||||
|
rm -f $dir/tmp.html
|
||||||
|
sleep 1
|
||||||
|
done
|
219
site-files/prism.css
Normal file
219
site-files/prism.css
Normal file
|
@ -0,0 +1,219 @@
|
||||||
|
/* PrismJS 1.29.0
|
||||||
|
https://prismjs.com/download.html#themes=prism-okaidia&languages=bash+shell-session&plugins=line-numbers+toolbar+copy-to-clipboard */
|
||||||
|
code[class*=language-],
|
||||||
|
pre[class*=language-] {
|
||||||
|
color: #f8f8f2;
|
||||||
|
background: 0 0;
|
||||||
|
text-shadow: 0 1px rgba(0, 0, 0, .3);
|
||||||
|
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
|
||||||
|
font-size: 1em;
|
||||||
|
text-align: left;
|
||||||
|
white-space: pre;
|
||||||
|
word-spacing: normal;
|
||||||
|
word-break: normal;
|
||||||
|
word-wrap: normal;
|
||||||
|
line-height: 1.5;
|
||||||
|
-moz-tab-size: 4;
|
||||||
|
-o-tab-size: 4;
|
||||||
|
tab-size: 4;
|
||||||
|
-webkit-hyphens: none;
|
||||||
|
-moz-hyphens: none;
|
||||||
|
-ms-hyphens: none;
|
||||||
|
hyphens: none
|
||||||
|
}
|
||||||
|
|
||||||
|
pre[class*=language-] {
|
||||||
|
padding: 1em;
|
||||||
|
margin: .5em 0;
|
||||||
|
overflow: auto;
|
||||||
|
border-radius: .3em
|
||||||
|
}
|
||||||
|
|
||||||
|
:not(pre)>code[class*=language-],
|
||||||
|
pre[class*=language-] {
|
||||||
|
background: #121212
|
||||||
|
}
|
||||||
|
|
||||||
|
:not(pre)>code[class*=language-] {
|
||||||
|
padding: .1em;
|
||||||
|
border-radius: .3em;
|
||||||
|
white-space: normal
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.cdata,
|
||||||
|
.token.comment,
|
||||||
|
.token.doctype,
|
||||||
|
.token.prolog {
|
||||||
|
color: #8292a2
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.punctuation {
|
||||||
|
color: #f8f8f2
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.namespace {
|
||||||
|
opacity: .7
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.constant,
|
||||||
|
.token.deleted,
|
||||||
|
.token.property,
|
||||||
|
.token.symbol,
|
||||||
|
.token.tag {
|
||||||
|
color: #f92672
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.boolean,
|
||||||
|
.token.number {
|
||||||
|
color: #ae81ff
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.attr-name,
|
||||||
|
.token.builtin,
|
||||||
|
.token.char,
|
||||||
|
.token.inserted,
|
||||||
|
.token.selector,
|
||||||
|
.token.string {
|
||||||
|
color: #a6e22e
|
||||||
|
}
|
||||||
|
|
||||||
|
.language-css .token.string,
|
||||||
|
.style .token.string,
|
||||||
|
.token.entity,
|
||||||
|
.token.operator,
|
||||||
|
.token.url,
|
||||||
|
.token.variable {
|
||||||
|
color: #f8f8f2
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.atrule,
|
||||||
|
.token.attr-value,
|
||||||
|
.token.class-name,
|
||||||
|
.token.function {
|
||||||
|
color: #e6db74
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.keyword {
|
||||||
|
color: #66d9ef
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.important,
|
||||||
|
.token.regex {
|
||||||
|
color: #fd971f
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.bold,
|
||||||
|
.token.important {
|
||||||
|
font-weight: 700
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.italic {
|
||||||
|
font-style: italic
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.entity {
|
||||||
|
cursor: help
|
||||||
|
}
|
||||||
|
|
||||||
|
pre[class*=language-].line-numbers {
|
||||||
|
position: relative;
|
||||||
|
padding-left: 3.8em;
|
||||||
|
counter-reset: linenumber
|
||||||
|
}
|
||||||
|
|
||||||
|
pre[class*=language-].line-numbers>code {
|
||||||
|
position: relative;
|
||||||
|
white-space: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
.line-numbers .line-numbers-rows {
|
||||||
|
position: absolute;
|
||||||
|
pointer-events: none;
|
||||||
|
top: 0;
|
||||||
|
font-size: 100%;
|
||||||
|
left: -3.8em;
|
||||||
|
width: 3em;
|
||||||
|
letter-spacing: -1px;
|
||||||
|
border-right: 1px solid #999;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none
|
||||||
|
}
|
||||||
|
|
||||||
|
.line-numbers-rows>span {
|
||||||
|
display: block;
|
||||||
|
counter-increment: linenumber
|
||||||
|
}
|
||||||
|
|
||||||
|
.line-numbers-rows>span:before {
|
||||||
|
content: counter(linenumber);
|
||||||
|
color: #999;
|
||||||
|
display: block;
|
||||||
|
padding-right: .8em;
|
||||||
|
text-align: right
|
||||||
|
}
|
||||||
|
|
||||||
|
div.code-toolbar {
|
||||||
|
position: relative
|
||||||
|
}
|
||||||
|
|
||||||
|
div.code-toolbar>.toolbar {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 10;
|
||||||
|
top: .3em;
|
||||||
|
right: .2em;
|
||||||
|
transition: opacity .3s ease-in-out;
|
||||||
|
opacity: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
div.code-toolbar:hover>.toolbar {
|
||||||
|
opacity: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
div.code-toolbar:focus-within>.toolbar {
|
||||||
|
opacity: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
div.code-toolbar>.toolbar>.toolbar-item {
|
||||||
|
display: inline-block
|
||||||
|
}
|
||||||
|
|
||||||
|
div.code-toolbar>.toolbar>.toolbar-item>a {
|
||||||
|
cursor: pointer
|
||||||
|
}
|
||||||
|
|
||||||
|
div.code-toolbar>.toolbar>.toolbar-item>button {
|
||||||
|
background: 0 0;
|
||||||
|
border: 0;
|
||||||
|
color: inherit;
|
||||||
|
font: inherit;
|
||||||
|
line-height: normal;
|
||||||
|
overflow: visible;
|
||||||
|
padding: 0;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none
|
||||||
|
}
|
||||||
|
|
||||||
|
div.code-toolbar>.toolbar>.toolbar-item>a,
|
||||||
|
div.code-toolbar>.toolbar>.toolbar-item>button,
|
||||||
|
div.code-toolbar>.toolbar>.toolbar-item>span {
|
||||||
|
color: #bbb;
|
||||||
|
font-size: .8em;
|
||||||
|
padding: 0 .5em;
|
||||||
|
background: #f5f2f0;
|
||||||
|
background: rgba(224, 224, 224, .2);
|
||||||
|
box-shadow: 0 2px 0 0 rgba(0, 0, 0, .2);
|
||||||
|
border-radius: .5em
|
||||||
|
}
|
||||||
|
|
||||||
|
div.code-toolbar>.toolbar>.toolbar-item>a:focus,
|
||||||
|
div.code-toolbar>.toolbar>.toolbar-item>a:hover,
|
||||||
|
div.code-toolbar>.toolbar>.toolbar-item>button:focus,
|
||||||
|
div.code-toolbar>.toolbar>.toolbar-item>button:hover,
|
||||||
|
div.code-toolbar>.toolbar>.toolbar-item>span:focus,
|
||||||
|
div.code-toolbar>.toolbar>.toolbar-item>span:hover {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none
|
||||||
|
}
|
8
site-files/prism.js
Normal file
8
site-files/prism.js
Normal file
File diff suppressed because one or more lines are too long
68
site-files/style.css
Normal file
68
site-files/style.css
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
body {
|
||||||
|
color: #dadada;
|
||||||
|
background: #202020;
|
||||||
|
margin: 1em auto;
|
||||||
|
max-width: 90vw;
|
||||||
|
padding: 0 .62em;
|
||||||
|
font: 1.0em/1.35 sans-serif
|
||||||
|
}
|
||||||
|
|
||||||
|
a:link,
|
||||||
|
a:visited {
|
||||||
|
color: #80c47b;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover,
|
||||||
|
a:visited:hover {
|
||||||
|
color: #6bb794
|
||||||
|
}
|
||||||
|
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3 {
|
||||||
|
line-height: 1.2
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
background: #121212
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
|
||||||
|
background: #121212
|
||||||
|
}
|
||||||
|
|
||||||
|
wrap {
|
||||||
|
word-wrap: break-word
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-device-width: 1200px) {
|
||||||
|
h1 {
|
||||||
|
line-height: 1.2;
|
||||||
|
font-size: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
line-height: 1.2;
|
||||||
|
font-size: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-size: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre,
|
||||||
|
code {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media print {
|
||||||
|
body {
|
||||||
|
max-width: none
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
footer {
|
||||||
|
text-align: center;
|
||||||
|
}
|
18
site-files/template.html
Normal file
18
site-files/template.html
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta content="width=device-width, initial-scale=1" charset="utf-8" />
|
||||||
|
<link rel="icon" href="feed-the-void.png" type="image/icon">
|
||||||
|
<meta http-equiv="refresh" content="5" />
|
||||||
|
<title>$title$</title>
|
||||||
|
<link href="prism.css" rel="stylesheet" />
|
||||||
|
<link href="style.css" rel="stylesheet" />
|
||||||
|
</head>
|
||||||
|
<body class="line-numbers">
|
||||||
|
$body$
|
||||||
|
<script src="prism.js"></script>
|
||||||
|
</body>
|
||||||
|
<footer>
|
||||||
|
<p><a href="https://git.askiiart.net/askiiart/feed-the-void">code</a> | <b>this page refreshes every 5 seconds</b></p>
|
||||||
|
</footer>
|
||||||
|
</html>
|
Loading…
Reference in a new issue