Better 404 page

This commit is contained in:
Adam Blažek 2021-04-05 16:45:04 +02:00
parent 45f0d8958d
commit 5511424b6f
16 changed files with 18 additions and 15 deletions

View File

@ -1 +1 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="icon" href="/images/xigoi-thicc.svg"><link rel="stylesheet" href="/styles/main.css"><script async src="/scripts/counter.js"></script><link rel="stylesheet" href="/styles/katex.min.css"><script defer src="/scripts/katex.min.js" onload="renderMathInElement(document.body)"></script><title>Equality | xigoi</title></head><body><a href="/"><header><svg id="xigoi-logo" viewBox="-7 -2 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M 0 20 L 9 8 A 5 5 0 1 0 1 8 L 4 12 A 5 5 0 0 0 8 14 A 2 2 0 0 1 10 16 A 4 4 0 0 1 2 16 A 5 5 0 0 1 3 13 A 10 10 0 0 0 5 7" stroke="#0ff" stroke-width="1"></path><circle cx="5" cy="5" r="1" fill="#f80"></circle></svg><div class="xigoi">xigoi</div></header></a><h1>Equality</h1><figure class="quote"><blockquote>In <a href="/wiki/Mathematics" title="Mathematics">mathematics</a>, an <dfn>equivalence relation</dfn> is a <a href="/wiki/Binary_relation" title="Binary relation">binary relation</a> that is <a href="/wiki/Reflexive_relation" title="Reflexive relation">reflexive</a>, <a href="/wiki/Symmetric_relation" title="Symmetric relation">symmetric</a> and <a href="/wiki/Transitive_relation" title="Transitive relation">transitive</a>.</blockquote><figcaption><a href="https://en.wikipedia.org/wiki/Equivalence_relation">Wikipedia</a></figcaption></figure><p>Who doesn't want equal rights? Gender equality, racial equality, you name it. However, there seems to be a general disagreement on what “equality” should look like. I'd like to present my viewpoint using the mathematical definition of an <dfn>equivalence relation</dfn>, which is basically a generalized idea of equality.</p><h2>Reflexivity</h2><p><dfn>Reflexivity</dfn> simply means that everything is equal to itself. This is not really relevant when discussing human rights, since the rights of a given group are equal to themselves by nature.</p><h2>Symmetry</h2><p><dfn>Symmetry</dfn> says that if \(x = y\), then \(y = x\). In other words, two equal things are interchangeable. Now this gets more interesting. My interpretation is that if switching the roles of two people/groups wouldn't change their situation regarding what they can do, only then can we say that they have equal rights. Surprisingly, this already seems to be a very controversial opinion. I'll get to concrete examples later.</p><h2>Transitivity</h2><p><dfn>Transitivity</dfn> says that if \(x = y\) and \(y = z\), then also \(x = z\). It's hard to imagine a scenario where this would come relevant in human rights. After all, it involves three variables, but discussions about human rights usually compare the rights of two groups. We'll see if this becomes useful later.</p></body></html>
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="icon" href="/images/xigoi-thicc.svg"><link rel="stylesheet" href="/styles/main.css"><script async src="/scripts/counter.js"></script><link rel="stylesheet" href="/styles/katex.min.css"><script defer src="/scripts/katex.min.js" onload="renderMathInElement(document.body)"></script><title>Equality | xigoi</title></head><body><a href="/" aria-label="Go to main page"><header><svg id="xigoi-logo" viewBox="-7 -2 24 24" xmlns="http://www.w3.org/2000/svg"><title>xigoi logo</title><path d="M 0 20 L 9 8 A 5 5 0 1 0 1 8 L 4 12 A 5 5 0 0 0 8 14 A 2 2 0 0 1 10 16 A 4 4 0 0 1 2 16 A 5 5 0 0 1 3 13 A 10 10 0 0 0 5 7" stroke="#0ff" stroke-width="1"></path><circle cx="5" cy="5" r="1" fill="#f80"></circle></svg><div class="xigoi">xigoi</div></header></a><h1>Equality</h1><figure class="quote"><blockquote>In <a href="/wiki/Mathematics" title="Mathematics">mathematics</a>, an <dfn>equivalence relation</dfn> is a <a href="/wiki/Binary_relation" title="Binary relation">binary relation</a> that is <a href="/wiki/Reflexive_relation" title="Reflexive relation">reflexive</a>, <a href="/wiki/Symmetric_relation" title="Symmetric relation">symmetric</a> and <a href="/wiki/Transitive_relation" title="Transitive relation">transitive</a>.</blockquote><figcaption><a href="https://en.wikipedia.org/wiki/Equivalence_relation">Wikipedia</a></figcaption></figure><p>Who doesn't want equal rights? Gender equality, racial equality, you name it. However, there seems to be a general disagreement on what “equality” should look like. I'd like to present my viewpoint using the mathematical definition of an <dfn>equivalence relation</dfn>, which is basically a generalized idea of equality.</p><h2>Reflexivity</h2><p><dfn>Reflexivity</dfn> simply means that everything is equal to itself. This is not really relevant when discussing human rights, since the rights of a given group are equal to themselves by nature.</p><h2>Symmetry</h2><p><dfn>Symmetry</dfn> says that if \(x = y\), then \(y = x\). In other words, two equal things are interchangeable. Now this gets more interesting. My interpretation is that if switching the roles of two people/groups wouldn't change their situation regarding what they can do, only then can we say that they have equal rights. Surprisingly, this already seems to be a very controversial opinion. I'll get to concrete examples later.</p><h2>Transitivity</h2><p><dfn>Transitivity</dfn> says that if \(x = y\) and \(y = z\), then also \(x = z\). It's hard to imagine a scenario where this would come relevant in human rights. After all, it involves three variables, but discussions about human rights usually compare the rights of two groups. We'll see if this becomes useful later.</p></body></html>

View File

