about summary refs log tree commit diff homepage
diff options
context:
space:
mode:
authorNguyễn Gia Phong <mcsinyx@disroot.org>2021-11-14 12:15:17 +0700
committerNguyễn Gia Phong <mcsinyx@disroot.org>2021-11-14 12:15:17 +0700
commitf0f838c13f4a552dca7b5dbaca066a382c1145f8 (patch)
treee9c5ceb32aea9035c535e9dcb336066b19d6a6cd
parent6add857c033e6f836257f2b6bc659ec23b1cf74a (diff)
downloadsite-f0f838c13f4a552dca7b5dbaca066a382c1145f8.tar.gz
Update Franklin
-rw-r--r--Manifest.toml119
-rw-r--r--blog/2020/gsoc/article/1.md2
-rw-r--r--blog/2020/gsoc/article/3.md4
-rw-r--r--blog/2020/gsoc/article/4.md6
-rw-r--r--blog/2020/gsoc/article/5.md2
-rw-r--r--blog/2020/gsoc/article/7.md4
-rw-r--r--blog/2020/gsoc/checkin/1.md4
-rw-r--r--blog/2020/gsoc/checkin/2.md2
-rw-r--r--blog/2020/gsoc/checkin/3.md2
-rw-r--r--blog/2020/gsoc/checkin/4.md2
-rw-r--r--blog/conseq.md18
-rw-r--r--blog/nopoo.md4
-rw-r--r--blog/threa.md34
-rw-r--r--index.md16
-rw-r--r--package-lock.json6
-rw-r--r--package.json2
-rw-r--r--works.md60
17 files changed, 150 insertions, 137 deletions
diff --git a/Manifest.toml b/Manifest.toml
index 9b84805..fa95ce5 100644
--- a/Manifest.toml
+++ b/Manifest.toml
@@ -1,10 +1,10 @@
 # This file is machine-generated - editing it directly is not advised
 
+[[ArgTools]]
+uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f"
+
 [[Artifacts]]
-deps = ["Pkg"]
-git-tree-sha1 = "c30985d8821e0cd73870b17b0ed0ce6dc44cb744"
 uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33"
-version = "1.3.0"
 
 [[Base64]]
 uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f"
@@ -22,47 +22,47 @@ uuid = "ade2ca70-3891-5945-98fb-dc099432e06a"
 deps = ["Mmap"]
 uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab"
 
-[[Distributed]]
-deps = ["Random", "Serialization", "Sockets"]
-uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b"
-
 [[DocStringExtensions]]
-deps = ["LibGit2", "Markdown", "Pkg", "Test"]
-git-tree-sha1 = "9d4f64f79012636741cf01133158a54b24924c32"
+deps = ["LibGit2"]
+git-tree-sha1 = "b19534d1895d702889b219c382a6e18010797f0b"
 uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae"
-version = "0.8.4"
+version = "0.8.6"
+
+[[Downloads]]
+deps = ["ArgTools", "LibCURL", "NetworkOptions"]
+uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6"
 
 [[ExprTools]]
-git-tree-sha1 = "10407a39b87f29d47ebaca8edbc75d7c302ff93e"
+git-tree-sha1 = "b7e3d17636b348f005f11040025ae8c6f645fe92"
 uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04"
-version = "0.1.3"
+version = "0.1.6"
 
 [[FileWatching]]
 uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee"
 
 [[Franklin]]
 deps = ["Dates", "DelimitedFiles", "DocStringExtensions", "ExprTools", "FranklinTemplates", "HTTP", "Literate", "LiveServer", "Logging", "Markdown", "NodeJS", "OrderedCollections", "Pkg", "REPL", "Random"]
-git-tree-sha1 = "74b498430fffaae060b1bc996d71fd230b3b4ca4"
+git-tree-sha1 = "443ef18f57caffec78ad98726bbf137383766eca"
 uuid = "713c75ef-9fc9-4b05-94a9-213340da978e"
-version = "0.10.37"
+version = "0.10.64"
 
 [[FranklinTemplates]]
 deps = ["LiveServer"]
-git-tree-sha1 = "efe1863c594ff302b85539cbecb2fdb8e91895a3"
+git-tree-sha1 = "20ec221753e0c6bcac845423089b656538ac4eec"
 uuid = "3a985190-f512-4703-8d38-2a7944ed5916"
-version = "0.8.16"
+version = "0.8.22"
 
 [[HTTP]]
-deps = ["Base64", "Dates", "IniFile", "MbedTLS", "NetworkOptions", "Sockets", "URIs"]
-git-tree-sha1 = "1fd26bc48f96adcdd8823f7fc300053faf3d7ba1"
+deps = ["Base64", "Dates", "IniFile", "Logging", "MbedTLS", "NetworkOptions", "Sockets", "URIs"]
+git-tree-sha1 = "14eece7a3308b4d8be910e265c724a6ba51a9798"
 uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3"
-version = "0.9.9"
+version = "0.9.16"
 
 [[IOCapture]]
