Compare commits
31 Commits
fe45ac3466
...
df5bf1d4d4
Author | SHA1 | Date |
---|---|---|
Abdullah Islam | df5bf1d4d4 | |
Abdullah Islam | 054c065cf1 | |
Abdullah Islam | bcb6b6c6bf | |
Abdullah Islam | 2085df93d7 | |
Abdullah Islam | 6dacd920ec | |
Abdullah Islam | 8bcffa057a | |
Abdullah Islam | 0b76adc3e7 | |
Abdullah Islam | 447d45108e | |
Abdullah Islam | cd9997ecb0 | |
Abdullah Islam | e49e939f49 | |
Abdullah Islam | 13796945d7 | |
Abdullah Islam | 3aef957684 | |
Abdullah Islam | 395ee7299f | |
Abdullah Islam | 18eee588f6 | |
Abdullah Islam | cce307db3c | |
Abdullah Islam | 2d5523fc24 | |
Abdullah Islam | cc03fe67cf | |
Abdullah Islam | e3c7c148f9 | |
Abdullah Islam | f6d8c46314 | |
Abdullah Islam | 6b86ef1b40 | |
Abdullah Islam | e062630a8a | |
Abdullah Islam | bdf7c1c4ab | |
Abdullah Islam | e29e3a663f | |
Abdullah Islam | 1cdc5c71a2 | |
Abdullah Islam | 132d0a7b05 | |
Abdullah Islam | 4a5bf3dc88 | |
Abdullah Islam | b6029d6f52 | |
Abdullah Islam | a5ddd023ad | |
Abdullah Islam | 6d47159efe | |
Abdullah Islam | 7677de9acf | |
Abdullah Islam | 0e89ab80fc |
|
@ -1,2 +1,3 @@
|
|||
gmi/
|
||||
html/
|
||||
tags
|
||||
|
|
80
Makefile
80
Makefile
|
@ -1,62 +1,66 @@
|
|||
SHELL = /bin/sh
|
||||
SOURCES = $(shell find src/ -type f)
|
||||
SITEMAP_INDEX_FILES = $(wildcard src/*/*)
|
||||
|
||||
all: subdirs \
|
||||
$(SOURCES:src/%.gmi=html/%.html) \
|
||||
$(SOURCES:src/%.png=html/%.png) \
|
||||
$(SOURCES:src/%.webp=html/%.webp) \
|
||||
$(SOURCES:src/%.gmi=gmi/%.gmi) \
|
||||
$(SOURCES:src/%.png=gmi/%.png) \
|
||||
$(SOURCES:src/%.webp=gmi/%.webp) \
|
||||
gmi/sitemap.gmi \
|
||||
gmi/feed.atom \
|
||||
html/sitemap.html \
|
||||
html/feed.atom \
|
||||
html/style.css
|
||||
$(SOURCES:src/%.gmi=build/html/%.html) \
|
||||
$(SOURCES:src/%.png=build/html/%.png) \
|
||||
$(SOURCES:src/%.webp=build/html/%.webp) \
|
||||
$(SOURCES:src/%.gmi=build/gmi/%.gmi) \
|
||||
$(SOURCES:src/%.png=build/gmi/%.png) \
|
||||
$(SOURCES:src/%.webp=build/gmi/%.webp) \
|
||||
build/gmi/sitemap.gmi \
|
||||
build/gmi/feed.atom \
|
||||
build/html/sitemap.html \
|
||||
build/html/feed.atom \
|
||||
build/html/style.css
|
||||
|
||||
upload:
|
||||
scp -r gmi/* techn0path@vern.cc:public_gemini
|
||||
scp -r html/* techn0path@vern.cc:public_html
|
||||
scp -r build/gmi/* techn0path@vern.cc:public_gemini
|
||||
scp -r build/html/* techn0path@vern.cc:public_html
|
||||
|
||||
test: testing/input.gmi testing/input_feed.txt
|
||||
mawk -f scripts/navbar.awk -f scripts/path.awk -f scripts/html.awk -- testing/input.gmi > testing/output.html
|
||||
mawk -f scripts/navbar.awk -f scripts/path.awk -f scripts/gemini.awk -- testing/input.gmi > testing/output.gmi
|
||||
mawk -f scripts/path.awk -f scripts/feed.awk -- testing/input_feed.txt > testing/output.atom
|
||||
html5validator testing/output.html
|
||||
test: testing/input/index.gmi testing/input/feed.txt
|
||||
echo '' | mawk -f scripts/lib/navbar.awk -f scripts/lib/path.awk -f scripts/test.awk > testing/output/functionOutputs.txt
|
||||
mawk -f scripts/lib/navbar.awk -f scripts/lib/path.awk -f scripts/html.awk -v 'sourcePath=testing/input' -v 'destPath=testing/output' -- testing/input/index.gmi > testing/output/index.html
|
||||
mawk -f scripts/lib/navbar.awk -f scripts/lib/path.awk -f scripts/gemini.awk -v 'sourcePath=testing/input' -v 'destPath=testing/output' -- testing/input/index.gmi > testing/output/index.gmi
|
||||
mawk -f scripts/lib/path.awk -f scripts/feed.awk -- testing/input/feed.txt > testing/output/feed.atom
|
||||
|
||||
traverse:
|
||||
find src/ \
|
||||
\(-mindepth 1 -type d -fprintf tmp/directories '%P\0'\) , \
|
||||
\(-type f -fprintf tmp/sources\) | xargs -0 -I{} mkdir -p build/gmi/{} build/html/{}
|
||||
|
||||
subdirs:
|
||||
find src -mindepth 1 -type d -printf '%P\0' | xargs -0 -I{} mkdir -p gmi/{} html/{}
|
||||
find src -mindepth 1 -type d -printf '%P\0' | xargs -0 -I{} mkdir -p build/gmi/{} build/html/{}
|
||||
|
||||
html/%.png: src/%.png
|
||||
build/html/%.png: src/%.png
|
||||
cp $< $@
|
||||
|
||||
gmi/%.png: src/%.png
|
||||
build/gmi/%.png: src/%.png
|
||||
cp $< $@
|
||||
|
||||
html/%.webp: src/%.webp
|
||||
build/html/%.webp: src/%.webp
|
||||
cp $< $@
|
||||
|
||||
gmi/%.webp: src/%.webp
|
||||
build/gmi/%.webp: src/%.webp
|
||||
cp $< $@
|
||||
|
||||
html/style.css: src/style.css
|
||||
cp $< $@
|
||||
build/html/style.css: src/style.scss
|
||||
sass $< > $@
|
||||
|
||||
html/%.html: src/%.gmi scripts/html.awk scripts/navbar.awk
|
||||
mawk -f scripts/navbar.awk -f scripts/path.awk -f scripts/html.awk -- $< > $@
|
||||
build/html/%.html: src/%.gmi scripts/html.awk scripts/lib/navbar.awk
|
||||
mawk -f scripts/lib/navbar.awk -f scripts/lib/path.awk -v 'sourcePath=src/' -v 'destPath=build/html/' -f scripts/html.awk -- $< > $@
|
||||
|
||||
gmi/%.gmi: src/%.gmi scripts/gemini.awk scripts/navbar.awk
|
||||
mawk -f scripts/navbar.awk -f scripts/path.awk -f scripts/gemini.awk -- $< > $@
|
||||
build/gmi/%.gmi: src/%.gmi scripts/gemini.awk scripts/lib/navbar.awk
|
||||
mawk -f scripts/lib/navbar.awk -f scripts/lib/path.awk -v 'sourcePath=src/' -v 'destPath=build/html/' -f scripts/gemini.awk -- $< > $@
|
||||
|
||||
gmi/sitemap.gmi: $(SITEMAP_INDEX_FILES) scripts/sitemap_gmi.awk scripts/navbar.awk
|
||||
mawk -f scripts/navbar.awk -v 'sourcePath=src/' -f scripts/path.awk -f scripts/sitemap_gmi.awk -- $(SITEMAP_INDEX_FILES) > $@
|
||||
build/html/sitemap.html: $(SOURCES) scripts/sitemap_html.awk scripts/lib/navbar.awk
|
||||
mawk -f scripts/lib/navbar.awk -f scripts/lib/path.awk -v 'sourcePath=src/' -v 'destPath=build/html/' -f scripts/sitemap_html.awk -- $(SOURCES) > $@
|
||||
|
||||
html/sitemap.html: $(SITEMAP_INDEX_FILES) scripts/sitemap_html.awk scripts/navbar.awk
|
||||
mawk -f scripts/navbar.awk -v 'sourcePath=src/' -f scripts/path.awk -f scripts/sitemap_html.awk -- $(SITEMAP_INDEX_FILES) > $@
|
||||
build/gmi/sitemap.gmi: $(SOURCES) scripts/sitemap_gmi.awk scripts/lib/navbar.awk
|
||||
mawk -f scripts/lib/navbar.awk -f scripts/lib/path.awk -v 'sourcePath=src/' -v 'destPath=build/html/' -f scripts/sitemap_gmi.awk -- $(SOURCES) > $@
|
||||
|
||||
gmi/feed.atom: scripts/feed.awk
|
||||
git log --diff-filter=A --pretty=format:'%aI "%s"' --name-only src/ | mawk -f scripts/path.awk -f scripts/feed.awk -- - > $@
|
||||
build/html/feed.atom: scripts/feed.awk
|
||||
git log --diff-filter=A --pretty=format:'%aI "%s"' --name-only src/ | mawk -v 'willConvertLinks=1' -f scripts/lib/path.awk -f scripts/feed.awk -- - > $@
|
||||
|
||||
html/feed.atom: scripts/feed.awk
|
||||
git log --diff-filter=A --pretty=format:'%aI "%s"' --name-only src/ | mawk -v 'willConvertLinks=1' -f scripts/path.awk -f scripts/feed.awk -- - > $@
|
||||
build/gmi/feed.atom: scripts/feed.awk
|
||||
git log --diff-filter=A --pretty=format:'%aI "%s"' --name-only src/ | mawk -f scripts/lib/path.awk -f scripts/feed.awk -- - > $@
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
# Brain Dump
|
||||
The Empire is awesome. Or is it? You see, humanity has been living under an unjust system for centuries. How did nobody fight back? Or is it really unjust? Is an empire ihnerently unjust?
|
||||
|
||||
The Soromoid are cool. Unfortunately, they are xenophobic. No, they aren't. Well, they are humans who genetically modified themselves to survive a pandemic, and are the closest to alien in Naev's universe.
|
||||
|
||||
The Dvaered are bad people. They are colonistic. Their people are brutes. Oh no.
|
||||
|
||||
House Za'lek are who I vibe with. They are smart. They love science and live by science.
|
||||
|
||||
The Pirates are bad people, but not very powerful. If organized crime was more organized, it might take over the whole universe?
|
||||
|
||||
Are there aliens in the universe of Naev? Are they in the Milkyway? Are they simply beyond the web of hyperlanes colonized by humans? Are the Soromoid alien? Are they?
|
||||
|
||||
House Proteron - the big bad. They were a dystopian society, and tried to topple the Empire, but failed. Why has there been no rebellion against the empire in it's centuries of rule?
|
||||
|
||||
However, there can be hyperlane networks that are disconnected. Perhaps the aliens are simply disconnected from us?
|
||||
|
||||
One thing I like about Naev is the exploration. You can take notes for star systems. You have to discover Jump Points yourself. While you can buy maps for large portions of the universe, you still have to discover some things yourself. But why? Shouldn't someone have made a map of the entirety of human space by now?
|
||||
|
||||
At first I thought that the Incident (a goofy name, the Solar Explosion should be used instead) was a supernova of Sol itself. Since judging by the technology level Sol would not explode that early, I suspected the cause of the Incident to be artificial... suggesting at aliens.
|
||||
|
||||
I was surprised to learn that the cause was not aliens, but indeed artificial, though unfortunately through spoilers. In their mission of galactic domination, House Proteron accidentally made a hypergate at Sol explode, causing The Incident.
|
||||
|
||||
What a drastic event! What a galaxy-changing event. But obviously, people moved on.
|
|
@ -0,0 +1,34 @@
|
|||
# Naev is great
|
||||
Topic: Naev is great
|
||||
Purpose: To inform why Naev is a fun game
|
||||
Audience: Those who have never played Naev and want to know its quality
|
||||
|
||||
## Strong points
|
||||
### The game's limits force you to be creative and resourceful
|
||||
* the outfit slot system
|
||||
* restricts weapons, forcing you to make good use of what you already have
|
||||
* is limited to prevent you from making an all-purpose ship
|
||||
* mass limits
|
||||
* make you use lighter outfits
|
||||
* force you to make a trade-off between speed and capability
|
||||
* restricted fleet capability
|
||||
* makes you specialize your ships
|
||||
* prevents you from mothballing a deadly fleet
|
||||
* makes you use your ship's manouverability to your advantage
|
||||
* bigger and beefier ships are less manouverable, forcing you to make a trade-off between speed and capability
|
||||
* an exception is the starbridge, with both decent weapon space, cargo space, and manouverability
|
||||
|
||||
### The game has recurring elements that keep it fresh and entertaining
|
||||
* search & destroy
|
||||
* makes you search
|
||||
* gives you satisfaction when you kill your target
|
||||
* point of interest missions
|
||||
* some promise lore tidbits and unique outfits
|
||||
* all of them give you something valuable, such as money or data matrixes at least
|
||||
* code-breaking puzzle
|
||||
* memory-moving puzzle
|
||||
|
||||
### The game's lore is rich and interesting
|
||||
* each faction is distinct
|
||||
* each faction is rich in depth
|
||||
* the soromoid are the closest thing to alien in known space
|
|
@ -0,0 +1,77 @@
|
|||
# Unix Notetaking
|
||||
I have seen people (like Thomas Frank) use apps like Notion and Evernote for note-taking. Personally, I use plain text files.
|
||||
|
||||
Plain text files are simplier then note-taking apps. They do not have many moving parts, so they have less parts that can break, and less parts to keep track off. They are lightweight and take very little space.
|
||||
|
||||
They are flexible. You can arrange them however you want. They can be read by plenty of applications, unlike Notion or Evernote, which can only be used by those apps. Wait what?
|
||||
|
||||
Alright, so the files of Notion or Evernote can only be read by those applications.
|
||||
|
||||
They are independent of any particular operating system, environment, application, or ecosystem. Again, they don't need a third-party who can do whatever they want with you.
|
||||
|
||||
A clever person could build scripts to do various things with their plain text notes.
|
||||
|
||||
For writing plain text notes, I only need a keyboard. This is great, and faster, since switching between a mouse and keyboard takes time.
|
||||
|
||||
Funny idea: you could also write plain text notes on paper. You could also write them using Notepad, Notepad++, Gedit, and more. As opposed to a word processor file, that could only be processed by a handful of applications.
|
||||
|
||||
When writing plain text notes, you should structure them using directories. Generally, you want a logical structure that can be extended, and is similar to how your brain organizes files. You could also organize by date. Generally though, you want to organize by category.
|
||||
|
||||
For example:
|
||||
- notes
|
||||
- log
|
||||
- 2019
|
||||
- 2020
|
||||
- 2024
|
||||
- drafts
|
||||
- guides
|
||||
|
||||
Note that this is not necessarily my note directory structure. It is just an example.
|
||||
|
||||
You should also use atomic notes, meaning that each note is dedicated to a single topic. For example:
|
||||
- recipes
|
||||
- beef
|
||||
- chicken
|
||||
- chicken sandwich
|
||||
- bread
|
||||
|
||||
instead of
|
||||
- recipes.md
|
||||
|
||||
This makes them easier to manage. On the other hand, a single file is also easier to manage. It depends on the situation and your preferences.
|
||||
|
||||
You should use markup when writing plain text notes. For example:
|
||||
```
|
||||
# File
|
||||
## Subheading
|
||||
This is content
|
||||
|
||||
#### Subsubheading
|
||||
This is related content
|
||||
```
|
||||
|
||||
You could also have custom syntax:
|
||||
```
|
||||
% tags: food, tech
|
||||
% description: How to make a blender.
|
||||
```
|
||||
|
||||
Yes, I could possibly add this syntax to my website source files. That would be nice.
|
||||
|
||||
The end file could be:
|
||||
```
|
||||
# How to make a blender
|
||||
% tags: guide, food, tech
|
||||
% description: How to make a blender.
|
||||
|
||||
## Introduction
|
||||
Making a blender....
|
||||
```
|
||||
|
||||
Plain text files also work offline. If you are offline, you won't be constantly distracted by things (or distract yourself). This is also great if you are offgrid (like some people like Wrongthink or Luke Smith)
|
||||
|
||||
I also use plain text notes to write this website. I could add custom syntax if I wanted.
|
||||
|
||||
I have a drafts directory.
|
||||
|
||||
Overall, I don't understand why one would use or need complex applications like Notion or Evernote when we have Plain Text Files. It's simple.
|
|
@ -0,0 +1,31 @@
|
|||
# Unix Notetaking
|
||||
## Benefits
|
||||
### Simplicity
|
||||
Plain text notes have very few moving parts, reducing setup time and cost, failure points, and cognitive load. All of the benefits of plain text notes are for free, without any additional setup.
|
||||
|
||||
### Versatility
|
||||
Plain text files are versatile, and have a flexible directory structure.
|
||||
|
||||
If you are using the right text editor, writing plain text notes only requires a keyboard, which is faster than switching between a mouse and a keyboard all of the time.
|
||||
|
||||
### Portability
|
||||
Plain text files are independent of any particular program, environment, ecosystem, or operating system, and have no dependencies, apart from a text editor.
|
||||
|
||||
They do not rely on a third-party with control over how you take notes, unlike Notion, Evernote, Microsoft Office, and so on.
|
||||
|
||||
They work offline; useful for those at rural areas, living offgrid, or who want to reduce distractions.
|
||||
|
||||
## Usage
|
||||
### Markdown
|
||||
Markdown is an excellent markup language for writing plain text notes. It is very clean, and readable by moth humans and machines alike. Unfortunately, it does not have one specification, so the one I use is [CommonMark](https://commonmark.org). There are tools such as glow for rendering or otherwise using Markdown files.
|
||||
|
||||
### Custom Formats
|
||||
You could also add custom markup to your plain text notes. For example:
|
||||
|
||||
```
|
||||
% tags: food, tutorial, tech
|
||||
% description: How to make a Solar Cooker
|
||||
```
|
||||
|
||||
### Git
|
||||
To manage your notes, you can use a version control system like Git. A version control system gives a user the ability to track changes and undo them, or put them in a seperate branch, which can later be merged with another branch. Git also allows collaboration between different users, as each can have their own local copy, while keeping it synced with the Main Repository.
|
|
@ -0,0 +1,34 @@
|
|||
# Unix Notetaking
|
||||
## Introduction
|
||||
I have seen many people (like Thomas Frank) take notes using programs like Notion or Evernote. Personally, I take notes using plaintext files, as they are simpler, more flexible, and more portable than the alternatives.
|
||||
|
||||
## Benefits
|
||||
### Simplicity
|
||||
Plain text files have a small amount of moving parts, which reduces setup time and cost, failure points, and cognitive load. All of the benefits of plain text files are built-in and intrinsic to them.
|
||||
|
||||
### Flexiblity
|
||||
One can arrange plain text files however they want. Plain text files are not tied to a specific format, so mix and match as you like! They are accesible to a wide variety of tools.
|
||||
|
||||
This also means that with the right text editor, writing plain text files only requires using a keyboard, rather than constantly switching between a mouse and a keyboard.
|
||||
|
||||
### Portability
|
||||
Plain text files are independent of any particular program, environment, ecosystem, or operating system, and have no dependencies other than a text editor. They work offline, useful for those at rural areas, who are living offgrid, or who want to reduce distractions, as the internet is a huge source of distractions (for me at least). They use no third-party with control over you, unlike Notion, Evernote, Microsoft Office, and other proprietary programs.
|
||||
|
||||
## Usage
|
||||
### Markdown
|
||||
Markdown is an excellent clean markup language for writing, readable by both humans and machines alike. Unfortunately, it has many different specifications, so I use the [CommonMark](https://commonmark.org) specification.
|
||||
|
||||
For rendering markdown files, use glow.
|
||||
|
||||
### Custom Formats
|
||||
You could also add custom markup to your plain text files. For example:
|
||||
|
||||
```
|
||||
% description: How to make a Solar Cooker
|
||||
% tags: food, tutorial, tech
|
||||
```
|
||||
|
||||
### Git
|
||||
To manage file changes, use a version control system like Git. A version control system tracks changes and allows a user to reverse them, or put them in a seperate development branch, and merge development branches. Git also allows collaboration between different users, where each have their own local copy, while keeping it synchronized with the main repository.
|
||||
|
||||
### Conclusion
|
|
@ -0,0 +1,31 @@
|
|||
# Unix Notetaking
|
||||
## Audience
|
||||
Those who are using programs like Notion or Evernote. Mostly a non-technical audience, whom I assume don't use the command line, but have some basic computer skills.
|
||||
|
||||
## Topic
|
||||
The advantages of plain text notes over other methods.
|
||||
|
||||
## Purpose
|
||||
To convince the audience that plain text files are the best way to keep notes.
|
||||
|
||||
## Points
|
||||
* benefits
|
||||
* plain text files are simple
|
||||
* low setup time
|
||||
* less failure points
|
||||
* lower cognitive load
|
||||
* plain text files are versatile
|
||||
* flexible directory structure
|
||||
* only a keyboard is needed
|
||||
* faster, as switching between a keyboard and mouse takes time
|
||||
* plain text files are portable
|
||||
* no dependencies
|
||||
* readable almost anywhere
|
||||
* does not rely on a third-party
|
||||
* offline
|
||||
* this increases focus, as the internet is a nice distraction
|
||||
* this is good for those who are living offgrid or at rural areas
|
||||
* usage
|
||||
* markdown
|
||||
* custom formats
|
||||
* git
|
|
@ -1,5 +1,5 @@
|
|||
BEGIN {
|
||||
printf "%s", genNavbarGMI(FILENAME, "src/", "gmi/")
|
||||
printf "%s", genGemtextNavbar(FILENAME, sourcePath)
|
||||
}
|
||||
|
||||
{ print }
|
||||
|
|
|
@ -4,6 +4,8 @@ BEGIN {
|
|||
subHeadings[0] = ""
|
||||
}
|
||||
|
||||
/^[ ]*$/ { next }
|
||||
|
||||
/^#[^#]/ {
|
||||
match($0, "^#[ ]*")
|
||||
headingText = substr($0, RSTART + RLENGTH)
|
||||
|
@ -51,6 +53,7 @@ BEGIN {
|
|||
sub("\.gmi$", ".html", link)
|
||||
|
||||
if (description == "") description = link
|
||||
|
||||
gsub("&", "\\&", description)
|
||||
gsub("<", "\\<", description)
|
||||
gsub(">", "\\>", description)
|
||||
|
@ -58,32 +61,35 @@ BEGIN {
|
|||
gsub("\"", "\\"", description)
|
||||
|
||||
body = body sprintf("<a href='%s'>%s</a><br>\n", link, description)
|
||||
|
||||
next
|
||||
}
|
||||
|
||||
/^```/ {
|
||||
body = body "<pre>\n"
|
||||
|
||||
while (getline == 1) {
|
||||
if ($0 ~ "^```") break
|
||||
getline
|
||||
|
||||
while (match($0, "^```") == 0) {
|
||||
gsub("&", "\\&")
|
||||
gsub("<", "\\<")
|
||||
gsub(">", "\\>")
|
||||
gsub("'", "\\'")
|
||||
gsub("\"", "\\"")
|
||||
|
||||
body = body $0 "\n"
|
||||
|
||||
if (getline != 1) break
|
||||
}
|
||||
|
||||
body = body "</pre>\n"
|
||||
|
||||
next
|
||||
}
|
||||
|
||||
/^>/ {
|
||||
body = body "<blockquote>\n"
|
||||
|
||||
while (getline == 1 && match($0, "^>[ ]*")) {
|
||||
while (match($0, /^>[ ]*/) != 0) {
|
||||
text = substr($0, RSTART + RLENGTH)
|
||||
|
||||
gsub("&", "\\&", text)
|
||||
|
@ -93,6 +99,8 @@ BEGIN {
|
|||
gsub("\"", "\\"", text)
|
||||
|
||||
body = body text "<br>\n"
|
||||
|
||||
if (getline != 1) break
|
||||
}
|
||||
|
||||
body = body "</blockquote>\n"
|
||||
|
@ -102,7 +110,7 @@ BEGIN {
|
|||
/^\*/ {
|
||||
body = body "<ul>\n"
|
||||
|
||||
while (getline == 1 && match($0, "^\\*[ ]*")) {
|
||||
while (match($0, /^\*[ ]*/) != 0) {
|
||||
gsub("&", "\\&")
|
||||
gsub("<", "\\<")
|
||||
gsub(">", "\\>")
|
||||
|
@ -110,12 +118,15 @@ BEGIN {
|
|||
gsub("\"", "\\"")
|
||||
|
||||
body = body sprintf("<li>%s</li>\n", substr($0, RSTART + RLENGTH))
|
||||
|
||||
if (getline != 1) break
|
||||
}
|
||||
|
||||
body = body "</ul>\n"
|
||||
next
|
||||
}
|
||||
|
||||
|
||||
{
|
||||
gsub("&", "\\&")
|
||||
gsub("<", "\\<")
|
||||
|
@ -127,7 +138,7 @@ BEGIN {
|
|||
}
|
||||
|
||||
END {
|
||||
delete subHeadings[0]
|
||||
delete subHeadings[0] # this index at subHeadings contains nothing
|
||||
|
||||
if (length(subHeadings) > 0) {
|
||||
tocText = "<details id='toc'> <summary>Table of content</summary> <ol>\n"
|
||||
|
@ -144,12 +155,11 @@ END {
|
|||
tocText = tocText "</ol> </details>\n"
|
||||
}
|
||||
|
||||
navbarText = genNavbarHTML(FILENAME, "src/", "html/")
|
||||
navbarText = genHTMLNavbar(FILENAME, sourcePath, destPath)
|
||||
|
||||
dirname = getDirname(FILENAME)
|
||||
gsub(/(\.|\[|\]|\*)/, "\\&", sourcePath)
|
||||
gsub(sourcePath, outputPath, dirname)
|
||||
gsub(sourcePath, outputPath, filename)
|
||||
|
||||
stylesheetPath = getRelativePath(dirname, sourcePath "/style.css")
|
||||
|
||||
printf "<!DOCTYPE html>\n\
|
||||
<html>\n\
|
||||
|
@ -159,7 +169,7 @@ END {
|
|||
<meta name='referrer' content='no-referrer' />\n\
|
||||
<meta name='viewpoint' content='width=device-width,initial-scale=1.0' />\n\
|
||||
\n\
|
||||
<link ref='stylesheet' href='%s'>\n\
|
||||
<link rel='stylesheet' href='%s'/>\n\
|
||||
</head>\n\
|
||||
<body>\n\
|
||||
<header>\n\
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
function genHTMLNavbar(filename, sourcePath, destPath) {
|
||||
if (filename == "-" || filename == "/dev/stdout/")
|
||||
return ""
|
||||
|
||||
filename = resolvePath(filename)
|
||||
|
||||
dirname = getDirname(filename)
|
||||
|
||||
return sprintf("<nav id='navbar'>\n\
|
||||
<a href='%s'>home</a> | \n\
|
||||
<a href='%s'>notes</a> | \n\
|
||||
<a href='%s'>sitemap</a> | \n\
|
||||
<a href='%s'>feed</a> | \n\
|
||||
<a href='http://git.vern.cc/techn0path/'>git</a>\n\
|
||||
</nav><hr>\n", \
|
||||
getRelativePath(dirname, sourcePath "/index.html"), \
|
||||
getRelativePath(dirname, sourcePath "/notes/index.html"), \
|
||||
getRelativePath(dirname, sourcePath "/sitemap.html"), \
|
||||
getRelativePath(dirname, sourcePath "/feed.atom"))
|
||||
}
|
||||
|
||||
function genGemtextNavbar(filename, sourcePath, destPath) {
|
||||
if (filename == "-" || filename == "/dev/stdout/")
|
||||
return ""
|
||||
|
||||
dirname = getDirname(filename)
|
||||
|
||||
return sprintf("Navigation:\n\
|
||||
=> %s home\n\
|
||||
=> %s notes\n\
|
||||
=> %s sitemap\n\
|
||||
=> %s feed\n\
|
||||
=> https://git.vern.cc/techn0path/ git\n\n", \
|
||||
getRelativePath(dirname, sourcePath "/index.gmi"), \
|
||||
getRelativePath(dirname, sourcePath "/notes/index.gmi"), \
|
||||
getRelativePath(dirname, sourcePath "/sitemap.gmi"), \
|
||||
getRelativePath(dirname, sourcePath "/feed.atom"))
|
||||
}
|
|
@ -2,12 +2,12 @@ function getDirname(path, pathComponents, dirname) {
|
|||
dirname = ""
|
||||
pathComponents[1] = ""
|
||||
|
||||
sub(/\/+$/, "", path)
|
||||
path = resolvePath(path)
|
||||
split(path, pathComponents, "/")
|
||||
|
||||
if (length(pathComponents) < 2) return "."
|
||||
|
||||
for (i in pathComponents)
|
||||
for (i = 1; i < length(pathComponents); i++)
|
||||
dirname = dirname pathComponents[i] "/"
|
||||
|
||||
return dirname
|
||||
|
@ -20,35 +20,44 @@ function resolvePath(path, resolvedPath, pathComponents) {
|
|||
sub(/\/+$/, "", path)
|
||||
split(path, pathComponents, "/")
|
||||
|
||||
for (i in pathComponents)
|
||||
if (pathComponents[i] == "." || pathComponents[i+1] == ".." || pathComponents[i] == "")
|
||||
for (i = 1; i < length(pathComponents) + 1; i++)
|
||||
if (pathComponents[i] == "." || pathComponents[i] == "")
|
||||
continue
|
||||
else
|
||||
else if (pathComponents[i+1] == "..") {
|
||||
i++
|
||||
continue
|
||||
} else
|
||||
resolvedPath = resolvedPath pathComponents[i] "/"
|
||||
|
||||
sub(/\/+$/, "", resolvedPath)
|
||||
|
||||
return resolvedPath
|
||||
}
|
||||
|
||||
function getRelativePath(base, path, resolvedPath, baseComponents, pathComponents, commonPrefix) {
|
||||
path = resolvePath(path)
|
||||
base = resolvePath(base)
|
||||
pathComponents[1] = ""
|
||||
baseComponents[1] = ""
|
||||
isCommonPrefixUnfinished = 1
|
||||
commonPrefixEnd = 1
|
||||
resolvedPath = ""
|
||||
|
||||
sub(/\/+$/, "", base)
|
||||
sub(/\/+$/, "", path)
|
||||
base = resolvePath(base)
|
||||
path = resolvePath(path)
|
||||
|
||||
split(path, pathComponents, "/")
|
||||
split(base, baseComponents, "/")
|
||||
|
||||
for (i in pathComponents)
|
||||
if (baseComponents[i] == pathComponents[i] && isCommonPrefixUnfinished)
|
||||
resolvedPath = resolvedPath "../"
|
||||
else {
|
||||
isCommonPrefixUnfinished = 0
|
||||
resolvedPath = resolvedPath pathComponents[i] "/"
|
||||
}
|
||||
while (commonPrefixEnd < length(baseComponents) + 1 &&
|
||||
commonPrefixEnd < length(pathComponents) + 1 &&
|
||||
baseComponents[commonPrefixEnd] == pathComponents[commonPrefixEnd])
|
||||
commonPrefixEnd++
|
||||
|
||||
for (i = commonPrefixEnd; i < length(baseComponents) + 1; i++)
|
||||
resolvedPath = resolvedPath "../"
|
||||
|
||||
for (i = commonPrefixEnd; i < length(pathComponents) + 1; i++)
|
||||
resolvedPath = resolvedPath pathComponents[i] "/"
|
||||
|
||||
sub(/\/+$/, "", resolvedPath)
|
||||
|
||||
return resolvedPath
|
||||
}
|
|
@ -1,38 +0,0 @@
|
|||
function genNavbarHTML(filename, sourcePath, outputPath) {
|
||||
if (filename == "-" || filename == "/dev/stdout/")
|
||||
return ""
|
||||
|
||||
dirname = getDirname(filename)
|
||||
gsub(/(\.|\[|\]|\*)/, "\\&", sourcePath)
|
||||
gsub(sourcePath, outputPath, dirname)
|
||||
gsub(sourcePath, outputPath, filename)
|
||||
|
||||
return sprintf("<nav id='navbar'>\n\
|
||||
<a href='%s'>home</a> | \n\
|
||||
<a href='%s'>sitemap</a> | \n\
|
||||
<a href='%s'>feed</a> | \n\
|
||||
<a href='http://git.vern.cc/techn0path/'>git</a>\n\
|
||||
</nav><br>\n", \
|
||||
getRelativePath(dirname, outputPath "/index.html"), \
|
||||
getRelativePath(dirname, outputPath "/sitemap.html"), \
|
||||
getRelativePath(dirname, outputPath "/feed.atom"))
|
||||
}
|
||||
|
||||
function genNavbarGMI(filename, sourcePath, outputPath) {
|
||||
if (filename == "-" || filename == "/dev/stdout/")
|
||||
return ""
|
||||
|
||||
dirname = getDirname(filename)
|
||||
gsub(/(\.|\[|\]|\*)/, "\\&", sourcePath)
|
||||
gsub(sourcePath, outputPath, dirname)
|
||||
gsub(sourcePath, outputPath, filename)
|
||||
|
||||
return sprintf("Navigation:\n\
|
||||
=> %s home\n\
|
||||
=> %s sitemap\n\
|
||||
=> %s feed\n\
|
||||
=> https://git.vern.cc/techn0path/ git\n\n", \
|
||||
getRelativePath(dirname, outputPath "/index.gmi"), \
|
||||
getRelativePath(dirname, outputPath "/sitemap.gmi"), \
|
||||
getRelativePath(dirname, outputPath "/feed.atom"))
|
||||
}
|
|
@ -2,14 +2,15 @@
|
|||
# - sourcePath
|
||||
|
||||
BEGIN {
|
||||
printf "%s", genNavbarGMI(FILENAME, "src/", "gmi/")
|
||||
printf "%s", genGemtextNavbar(FILENAME, sourcePath)
|
||||
}
|
||||
|
||||
{
|
||||
gsub("^" sourcePath, "", FILENAME)
|
||||
linkAddress = FILENAME
|
||||
gsub("^" sourcePath, "", linkAddress)
|
||||
|
||||
pathComponents[1] = ""
|
||||
split(FILENAME, pathComponents, "/")
|
||||
split(linkAddress, pathComponents, "/")
|
||||
|
||||
oldFolderName = folderName
|
||||
folderName = pathComponents[1]
|
||||
|
@ -25,6 +26,6 @@ BEGIN {
|
|||
}
|
||||
|
||||
{
|
||||
printf "=> %s %s\n", FILENAME, title
|
||||
printf "=> %s %s\n", linkAddress, title
|
||||
nextfile
|
||||
}
|
||||
|
|
|
@ -1,15 +1,16 @@
|
|||
BEGIN {
|
||||
body = "<h1>Sitemap</h1>"
|
||||
pathComponents[1] = ""
|
||||
}
|
||||
|
||||
{
|
||||
sub("^" sourcePath, "", FILENAME)
|
||||
linkAddress = FILENAME
|
||||
sub("^" sourcePath, "", linkAddress)
|
||||
|
||||
if (link !~ "^[a-zA-Z0-9_]*:")
|
||||
sub("\.gmi$", ".html", FILENAME)
|
||||
sub("\.gmi$", ".html", linkAddress)
|
||||
|
||||
pathComponents[1] = ""
|
||||
split(FILENAME, pathComponents, "/")
|
||||
split(linkAddress, pathComponents, "/")
|
||||
|
||||
oldFolderName = folderName
|
||||
folderName = pathComponents[1]
|
||||
|
@ -25,12 +26,14 @@ BEGIN {
|
|||
}
|
||||
|
||||
{
|
||||
|
||||
body = body sprintf("<a href='%s'>%s</a><br>\n", FILENAME, title)
|
||||
body = body sprintf("<a href='%s'>%s</a><br>\n", linkAddress, title)
|
||||
nextfile
|
||||
}
|
||||
|
||||
END {
|
||||
dirname = getDirname(FILENAME)
|
||||
stylesheetPath = getRelativePath(dirname, sourcePath "/style.css")
|
||||
|
||||
printf "<!DOCTYPE html>\n\
|
||||
<html>\n\
|
||||
<head>\n\
|
||||
|
@ -40,11 +43,7 @@ END {
|
|||
<meta name='referrer' content='no-referrer' />\n\
|
||||
<meta name='viewpoint' content='width=device-width,initial-scale=1.0' />\n\
|
||||
\n\
|
||||
<style>\n\
|
||||
body { margin: 20px; }\n\
|
||||
#content { max-width: 80ch; }\n\
|
||||
.permalink { margin-left: 15px; }\n\
|
||||
</style>\n\
|
||||
<link rel='stylesheet' href='%s'/>\n\
|
||||
</head>\n\
|
||||
<body>\n\
|
||||
<header>\n\
|
||||
|
@ -55,6 +54,7 @@ body { margin: 20px; }\n\
|
|||
</article>\n\
|
||||
</body>\n\
|
||||
</html>", \
|
||||
genNavbarHTML(FILENAME, "src/", "html/"), \
|
||||
stylesheetPath, \
|
||||
genHTMLNavbar(FILENAME, sourcePath), \
|
||||
body
|
||||
}
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
function assert(expectedValue, actualValue) {
|
||||
if (expectedValue == actualValue) {
|
||||
printf("%s == %s\n", expectedValue, actualValue)
|
||||
} else {
|
||||
printf("%s != %s\n", expectedValue, actualValue)
|
||||
}
|
||||
}
|
||||
|
||||
END {
|
||||
print "=> getDirname('../path/deep/down/here')"
|
||||
assert("../path/deep/down/", getDirname("../path/deep/down/here"))
|
||||
|
||||
print "=> getDirname('a_single_directory')"
|
||||
assert(".", getDirname("a_single_directory"))
|
||||
|
||||
print "=> resolvePath('./path/to/irrelevant_directory/../file.txt')"
|
||||
assert("path/to/file.txt", resolvePath("./path/to/irrelevant_directory/../file.txt"))
|
||||
|
||||
print "=> resolvePath('path/to/file.txt/')"
|
||||
assert("path/to/file.txt", resolvePath("path/to/file.txt/"))
|
||||
|
||||
print "=> resolvePath('path/to/file.txt')"
|
||||
assert("path/to/file.txt", resolvePath("path/to/file.txt"))
|
||||
|
||||
print "=> getRelativePath('parent/directory/', 'parent/path/to/file.txt')"
|
||||
assert("../path/to/file.txt", getRelativePath("parent/directory", "parent/path/to/file.txt"))
|
||||
|
||||
print "=> getRelativePath('parent/directory/', 'parent/directory/path/to/file.txt')"
|
||||
assert("path/to/file.txt", getRelativePath("parent/directory", "parent/directory/path/to/file.txt"))
|
||||
}
|
|
@ -6,6 +6,7 @@ On this personal website of mine, I talk about stuff.
|
|||
## Highlights
|
||||
The content on this site I am most proud of. :)
|
||||
|
||||
=> notes/awk-make-sh.gmi Use awk + make + sh for website generation
|
||||
=> notes/custom-website-generation.gmi Custom Website Generation
|
||||
=> notes/on-personal-websites.gmi On personal websites
|
||||
=> useful/addons.gmi Useful addons
|
||||
=> useful/links.gmi Useful Links
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
# Custom Website Generation
|
||||
I thought it would be interesting to discuss how I put together this website. I use a custom setup composed of make, awk, and shell, as none of the static site generators that I have seen directly use gemtext as their input format. My approach is also easy to extend.
|
||||
|
||||
## Writing using gemtext
|
||||
First, I write content in gemtext. gemtext seperates presentation from content (and doesn't have presentation ) allowing me to focus purely on content. Since I am publishing to Gemini as well, and gemtext is more convenient.
|
||||
|
||||
## Building using make
|
||||
Then, I run make to generate the static pages, as adding new recipes is easy. By default, make only re-runs a recipe if the files it requires have been changed. The source directory's structure translates to the build directories. make generates static pages for both the WWW and Gemini.
|
||||
|
||||
## Processing using awk
|
||||
During the build process, make runs several scripts written in awk, a language designed to process text. There are some awk library scripts written by me, since running awk-native functions is usually faster than running external programs. awk scripts are very easy and fast to write.
|
||||
|
||||
For building pages for Gemini, awk simply adds headers to the source files. For building pages for HTML, awk goes through the entire source file, building the body and table of content as it goes, then outputting at the end.
|
|
@ -0,0 +1,20 @@
|
|||
# Endless Sky is great
|
||||
WARNING: light spoilers
|
||||
|
||||
## Introduction
|
||||
Endless Sky is an open-source top-down open-world space trading and combat game, inspired by Escape Velocity (I never played Escape Velocity however). I started playing it around 2022, and have thoroughly enjoyed it. Here are some reasons why:
|
||||
|
||||
## Endless Sky's world is well thought out
|
||||
Each faction in Endless Sky is distinct from the others, and you'd be hard-pressed to find a faction that is similiar to another one. Each faction is well fleshed out, and has a rich history.
|
||||
|
||||
## Instead of using cutscenes, Endless Sky delivers the same content using text and images
|
||||
Many games use video cutscenes, but Endless Sky uses text to convey its story, with the occasional images. Endless Sky's excellent writing immerses you into the world, with plenty of tidbits about the cultures of its universe thrown in, allowing one to imagine extra details.
|
||||
|
||||
## Gameplay is fun
|
||||
Endless Sky doesn't restrict you to a single gameplay style. Each ship has limited outfit space, so you have to choose your outfits wisely. You can play using a single ship, or build giant death fleets that lay waste to your enemies.
|
||||
|
||||
## Conclusion
|
||||
Overall, Endless Sky is a worthy succesor to Escape Velocity.
|
||||
|
||||
## Related
|
||||
=> https://endless-sky.github.io/
|
|
@ -0,0 +1,3 @@
|
|||
# Naev is great
|
||||
## Introduction
|
||||
Naev is a space trading and combat game inspired by Escape Velocity (which I never played).
|
|
@ -1,7 +1,22 @@
|
|||
# On Personal Websites
|
||||
The main purpose of this website for me is having fun; designing, writing, and structuring are enjoyable. But there are other reasons too. my experiences are pressented for others to learn, I could recieve feedback. Of course, there are many reasons to build a website: personal branding, restoring the Old web, learning about the web stack, or having fun like me.
|
||||
## Introduction
|
||||
I haven't seen many people build personal websites. I believe that more people should create personal websites. Here are some reasons why:
|
||||
|
||||
## Websites teach you about the web stack
|
||||
Building a website requires several skills, such as web server managment, writing HTML (not really if you are using a Content Managment System, but oh well), and writing content. Building a personal website is a good way to learn several skills at once.
|
||||
|
||||
## Websites allow you to benefit the world
|
||||
My experiences are presented for others to learn from, and I can recieve feedback. Writing a website allows you to benefit the world, obviously.
|
||||
|
||||
Do you think that you have no original content to write? Well, during writing, you think and come up with new ideas. This is because the physical act of writing (or typing) gets you to think. And, when writing, your thoughts are dumped onto something (a piece of paper, or maybe your screen), leaving your brain free to think more. See? Your brain is for making ideas, not storing them.
|
||||
|
||||
## Websites make you hone in your writing skills
|
||||
Doesn't writing for a blog every week make you improve your writing skills. To improve at any field, you must practice regularly. People can also give feedback on your content, helping you further.
|
||||
|
||||
## Websites are fun to make
|
||||
The main purpose of this website for me is having fun; designing, writing, and structuring are enjoyable.
|
||||
|
||||
## Related
|
||||
=> awk-make-sh.gmi One way to build a website, I guess
|
||||
=> custom-website-generation.gmi One way to build a website, I guess
|
||||
=> https://ijver.me/blog/internet-tenancy/ Internet tenancy is a major problem
|
||||
=> https://www.jvt.me/posts/2019/07/22/why-website/ Jamie Tanna: Why I have a website and why you should too
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
# Game Review
|
||||
## Endless Sky
|
||||
Endless Sky is an open-source top-down open-world space trading and combat game, inspired by Escape Velocity (I never played Escape Velocity however). I started playing it around 2022, and have thoroughly enjoyed it. Here are some reasons why:
|
||||
|
||||
Each faction in Endless Sky is distinct from the others, and you'd be hard-pressed to find a faction that is similiar to another one. Each faction is well fleshed out, and has a rich history.
|
||||
|
||||
Many games use video cutscenes, but Endless Sky uses text to convey its story, with the occasional images. Endless Sky's excellent writing immerses you into the world, with plenty of tidbits about the cultures of its universe thrown in, allowing one to imagine extra details.
|
||||
|
||||
Endless Sky doesn't restrict you to a single gameplay style. Each ship has limited outfit space, so you have to choose your outfits wisely. You can play using a single ship, or build giant death fleets that lay waste to your enemies.
|
||||
|
||||
=> https://endless-sky.github.io/
|
||||
|
||||
## Naev
|
||||
Naev is a space trading and combat game inspired by Escape Velocity (which I never played).
|
||||
|
||||
## Pioneer
|
|
@ -0,0 +1,65 @@
|
|||
# Useful Web Links
|
||||
A one-man one-page link directory.
|
||||
|
||||
## Personal
|
||||
=> https://drewdevault.com Drew DeVault
|
||||
=> https://lukesmith.xyz Luke Smith
|
||||
=> https://seirdy.one Seirdy
|
||||
=> https://atthis.link Marc
|
||||
=> https://ewontfix.com EWONTFIX
|
||||
=> https://ntietz.com/atom.xml Nicole
|
||||
=> https://www.karl.berlin/ Karl Bartel
|
||||
=> https://koshka.love/ Koshka
|
||||
=> https://shadowm00n.neocities.org/ Shadowm00n
|
||||
|
||||
## Web
|
||||
### Link Directories
|
||||
=> https://ooh.directory/ Ooh! Directory
|
||||
A directory of blogs.
|
||||
|
||||
=> https://curlie.org/ Curlie
|
||||
A directory of websites.
|
||||
|
||||
## Services
|
||||
=> https://wttr.in wttr.in
|
||||
A minimalist weather service, meant to be used with cURL.
|
||||
|
||||
## Technology
|
||||
=> https://wiki.archlinux.org Arch Linux Wiki
|
||||
A guide for Arch Linux, and things that aren't specific to Arch, including GRUB, partitioning, and minimalist setups.
|
||||
|
||||
=> https://samwho.dev/bloom-filters/ Bloom Filters
|
||||
A nice explanation of bloom filters.
|
||||
|
||||
=> https://useplaintext.email Use Plaintext Email: Why, and how.
|
||||
|
||||
=> http://searchingspot.com Searching Spot
|
||||
A guide for effectively using search engines.
|
||||
|
||||
=> https://landchad.net LandChad
|
||||
A guide for self-hosting public-facing services.
|
||||
|
||||
=> https://spyware.neocities.org Spyware Watchdog
|
||||
A guide to unsolicited connections made by software, and how to mitigate them.
|
||||
|
||||
=> https://darrenburns.net/posts/piece-table/ Darren Burns: Piece Tables
|
||||
An excellent explanation of data structures called piece tables for beginners. Helped me to understand them when I was stumped!
|
||||
|
||||
=> https://lukesmith.xyz/articles/notes-on-learning-languages/ Luke Smith's notes on learning languages
|
||||
Tips for learning languages.
|
||||
|
||||
=> https://paulgraham.com/talk.html Paul Graham: Write like you talk
|
||||
An article detailing why you should use a conversational tone in your writings.
|
||||
|
||||
=> http://www.catb.org/~esr/halloween/index.html The Halloween Documents
|
||||
A series of leaked Microsoft memos that clearly show that Microsoft wanted to destroy Linux, and that Linux presented a real threat against them.
|
||||
|
||||
=> https://anybrowser.org/campaign The Any Browser Campaign
|
||||
A campaign about designing for all browsers.
|
||||
|
||||
=> https://tante.cc/the-third-web Tante: Web3
|
||||
An article covering why Web3 is A Bad Idea.
|
||||
|
||||
=> https://jeffhuang.com/designed_to_last Jeff Huang's Manifesto "This Page Is Designed To Last"
|
||||
A guide to increasing the maintainability of your webpages, and reducing the chance you will abandon them.
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
# Useful Software
|
||||
Here is a list of software that I use, useful enough to be worth mentioning:
|
||||
|
||||
## Password Store, or pass,
|
||||
Password Store, or pass, is a CLI password manager that stores your passwords locally at ~/.password-store (or another location defined by the user) with optional git integration.
|
||||
|
||||
## AWK
|
||||
AWK is a programming language for processing text files, with scripts that are quick and easy to write. I use AWK to generate the static pages on this website!
|
||||
|
||||
## VIS
|
||||
Vis is a modal text editor, inspired by VIM, with several modes of operation. Macros repeat operations again and again, transforming hours of editing into minutes.
|
||||
|
||||
## mitmproxy
|
||||
mitmproxy is a proxy that displays connections sent through it; useful for checking software for spyware.
|
||||
|
||||
## sdcv
|
||||
sdcv is an offline dictionary program that is a CLI version of StarDict.
|
||||
|
||||
## qalc
|
||||
qalc is a calculator that supports both GUI and CLI interfaces, seamless unit conversion, and even custom units.
|
||||
|
||||
## emptty
|
||||
emptty is a TUI login manager.
|
||||
|
||||
## newsboat
|
||||
newsboat is a TUI RSS Feed reader.
|
|
@ -1,5 +1,3 @@
|
|||
#content { max-width: 70ch; margin: auto; padding: 10px; }
|
||||
#navbar { max-width: 70ch; margin: auto; padding: 10px; background: teal; color: white; }
|
||||
#navbar a { color: white; }
|
||||
hr { max-width: 70ch; }
|
||||
#navbar { max-width: 70ch; margin: auto; padding: 10px; }
|
||||
.permalink { margin-left: 15px; }
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
# Todo
|
||||
* Add a search-engine targeted sitemap document
|
||||
* Make the AWK scripts more efficient
|
||||
* Make the 'upload' make rule more efficient, by making it only upload files that have been changed
|
||||
* Use a single find command to gather data about all of the files at once, then use the results of that find command across the setup. This will avoid the need to scan the same directory multiple times.
|
||||
* Instead of using src/feed.ass for ATOM feed generation, make a single feed.json file at the root, then add content to it using a script, which will take in a filepath of a recently updated file, and a description as an input.
|
|
@ -1,72 +0,0 @@
|
|||
# Useful Web Links
|
||||
Basically a one-man one-page link directory. These link directories also somewhat tell you generally who the author is. I disagree with some of the views of these authors.
|
||||
|
||||
Tags:
|
||||
* #FOSS
|
||||
* #tradition
|
||||
* #AI
|
||||
* #programming
|
||||
* #internet
|
||||
* #unix
|
||||
* #writing
|
||||
* #languages
|
||||
* #privacy
|
||||
|
||||
## People
|
||||
=> https://drewdevault.com Drew DeVault
|
||||
- #FOSS, #programming
|
||||
|
||||
=> https://lukesmith.xyz Luke Smith
|
||||
- #tradition, #FOSS
|
||||
|
||||
=> https://seirdy.one Seirdy
|
||||
- #FOSS
|
||||
|
||||
=> https://atthis.link Marc
|
||||
- #FOSS, #AI
|
||||
|
||||
=> https://ewontfix.com EWONTFIX
|
||||
A blog about bugs in software. #programming
|
||||
|
||||
## RTFM
|
||||
=> https://wiki.archlinux.org Arch Linux Wiki
|
||||
A helpful guide to manage an Arch Linux system, and it also covers IN DETAIL things that aren't specific to Arch, such as GRUB, and partitioning. #unix
|
||||
|
||||
=> https://useplaintext.email Use Plaintext Email: Why, and how.
|
||||
- #internet
|
||||
|
||||
=> http://searchingspot.com Searching Spot
|
||||
A guide for using search engines more effectively. #internet
|
||||
|
||||
=> https://landchad.net LandChad
|
||||
An internet service self-hosting guide. #internet
|
||||
|
||||
## Software / Services
|
||||
=> https://spyware.neocities.org Spyware Watchdog
|
||||
A guide to unsolicited connections made by software, and how to mitigate them. #privacy
|
||||
|
||||
=> https://wttr.in wttr.in
|
||||
A minimalist weather service, meant to be used with cURL.
|
||||
|
||||
## Articles
|
||||
=> https://lukesmith.xyz/articles/notes-on-learning-languages/ Luke Smith's notes on learning languages
|
||||
Some tips for learning languages. #languages
|
||||
|
||||
=> https://paulgraham.com/talk.html Paul Graham: Write like you talk
|
||||
An excellent article by Paul Graham detailing why you should use a conversational tone in your writings. #writing
|
||||
|
||||
=> http://www.catb.org/~esr/halloween/index.html The Halloween Documents
|
||||
A series of leaked Microsoft memos that clearly show that Microsoft wanted to destroy Linux, and that Linux presented a real threat against them. #linux, #FOSS
|
||||
|
||||
=> https://anybrowser.org/campaign The Any Browser Campaign
|
||||
A campaign about designing for all browsers. #internet
|
||||
|
||||
=> https://tante.cc/the-third-web Tante: Web3
|
||||
An article covering why Web3 is A Bad Idea. #internet
|
||||
|
||||
=> https://jeffhuang.com/designed_to_last Jeff Huang's Manifesto "This Page Is Designed To Last"
|
||||
A manifesto on how to increase the maintainability of your webpages. Many webpages die simply because it was too much of a hassle for the author, which is avoidable by following these principles. #internet
|
||||
|
||||
## Media
|
||||
=> https://yewtu.be/channel/UCECl4aNz5hvuRzW5fgCOHKQ Jerobeam Fendorson
|
||||
A YouTube channel containing Osilloscope music.
|
|
@ -1,10 +0,0 @@
|
|||
# Great Software
|
||||
execline is a non-interactive scripting language that uses chain loading, where one program executes another program after ending. Since scripting glues programs instead of creating them, execlineb lacks functions.
|
||||
|
||||
Password Store, or pass, is a password manager that stores your passwords locally at ~/.password-store, and optionally uses git for reversing accidents. Core utilities easily manipulate passwords stored using pass.
|
||||
|
||||
AWK is a programming language for processing text files. AWK Scripts are easy and quick to write.
|
||||
|
||||
Vis is a modal text editor; think of it as if you are giving commands to edit text files. Macros repeat commands again and again.
|
||||
|
||||
mitmproxy is a proxy that displays connections sent through it. It is useful for checking software for spyware.
|
|
@ -0,0 +1,2 @@
|
|||
# Notes
|
||||
Notes are good!
|
|
@ -0,0 +1,2 @@
|
|||
# Useful
|
||||
Useful things are good!
|
|
@ -0,0 +1,14 @@
|
|||
=> getDirname('../path/deep/down/here')
|
||||
../path/deep/down/ == ../path/deep/down/
|
||||
=> getDirname('a_single_directory')
|
||||
. == .
|
||||
=> resolvePath('./path/to/irrelevant_directory/../file.txt')
|
||||
path/to/file.txt == path/to/file.txt
|
||||
=> resolvePath('path/to/file.txt/')
|
||||
path/to/file.txt == path/to/file.txt
|
||||
=> resolvePath('path/to/file.txt')
|
||||
path/to/file.txt == path/to/file.txt
|
||||
=> getRelativePath('parent/directory/', 'parent/path/to/file.txt')
|
||||
../path/to/file.txt == ../path/to/file.txt
|
||||
=> getRelativePath('parent/directory/', 'parent/directory/path/to/file.txt')
|
||||
path/to/file.txt == path/to/file.txt
|
|
@ -0,0 +1,31 @@
|
|||
Navigation:
|
||||
=> testing/input/index.gmi home
|
||||
=> testing/input/notes/index.gmi notes
|
||||
=> testing/input/sitemap.gmi sitemap
|
||||
=> testing/input/feed.atom feed
|
||||
=> http://git.vern.cc/techn0path/ git
|
||||
|
||||
# Testing Input
|
||||
This is testing input.
|
||||
|
||||
And this text should be <escaped>, so that the characters work in 'HTML.
|
||||
|
||||
> Quotes should work.
|
||||
> - Me
|
||||
|
||||
```
|
||||
And code should work too.
|
||||
Right?
|
||||
> Well quotes within code don't work.
|
||||
```
|
||||
|
||||
* Unordered lists
|
||||
* should work properly, hopefully
|
||||
|
||||
* And spaces seperate lists
|
||||
|
||||
## Level 2 Subheadings work
|
||||
|
||||
### Level 3 Subheadings work
|
||||
|
||||
#### But not beyond that.
|
|
@ -0,0 +1,54 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Testing Input</title>
|
||||
<meta name='author' content='techn0path' />
|
||||
<meta name='referrer' content='no-referrer' />
|
||||
<meta name='viewpoint' content='width=device-width,initial-scale=1.0' />
|
||||
|
||||
<link rel='stylesheet' href='style.css'/>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<nav id='navbar'>
|
||||
<a href='index.html'>home</a> |
|
||||
<a href='notes/index.html'>notes</a> |
|
||||
<a href='sitemap.html'>sitemap</a> |
|
||||
<a href='feed.atom'>feed</a> |
|
||||
<a href='http://git.vern.cc/techn0path/'>git</a>
|
||||
</nav><hr>
|
||||
|
||||
</header>
|
||||
<article id='content'>
|
||||
<details id='toc'> <summary>Table of content</summary> <ol>
|
||||
<li><a href='#level_2_subheadings_work'>Level 2 Subheadings work</a></li>
|
||||
</ol> </details>
|
||||
|
||||
<h1>Testing Input</h1>
|
||||
<p>This is testing input.</p>
|
||||
<p>And this text should be <escaped>, so that the characters work in 'HTML.</p>
|
||||
<blockquote>
|
||||
Quotes should work.<br>
|
||||
- Me<br>
|
||||
</blockquote>
|
||||
<pre>
|
||||
And code should work too.
|
||||
Right?
|
||||
> Well quotes within code don't work.
|
||||
</pre>
|
||||
<ul>
|
||||
<li>Unordered lists</li>
|
||||
<li>should work properly, hopefully</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li>And spaces seperate lists</li>
|
||||
</ul>
|
||||
<h2 id='level_2_subheadings_work'>Level 2 Subheadings work</h2>
|
||||
<a href='#level_2_subheadings_work'>Permalink</a><br/><br/>
|
||||
<h3>Level 3 Subheadings work</h3>
|
||||
<p>#### But not beyond that.</p>
|
||||
|
||||
<p>If you have any suggestions, let me know at <a href='mailto:logicartist123@gmail.com'>logicartist123@gmail.com</a>. Sorry, I still use GMail. :/</p>
|
||||
</article>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,88 @@
|
|||
<?xml version='1.0' encoding='UTF-8' ?>
|
||||
<feed xmlns='http://www.w3.org/2005/Atom'>
|
||||
<title>techn0path</title>
|
||||
<link rel='self' href='' />
|
||||
<author>
|
||||
<name>techn0path</name>
|
||||
</author>
|
||||
<updated>2023-05-20T21:12:38+06:00</updated>
|
||||
<id>urn:uuid:dad753cc-9f1a-55c9-afa5-0f6e50594ed5</id>
|
||||
<entry>
|
||||
<title>"renamed feed.txt to feed.tsv. added hooks. made all of the scripts in scripts/ executable" (hooks/post-commit)</title>
|
||||
<link href='hooks/post-commit' />
|
||||
<id>urn:uuid:</id>
|
||||
<updated>2023-05-20T21:12:38+06:00</updated>
|
||||
<summary>"renamed feed.txt to feed.tsv. added hooks. made all of the scripts in scripts/ executable"</summary>
|
||||
</entry>
|
||||
<entry>
|
||||
<title>"added feed.txt, as well as scripts/new_feed_entry.el. i will soon generate my ATOM feeds using feed.txt instead of src/feed.ass" (feed.txt)</title>
|
||||
<link href='feed.txt' />
|
||||
<id>urn:uuid:</id>
|
||||
<updated>2023-05-18T15:36:40+06:00</updated>
|
||||
<summary>"added feed.txt, as well as scripts/new_feed_entry.el. i will soon generate my ATOM feeds using feed.txt instead of src/feed.ass"</summary>
|
||||
</entry>
|
||||
<entry>
|
||||
<title>"added feed.txt, as well as scripts/new_feed_entry.el. i will soon generate my ATOM feeds using feed.txt instead of src/feed.ass" (scripts/new_feed_entry.el)</title>
|
||||
<link href='scripts/new_feed_entry.el' />
|
||||
<id>urn:uuid:</id>
|
||||
<updated>2023-05-18T15:36:40+06:00</updated>
|
||||
<summary>"added feed.txt, as well as scripts/new_feed_entry.el. i will soon generate my ATOM feeds using feed.txt instead of src/feed.ass"</summary>
|
||||
</entry>
|
||||
<entry>
|
||||
<title>"renamed testing/example.ass and testing/example.gmi to testing/input.ass and testing/input.gmi. also added more content to testing/input.gmi for further testing" (testing/input.gmi)</title>
|
||||
<link href='testing/input.gmi' />
|
||||
<id>urn:uuid:</id>
|
||||
<updated>2023-05-17T19:40:57+06:00</updated>
|
||||
<summary>"renamed testing/example.ass and testing/example.gmi to testing/input.ass and testing/input.gmi. also added more content to testing/input.gmi for further testing"</summary>
|
||||
</entry>
|
||||
<entry>
|
||||
<title>"consolidated navigation bar generation logic into scripts/navbar.awk. also recorded new output testing/output.html as correct." (scripts/navbar.awk)</title>
|
||||
<link href='scripts/navbar.awk' />
|
||||
<id>urn:uuid:</id>
|
||||
<updated>2023-05-17T19:07:04+06:00</updated>
|
||||
<summary>"consolidated navigation bar generation logic into scripts/navbar.awk. also recorded new output testing/output.html as correct."</summary>
|
||||
</entry>
|
||||
<entry>
|
||||
<title>"added a glossary" (src/glossary.gmi)</title>
|
||||
<link href='src/glossary.gmi' />
|
||||
<id>urn:uuid:</id>
|
||||
<updated>2023-05-14T15:33:50+06:00</updated>
|
||||
<summary>"added a glossary"</summary>
|
||||
</entry>
|
||||
<entry>
|
||||
<title>"minor changes to scripts/html.awk. i dunno, stuff to do with the navigation bar i guess. also added snapshot testing via git-diff" (testing/example.ass)</title>
|
||||
<link href='testing/example.ass' />
|
||||
<id>urn:uuid:</id>
|
||||
<updated>2023-05-14T15:30:49+06:00</updated>
|
||||
<summary>"minor changes to scripts/html.awk. i dunno, stuff to do with the navigation bar i guess. also added snapshot testing via git-diff"</summary>
|
||||
</entry>
|
||||
<entry>
|
||||
<title>"minor changes to scripts/html.awk. i dunno, stuff to do with the navigation bar i guess. also added snapshot testing via git-diff" (testing/example.gmi)</title>
|
||||
<link href='testing/example.gmi' />
|
||||
<id>urn:uuid:</id>
|
||||
<updated>2023-05-14T15:30:49+06:00</updated>
|
||||
<summary>"minor changes to scripts/html.awk. i dunno, stuff to do with the navigation bar i guess. also added snapshot testing via git-diff"</summary>
|
||||
</entry>
|
||||
<entry>
|
||||
<title>"minor changes to scripts/html.awk. i dunno, stuff to do with the navigation bar i guess. also added snapshot testing via git-diff" (testing/output.atom)</title>
|
||||
<link href='testing/output.atom' />
|
||||
<id>urn:uuid:</id>
|
||||
<updated>2023-05-14T15:30:49+06:00</updated>
|
||||
<summary>"minor changes to scripts/html.awk. i dunno, stuff to do with the navigation bar i guess. also added snapshot testing via git-diff"</summary>
|
||||
</entry>
|
||||
<entry>
|
||||
<title>"minor changes to scripts/html.awk. i dunno, stuff to do with the navigation bar i guess. also added snapshot testing via git-diff" (testing/output.gmi)</title>
|
||||
<link href='testing/output.gmi' />
|
||||
<id>urn:uuid:</id>
|
||||
<updated>2023-05-14T15:30:49+06:00</updated>
|
||||
<summary>"minor changes to scripts/html.awk. i dunno, stuff to do with the navigation bar i guess. also added snapshot testing via git-diff"</summary>
|
||||
</entry>
|
||||
<entry>
|
||||
<title>"minor changes to scripts/html.awk. i dunno, stuff to do with the navigation bar i guess. also added snapshot testing via git-diff" (testing/output.html)</title>
|
||||
<link href='testing/output.html' />
|
||||
<id>urn:uuid:</id>
|
||||
<updated>2023-05-14T15:30:49+06:00</updated>
|
||||
<summary>"minor changes to scripts/html.awk. i dunno, stuff to do with the navigation bar i guess. also added snapshot testing via git-diff"</summary>
|
||||
</entry>
|
||||
|
||||
</feed>
|
|
@ -1,7 +1,9 @@
|
|||
Navigation:
|
||||
=> gmi/index.gmi/ home
|
||||
=> gmi/sitemap.gmi/ sitemap
|
||||
=> gmi/feed.atom/ feed
|
||||
=> src/index.gmi home
|
||||
=> index.gmi/src/useful useful
|
||||
=> index.gmi/src/notes notes
|
||||
=> src/sitemap.gmi sitemap
|
||||
=> src/feed.atom feed
|
||||
=> http://git.vern.cc/techn0path/ git
|
||||
|
||||
# Testing Input
|
|
@ -1,3 +1,6 @@
|
|||
src/
|
||||
testing/input.gmi
|
||||
testing/
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
|
@ -6,22 +9,18 @@
|
|||
<meta name='referrer' content='no-referrer' />
|
||||
<meta name='viewpoint' content='width=device-width,initial-scale=1.0' />
|
||||
|
||||
<style>
|
||||
#content { max-width: 70ch; margin: auto; padding: 10px; }
|
||||
#navbar { max-width: 70ch; margin: auto; padding: 10px; background: teal; color: white; }
|
||||
#navbar a { color: white; }
|
||||
hr { max-width: 70ch; }
|
||||
.permalink { margin-left: 15px; }
|
||||
</style>
|
||||
<link rel='stylesheet' href='src/style.css'/>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<nav id='navbar'>
|
||||
<a href='html/index.html/'>home</a> |
|
||||
<a href='html/sitemap.html/'>sitemap</a> |
|
||||
<a href='html/feed.atom/'>feed</a> |
|
||||
<a href='src/index.html'>home</a> |
|
||||
<a href='index.html/src/useful'>useful</a> |
|
||||
<a href='index.html/src/notes'>notes</a> |
|
||||
<a href='src/sitemap.html'>sitemap</a> |
|
||||
<a href='src/feed.atom'>feed</a> |
|
||||
<a href='http://git.vern.cc/techn0path/'>git</a>
|
||||
</nav><br>
|
||||
</nav><hr>
|
||||
|
||||
</header>
|
||||
<article id='content'>
|
||||
|
@ -31,10 +30,9 @@ hr { max-width: 70ch; }
|
|||
|
||||
<h1>Testing Input</h1>
|
||||
<p>This is testing input.</p>
|
||||
<p></p>
|
||||
<p>And this text should be <escaped>, so that the characters work in 'HTML.</p>
|
||||
<p></p>
|
||||
<blockquote>
|
||||
Quotes should work.<br>
|
||||
- Me<br>
|
||||
</blockquote>
|
||||
<pre>
|
||||
|
@ -42,17 +40,16 @@ And code should work too.
|
|||
Right?
|
||||
> Well quotes within code don't work.
|
||||
</pre>
|
||||
<p></p>
|
||||
<ul>
|
||||
<li>Unordered lists</li>
|
||||
<li>should work properly, hopefully</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li>And spaces seperate lists</li>
|
||||
</ul>
|
||||
<h2 id='level_2_subheadings_work'>Level 2 Subheadings work</h2>
|
||||
<a href='#level_2_subheadings_work'>Permalink</a><br/><br/>
|
||||
<p></p>
|
||||
<h3>Level 3 Subheadings work</h3>
|
||||
<p></p>
|
||||
<p>#### But not beyond that.</p>
|
||||
|
||||
<p>If you have any suggestions, let me know at <a href='mailto:logicartist123@gmail.com'>logicartist123@gmail.com</a>. Sorry, I still use GMail. :/</p>
|
Loading…
Reference in New Issue