@ -1,2 +1,2 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="icon" href="/images/xigoi-thicc.svg"><link rel="stylesheet" href="/styles/main.css"><script async src="/scripts/counter.js"></script><link rel="stylesheet" href="/styles/katex.min.css"><script defer src="/scripts/katex.min.js" onload="renderMathInElement(document.body)"></script><title>xigoi</title></head><body><a href="/"><header><svg id="xigoi-logo" viewBox="-7 -2 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M 0 20 L 9 8 A 5 5 0 1 0 1 8 L 4 12 A 5 5 0 0 0 8 14 A 2 2 0 0 1 10 16 A 4 4 0 0 1 2 16 A 5 5 0 0 1 3 13 A 10 10 0 0 0 5 7" stroke="#0ff" stroke-width="1"></path><circle cx="5" cy="5" r="1" fill="#f80"></circle></svg><div class="xigoi">xigoi</div></header></a><p class="warning">This website is a work in progress.</p><p>
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="icon" href="/images/xigoi-thicc.svg"><link rel="stylesheet" href="/styles/main.css"><script async src="/scripts/counter.js"></script><link rel="stylesheet" href="/styles/katex.min.css"><script defer src="/scripts/katex.min.js" onload="renderMathInElement(document.body)"></script><title>xigoi</title></head><body><a href="/" aria-label="Go to main page"><header><svg id="xigoi-logo" viewBox="-7 -2 24 24" xmlns="http://www.w3.org/2000/svg"><title>xigoi logo</title><path d="M 0 20 L 9 8 A 5 5 0 1 0 1 8 L 4 12 A 5 5 0 0 0 8 14 A 2 2 0 0 1 10 16 A 4 4 0 0 1 2 16 A 5 5 0 0 1 3 13 A 10 10 0 0 0 5 7" stroke="#0ff" stroke-width="1"></path><circle cx="5" cy="5" r="1" fill="#f80"></circle></svg><div class="xigoi">xigoi</div></header></a><p class="warning">This website is a work in progress.</p><p>
Hi! I am <em class="xigoi">xigoi</em>. I like programming and other computer stuff, mathematics, linguistics and walking. I live in Czechia and can speak Czech, English, <a href="https://tokipona.org/">Toki Pona</a> and some German. I am a big open source enthusiast I use <a href="https://www.linux.com/news/what-is-gnu-linux/">GNU/Linux</a>, <a href="https://www.vim.org/">Vim</a>, <a href="https://www.latex-project.org/">\(\text{\LaTeX}\)</a>, <a href="https://f-droid.org/">F-Droid</a>, <a href="https://disroot.org/en">Disroot</a> and others. I have some strong and possibly controversial <a href="opinions.html">opinions</a> about various aspects of life. On this website, you can find some things written and otherwise created by me. Happy browsing!</p><h2>Math</h2><ul class="index"><li class="wip"><a href="quantum-games.html">Quantum games</a></li></ul><h2>Rants</h2><ul class="index"><li><a href="opinions.html">Opinions</a></li><li class="wip"><a href="equality.html">Equality</a></li><li><a href="language-criticism/">Language Criticism</a></li></ul><h2>Fiction</h2><ul class="index"><li class="wip"><a href="susan-and-male-privilege.html">Susan and Male Privilege</a></li></ul><h2>About me and this site</h2><ul class="index"><li><a href="logo.html">xigoi logo</a></li><li><a href="styles/main.sass">Stylesheet (SASS)</a></li><li><a href="styles/main.css">Stylesheet (CSS)</a></li></ul><h2>Contact me</h2><ul class="index"><li>E-mail: <a href="mailto:xigoi@disroot.org">xigoi@disroot.org</a></li><li>Ruqqus: <a href="https://ruqqus.com/@xigoi">@xigoi</a></li><li>Reddit: <a href="https://www.reddit.com/user/xigoi">u/xigoi</a></li><li>Discord: xigoi#1759</li></ul></body></html>

View File