-deps = ["Logging"]
-git-tree-sha1 = "1868e4e7ad2f93d8de0904d89368c527b46aa6a1"
+deps = ["Logging", "Random"]
+git-tree-sha1 = "f7be53659ab06ddc986428d3a9dcc95f6fa6705a"
 uuid = "b5f81e59-6552-4d32-b1f0-c071b021bf89"
-version = "0.2.1"
+version = "0.2.2"
 
 [[IniFile]]
 deps = ["Test"]
@@ -74,36 +74,42 @@ version = "0.5.0"
 deps = ["Markdown"]
 uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240"
 
-[[JLLWrappers]]
-deps = ["Preferences"]
-git-tree-sha1 = "642a199af8b68253517b80bd3bfd17eb4e84df6e"
-uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210"
-version = "1.3.0"
-
 [[JSON]]
 deps = ["Dates", "Mmap", "Parsers", "Unicode"]
-git-tree-sha1 = "81690084b6198a2e1da36fcfda16eeca9f9f24e4"
+git-tree-sha1 = "8076680b162ada2a031f707ac7b4953e30667a37"
 uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
-version = "0.21.1"
+version = "0.21.2"
+
+[[LibCURL]]
+deps = ["LibCURL_jll", "MozillaCACerts_jll"]
+uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21"
+
+[[LibCURL_jll]]
+deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"]
+uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0"
 
 [[LibGit2]]
-deps = ["Printf"]
+deps = ["Base64", "NetworkOptions", "Printf", "SHA"]
 uuid = "76f85450-5226-5b5a-8eaa-529ad045b433"
 
+[[LibSSH2_jll]]
+deps = ["Artifacts", "Libdl", "MbedTLS_jll"]
+uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8"
+
 [[Libdl]]
 uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb"
 
 [[Literate]]
 deps = ["Base64", "IOCapture", "JSON", "REPL"]
-git-tree-sha1 = "501a1a74a0c825037860d36d87d703e987d39dbc"
+git-tree-sha1 = "d3493acfb9e6aa0cff46b09773fc2342327b0feb"
 uuid = "98b081ad-f1c9-55d3-8b20-4c87d4299306"
-version = "2.8.1"
+version = "2.9.4"
 
 [[LiveServer]]
 deps = ["Crayons", "FileWatching", "HTTP", "Pkg", "Sockets", "Test"]
-git-tree-sha1 = "dc79d9c48d20f3acb5fafed7da5fedb98a506df4"
+git-tree-sha1 = "99990da121ad310875b3c4dba5954eba54df8cfd"
 uuid = "16fef848-5104-11e9-1b77-fb7a48bbb589"
-version = "0.6.5"
+version = "0.7.0"
 
 [[Logging]]
 uuid = "56ddb016-857b-54e1-b83d-db4d58db5568"
