stick new content in git

This commit is contained in:
osmarks 2020-06-12 14:59:22 +01:00
parent a4d30a6ef6
commit 2bc9e3c0c5
9 changed files with 193 additions and 52 deletions

View File

@ -37,7 +37,8 @@ const ignorePaths = [
"/isso",
"/infipage",
"/wsthing",
"/random-stuff"
"/random-stuff",
"/radio"
]
const shouldRespond = req => {

View File

@ -42,3 +42,6 @@ updated: 08/03/2020
* Don't jump to stores if you don't have things to sell or lots of scrap. You're missing out on scrap you might otherwise get (this is called "opportunity cost").
* Don't expect to win all the time or even particularly often. FTL is a roguelike. It's designed to be played repeatedly, not won all of the time, and involves heavy randomness.
* Ships' starting weapons are actually generally pretty good, often using less power and/or firing faster than purchaseable alternatives.
* The Burst Laser II (and its rough equivalent, the Flak I) are very good and should be obtained where possible.
* Destroying enemy medbays/clonebays is beneficial if you plan to kill their crew.
* Level 2 teleporters are apparently fast enough to teleport your crew onto an airless ship and teleport them off before they die from the lack of oxygen.

53
blog/other-stuff.md Normal file
View File

@ -0,0 +1,53 @@
---
title: Other things you may like
description: A nonexhaustive list of... content/media... which I like and which you may also be interested in.
created: 11/06/2020
slug: otherstuff
---
I'm excluding music from this because music preferences seem to be even more varied between the people I interact with than other stuff.
Obviously this is just stuff *I* like; you might not like it, which isn't really my concern - this list is primarily made to bring to people's attention stuff they might like but have not heard of.
* [SCP Foundation - Antimemetics Divison](http://www.scp-wiki.net/antimemetics-division-hub) by qntm - fiction about antimemes ("ideas with self-censoring properties") in the [SCP](https://en.wikipedia.org/wiki/SCP_Foundation) universe. Cosmic horror and pretty good. Now completed except for an epilogue. You can read some other work by the author, on [their website](https://qntm.org).
* [Mother of Learning](https://www.fictionpress.com/s/2961893/1/Mother-of-Learning) by nobody103, 823k words, now completed. I'll just copy the summary from FictionPress here: "Zorian, a mage in training, only wanted to finish his education in peace. Now he struggles to find answers as he finds himself repeatedly reliving the same month. 'Groundhog Day' style setup in a fantasy world.".
* [The Hitchhiker's Guide to The Galaxy](https://www.goodreads.com/series/40957-hitchhiker-s-guide-to-the-galaxy) by Douglas Adams (a series). It is pretty popular but quite a few people aren't aware of it, which is a shame. It's basically (very funny) scifi comedy.
* [Sufficiently Advanced Magic](https://www.goodreads.com/book/show/34403860-sufficiently-advanced-magic) by Andrew Rowe. Progression fantasy with an interesting magic system. It's part of a series containing two books so far (unfinished).
* [Mistborn](https://www.goodreads.com/series/40910-mistborn) by Brandon Sanderson. Initially seems like a pretty standard "chosen one must defeat the evil empire"-type story, is actually much more complex.
* [Discworld](https://en.wikipedia.org/wiki/Discworld) by Terry Pratchett, a *very* long-running (41 books, but it's sort of made of various miniserieses so you don't really need to read all of them or in order) fantasy series set on the "Discworld", a flat world on the back of four elephants on a turtle. As you might expect from that description, it's somewhat comedic, but also has long-running plot arcs, great character development, and a world not stuck in medieval stasis (as new technology is introduced and drives some of the plots).
* [Minecraft](https://www.minecraft.net/en-us/). You've probably heard of it, as it's apparently the most popular computer game ever, but it seems worth listing. It's a block-based sandbox game in which you can do a lot of stuff.
* Java Edition, which you should probably be playing anyway instead of the mobile version/Windows 10 Edition/Bedrock Edition/the console one/whatever else because it lacks the horrible, horrible microtransactions Microsoft implemented, has mod support, allowing you to use a *huge* range of extra content for free. This includes stuff like [programmable computers](https://www.curseforge.com/minecraft/mc-mods/cc-tweaked), [machines and stuff](https://www.curseforge.com/minecraft/mc-mods/thermal-expansion), [new "dimensions"](https://www.curseforge.com/minecraft/mc-mods/the-twilight-forest) (I do NOT like this use of this word but it's seeped into popular terminology), a complex [magic system](https://www.curseforge.com/minecraft/mc-mods/thaumcraft) (note that this is no longer updated, you should consider Astral Sorcery and Botania and other modern ones which are), and this [one modpack](https://www.technicpack.net/modpack/mcnewhorizons.677387) (well, there are probably others) with incredibly complex progression which could take [months](https://www.youtube.com/playlist?list=PLliiJ70rl2NvJjby2LoVuP1EuOvRAyf97) to finish.
* There's also [Minetest](https://www.minetest.net/), a free and open source game in the style of Minecraft, which I mention for completeness - it's much better from a technical perspective, and free, but also significantly less polished and I don't really like it..
* [Factorio](https://factorio.com/), a 2D factory building game where you can make intricate and sprawling factories to... produce science packs, mostly. Extremely well-optimized so that you can have vast amounts of machines without speed dropping to unusable levels, without problematic hacks like Minecraft's chunkloading.
* [FTL: Faster than Light](https://subsetgames.com/ftl.html), a very replayable roguelite (with nice music, too) with tactical real-time (spaceship) combat and difficult choices. I have a page with (spoilery) tips [here](/FTL).
* [Universe Sandbox](http://universesandbox.com/), a game/simulator in which you can meddle with the very stars (and planets) in the skies.
* The [Edge Chronicles](https://en.wikipedia.org/wiki/The_Edge_Chronicles) by Paul Stewart and Chris Riddel, a "high fantasy" (in the sense that it has large-scale plots and is set in a very non-real-world-like world) book series which is... well, apparently a children's series, and it is in many ways, but it's also somewhat darker than usual for that. Has nice illustrations.
* [Sixteen Ways to Defend a Walled City](https://www.goodreads.com/book/show/37946419-sixteen-ways-to-defend-a-walled-city) by K. J. Parker. A funny book about an engineer leading the defense of a city against a siege.
* [Doing God's Work](https://www.royalroad.com/fiction/25442/doing-gods-work), a web serial in which "The gods are real and incorporated. Providence is a profitable global monopoly."
* [styropyro](youtube.com/user/styropyro/), the top search result for "crazy laser guy". Builds interesting lasery things (also Tesla coils and whatnot). Also has a [Discord server](https://discord.gg/ckGrMDR), which hosts many interesting discussions about primarily lasers and electronics, but many other things too.
* [Towers of Heaven](https://www.goodreads.com/series/264587-towers-of-heaven) by Cameron Milan, a [LitRPG](https://en.wikipedia.org/wiki/LitRPG) series about someone travelling back in time to save humanity from extinction because of the arrival of the towers, invulnerable extremely tall... towers... containing challenges (and which also release monsters periodically on the world around them, hence the "extinction" thing).
* [Ender's Game](https://en.wikipedia.org/wiki/Ender%27s_Game) by Orson Scott Card, a scifi book about the training of children, including protagonist Andrew (Ender) Wiggin, to be soldiers and leaders in preparation for the "Third Invasion" by hostile aliens.
* [Chilli and the Chocolate Factory](https://www.fanfiction.net/s/13451176/1/Chili-and-the-Chocolate-Factory-Fudge-Revelation) by gaizemaize, a now-completed web serial. It is, unsurprisingly, Charlie and the Chocolate Factory fanfiction which is actually pretty good. It manages to capture the bizarre surreal spirit of the original one, and is very funny. I vaguely suspect that the whole thing might just be convoluted setup for a pun.
* [UNSONG](http://unsongbook.com/) by Scott Alexander, which is *also* a now-completed web serial. A bizarre world in which, after Apollo 8 crashes into the crystal sphere surrounding the world, the planet switches over to running on kabbalistic Judaism. It sounds very weird, and it *is*, but it's a good story.
* [Friendship is Optimal](http://www.fimfiction.net/story/62074/friendship-is-optimal) by Iceman, a cautionary tale about unfriendly AI.
* [Good Omens](https://en.wikipedia.org/wiki/Good_Omens) by Neil Gaiman and Terry Pratchett, a "comedy about the birth of the son of Satan and the coming of the End Times" as Wikipedia puts it. You might think it would be hard to make a comedy out of it, but they manage very well.
* [The Expanse](https://www.goodreads.com/series/56399-the-expanse) by James S. A. Corey, a near-future scifi series in space which actually bothers with some level of realism.
* [Three Parts Dead](https://www.goodreads.com/book/show/13539191-three-parts-dead) by Max Gladstone, a very neat fantasy book (part of a series, have not yet read the others) with a well-build world. The basic plot: "A god has died, and its up to Tara, first-year associate in the international necromantic firm of Kelethres, Albrecht, and Ao, to bring Him back to life before His city falls apart."
* [We Are Legion (We Are Bob)](https://www.goodreads.com/book/show/32109569-we-are-legion-we-are-bob) by Dennis E. Taylor, a story of von Neumann probes managed by uploaded human intelligences.
* [The Combat Codes](https://www.goodreads.com/book/show/27790093-the-combat-codes) by Alexander Darwin. Similar to Ender's Game, but with MMA, basically, and I am bad at describing things.
* [Schlock Mercenary](https://www.schlockmercenary.com/), a *very* long-running space opera webcomic. It's been running for something like 20 years, and the art and such improve over time.
* [Freefall](http://freefall.purrsia.com/), a hard-science-fiction webcomic.
Special mentions (i.e. "I haven't gotten around to reading these but they are well-reviewed and sound interesting") to:
* [The Divine Cities](https://www.goodreads.com/series/159695-the-divine-cities) by Robert Jackson Bennet.
* [Children of Time](https://www.goodreads.com/book/show/25499718-children-of-time) by Adrian Tchaikovsky.
* [The Murderbot Diaries](https://www.goodreads.com/series/191900-the-murderbot-diaries) by Martha Wells.
* [Codex Alera](https://www.goodreads.com/series/45545-codex-alera) by Jim Butcher.
* [Digitesque](https://www.goodreads.com/series/183319-digitesque) by Guerric Haché.
* [This Is How You Lose The Time War](https://www.goodreads.com/book/show/43352954-this-is-how-you-lose-the-time-war) by Amal El-Mohtar, Max Gladstone.
* [The Machineries of Empire](https://www.goodreads.com/series/160439-the-machineries-of-empire) by Yoon Ha Lee.
* [The Books of Babel](https://www.goodreads.com/series/127130-the-books-of-babel) by Josiah Bancroft.
* [House of Suns](https://www.goodreads.com/book/show/1126719.House_of_Suns) by Alastair Reynolds.
* "house of suns is really very good, you should read" - baidicoot/Aidan, creator of the world-renowned [Emu War](/emu-war) game
If you want EPUB versions of the free web serial stuff here for your e-reader, there are tools to generate those, or you can contact me for a copy.
You can suggest other possibly-good stuff in the comments and I may add it to an extra section, and pointlessly complain there or [by email](mailto:osmarks@protonmail.com) if you don't like some of this. Please tell me if any links are dead.

29
blog/problem-solving.md Normal file
View File

@ -0,0 +1,29 @@
---
title: "'Problem Solving' Tasks and Computer Science"
description: Is solving Sudoku and similar puzzles by hand really useful in building computer science ability? We don't think so.
slug: csproblem
created: 20/05/2020
---
*Co-written with Aidan, developer of [Emu War](/emu-war). He did most of it.*
Computer Science (CS) can be defined as 'the study of problems and problem-solving, and the study of solutions to those problems'.
It seems, at first glance, that solving logic puzzles would develop CS skill, since 'CS is all about problem solving'.
But this isn't the case; computer science is about inventing creative ways to solve these problems, understanding their mathematical basis, being able to express your ideas in a precise and clear form, and being able to translate these ideas into code.
The goal of this is for computers to be able to solve them automatically with their ability to do repetitive tasks very fast, instead of relying on the flexible but slow general reasoning and intuitive abilities of humans.
One common example of a problem-solving puzzle to help develop 'computational skills' is Sudoku.
While the logical reasoning skills used in Sudoku are admirable, and may even be useful for a few problems in CS, we do not often think about *why we take certain steps* when deducing the value of a tile, instead reasoning retroactively about *how we know* it.
When we solve Sudoku we do not develop a general algorithm for solving Sudoku in our heads and then execute it; instead, we solve it through a combination of intuition and creative logical reasoning, which are not well-defined or easily applicable to computers.
[Here](http://educ.jmu.edu/~arnoldea/MathMagHss.pdf) is an interesting article relating to this.
'Computational skills' puzzles are inherently unhelpful as tools for improving CS ability, as they do not force players to formalise and be specific in their thought processes while solving problems; instead, they develop the player's intuitive ability.
In chess, competitive players often talk about 'developing intuition', i.e. being able to play a chess game automatically and without formalising their thought processes.
Similarly, in Sudoku, top-class solvers develop intuition so that they instinctively 'know' which number to put next.
This intuition is not limited to the top category of solvers; even amateur players use this to decide which area to focus on.
Instead of being able to create a formal program to solve Sudoku, the solver has programmed themself in a way they can't easily explain or pass on.
These puzzles are demonstrably a different class of problem to designing algorithms to solve them; if they were similar, then machines that can solve one set should mostly be able to solve the other.
However, although modern computers are extremely fast, and able to solve many common 'computational thinking' tasks orders of magnitude faster than humans, humans are still in control, for this simple reason: *computers cannot program other computers*.
Since computers can do 'computational skills' tasks easily, but cannot (yet) solve the problems of computer science itself, we can conclude that these are entirely different categories of problem.
In other words, learning to do 'computational skills' problems does not help you become a computer scientist, it helps you become a computer - and one easily outdone by a real computer at these tasks.

56
error/404.html Normal file
View File

@ -0,0 +1,56 @@
---
title: 404
---
<style>
@keyframes useless {
0% {
background-color: red;
transform: rotate(0deg);
}
14% {
background-color: orange;
}
28% {
background-color: yellow;
}
42% {
background-color: green;
}
56% {
background-color: blue;
}
70% {
background-color: indigo;
}
84% {
background-color: purple;
}
100% {
background-color: red;
transform: rotate(360deg);
}
}
#useless {
width: 10vmax;
height: 10vmax;
display: flex;
justify-content: center;
align-items: center;
padding: 5%;
animation: infinite linear 5s useless;
margin-top: 10%;
min-width: 5em;
min-height: 5em;
color: black;
cursor: pointer;
}
</style>
<center>
The page you have requested was not found. Please go to a different one which actually exists, or the index page.
If you clicked a link on this site and got here, this is a bug and you should report it.
<a href="/" class="no-underline"><div id="useless">osmarks.tk</div></a>
</center>

73
package-lock.json generated
View File

@ -191,9 +191,9 @@
}
},
"dayjs": {
"version": "1.8.19",
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.19.tgz",
"integrity": "sha512-7kqOoj3oQSmqbvtvGFLU5iYqies+SqUiEGNT0UtUPPxcPYgY1BrkXR0Cq2R9HYSimBXN+xHkEN4Hi399W+Ovlg=="
"version": "1.8.27",
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.27.tgz",
"integrity": "sha512-Jpa2acjWIeOkg8KURUHICk0EqnEFSSF5eMEscsOgyJ92ZukXwmpmRkPSUka7KHSfbj5eKH30ieosYip+ky9emQ=="
},
"debug": {
"version": "3.1.0",
@ -298,25 +298,30 @@
}
},
"handlebars": {
"version": "4.7.2",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.2.tgz",
"integrity": "sha512-4PwqDL2laXtTWZghzzCtunQUTLbo31pcCJrd/B/9JP8XbhVzpS5ZXuKqlOzsd1rtcaLo4KqAn8nl8mkknS4MHw==",
"version": "4.7.6",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz",
"integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==",
"requires": {
"minimist": "^1.2.5",
"neo-async": "^2.6.0",
"optimist": "^0.6.1",
"source-map": "^0.6.1",
"uglify-js": "^3.1.4"
"uglify-js": "^3.1.4",
"wordwrap": "^1.0.0"
},
"dependencies": {
"uglify-js": {
"version": "3.7.6",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.7.6.tgz",
"integrity": "sha512-yYqjArOYSxvqeeiYH2VGjZOqq6SVmhxzaPjJC1W2F9e+bqvFL9QXQ2osQuKUFjM2hGjKG2YclQnRKWQSt/nOTQ==",
"version": "3.9.1",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.9.1.tgz",
"integrity": "sha512-JUPoL1jHsc9fOjVFHdQIhqEEJsQvfKDjlubcCilu8U26uZ73qOg8VsN8O1jbuei44ZPlwL7kmbAdM4tzaUvqnA==",
"optional": true,
"requires": {
"commander": "~2.20.3",
"source-map": "~0.6.1"
"commander": "~2.20.3"
}
},
"wordwrap": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
"integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus="
}
}
},
@ -469,23 +474,16 @@
}
},
"minimist": {
"version": "0.0.10",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
"integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8="
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
},
"mkdirp": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"version": "0.5.5",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
"integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
"requires": {
"minimist": "0.0.8"
},
"dependencies": {
"minimist": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
}
"minimist": "^1.2.5"
}
},
"ms": {
@ -494,14 +492,14 @@
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"mustache": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/mustache/-/mustache-4.0.0.tgz",
"integrity": "sha512-FJgjyX/IVkbXBXYUwH+OYwQKqWpFPLaLVESd70yHjSDunwzV2hZOoTBvPf4KLoxesUzzyfTH6F784Uqd7Wm5yA=="
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/mustache/-/mustache-4.0.1.tgz",
"integrity": "sha512-yL5VE97+OXn4+Er3THSmTdCFCtx5hHWzrolvH+JObZnUYwuaG7XV+Ch4fR2cIrcYI0tFHxS7iyFYl14bW8y2sA=="
},
"nanoid": {
"version": "2.1.10",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.10.tgz",
"integrity": "sha512-ZPUHBAwrQ+BSwVV2Xh6hBOEStTzAf8LgohOY0kk22lDiDdI32582KjVPYCqgqj7834hTunGzwZOB4me9T6ZcnA=="
"version": "2.1.11",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.11.tgz",
"integrity": "sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA=="
},
"neo-async": {
"version": "2.6.1",
@ -521,15 +519,6 @@
"wrappy": "1"
}
},
"optimist": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
"integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
"requires": {
"minimist": "~0.0.1",
"wordwrap": "~0.0.2"
}
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",

View File

@ -4,13 +4,13 @@
"description": "Static site generation code for my website.",
"main": "index.js",
"dependencies": {
"dayjs": "^1.8.19",
"dayjs": "^1.8.27",
"fs-extra": "^8.1.0",
"gray-matter": "^4.0.2",
"handlebars": "^4.7.2",
"handlebars": "^4.7.6",
"markdown-it": "^10.0.0",
"mustache": "^4.0.0",
"nanoid": "^2.1.10",
"mustache": "^4.0.1",
"nanoid": "^2.1.11",
"pug": "^2.0.4",
"ramda": "^0.26.1",
"stylus": "^0.54.7"

View File

@ -4,7 +4,7 @@ const fse = require("fs-extra")
const MarkdownIt = require("markdown-it")
const pug = require("pug")
const path = require("path")
const matter = require('gray-matter')
const matter = require("gray-matter")
const mustache = require("mustache")
const globalData = require("./global.json")
const stylus = require("stylus")
@ -21,6 +21,7 @@ const root = path.join(__dirname, "..")
const templateDir = path.join(root, "templates")
const experimentDir = path.join(root, "experiments")
const blogDir = path.join(root, "blog")
const errorPagesDir = path.join(root, "error")
const assetsDir = path.join(root, "assets")
const outDir = path.join(root, "out")
@ -54,7 +55,7 @@ const loadDir = async (dir, func) => {
return out
}
const applyTemplate = async (template, input, getOutput, options) => {
const applyTemplate = async (template, input, getOutput, options = {}) => {
const page = parseFrontMatter(await readFile(input))
if (options.processMeta) { options.processMeta(page.data) }
if (options.processContent) { page.content = options.processContent(page.content) }
@ -85,7 +86,7 @@ const processExperiments = templates => {
const processBlog = templates => {
return loadDir(blogDir, async (file, basename) => {
return applyTemplate(templates.blogPost, file, async page => {
return applyTemplate(templates.experiment, file, async page => {
const out = path.join(outDir, page.data.slug)
await fse.ensureDir(out)
return path.join(out, "index.html")
@ -93,6 +94,14 @@ const processBlog = templates => {
})
}
const processErrorPages = templates => {
return loadDir(errorPagesDir, async (file, basename) => {
return applyTemplate(templates.experiment, file, async page => {
return path.join(outDir, basename)
})
})
}
const processAssets = async templates => {
const outAssets = path.join(outDir, "assets")
await fse.ensureDir(outAssets)
@ -123,6 +132,7 @@ const run = async () => {
const experimentsList = R.sortBy(x => x.title, R.values(await processExperiments(templates)))
const blogList = R.sortBy(x => x.updated ? -x.updated.valueOf() : 0, R.values(await processBlog(templates)))
await processAssets(templates)
await processErrorPages(templates)
const index = templates.index({ ...globalData, title: "Index", experiments: experimentsList, posts: blogList })
await fsp.writeFile(path.join(outDir, "index.html"), index)

View File

@ -18,7 +18,7 @@ html(lang="en")
body
nav
a(href="/")
img.logo(src="/assets/images/logo.svg", alt="logo")
img.logo(src="/assets/images/logo.svg", alt="")
+nav-item("/", "Index")
+nav-item(`https://status.${domain}/`, "Status")
+nav-item(`https://i.${domain}/`, "Images")
@ -35,4 +35,4 @@ html(lang="en")
if comments !== "off"
.isso
section(id="isso-thread")
section(id="isso-thread")