@ -1 +1 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="icon" href="/images/xigoi-thicc.svg"><link rel="stylesheet" href="/styles/main.css"><script async src="/scripts/counter.js"></script><title>Braces &amp; Semicolons | Language Criticism | xigoi</title></head><body><a href="/"><header><svg id="xigoi-logo" viewBox="-7 -2 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M 0 20 L 9 8 A 5 5 0 1 0 1 8 L 4 12 A 5 5 0 0 0 8 14 A 2 2 0 0 1 10 16 A 4 4 0 0 1 2 16 A 5 5 0 0 1 3 13 A 10 10 0 0 0 5 7" stroke="#0ff" stroke-width="1"></path><circle cx="5" cy="5" r="1" fill="#f80"></circle></svg><div class="xigoi">xigoi</div></header></a><h1>Braces Criticism</h1><p>There are, in general, three common ways to delimit code blocks: braces, end-keywords and indentation. When we write pseudocode on paper, we tend to almost always use indentation — it provides an easy visual cue and takes the least effort to write. So why do so many programmers insist on using braces for this purpose, which make code much harder to visually parse? Here are some commonly given reasons with my responses:</p><ul class="qa"><li>Pasting code from the internet messes up the indentation and it's tedious to fix it.</li><li>Are you coding in Windows Notepad?</li><li>A changed indent can cause the code to behave differently.</li><li>When this happens, you'll clearly see it. On the other hand, a misplaced brace might go unnoticed and the indentation will give you a false sense of the code being correct.</li><li>I have auto-indent, so the indentation will always match the braces.</li><li>That's cool. You'll still get slowed down by having to visually process them.</li><li>I don't think invisible characters should change the meaning of code.</li><li>Firstly, indentation is followed by visible characters, which makes you able to clearly see it. Secondly, by this argument, you could also argue that <code>publicstaticvoidmain</code> should be equivalent to <code>public static void main</code> — we're just ignoring “invisible” characters, no?</li><li>Mixing spaces and tabs is going to create a mess.</li><li>See the answer to the first question.</li></ul><h1>Semicolons Criticism</h1><p>A very popular feature in programming languages, especially those derived from <a href="c.html">C</a>, is requiring a semicolon after every statement. Why is this necessary if you're already separating statements by newlines? It just adds one more character you need to type; and more importantly, a lot more characters that you have to visually process, but that don't contribute in any way to the logic of the code (the term for this is <dfn>syntactic noise</dfn>). There's a lot of languages that do completely fine without them: Python, Ruby, Lua, Nim, Go, Haskell, etc. And JavaScript shows that even in a language that uses semicolons, they can be inferred pretty well. Also note that Lua doesn't actually care about newlines, its syntax is made in a way that a statement always ends unambiguously.</p></body></html>
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="icon" href="/images/xigoi-thicc.svg"><link rel="stylesheet" href="/styles/main.css"><script async src="/scripts/counter.js"></script><title>Braces &amp; Semicolons | Language Criticism | xigoi</title></head><body><a href="/" aria-label="Go to main page"><header><svg id="xigoi-logo" viewBox="-7 -2 24 24" xmlns="http://www.w3.org/2000/svg"><title>xigoi logo</title><path d="M 0 20 L 9 8 A 5 5 0 1 0 1 8 L 4 12 A 5 5 0 0 0 8 14 A 2 2 0 0 1 10 16 A 4 4 0 0 1 2 16 A 5 5 0 0 1 3 13 A 10 10 0 0 0 5 7" stroke="#0ff" stroke-width="1"></path><circle cx="5" cy="5" r="1" fill="#f80"></circle></svg><div class="xigoi">xigoi</div></header></a><h1>Braces Criticism</h1><p>There are, in general, three common ways to delimit code blocks: braces, end-keywords and indentation. When we write pseudocode on paper, we tend to almost always use indentation — it provides an easy visual cue and takes the least effort to write. So why do so many programmers insist on using braces for this purpose, which make code much harder to visually parse? Here are some commonly given reasons with my responses:</p><ul class="qa"><li>Pasting code from the internet messes up the indentation and it's tedious to fix it.</li><li>Are you coding in Windows Notepad?</li><li>A changed indent can cause the code to behave differently.</li><li>When this happens, you'll clearly see it. On the other hand, a misplaced brace might go unnoticed and the indentation will give you a false sense of the code being correct.</li><li>I have auto-indent, so the indentation will always match the braces.</li><li>That's cool. You'll still get slowed down by having to visually process them.</li><li>I don't think invisible characters should change the meaning of code.</li><li>Firstly, indentation is followed by visible characters, which makes you able to clearly see it. Secondly, by this argument, you could also argue that <code>publicstaticvoidmain</code> should be equivalent to <code>public static void main</code> — we're just ignoring “invisible” characters, no?</li><li>Mixing spaces and tabs is going to create a mess.</li><li>See the answer to the first question.</li></ul><h1>Semicolons Criticism</h1><p>A very popular feature in programming languages, especially those derived from <a href="c.html">C</a>, is requiring a semicolon after every statement. Why is this necessary if you're already separating statements by newlines? It just adds one more character you need to type; and more importantly, a lot more characters that you have to visually process, but that don't contribute in any way to the logic of the code (the term for this is <dfn>syntactic noise</dfn>). There's a lot of languages that do completely fine without them: Python, Ruby, Lua, Nim, Go, Haskell, etc. And JavaScript shows that even in a language that uses semicolons, they can be inferred pretty well. Also note that Lua doesn't actually care about newlines, its syntax is made in a way that a statement always ends unambiguously.</p></body></html>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="icon" href="/images/xigoi-thicc.svg"><link rel="stylesheet" href="/styles/main.css"><script async src="/scripts/counter.js"></script><title>C | Language Criticism | xigoi</title></head><body><a href="/"><header><svg id="xigoi-logo" viewBox="-7 -2 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M 0 20 L 9 8 A 5 5 0 1 0 1 8 L 4 12 A 5 5 0 0 0 8 14 A 2 2 0 0 1 10 16 A 4 4 0 0 1 2 16 A 5 5 0 0 1 3 13 A 10 10 0 0 0 5 7" stroke="#0ff" stroke-width="1"></path><circle cx="5" cy="5" r="1" fill="#f80"></circle></svg><div class="xigoi">xigoi</div></header></a><h1>C Language Criticism</h1><p class="disclaimer">I know that C was designed a long time ago when there wasn't much knowledge about language design. I'm not trying to berate its original creators, I just think it's time to move on to more modern systems programming languages like Nim, Rust or Zig. That's why this criticism is from a modern perspective.</p><p class="notice">I found <a href="https://eev.ee/blog/2016/12/01/lets-stop-copying-c/">this article</a> which explains many things much better than I, so please check it out. My article contains a few duplicates and some additional points.</p><h2>Preprocessor</h2><p>What's a better way of doing imports and macros than embedding another language with completely different syntax, which does naive text substitution, into your language? In order to avoid dangers which are not present in any sane import/macro systems, you have to do ugly hacks such as:</p><ul><li><p>Include guards</p><pre><code>#ifndef YOU_NEED_TO_MANUALLY_MAKE_SURE_THAT_YOUR_FILE_ISNT_INCLUDED_MULTIPLE_TIMES
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="icon" href="/images/xigoi-thicc.svg"><link rel="stylesheet" href="/styles/main.css"><script async src="/scripts/counter.js"></script><title>C | Language Criticism | xigoi</title></head><body><a href="/" aria-label="Go to main page"><header><svg id="xigoi-logo" viewBox="-7 -2 24 24" xmlns="http://www.w3.org/2000/svg"><title>xigoi logo</title><path d="M 0 20 L 9 8 A 5 5 0 1 0 1 8 L 4 12 A 5 5 0 0 0 8 14 A 2 2 0 0 1 10 16 A 4 4 0 0 1 2 16 A 5 5 0 0 1 3 13 A 10 10 0 0 0 5 7" stroke="#0ff" stroke-width="1"></path><circle cx="5" cy="5" r="1" fill="#f80"></circle></svg><div class="xigoi">xigoi</div></header></a><h1>C Language Criticism</h1><p class="disclaimer">I know that C was designed a long time ago when there wasn't much knowledge about language design. I'm not trying to berate its original creators, I just think it's time to move on to more modern systems programming languages like Nim, Rust or Zig. That's why this criticism is from a modern perspective.</p><p class="notice">I found <a href="https://eev.ee/blog/2016/12/01/lets-stop-copying-c/">this article</a> which explains many things much better than I, so please check it out. My article contains a few duplicates and some additional points.</p><h2>Preprocessor</h2><p>What's a better way of doing imports and macros than embedding another language with completely different syntax, which does naive text substitution, into your language? In order to avoid dangers which are not present in any sane import/macro systems, you have to do ugly hacks such as:</p><ul><li><p>Include guards</p><pre><code>#ifndef YOU_NEED_TO_MANUALLY_MAKE_SURE_THAT_YOUR_FILE_ISNT_INCLUDED_MULTIPLE_TIMES
#define YOU_NEED_TO_MANUALLY_MAKE_SURE_THAT_YOUR_FILE_ISNT_INCLUDED_MULTIPLE_TIMES
// your code here
#endif</code></pre></li><li><p>The <code>do { ... } while (0)</code> thing to make sure that a macro can be used as a normal function</p></li><li><p>Wrapping everything in parentheses to make a macro work like a normal function</p><pre><code>#define MAX(a, b) ((a) > (b) ? (a) : (b))</code></pre><p>If any parentheses are left out, it results in counter-intuitive behavior. Actually, even with them it doesn't work like a normal function: the arguments will be evaluated as many times as they're in the macro body!</p></li></ul><h2>Braces &amp; Semicolons</h2><p>See <a href="braces-semicolons.html">Braces &amp; Semicolons</a></p><h2>Syntax inconsistencies &amp; warts</h2><p>Since many other languages (Java, C#, JavaScript, ...) have mindlessly copied most syntax from C, these mistakes have a profound effect on a whole family of languages.</p><ul><li>All control structures that take a statement (if, while, for, switch) have the form of <code>KEYWORD (SOMETHING) STATEMENT</code>. Except for the do-while loop, which for some reason has the form <code>KEYWORD STATEMENT KEYWORD (SOMETHING);</code>. Totally different and including an extra semicolon.<ul class="qa"><li>But it visually indicates that the condition is first checked after the statement!</li><li>Then why is a for loop written as <code>for (INIT; CONDITION; STEP) STATEMENT</code> rather than <code>for (INIT; CONDITION) STATEMENT (STEP);</code>? By the same logic, we should visually indicate that the step (usually increment) is first executed after the statement.</li></ul></li><li>The choice to require an if/while condition to be wrapped in parentheses, rather than requiring the body to be wrapped in braces (as in Rust). Not only does this introduce syntactic noise, but it leads to subtle bugs if you mess up indentation:<pre><code>if (launch_button_pressed)