@@ -119,18 +125,17 @@ uuid = "739be429-bea8-5141-9913-cc70e7f3736d"
 version = "1.0.3"
 
 [[MbedTLS_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
-git-tree-sha1 = "0eef589dd1c26a3ac9d753fe1a8bcad63f956fa6"
+deps = ["Artifacts", "Libdl"]
 uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1"
-version = "2.16.8+1"
 
 [[Mmap]]
 uuid = "a63ad114-7e13-5084-954f-fe012c677804"
 
+[[MozillaCACerts_jll]]
+uuid = "14a3606d-f60d-562e-9121-12d972cd8159"
+
 [[NetworkOptions]]
-git-tree-sha1 = "ed3157f48a05543cce9b241e1f2815f7e843d96e"
 uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908"
-version = "1.2.0"
 
 [[NodeJS]]
 deps = ["Pkg"]
@@ -145,26 +150,20 @@ version = "1.4.1"
 
 [[Parsers]]
 deps = ["Dates"]
-git-tree-sha1 = "c8abc88faa3f7a3950832ac5d6e690881590d6dc"
+git-tree-sha1 = "ae4bbcadb2906ccc085cf52ac286dc1377dceccc"
 uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0"
-version = "1.1.0"
+version = "2.1.2"
 
 [[Pkg]]
-deps = ["Dates", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "UUIDs"]
+deps = ["Artifacts", "Dates", "Downloads", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"]
 uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
 
-[[Preferences]]
-deps = ["TOML"]
-git-tree-sha1 = "00cfd92944ca9c760982747e9a1d0d5d86ab1e5a"
-uuid = "21216c6a-2e73-6563-6e65-726566657250"
-version = "1.2.2"
-
 [[Printf]]
 deps = ["Unicode"]
 uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7"
 
 [[REPL]]
-deps = ["InteractiveUtils", "Markdown", "Sockets"]
+deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"]
 uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb"
 
 [[Random]]
@@ -182,12 +181,14 @@ uuid = "6462fe0b-24de-5631-8697-dd941f90decc"
 
 [[TOML]]
 deps = ["Dates"]
-git-tree-sha1 = "44aaac2d2aec4a850302f9aa69127c74f0c3787e"
 uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76"
-version = "1.0.3"
+
+[[Tar]]
+deps = ["ArgTools", "SHA"]
+uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e"
 
 [[Test]]
-deps = ["Distributed", "InteractiveUtils", "Logging", "Random"]
+deps = ["InteractiveUtils", "Logging", "Random", "Serialization"]
 uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
 
 [[URIs]]
@@ -201,3 +202,15 @@ uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"
 
 [[Unicode]]
 uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5"
+
+[[Zlib_jll]]
+deps = ["Libdl"]
+uuid = "83775a58-1f1d-513f-b197-d71354ab007a"
+
+[[nghttp2_jll]]
+deps = ["Artifacts", "Libdl"]
+uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d"
+
+[[p7zip_jll]]
+deps = ["Artifacts", "Libdl"]
+uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0"
diff --git a/blog/2020/gsoc/article/1.md b/blog/2020/gsoc/article/1.md
index b0e6a7b..b98e2d5 100644
--- a/blog/2020/gsoc/article/1.md
+++ b/blog/2020/gsoc/article/1.md
@@ -69,7 +69,7 @@ the resolution of dependency.  While this is only applicable to wheels
 (i.e. prebuilt packages), other packaging format only make up less than 20%
 of the downloads (at least on PyPI), and the figure is much less for
 the most popular packages.  Therefore, this optimization alone could make
-[the upcoming backtracking resolver][]'s performance par with the legacy one.
+[the upcoming backtracking resolver]'s performance par with the legacy one.
 
 During the last few years, there has been a lot of effort being poured into
 replacing `pip`'s current resolver that is unable to resolve conflicts.
diff --git a/blog/2020/gsoc/article/3.md b/blog/2020/gsoc/article/3.md
index 9c41b31..175486c 100644
--- a/blog/2020/gsoc/article/3.md
+++ b/blog/2020/gsoc/article/3.md
@@ -15,8 +15,8 @@ and group projects left to be done.  I for sure underestimated the workload
 of these and in the last (and probably next) few days I'm drowning in work
 trying to meet my deadlines.
 
-One project that might be remotely relevant is [cheese-shop][], which tries to
-manage the metadata of packages from the real [Cheese Shop][].  Other than that,
+One project that might be remotely relevant is [cheese-shop], which tries to
+manage the metadata of packages from the real [Cheese Shop].  Other than that,
 schoolwork is draining a lot of my time and I can't remember the last time
 I came up with something new for my GSoC project )-;
 
diff --git a/blog/2020/gsoc/article/4.md b/blog/2020/gsoc/article/4.md
index 43738a7..5a1cf50 100644
--- a/blog/2020/gsoc/article/4.md
+++ b/blog/2020/gsoc/article/4.md
@@ -30,7 +30,7 @@ and rebased, but my `git` skill is far from gud enuff to confidently do it.
 
 Testing this one has been a lot of fun though.  At first, integration tests
 were added as a rerun of the tests for the new resolver, with an additional flag
-to use feature `fast-deps`.  It indeed made me feel guilty towards [Travis][],
+to use feature `fast-deps`.  It indeed made me feel guilty towards [Travis],
 who has to work around 30 minutes more every run. Per Chris Hunt's suggestion,
 in the new PR, I instead write a few functional tests for the area relating
 the most to the feature, namely `pip`'s subcommands `wheel`,
@@ -45,7 +45,7 @@ Why did I say I'm half way there?  With the parallel utilities merged and a way
 to quickly get the list of distribution to be downloaded being really close,
 what left is *only* to figure out a way to properly download them in parallel.
 With no distribution to be added during the download progress, the model of this
-will fit very well with the architecture in [my original proposal][].
+will fit very well with the architecture in [my original proposal].
 A batch downloader can be implemented to track the progress of each download
 and thus report them cleanly as e.g. progress bar or percentage. This is
 the part I am second-most excited about of my GSoC project this summer
@@ -71,7 +71,7 @@ the upcoming Pinephone prototype.  It's one of the first smartphones
 to fully support a GNU/Linux distribution, where one can run desktop apps
 (including proper terminals) as well as traditional services like SSH,
 HTTP server and IPFS node because why not?  Just a few hours ago,
-I pre-ordered the [postmarketOS community edition][] with additional hardware
+I pre-ordered the [postmarketOS community edition] with additional hardware
 for convergence.
 
 If you did not come here for a Pinephone ad, please take my apologies though d-;
diff --git a/blog/2020/gsoc/article/5.md b/blog/2020/gsoc/article/5.md
index de2ef8d..5404089 100644
--- a/blog/2020/gsoc/article/5.md
+++ b/blog/2020/gsoc/article/5.md
@@ -15,7 +15,7 @@ Last Wednesday, `pip` 20.2 was released, delivering the `2020-resolver`
 as well as many other improvements!  I was lucky to be able
 to get the `fast-deps` feature to be included as part of the release.
 A brief description of this *experimental* feature as well as testing
-instruction can be found on [Python Discuss][].
+instruction can be found on [Python Discuss].
 
 The public exposure of the feature also remind me of some further
 {{pip 8681 optimization}} to make on {{pip 8670 "the lazy wheel"}}.
diff --git a/blog/2020/gsoc/article/7.md b/blog/2020/gsoc/article/7.md
index 58d8d33..c574865 100644
--- a/blog/2020/gsoc/article/7.md
+++ b/blog/2020/gsoc/article/7.md
@@ -41,7 +41,7 @@ $ pip --use-feature=2020-resolver --use-feature=fast-deps \
    --no-cache-dir download {requirement}  # fast-deps
 ```
 
-In the first test, I used [axuy][] and obtained the following results
+In the first test, I used [axuy] and obtained the following results
 
 | legacy-resolver | 2020-resolver | fast-deps |
 | --------------- | ------------- | --------- |
@@ -71,7 +71,7 @@ which are apparently more expensive than actual data transmission on my network.
 
 ### Large Distribution
 
-In this test, I used [TensorFlow][] as the requirement and obtained
+In this test, I used [TensorFlow] as the requirement and obtained
 the following figures:
 
 | legacy-resolver | 2020-resolver | fast-deps |
diff --git a/blog/2020/gsoc/checkin/1.md b/blog/2020/gsoc/checkin/1.md
index a362f28..8c3c680 100644
--- a/blog/2020/gsoc/checkin/1.md
+++ b/blog/2020/gsoc/checkin/1.md
@@ -7,7 +7,7 @@ date = Date(2020, 6, 1)
 # First Check-In
 
 Hi everyone, I am McSinyx, a Vietnamese undergraduate student
-who loves [free software][].  This summer I am working with
+who loves [free software].  This summer I am working with
 the maintainers and the contributors of `pip` to make
 the package manager {{pip 825 "download in parallel"}}.
 
@@ -16,7 +16,7 @@ the package manager {{pip 825 "download in parallel"}}.
 Aside from bonding with `pip`'s maintainers and contributors as well as
 with my mentors, I was also experimenting on the theoretical and technical
 obstacles blocking this GSoC project.  Pradyun Gedam (a mentor of mine)
-suggested making [a proof of concept][] to determine if parallel downloading
+suggested making [a proof of concept] to determine if parallel downloading
 can play nicely with ResolveLib_'s abstraction and we are reviewing it
 together.  On the technical side, we `pip`'s committers are exploring
 {{pip 8169 "available options for parallelization"}} and I made an attempt to
diff --git a/blog/2020/gsoc/checkin/2.md b/blog/2020/gsoc/checkin/2.md
index e59cac2..288f737 100644
--- a/blog/2020/gsoc/checkin/2.md
+++ b/blog/2020/gsoc/checkin/2.md
@@ -21,7 +21,7 @@ Not as much I wished, apparently (-:
   The amount of tests failing due to this was way beyond my imagination,
   but I got functional tests for `pip install` and unit tests passing now!
 * {{pip 8442 "Mocking up a working partial wheel download during
-  dependency resolution"}} for [the new resolver][].
+  dependency resolution"}} for [the new resolver].
 
 ## Did I get stuck anywhere?
 
diff --git a/blog/2020/gsoc/checkin/3.md b/blog/2020/gsoc/checkin/3.md
index 32a94ab..290d5b8 100644
--- a/blog/2020/gsoc/checkin/3.md
+++ b/blog/2020/gsoc/checkin/3.md
@@ -26,7 +26,7 @@ Not much, actually )-:
 
 ## Did I get stuck anywhere?
 
-Not exactly, since I didn't do much d-;  [Many of my PRs][] are stalling though.
+Not exactly, since I didn't do much d-;  [Many of my PRs] are stalling though.
 On one hand the maintainers of `pip` are all volunteers working in
 their free time, on the other hand I don't think I have tried hard enough
 to get their attention on my PRs.
diff --git a/blog/2020/gsoc/checkin/4.md b/blog/2020/gsoc/checkin/4.md
index 417db58..c2c058c 100644
--- a/blog/2020/gsoc/checkin/4.md
+++ b/blog/2020/gsoc/checkin/4.md
@@ -7,7 +7,7 @@ date = Date(2020, 7, 13)
 # Fourth Check-In
 
 Hello there! I'm having my second year's last exam tomorrow,
-but it [feels like summer][] already!  I've been finalizing quite a few things
+but it [feels like summer] already!  I've been finalizing quite a few things
 to get them ready for pip 20.2b2.
 
 ## What did I do last week?
diff --git a/blog/conseq.md b/blog/conseq.md
index c4d98ad..27dada3 100644
--- a/blog/conseq.md
+++ b/blog/conseq.md
@@ -12,7 +12,7 @@ whose domain is a subset of the set of all integers.  Such sequences will be
 using functional programming paradigm, where functions are more similar
 to the ones in math (in contrast to imperative style with side effects
 confusing to inexperenced coders).  The idea is taken from [subsection 3.5.2
-of SICP][] and adapted to Python, which, compare to Scheme, is significantly
+of SICP] and adapted to Python, which, compare to Scheme, is significantly
 more popular: Python is pre-installed on almost every modern Unix-like system,
 namely macOS, GNU/Linux and the \*BSDs; and even at MIT, the new 6.01 in Python
 has recently replaced the legendary 6.001 (SICP).
@@ -37,12 +37,12 @@ can be imported directly from ``itertools``:
 ```
 
 To open a Python emulator, simply lauch your terminal and run `python`.
-If that is somehow still too struggling, navigate to [the interactive shell][]
+If that is somehow still too struggling, navigate to [the interactive shell]
 on Python.org.
 
 *Let's get it started* with somethings everyone hates: recursively defined
 sequences, e.g. the famous Fibonacci ($F_n = F_{n-1} + F_{n-2}$,
-$F_1 = 1$ and $F_0 = 0$).  Since [Python does not support][] [tail recursion][],
+$F_1 = 1$ and $F_0 = 0$).  Since [Python does not support] [tail recursion],
 it's generally **not** a good idea to define anything recursively (which is,
 ironically, the only trivial *functional* solution in this case)
 but since we will only evaluate the first few terms
@@ -82,7 +82,7 @@ It is noticable that the elements having been iterated through (using `next`)
 will disappear forever in the void (oh no!), but that is the cost we are
 willing to pay to save some memory, especially when we need to evaluate a
 member of (arbitrarily) large index to estimate the sequence's limit.
-One case in point is estimating a definite integral using [left Riemann sum][].
+One case in point is estimating a definite integral using [left Riemann sum].
 
 ```python
 def integral(f, a, b):
@@ -123,8 +123,8 @@ the result is somewhat acceptable:
 Since we are comfortable with sequence of sums, let's move on to sums of
 a sequence, which are called series.  For estimation, again, we are going to
 make use of infinite sequences of partial sums, which are implemented as
-`itertools.accumulate` by thoughtful Python developers.  [Geometric][] and
-[p-series][] can be defined as follow:
+`itertools.accumulate` by thoughtful Python developers.  [Geometric] and
+[p-series] can be defined as follow:
 
 ```python
 from itertools import accumulate as partial_sums
@@ -161,7 +161,7 @@ We can observe that it takes quite a lot of steps to get the precision we would
 generally expect ($s_{11}$ is only precise to the first decimal place;
 second decimal places: $s_{101}$; third: $s_{2304}$).
 Luckily, many techniques for series acceleration are available.