View File

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="icon" href="/images/xigoi-thicc.svg"><link rel="stylesheet" href="/styles/main.css"><script async src="/scripts/counter.js"></script><title>C++ | Language Criticism | xigoi</title></head><body><a href="/"><header><svg id="xigoi-logo" viewBox="-7 -2 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M 0 20 L 9 8 A 5 5 0 1 0 1 8 L 4 12 A 5 5 0 0 0 8 14 A 2 2 0 0 1 10 16 A 4 4 0 0 1 2 16 A 5 5 0 0 1 3 13 A 10 10 0 0 0 5 7" stroke="#0ff" stroke-width="1"></path><circle cx="5" cy="5" r="1" fill="#f80"></circle></svg><div class="xigoi">xigoi</div></header></a><h1>C++ Language Criticism</h1><p>Everything that applies to <a href="c.html">C</a> also applies to C++. This article contains only things that don't apply to C.</p><p>The <a href="http://yosefk.com/c++fqa/index.html">C++ FQA</a> has a lot of great points, so go read it too.</p><h2>Overall philosophy</h2><p>I believe that a programming language should be designed to make simple things simple and complex things as simple as possible. C++ is designed to make simple things complex and complex things even more complex. For example, a program to read space-separated numbers from STDIN, sort them and again output them space-separated:</p><div class="comparison"><div class="compared"><h6>Python 3</h6><pre><code>nums = [int(inp) for inp in input().split()]
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="icon" href="/images/xigoi-thicc.svg"><link rel="stylesheet" href="/styles/main.css"><script async src="/scripts/counter.js"></script><title>C++ | Language Criticism | xigoi</title></head><body><a href="/" aria-label="Go to main page"><header><svg id="xigoi-logo" viewBox="-7 -2 24 24" xmlns="http://www.w3.org/2000/svg"><title>xigoi logo</title><path d="M 0 20 L 9 8 A 5 5 0 1 0 1 8 L 4 12 A 5 5 0 0 0 8 14 A 2 2 0 0 1 10 16 A 4 4 0 0 1 2 16 A 5 5 0 0 1 3 13 A 10 10 0 0 0 5 7" stroke="#0ff" stroke-width="1"></path><circle cx="5" cy="5" r="1" fill="#f80"></circle></svg><div class="xigoi">xigoi</div></header></a><h1>C++ Language Criticism</h1><p>Everything that applies to <a href="c.html">C</a> also applies to C++. This article contains only things that don't apply to C.</p><p>The <a href="http://yosefk.com/c++fqa/index.html">C++ FQA</a> has a lot of great points, so go read it too.</p><h2>Overall philosophy</h2><p>I believe that a programming language should be designed to make simple things simple and complex things as simple as possible. C++ is designed to make simple things complex and complex things even more complex. For example, a program to read space-separated numbers from STDIN, sort them and again output them space-separated:</p><div class="comparison"><div class="compared"><h6>Python 3</h6><pre><code>nums = [int(inp) for inp in input().split()]
print(*sorted(nums))</code></pre><a href="https://tio.run/##K6gsycjPM/7/P680t1jBViE6M69EIzOvQFMhLb9IAcgAYhBVWqKhqVdckJMJpGO5CopAyrSK84tKUlM0QFo1Nf//NzY0UTA0VbBUMDJTMFUwNgUA">Try it online!</a></div><div class="compared"><h6>Nim</h6><pre><code>import std/[strutils, sequtils, algorithm]
let nums = stdin.readLine.splitWhitespace.mapIt(it.parseInt)

View File

@ -1 +1 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="icon" href="/images/xigoi-thicc.svg"><link rel="stylesheet" href="/styles/main.css"><script async src="/scripts/counter.js"></script><title>Language Criticism | xigoi</title></head><body><a href="/"><header><svg id="xigoi-logo" viewBox="-7 -2 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M 0 20 L 9 8 A 5 5 0 1 0 1 8 L 4 12 A 5 5 0 0 0 8 14 A 2 2 0 0 1 10 16 A 4 4 0 0 1 2 16 A 5 5 0 0 1 3 13 A 10 10 0 0 0 5 7" stroke="#0ff" stroke-width="1"></path><circle cx="5" cy="5" r="1" fill="#f80"></circle></svg><div class="xigoi">xigoi</div></header></a><h1>Language Criticism</h1><p>Here I'm going to criticize all kinds of languages: spoken languages, programming languages, markup languages, etc. Prepare your pitchforks.</p><h2>Programming language constructs</h2><ul class="index"><li><a href="braces-semicolons.html">Braces &amp; Semicolons</a></li></ul><h2>Programming languages</h2><ul class="index"><li><a href="c.html">C</a></li><li class="wip"><a href="cpp.html">C++</a></li></ul></body></html>
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="icon" href="/images/xigoi-thicc.svg"><link rel="stylesheet" href="/styles/main.css"><script async src="/scripts/counter.js"></script><title>Language Criticism | xigoi</title></head><body><a href="/" aria-label="Go to main page"><header><svg id="xigoi-logo" viewBox="-7 -2 24 24" xmlns="http://www.w3.org/2000/svg"><title>xigoi logo</title><path d="M 0 20 L 9 8 A 5 5 0 1 0 1 8 L 4 12 A 5 5 0 0 0 8 14 A 2 2 0 0 1 10 16 A 4 4 0 0 1 2 16 A 5 5 0 0 1 3 13 A 10 10 0 0 0 5 7" stroke="#0ff" stroke-width="1"></path><circle cx="5" cy="5" r="1" fill="#f80"></circle></svg><div class="xigoi">xigoi</div></header></a><h1>Language Criticism</h1><p>Here I'm going to criticize all kinds of languages: spoken languages, programming languages, markup languages, etc. Prepare your pitchforks.</p><h2>Programming language constructs</h2><ul class="index"><li><a href="braces-semicolons.html">Braces &amp; Semicolons</a></li></ul><h2>Programming languages</h2><ul class="index"><li><a href="c.html">C</a></li><li class="wip"><a href="cpp.html">C++</a></li></ul></body></html>

View File

@ -1 +1 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="icon" href="/images/xigoi-thicc.svg"><link rel="stylesheet" href="/styles/main.css"><script async src="/scripts/counter.js"></script><title>xigoi logo | xigoi</title></head><body><a href="/"><header><svg id="xigoi-logo" viewBox="-7 -2 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M 0 20 L 9 8 A 5 5 0 1 0 1 8 L 4 12 A 5 5 0 0 0 8 14 A 2 2 0 0 1 10 16 A 4 4 0 0 1 2 16 A 5 5 0 0 1 3 13 A 10 10 0 0 0 5 7" stroke="#0ff" stroke-width="1"></path><circle cx="5" cy="5" r="1" fill="#f80"></circle></svg><div class="xigoi">xigoi</div></header></a><h1>The xigoi logo</h1><svg id="xigoi-logo" viewBox="-7 -2 24 24" xmlns="http://www.w3.org/2000/svg" style="width: 100%; height: 100%;"><path d="M 0 20 L 9 8 A 5 5 0 1 0 1 8 L 4 12 A 5 5 0 0 0 8 14 A 2 2 0 0 1 10 16 A 4 4 0 0 1 2 16 A 5 5 0 0 1 3 13 A 10 10 0 0 0 5 7" stroke="#0ff" stroke-width="1"></path><circle cx="5" cy="5" r="1" fill="#f80"></circle></svg><p>The shape is meant to be an “x” overlapping with an “i”, drawn with a single stroke — except for the dot, which is singled out. I realized later that it looks like a thinking person, which is a nice coincidence.</p><p>This version of the logo is made in SVG and designed so that the cyan part consists entirely of straight line segments and circular arcs, whose endpoints all lie on a square lattice. The dot lies in the center of the most complete circular arc and is distinguished by both size and color. It was a nice exercise in geometry.</p><p>The colors don't really mean anything, I just like them.</p></body></html>
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="icon" href="/images/xigoi-thicc.svg"><link rel="stylesheet" href="/styles/main.css"><script async src="/scripts/counter.js"></script><title>xigoi logo | xigoi</title></head><body><a href="/" aria-label="Go to main page"><header><svg id="xigoi-logo" viewBox="-7 -2 24 24" xmlns="http://www.w3.org/2000/svg"><title>xigoi logo</title><path d="M 0 20 L 9 8 A 5 5 0 1 0 1 8 L 4 12 A 5 5 0 0 0 8 14 A 2 2 0 0 1 10 16 A 4 4 0 0 1 2 16 A 5 5 0 0 1 3 13 A 10 10 0 0 0 5 7" stroke="#0ff" stroke-width="1"></path><circle cx="5" cy="5" r="1" fill="#f80"></circle></svg><div class="xigoi">xigoi</div></header></a><h1>The xigoi logo</h1><svg id="xigoi-logo" viewBox="-7 -2 24 24" xmlns="http://www.w3.org/2000/svg" style="width: 100%; height: 100%;"><path d="M 0 20 L 9 8 A 5 5 0 1 0 1 8 L 4 12 A 5 5 0 0 0 8 14 A 2 2 0 0 1 10 16 A 4 4 0 0 1 2 16 A 5 5 0 0 1 3 13 A 10 10 0 0 0 5 7" stroke="#0ff" stroke-width="1"></path><circle cx="5" cy="5" r="1" fill="#f80"></circle></svg><p>The shape is meant to be an “x” overlapping with an “i”, drawn with a single stroke — except for the dot, which is singled out. I realized later that it looks like a thinking person, which is a nice coincidence.</p><p>This version of the logo is made in SVG and designed so that the cyan part consists entirely of straight line segments and circular arcs, whose endpoints all lie on a square lattice. The dot lies in the center of the most complete circular arc and is distinguished by both size and color. It was a nice exercise in geometry.</p><p>The colors don't really mean anything, I just like them.</p></body></html>