-[Shanks transformation][] for instance, can be implemented as follow:
+[Shanks transformation] for instance, can be implemented as follow:
 
 ```python
 from itertools import islice, tee
@@ -176,7 +176,7 @@ the anonymous function $(x, y, z) \mapsto \frac{xz - y^2}{x + z - 2y}$
 and `map` is a higher order function applying that function to
 respective elements of subsequences starting from index 1, 2 and 3 of `seq`.
 On Python 2, one should import `imap` from `itertools` to get the same
-[lazy][] behavior of `map` on Python 3.
+[lazy] behavior of `map` on Python 3.
 
 ```python
 >>> s = shanks(p_series(2))
@@ -251,7 +251,7 @@ def power_series(c, start=0, a=0):
 ```
 
 We can use this to compute functions that can be written as
-[Taylor series][]:
+[Taylor series]:
 
 ```python
 from math import factorial
diff --git a/blog/nopoo.md b/blog/nopoo.md
index 67582db..9ed15ac 100644
--- a/blog/nopoo.md
+++ b/blog/nopoo.md
@@ -9,7 +9,7 @@ date = Date(2021, 5, 23)
 Late April 2021, Việt Nam witnessed the beginning of the fourth wave
 of SARS-CoV-2 after a few months without any community case.  Soon enough,
 students are told to not come to their schools' campus.  This happens
-when I was an intern at [USTH][] [ICTLab][], so I was advised to work remotely
+when I was an intern at [USTH] [ICTLab], so I was advised to work remotely
 as well.  I asked for this at the start of the internship but my supervisor
 was rather reluctant, since there was multiple interns working together
 and communication in person might be most effective.  Working from home
@@ -23,7 +23,7 @@ was beneficial to me in a few important ways:
 Thanks to the last point, I also sweat a lot less and as I no longer
 had to maintain a public appearance, I decided to give `#nopoo` a try.
 I had been aware of such practice for quite a few years, but had never