View File

@ -1 +1 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="icon" href="/images/xigoi-thicc.svg"><link rel="stylesheet" href="/styles/main.css"><script async src="/scripts/counter.js"></script><title>Not Found | xigoi</title></head><body><a href="/"><header><svg id="xigoi-logo" viewBox="-7 -2 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M 0 20 L 9 8 A 5 5 0 1 0 1 8 L 4 12 A 5 5 0 0 0 8 14 A 2 2 0 0 1 10 16 A 4 4 0 0 1 2 16 A 5 5 0 0 1 3 13 A 10 10 0 0 0 5 7" stroke="#0ff" stroke-width="1"></path><circle cx="5" cy="5" r="1" fill="#f80"></circle></svg><div class="xigoi">xigoi</div></header></a><h1>404 Not Found</h1><p>Sorry, this page doesn't exist on my website. Would you like to go to the <a href="/">main page</a>?</p></body></html>
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="icon" href="/images/xigoi-thicc.svg"><link rel="stylesheet" href="/styles/main.css"><script async src="/scripts/counter.js"></script><title>Not Found | xigoi</title></head><body><a href="/" aria-label="Go to main page"><header><svg id="xigoi-logo" viewBox="-7 -2 24 24" xmlns="http://www.w3.org/2000/svg"><title>xigoi logo</title><path d="M 0 20 L 9 8 A 5 5 0 1 0 1 8 L 4 12 A 5 5 0 0 0 8 14 A 2 2 0 0 1 10 16 A 4 4 0 0 1 2 16 A 5 5 0 0 1 3 13 A 10 10 0 0 0 5 7" stroke="#0ff" stroke-width="1"></path><circle cx="5" cy="5" r="1" fill="#f80"></circle></svg><div class="xigoi">xigoi</div></header></a><h1>404 Not Found</h1><p>Sorry, this page doesn't exist on my website. Sometimes I move things around, so it's possible that it's somewhere else now. Would you like to go to the <a href="/">main page</a> and try to find it?</p></body></html>

View File

@ -6,6 +6,6 @@ block title
block content
h1 404 Not Found
p
| Sorry, this page doesn't exist on my website. Would you like to go to the
| Sorry, this page doesn't exist on my website. Sometimes I move things around, so it's possible that it's somewhere else now. Would you like to go to the
a(href="/") main page
| ?
| and try to find it?

View File

@ -1 +1 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="icon" href="/images/xigoi-thicc.svg"><link rel="stylesheet" href="/styles/main.css"><script async src="/scripts/counter.js"></script><title>Opinions | xigoi</title></head><body><a href="/"><header><svg id="xigoi-logo" viewBox="-7 -2 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M 0 20 L 9 8 A 5 5 0 1 0 1 8 L 4 12 A 5 5 0 0 0 8 14 A 2 2 0 0 1 10 16 A 4 4 0 0 1 2 16 A 5 5 0 0 1 3 13 A 10 10 0 0 0 5 7" stroke="#0ff" stroke-width="1"></path><circle cx="5" cy="5" r="1" fill="#f80"></circle></svg><div class="xigoi">xigoi</div></header></a><h1>Opinions</h1><p>Here are some of my opinions that could be considered controversial. Fell free to argue about them with me.</p><h2>Casual</h2><ul><li>Pineapple pizza is the best pizza.</li><li>Teeth should be brushed after breakfast, not before.</li></ul><h2>Mathematics</h2><ul><li>0 is a Natural number.</li><li>The Axiom of Choice is intuitively false.</li></ul><h2>Programming</h2><ul><li>C is a badly designed programming language with ugly syntax.</li><li>Semicolons and braces are syntactic noise and should not be necessary in modern languages.</li><li>Indexing from 0 is <a href="https://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html">objectively better</a> than indexing from 1 even if we disregard how it internally works.</li></ul></body></html>
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="icon" href="/images/xigoi-thicc.svg"><link rel="stylesheet" href="/styles/main.css"><script async src="/scripts/counter.js"></script><title>Opinions | xigoi</title></head><body><a href="/" aria-label="Go to main page"><header><svg id="xigoi-logo" viewBox="-7 -2 24 24" xmlns="http://www.w3.org/2000/svg"><title>xigoi logo</title><path d="M 0 20 L 9 8 A 5 5 0 1 0 1 8 L 4 12 A 5 5 0 0 0 8 14 A 2 2 0 0 1 10 16 A 4 4 0 0 1 2 16 A 5 5 0 0 1 3 13 A 10 10 0 0 0 5 7" stroke="#0ff" stroke-width="1"></path><circle cx="5" cy="5" r="1" fill="#f80"></circle></svg><div class="xigoi">xigoi</div></header></a><h1>Opinions</h1><p>Here are some of my opinions that could be considered controversial. Fell free to argue about them with me.</p><h2>Casual</h2><ul><li>Pineapple pizza is the best pizza.</li><li>Teeth should be brushed after breakfast, not before.</li></ul><h2>Mathematics</h2><ul><li>0 is a Natural number.</li><li>The Axiom of Choice is intuitively false.</li></ul><h2>Programming</h2><ul><li>C is a badly designed programming language with ugly syntax.</li><li>Semicolons and braces are syntactic noise and should not be necessary in modern languages.</li><li>Indexing from 0 is <a href="https://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html">objectively better</a> than indexing from 1 even if we disregard how it internally works.</li></ul></body></html>

View File

@ -1 +1 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="icon" href="/images/xigoi-thicc.svg"><link rel="stylesheet" href="/styles/main.css"><script async src="/scripts/counter.js"></script><link rel="stylesheet" href="/styles/katex.min.css"><script defer src="/scripts/katex.min.js" onload="renderMathInElement(document.body)"></script><title>Quantum Games | xigoi</title></head><body><a href="/"><header><svg id="xigoi-logo" viewBox="-7 -2 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M 0 20 L 9 8 A 5 5 0 1 0 1 8 L 4 12 A 5 5 0 0 0 8 14 A 2 2 0 0 1 10 16 A 4 4 0 0 1 2 16 A 5 5 0 0 1 3 13 A 10 10 0 0 0 5 7" stroke="#0ff" stroke-width="1"></path><circle cx="5" cy="5" r="1" fill="#f80"></circle></svg><div class="xigoi">xigoi</div></header></a><h1>Quantum games</h1><h2>Quantum tic-tac-toe</h2><p>Some time ago, I discovered the game of <a href="https://en.wikipedia.org/wiki/Quantum_tic-tac-toe">quantum tic-tac-toe</a> on Quora. It's played like regular tic-tac-toe, but instead of writing one mark, each player writes two small marks labeled with a unique number, which represent a mark in superposition. There may be multiple small marks in one space and whenever they create a cycle, the player who did not create the cycle can choose the way they will be collapsed — that is, write one regular mark for each pair of small marks in the cycle. If this destroys any other small marks, their counterpart will also turn into a regular mark, and this can chain. The rulas for winning are as usual — three regular marks in a row. It may even happen that both players win at once.</p><h2>Quantum chess</h2><p>When I played quantum tic-tac-toe with my friend, the idea really intrigued us and we wondered how the same concept could apply to a more complex game. And what better game to use for this purpose than chess? So we quickly decided on the rules, took out a chessboard and started playing. Unfortunately, we didn't finish the game, but here is a rough idea of the rules:</p><ul><li>In their turn, a player can choose between doing a quantum move and a collapse.</li><li>A <dfn>quantum move</dfn> consists of choosing two moves that could be played in regular chess and writing them down. This will create two possible positions. When there are already multiple positions, the player can make any two moves that are valid in <em>some</em> positions and they will be applied to all positions where they're legal.</li><li>With a <dfn>quantum collapse</dfn>, the player can choose a quantum move and discard one of the possible moves, which will also remove all possible positions resulting from this move and makes the other move the reality. If it turns out that some other move is now impossible, it will also be discarded, and this can chain.</li><li>A player wins when the opponent's king is captured in <em>all</em> possible positions. Note that the usual rules of check and checkmate would not get on well with quantum chess where a piece may or may not be somewhere, so all rules associated with check and checkmate (such and the king being unable to move through an endangered position when castling) are done away with.</li></ul><h2>Generalized quantum games</h2><p>We soon realized that these rules are not very precise and result in a lot of ambiguity. Therefore, we decided to formalize them. However, since the quantum part is pretty much separate from the rules of normal chess, why not define it in a way that can be used for all games? (Or at least for all deterministic turn-based games.) Therefore, we came up with the concept of game quantumification.</p><p>First, we need a formal idea of a game. I haven't really studied much game theory, so excuse me for using non-standard definitions and symbols.</p><ul><li>A <dfn>game</dfn> consists of a set of states \(S\) and moves \(M\) and is played by a sequence of players \(P\).</li><li>There is always a current state \(s_c \in S\) and a current player \(p_c \in P\).</li><li>A <dfn>move</dfn> \(m \in M\) is a partial function \(S \to S\).</li><li>There is a set of <dfn>available moves</dfn> \(M_a(s_c,p_c) \subseteq M\) that depends on the current state and player. The set may be empty.</li><li>The current player is allowed to choose one move \(m \in M_a\). The current state is then changed to \(m(s_c)\) and the current played is changed based on rules that depend on the game — usually to the cyclically next player in the sequence \(P\).</li><li>Some states are <dfn>final</dfn>. When the game reaches a final state, certain players win and certain players lose, depending on the game.</li></ul></body></html>
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="icon" href="/images/xigoi-thicc.svg"><link rel="stylesheet" href="/styles/main.css"><script async src="/scripts/counter.js"></script><link rel="stylesheet" href="/styles/katex.min.css"><script defer src="/scripts/katex.min.js" onload="renderMathInElement(document.body)"></script><title>Quantum Games | xigoi</title></head><body><a href="/" aria-label="Go to main page"><header><svg id="xigoi-logo" viewBox="-7 -2 24 24" xmlns="http://www.w3.org/2000/svg"><title>xigoi logo</title><path d="M 0 20 L 9 8 A 5 5 0 1 0 1 8 L 4 12 A 5 5 0 0 0 8 14 A 2 2 0 0 1 10 16 A 4 4 0 0 1 2 16 A 5 5 0 0 1 3 13 A 10 10 0 0 0 5 7" stroke="#0ff" stroke-width="1"></path><circle cx="5" cy="5" r="1" fill="#f80"></circle></svg><div class="xigoi">xigoi</div></header></a><h1>Quantum games</h1><h2>Quantum tic-tac-toe</h2><p>Some time ago, I discovered the game of <a href="https://en.wikipedia.org/wiki/Quantum_tic-tac-toe">quantum tic-tac-toe</a> on Quora. It's played like regular tic-tac-toe, but instead of writing one mark, each player writes two small marks labeled with a unique number, which represent a mark in superposition. There may be multiple small marks in one space and whenever they create a cycle, the player who did not create the cycle can choose the way they will be collapsed — that is, write one regular mark for each pair of small marks in the cycle. If this destroys any other small marks, their counterpart will also turn into a regular mark, and this can chain. The rulas for winning are as usual — three regular marks in a row. It may even happen that both players win at once.</p><h2>Quantum chess</h2><p>When I played quantum tic-tac-toe with my friend, the idea really intrigued us and we wondered how the same concept could apply to a more complex game. And what better game to use for this purpose than chess? So we quickly decided on the rules, took out a chessboard and started playing. Unfortunately, we didn't finish the game, but here is a rough idea of the rules:</p><ul><li>In their turn, a player can choose between doing a quantum move and a collapse.</li><li>A <dfn>quantum move</dfn> consists of choosing two moves that could be played in regular chess and writing them down. This will create two possible positions. When there are already multiple positions, the player can make any two moves that are valid in <em>some</em> positions and they will be applied to all positions where they're legal.</li><li>With a <dfn>quantum collapse</dfn>, the player can choose a quantum move and discard one of the possible moves, which will also remove all possible positions resulting from this move and makes the other move the reality. If it turns out that some other move is now impossible, it will also be discarded, and this can chain.</li><li>A player wins when the opponent's king is captured in <em>all</em> possible positions. Note that the usual rules of check and checkmate would not get on well with quantum chess where a piece may or may not be somewhere, so all rules associated with check and checkmate (such and the king being unable to move through an endangered position when castling) are done away with.</li></ul><h2>Generalized quantum games</h2><p>We soon realized that these rules are not very precise and result in a lot of ambiguity. Therefore, we decided to formalize them. However, since the quantum part is pretty much separate from the rules of normal chess, why not define it in a way that can be used for all games? (Or at least for all deterministic turn-based games.) Therefore, we came up with the concept of game quantumification.</p><p>First, we need a formal idea of a game. I haven't really studied much game theory, so excuse me for using non-standard definitions and symbols.</p><ul><li>A <dfn>game</dfn> consists of a set of states \(S\) and moves \(M\) and is played by a sequence of players \(P\).</li><li>There is always a current state \(s_c \in S\) and a current player \(p_c \in P\).</li><li>A <dfn>move</dfn> \(m \in M\) is a partial function \(S \to S\).</li><li>There is a set of <dfn>available moves</dfn> \(M_a(s_c,p_c) \subseteq M\) that depends on the current state and player. The set may be empty.</li><li>The current player is allowed to choose one move \(m \in M_a\). The current state is then changed to \(m(s_c)\) and the current played is changed based on rules that depend on the game — usually to the cyclically next player in the sequence \(P\).</li><li>Some states are <dfn>final</dfn>. When the game reaches a final state, certain players win and certain players lose, depending on the game.</li></ul></body></html>