-thought of actually implementing it until I saw [Johnny Harris' vlog][],
+thought of actually implementing it until I saw [Johnny Harris' vlog],
 which I can only describe as *intriguing*.  TL;DW the journalist
 maintained that generally shampoos washed away *his* scalp's natural oil,
 and in combination with other hair products made the scalp itchy and unhealthy.
diff --git a/blog/threa.md b/blog/threa.md
index 11fc051..cbcc621 100644
--- a/blog/threa.md
+++ b/blog/threa.md
@@ -8,8 +8,8 @@ date = Date(2021, 7, 3)
 
 !!! note "A word of protest:"
 
-    This was intended to be presented in [The Raku Conference][],
-    however the organizers insisted on using [Zoom][] and [Skype][],
+    This was intended to be presented in [The Raku Conference],
+    however the organizers insisted on using [Zoom] and [Skype],
     which are privacy invasive platforms running on proprietary software
     and shadily managed.
 
@@ -30,16 +30,16 @@ For the first point, I have to be able to choose from the history
 by pressing a few keystrokes.  Having to touch the mouse during
 writing sessions is unacceptable.  The menu dropping down from the systray
 is also undesirable because I have a multi-monitor setup.  This narrows down
-to only one plausible option: [Diodon][], which I having been using on Debian
+to only one plausible option: [Diodon], which I having been using on Debian
 for at least two years.  However, as I was migrating to NixOS earlier
 last month, [I was unable to package it for Nix][126190].
 
-Naturally, I went looking for [alternatives][], most of which I had
-tried before and did not satisfy my requirements.  [clipmenu][] got
+Naturally, I went looking for [alternatives], most of which I had
+tried before and did not satisfy my requirements.  [clipmenu] got
 my attention however: it was made to work with dmenu(-compliant launchers),
-which I had a rather nice experience with in [Sxmo][] on my [PinePhone][].
-However, I use [awesome][] on my workstation and its widget toolkit covers
-my launcher and menu need perfectly.  I don't need [dmenu][] and do not
+which I had a rather nice experience with in [Sxmo] on my [PinePhone].
+However, I use [awesome] on my workstation and its widget toolkit covers
+my launcher and menu need perfectly.  I don't need [dmenu] and do not
 wish to spend time configuring and theming it.  Plus, the architecture
 of dmenu scripts and awesome widgets vastly differs: while awesome
 executes the input programs, dmenu is called from the scripts.
@@ -56,7 +56,7 @@ fluent in.[^1]  Its idea is brilliant however:
 >    it writes them out to the cache directory
 >    and an index using a hash as the filename.
 
-I later translated [clipnotify][] to [Zig][][^2] and called it [clipbuzz][].[^3]
+I later translated [clipnotify] to [Zig][^2] and called it [clipbuzz].[^3]
 From clipbuzz's usage,
 
 ```sh
@@ -89,8 +89,8 @@ K
 U
 ```
 
-Wait, is that a sign?  We must use [Raku][] to implement `$project` then…
-Speaking of `$project`, I planned to use it with awesome and [vicious][]
+Wait, is that a sign?  We must use [Raku] to implement `$project` then…
+Speaking of `$project`, I planned to use it with awesome and [vicious]
 so let's call it something brutal, like a *cutting board*, which is *thớt*
 in Vietnamese, an Internet slang for *thread*.  Cool, now we have
 the daemon name, and conventionally the client shall be *threac*,
@@ -112,7 +112,7 @@ while run 'clipbuzz' {
 }
 ```
 
-Out of all languages I know, this is by far the simplest way to [run][]
+Out of all languages I know, this is by far the simplest way to [run]
 an external program.  Most would require one to import something
 or do something with the call's return value, and don't even get me start
 on POSIX *fork* and *exec* model.
@@ -125,7 +125,7 @@ my $selection = qx/xclip -out/;
 ```
 
 Remember when I said Raku can seamlessly interact with external programs?
-[qx][] is how you capture their standard output, it is really that simple.
+[qx] is how you capture their standard output, it is really that simple.
 But wait, which selection is that?  No worries, `xclip` supports both
 primary and clipboard:
 
@@ -198,8 +198,8 @@ but opening parenthesis *after* the function name always confuses me,
 especially when nested.
 
 As you might have guessed, `given` is another statement modifier
-setting the [topic variable][] that is particularly useful
-in [pointfree programming][], where regular expressions (e.g. `/^\w\w+$/`)
+setting the [topic variable] that is particularly useful
+in [pointfree programming], where regular expressions (e.g. `/^\w\w+$/`)
 are matched against directly and methods are called without specifying
 the object.  Raku is also a weakly-typed language: `.comb.unique` (a list
 of unique characters) is coerced into an integer when compared to one
@@ -339,8 +339,8 @@ awful.menu{items = items, theme = {width = 911}}:show()
 
 ## Conclusion
 
-Through writing the clipboard manager [threa][], which is released
-under [GNU GPLv3+][] on [SourceHut][], we have discovered a few features
+Through writing the clipboard manager [threa], which is released
+under [GNU GPLv3+] on [SourceHut], we have discovered a few features
 of Raku that make it a great *scripting* language:
 
 * Out-of-box CLI support:
diff --git a/index.md b/index.md
index a234173..a7e367f 100644
--- a/index.md
+++ b/index.md
@@ -1,20 +1,20 @@
 # About Me
 
-Hi!  [My name is][] Nguyễn Gia Phong and I'm a Vietnamese [free software][]
+Hi!  [My name is] Nguyễn Gia Phong and I'm a Vietnamese [free software]
 enthusiast.  You can find me under my Internet alias McSinyx (or CnX for short)
-in the [Fediverse][]:
+in the [Fediverse]:
 
-* Pleroma: [cnx@nixnet.social][]
-* PeerTube: [cnx@video.hardlimit.com][]
-* SourceHut: [sr.ht/~cnx][]
-* Email (and XMPP): [mcsinyx@disroot.org][][^pgp]
-* Matrix: [@cnx:halogen.city][]
+* Pleroma: [cnx@nixnet.social]
+* PeerTube: [cnx@video.hardlimit.com]
+* SourceHut: [sr.ht/~cnx]
+* Email (and XMPP): [mcsinyx@disroot.org][^pgp]
+* Matrix: [@cnx:halogen.city]
 
 I am generally interested in programming languages, concurrency,
 reproducibility and decentralization.  In meatspace I also like
 cooking, dogs (not necessarily mutually exclusive) and urban music.
 
-[^pgp]: PGP: [27148B2C06A2224B][], also on [OpenPGP][]
+[^pgp]: PGP: [27148B2C06A2224B], also on [OpenPGP]
 
 [My name is]: https://www.youtube.com/watch?v=LDj8kkVwisY
 [free software]: https://www.gnu.org/philosophy/free-sw.html
diff --git a/package-lock.json b/package-lock.json
index e949871..cc702d9 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -3,9 +3,9 @@
   "lockfileVersion": 1,
   "dependencies": {
     "highlight.js": {
-      "version": "10.7.2",
-      "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.2.tgz",
-      "integrity": "sha512-oFLl873u4usRM9K63j4ME9u3etNF0PLiJhSQ8rdfuL51Wn3zkD6drf9ZW0dOzjnZI22YYG24z30JcmfCZjMgYg=="
+      "version": "10.7.3",
+      "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz",
+      "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A=="
     }
   }
 }
diff --git a/package.json b/package.json
index c9b9bc2..0ced870 100644
--- a/package.json
+++ b/package.json
@@ -1,5 +1,5 @@
 {
   "dependencies": {
-    "highlight.js": "^10.7.2"
+    "highlight.js": "^10.7.3"
   }
 }
diff --git a/works.md b/works.md
index 4372963..0553dcc 100644
--- a/works.md
+++ b/works.md
@@ -7,7 +7,7 @@
 ### Floating Cheeses
 
 The interplanetary wheels (or [floating cheeses][ipwhl]) are platform-unique,
-single-versioned Python binary distributions backed by [IPFS][]
+single-versioned Python binary distributions backed by [IPFS]
 for security and reproducibility.
 
 ### Nix Packages
@@ -19,29 +19,29 @@ that can be installed with the Nix package manager.
 
 ### threa
 
-[threa][] is a X11 clipboard manager written in [Raku][].  It synchronizes
+[threa] is a X11 clipboard manager written in [Raku].  It synchronizes
 clipboard and primary selection and stores the history as separate files
 to facilitate manipulation by third-party tools.
 
 ### rsskey
 
-[rsskey][] is a simple script for mirroring [RSS][] or [Atom][] feeds
-on [Misskey][].  It is known for replicating Richard Stallman's
-political notes to [rms@birb.space][].
+[rsskey] is a simple script for mirroring [RSS] or [Atom] feeds
+on [Misskey].  It is known for replicating Richard Stallman's
+political notes to [rms@birb.space].
 
 ### comp
 
-[Curses Omni Media Player][comp] is a [mpv][] front-end using curses.
+[Curses Omni Media Player][comp] is a [mpv] front-end using curses.
 
 ![comp screenshot](/assets/comp.png)
 
 It has basic media player functions and can to extract playlists
-from multiple sources such as media sites supported by [youtube-dl][],
+from multiple sources such as media sites supported by [youtube-dl],
 local and direct URL to video/audio and its own JSON playlist format.
 
 ### pip
 
-[pip][] is a package installer for Python.  [Summer 2020](/blog/2020/gsoc),
+[pip] is a package installer for Python.  [Summer 2020](/blog/2020/gsoc),
 I worked on improving its new resolver's networking performance.
 The final result was not quite satisfying, but I got to meet
 some really nice and talented people (-;
@@ -50,7 +50,7 @@ some really nice and talented people (-;
 
 ### Loca
 
-[Loca][] is a collection of local locations implementation
+[Loca] is a collection of local locations implementation
 in multiple programming languages.
 
 ### Palace
@@ -58,24 +58,24 @@ in multiple programming languages.
 [Pythonic Audio Library and Codecs Environment][palace] provides
 common higher-level API for audio rendering using OpenAL:
 
-* 3D positional rendering, with [HRTF][] support for stereo systems
+* 3D positional rendering, with [HRTF] support for stereo systems
 * Environmental effects: reverb, atmospheric air absorption,
   sound occlusion and obstruction
 * Out-of-the-box codec support: FLAC, MP3, Ogg Vorbis, Opus, WAV, AIFF, etc.
 
-Palace wraps around the C++ interface [alure][] using [Cython][] for a safe and
+Palace wraps around the C++ interface [alure] using [Cython] for a safe and
 convenient interface with type hinting, data descriptors and context managers,
 following {{pep 8 naming-conventions}} (`PascalCase.snake_case`).
 
 ### Tzigame
 
-[Tzigame][] is a collection of libraries for video game development in [Zig][].
+[Tzigame] is a collection of libraries for video game development in [Zig].
 
 ## Video Games
 
 ### Brutal Maze
 
-[Brutal Maze][] is a thrilling shoot ‘em up game with minimalist art style.
+[Brutal Maze] is a thrilling shoot ‘em up game with minimalist art style.
 
 [![Brutal Maze screenshot](/assets/brutalmaze.png)][brutalmaze-recplayer]
 
@@ -87,14 +87,14 @@ the more will show up and our hero will get weaker when wounded.
 
 ### Black Shades
 
-I am maintaining [Black Shades][], a psychic bodyguard FPS written by
+I am maintaining [Black Shades], a psychic bodyguard FPS written by
 David Rosen.  In Black Shades you control a psychic bodyguard, and try to
 protect the VIP from a horde of zombies, snipers and other assorted
 would-be assassins.
 
 ### Axuy
 
-[Axuy][] is a minimalist peer-to-peer first-person shooter.
+[Axuy] is a minimalist peer-to-peer first-person shooter.
 
 ![Axuy screenshot](/assets/axuy.png)
 
@@ -103,26 +103,26 @@ in P2P networking as well as 3D game development.
 
 ### Slacker
 
-[Slacker][] is a clone/parody of the popular arcade game [Stacker][].
+[Slacker] is a clone/parody of the popular arcade game [Stacker].
 
 ## Plugins
 
 ### Vicious
 
-[Vicious][] is a modular widget library for window managers, but mostly catering
-to users of the [awesome window manager][].  It was derived from the old
+[Vicious] is a modular widget library for window managers, but mostly catering
+to users of the [awesome window manager].  It was derived from the old
 *wicked* widget library, and has some of the old *wicked* widget types,
 a few of them rewritten, and a good number of new ones.
 
 Vicious widget types are a framework for creating your own widgets.
 Vicious contains modules that gather data about your system,
 and a few *awesome* helper functions that make it easier to register timers,
-suspend widgets and so on.  Vicious doesn't depend on any third party [Lua][]
+suspend widgets and so on.  Vicious doesn't depend on any third party [Lua]
 library, but may depend on additional system utilities.
 
 ### Alful
 
-[Alful][] is a six-line extension making Firefox Quantum open all windows
+[Alful] is a six-line extension making Firefox Quantum open all windows
 in fullscreen to hide the toolbars in windowed mode
 (`full-screen-api.ignore-widgets = true`).  All credits go to tazeat,
 who wrote the original version and suggested the change
@@ -137,12 +137,12 @@ I am maintaining [Octave syntax and indentation support for Vim][vim-octave].
 ### Simplified Vietnamese Keymaps
 
 I am the author of the [simplified Telex and VNI keymaps][tevnex]
-for [Vim][vim-tevnex] and [ibus-table][].
+for [Vim][vim-tevnex] and [ibus-table].
 
 ### Vietnamese Translation of Flare
 
 I have translated the [Free/Libre Action Roleplaying Engine][flare] \(yep,
-just the engine) to Vietnamese.  The translation of the [Empyrean Campaign][]
+just the engine) to Vietnamese.  The translation of the [Empyrean Campaign]
 is work in progress---admittedly it does not get enough priority lately.
 
 ## Themes
@@ -150,7 +150,7 @@ is work in progress---admittedly it does not get enough priority lately.
 ### Add-Waiter
 
 Add-Waiter is a [GTK+ 2][add-waiter-gtk2] and [xfwm4][add-waiter-xfwm4] clone
-of the dark variant of the default GTK+ 3 theme [Adwaita][].  It was created
+of the dark variant of the default GTK+ 3 theme [Adwaita].  It was created
 using screenshots of the original theme on GTK+ 3.16.
 
 ![Add-Waiter screenshot](/assets/add-waiter.png)
@@ -160,7 +160,7 @@ of openDesktop.org, such information is no longer available on the website.
 
 ### MathieWD
 
-[MathieWD][] is a flat and clean xfwm4 theme that uses colors from
+[MathieWD] is a flat and clean xfwm4 theme that uses colors from
 the active GTK+ theme.  It is inspired by elementary mathematical symbols.
 
 ![MathieWD screenshot](/assets/mathiewd.png)
@@ -170,21 +170,21 @@ openDesktop.org, such information is no longer available on the website.
 
 ### Miscellaneous
 
-Other themes and configurations are cooperated into my personal [dotfiles][].
+Other themes and configurations are cooperated into my personal [dotfiles].
 
 ## Services
 
 ### Acanban
 
-[Acanban][] is a work-in-progress collaboration platform for students
+[Acanban] is a work-in-progress collaboration platform for students
 and supervisors during group projects and internships.  It is built
-on the [ASGI][] framework [Quart][] and uses [Trio][] for concurrency
-when interacting with persistency layers [RethinkDB][] and [IPFS][].
+on the [ASGI] framework [Quart] and uses [Trio] for concurrency
+when interacting with persistency layers [RethinkDB] and [IPFS].
 
 ### ComLake
 
-I worked as an intern at [USTH][] [ICTLab][] on a data lake's
-[core API and workers][].  It also uses [IPFS][] but [PostgreSQL][]
+I worked as an intern at [USTH] [ICTLab] on a data lake's
+[core API and workers].  It also uses [IPFS] but [PostgreSQL]
 was picked for database.
 
 [ipwhl]: https://man.sr.ht/~cnx/ipwhl