View File

@ -14,6 +14,7 @@ a[href^="mailto:"]::after, a[href^="https://en.wikipedia.org/"]::after, a[href^=
@font-face {
font-family: Merriweather;
src: url(/styles/fonts/Merriweather-Regular.woff);
font-display: swap;
}
@font-face {
font-family: IcoFont;

View File

@ -11,6 +11,7 @@
@font-face
font-family: Merriweather
src: url(/styles/fonts/Merriweather-Regular.woff)
font-display: swap
@font-face
font-family: IcoFont

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="icon" href="/images/xigoi-thicc.svg"><link rel="stylesheet" href="/styles/main.css"><script async src="/scripts/counter.js"></script><title>xigoi</title></head><body><a href="/"><header><svg id="xigoi-logo" viewBox="-7 -2 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M 0 20 L 9 8 A 5 5 0 1 0 1 8 L 4 12 A 5 5 0 0 0 8 14 A 2 2 0 0 1 10 16 A 4 4 0 0 1 2 16 A 5 5 0 0 1 3 13 A 10 10 0 0 0 5 7" stroke="#0ff" stroke-width="1"></path><circle cx="5" cy="5" r="1" fill="#f80"></circle></svg><div class="xigoi">xigoi</div></header></a></body></html>
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="icon" href="/images/xigoi-thicc.svg"><link rel="stylesheet" href="/styles/main.css"><script async src="/scripts/counter.js"></script><title>xigoi</title></head><body><a href="/" aria-label="Go to main page"><header><svg id="xigoi-logo" viewBox="-7 -2 24 24" xmlns="http://www.w3.org/2000/svg"><title>xigoi logo</title><path d="M 0 20 L 9 8 A 5 5 0 1 0 1 8 L 4 12 A 5 5 0 0 0 8 14 A 2 2 0 0 1 10 16 A 4 4 0 0 1 2 16 A 5 5 0 0 1 3 13 A 10 10 0 0 0 5 7" stroke="#0ff" stroke-width="1"></path><circle cx="5" cy="5" r="1" fill="#f80"></circle></svg><div class="xigoi">xigoi</div></header></a></body></html>

View File

@ -11,9 +11,10 @@ html(lang="en")
block title
| xigoi
body
a(href="/")
a(href="/" aria-label="Go to main page")
header
svg(id="xigoi-logo" viewBox="-7 -2 24 24" xmlns="http://www.w3.org/2000/svg")
title xigoi logo
path(d="M 0 20 L 9 8 A 5 5 0 1 0 1 8 L 4 12 A 5 5 0 0 0 8 14 A 2 2 0 0 1 10 16 A 4 4 0 0 1 2 16 A 5 5 0 0 1 3 13 A 10 10 0 0 0 5 7" stroke="#0ff" stroke-width="1")
circle(cx="5" cy="5" r="1" fill="#f80")
.xigoi xigoi