commit 43b896040059a55c2447ab74b585ae498c71531f
parent 520ec6267307bee6560c413b5ec11363d56ed09a
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Thu, 17 Aug 2023 17:28:21 +0200
add more tests
Diffstat:
14 files changed, 1819 insertions(+), 0 deletions(-)
diff --git a/realworld/cm_json2tsv.html b/realworld/cm_json2tsv.html
@@ -0,0 +1,202 @@
+<!DOCTYPE html>
+<html dir="ltr" lang="en">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width" />
+ <meta name="keywords" content="json2tsv, JSON, tsv, TAB-Separated Value Format" />
+ <meta name="description" content="json2tsv: a JSON to TAB-Separated Value converter" />
+ <meta name="author" content="Hiltjo" />
+ <meta name="generator" content="Static content generated using saait: https://codemadness.org/saait.html" />
+ <title>json2tsv: a JSON to TSV converter - Codemadness</title>
+ <link rel="stylesheet" href="style.css" type="text/css" media="screen" />
+ <link rel="stylesheet" href="print.css" type="text/css" media="print" />
+ <link rel="alternate" href="atom.xml" type="application/atom+xml" title="Codemadness Atom Feed" />
+ <link rel="alternate" href="atom_content.xml" type="application/atom+xml" title="Codemadness Atom Feed with content" />
+ <link rel="icon" href="/favicon.png" type="image/png" />
+</head>
+<body>
+ <nav id="menuwrap">
+ <table id="menu" width="100%" border="0">
+ <tr>
+ <td id="links" align="left">
+ <a href="index.html">Blog</a> |
+ <a href="/git/" title="Git repository with some of my projects">Git</a> |
+ <a href="/releases/">Releases</a> |
+ <a href="gopher://codemadness.org">Gopherhole</a>
+ </td>
+ <td id="links-contact" align="right">
+ <span class="hidden"> | </span>
+ <a href="/donate/">Donate</a> |
+ <a href="feeds.html">Feeds</a> |
+ <a href="pgp.asc">PGP</a> |
+ <a href="mailto:hiltjo@AT@codemadness.DOT.org">Mail</a>
+ </td>
+ </tr>
+ </table>
+ </nav>
+ <hr class="hidden" />
+ <main id="mainwrap">
+ <div id="main">
+ <article>
+<header>
+ <h1>json2tsv: a JSON to TSV converter</h1>
+ <p>
+ <strong>Last modification on </strong> <time>2021-09-25</time>
+ </p>
+</header>
+
+<p>Convert JSON to TSV or separated output.</p>
+<p>json2tsv reads JSON data from stdin. It outputs each JSON type to a TAB-
+Separated Value format per line by default.</p>
+<h2>TAB-Separated Value format</h2>
+<p>The output format per line is:</p>
+<pre><code>nodename<TAB>type<TAB>value<LF>
+</code></pre>
+<p>Control-characters such as a newline, TAB and backslash (\n, \t and \) are
+escaped in the nodename and value fields. Other control-characters are
+removed.</p>
+<p>The type field is a single byte and can be:</p>
+<ul>
+<li>a for array</li>
+<li>b for bool</li>
+<li>n for number</li>
+<li>o for object</li>
+<li>s for string</li>
+<li>? for null</li>
+</ul>
+<p>Filtering on the first field "nodename" is easy using awk for example.</p>
+<h2>Features</h2>
+<ul>
+<li>Accepts all <strong>valid</strong> JSON.</li>
+<li>Designed to work well with existing UNIX programs like awk and grep.</li>
+<li>Straightforward and not much lines of code: about 475 lines of C.</li>
+<li>Few dependencies: C compiler (C99), libc.</li>
+<li>No need to learn a new (meta-)language for processing data.</li>
+<li>The parser supports code point decoding and UTF-16 surrogates to UTF-8.</li>
+<li>It does not output control-characters to the terminal for security reasons by
+default (but it has a -r option if needed).</li>
+<li>On OpenBSD it supports <a href="https://man.openbsd.org/pledge">pledge(2)</a> for syscall restriction:
+pledge("stdio", NULL).</li>
+<li>Supports setting a different field separator and record separator with the -F
+and -R option.</li>
+</ul>
+<h2>Cons</h2>
+<ul>
+<li>For the tool there is additional overhead by processing and filtering data
+from stdin after parsing.</li>
+<li>The parser does not do complete validation on numbers.</li>
+<li>The parser accepts some bad input such as invalid UTF-8
+(see <a href="https://tools.ietf.org/html/rfc8259#section-8.1">RFC8259 - 8.1. Character Encoding</a>).
+json2tsv reads from stdin and does not do assumptions about a "closed
+ecosystem" as described in the RFC.</li>
+<li>The parser accepts some bad JSON input and "extensions"
+(see <a href="https://tools.ietf.org/html/rfc8259#section-9">RFC8259 - 9. Parsers</a>).</li>
+<li>Encoded NUL bytes (\u0000) in strings are ignored.
+(see <a href="https://tools.ietf.org/html/rfc8259#section-9">RFC8259 - 9. Parsers</a>).
+"An implementation may set limits on the length and character contents of
+strings."</li>
+<li>The parser is not the fastest possible JSON parser (but also not the
+slowest). For example: for ease of use, at the cost of performance all
+strings are decoded, even though they may be unused.</li>
+</ul>
+<h2>Why Yet Another JSON parser?</h2>
+<p>I wanted a tool that makes parsing JSON easier and work well from the shell,
+similar to <a href="https://stedolan.github.io/jq/">jq</a>.</p>
+<p>sed and grep often work well enough for matching some value using some regex
+pattern, but it is not good enough to parse JSON correctly or to extract all
+information: just like parsing HTML/XML using some regex is not good (enough)
+or a good idea :P.</p>
+<p>I didn't want to learn a new specific <a href="https://stedolan.github.io/jq/manual/#Builtinoperatorsandfunctions">meta-language</a> which jq has and wanted
+something simpler.</p>
+<p>While it is more efficient to embed this query language for data aggregation,
+it is also less simple. In my opinion it is simpler to separate this and use
+pattern-processing by awk or an other filtering/aggregating program.</p>
+<p>For the parser, there are many JSON parsers out there, like the efficient
+<a href="https://github.com/zserge/jsmn">jsmn parser</a>, however a few parser behaviours I want to have are:</p>
+<ul>
+<li>jsmn buffers data as tokens, which is very efficient, but also a bit
+annoying as an API as it requires another layer of code to interpret the
+tokens.</li>
+<li>jsmn does not handle decoding strings by default. Which is very efficient
+if you don't need parts of the data though.</li>
+<li>jsmn does not keep context of nested structures by default, so may require
+writing custom utility functions for nested data.</li>
+</ul>
+<p>This is why I went for a parser design that uses a single callback per "node"
+type and keeps track of the current nested structure in a single array and
+emits that.</p>
+<h2>Clone</h2>
+<pre><code>git clone git://git.codemadness.org/json2tsv
+</code></pre>
+<h2>Browse</h2>
+<p>You can browse the source-code at:</p>
+<ul>
+<li><a href="https://git.codemadness.org/json2tsv/">https://git.codemadness.org/json2tsv/</a></li>
+<li><a href="gopher://codemadness.org/1/git/json2tsv">gopher://codemadness.org/1/git/json2tsv</a></li>
+</ul>
+<h2>Download releases</h2>
+<p>Releases are available at:</p>
+<ul>
+<li><a href="https://codemadness.org/releases/json2tsv/">https://codemadness.org/releases/json2tsv/</a></li>
+<li><a href="gopher://codemadness.org/1/releases/json2tsv">gopher://codemadness.org/1/releases/json2tsv</a></li>
+</ul>
+<h2>Build and install</h2>
+<pre><code>$ make
+# make install
+</code></pre>
+<h2>Examples</h2>
+<p>An usage example to parse posts of the JSON API of <a href="https://www.reddit.com/">reddit.com</a> and format them
+to a plain-text list using awk:</p>
+<pre><code>#!/bin/sh
+curl -s -H 'User-Agent:' 'https://old.reddit.com/.json?raw_json=1&limit=100' | \
+json2tsv | \
+awk -F '\t' '
+function show() {
+ if (length(o["title"]) == 0)
+ return;
+ print n ". " o["title"] " by " o["author"] " in r/" o["subreddit"];
+ print o["url"];
+ print "";
+}
+$1 == ".data.children[].data" {
+ show();
+ n++;
+ delete o;
+}
+$1 ~ /^\.data\.children\[\]\.data\.[a-zA-Z0-9_]*$/ {
+ o[substr($1, 23)] = $3;
+}
+END {
+ show();
+}'
+</code></pre>
+<h2>References</h2>
+<ul>
+<li>Sites:
+<ul>
+<li><a href="http://seriot.ch/parsing_json.php">seriot.ch - Parsing JSON is a Minefield</a></li>
+<li><a href="https://github.com/nst/JSONTestSuite">A comprehensive test suite for RFC 8259 compliant JSON parsers</a></li>
+<li><a href="https://json.org/">json.org</a></li>
+</ul>
+</li>
+<li>Current standard:
+<ul>
+<li><a href="https://tools.ietf.org/html/rfc8259">RFC8259 - The JavaScript Object Notation (JSON) Data Interchange Format</a></li>
+<li><a href="https://www.ecma-international.org/publications/standards/Ecma-404.htm">Standard ECMA-404 - The JSON Data Interchange Syntax (2nd edition (December 2017)</a></li>
+</ul>
+</li>
+<li>Historic standards:
+<ul>
+<li><a href="https://tools.ietf.org/html/rfc7159">RFC7159 - The JavaScript Object Notation (JSON) Data Interchange Format (obsolete)</a></li>
+<li><a href="https://tools.ietf.org/html/rfc7158">RFC7158 - The JavaScript Object Notation (JSON) Data Interchange Format (obsolete)</a></li>
+<li><a href="https://tools.ietf.org/html/rfc4627">RFC4627 - The JavaScript Object Notation (JSON) Data Interchange Format (obsolete, original)</a></li>
+</ul>
+</li>
+</ul>
+
+ </article>
+ </div>
+ </main>
+</body>
+</html>
diff --git a/realworld/lobsters.html b/realworld/lobsters.html
@@ -0,0 +1,1467 @@
+<!doctype html>
+<html
+ lang="en"
+ class='color-scheme-system'
+>
+<head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/apple-touch-icon.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/apple-touch-icon.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/apple-touch-icon-144.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/apple-touch-icon-144.png" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <meta name="referrer" content="always" />
+ <meta name="theme-color" content="#AC130D" />
+ <link rel="shortcut icon" href="/favicon.ico" />
+ <title>Lobsters</title>
+ <link rel="stylesheet" href="/assets/application-6199295a18f0aaca129e5f43a85732f0bb12b865954d74498dedd958fa14bb53.css" media="all" />
+ <meta name="csrf-param" content="authenticity_token" />
+<meta name="csrf-token" content="Xxb5kz_Iwjq-SWV8biCFaUbEqB6OdZ0TaXWaGdNSG8m6yr7Ozj5aVH6CKa1SOqrKhsJYf5iX6zunrEdwX9JhFA" />
+ <link rel="alternate" type="application/rss+xml"
+ title="RSS 2.0" href="/rss" />
+ <link rel="alternate" type="application/rss+xml"
+ title="Comments - RSS 2.0"
+ href="/comments.rss" />
+</head>
+<body data-username=''>
+ <header id="nav">
+ <a id="logo" style="background-color: #520000;" href="/" title="Lobsters (Current traffic: 1%)"></a>
+
+ <div class="navholder">
+ <nav class="links">
+ <a href="/active">Active</a>
+ <a href="/recent">Recent</a>
+ <a href="/comments">Comments</a>
+
+
+ <a href="/search">Search</a>
+
+
+ <a class="corner" href="/login">Login</a>
+ </nav>
+ </div>
+
+ <nav class="corner">
+ <a class="corner" href="/login">Login</a>
+ </nav>
+ </header>
+
+
+ <div id="inside">
+
+
+
+
+<ol class="stories list ">
+ <li id="story_bqcmxg" data-shortid="bqcmxg"
+class="story
+
+
+
+
+
+
+">
+<div class="story_liner h-entry">
+ <div class="voters">
+ <a class="upvoter" href="/login"></a>
+ <div class="score">65</div>
+ </div>
+ <div class="details">
+ <span role="heading" aria-level="1" class="link h-cite u-repost-of">
+ <a class="u-url" href="https://bits.debian.org/2023/08/debian-turns-30.html" rel="ugc noreferrer">Debian Celebrates 30 years</a>
+ </span>
+ <span class="tags">
+ <a class="tag tag_linux" title="Linux" href="/t/linux">linux</a>
+ </span>
+ <a class="domain" href="/domains/bits.debian.org">bits.debian.org</a>
+
+
+
+ <div class="byline">
+ <a href="/u/5d22b"><img srcset="/avatars/5d22b-16.png 1x, /avatars/5d22b-32.png 2x" class="avatar" alt="5d22b avatar" loading="lazy" decoding="async" src="/avatars/5d22b-16.png" width="16" height="16" /></a>
+ <span> via </span>
+ <a href="/u/5d22b" class="u-author h-card ">5d22b</a>
+
+ <span title="2023-08-16 14:24:56 -0500">17 hours ago</span>
+
+ <span> | </span>
+ <span class="dropdown_parent">
+ <input id="archive_bqcmxg" class="archive_button" type="checkbox">
+ <label for="archive_bqcmxg">archive</label>
+ <div class="archive-dropdown">
+ <a href="https://web.archive.org/web/3/https%3A%2F%2Fbits.debian.org%2F2023%2F08%2Fdebian-turns-30.html">Archive.org</a>
+ <a href="https://archive.today/https%3A%2F%2Fbits.debian.org%2F2023%2F08%2Fdebian-turns-30.html">Archive.today</a>
+ <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fbits.debian.org%2F2023%2F08%2Fdebian-turns-30.html">Ghostarchive</a>
+ </div>
+ </span>
+ <span class="comments_label">
+ <span> | </span>
+ <a role="heading" aria-level="2" href="/s/bqcmxg/debian_celebrates_30_years">
+ 18 comments</a>
+ </span>
+
+ </div>
+ </div>
+</div>
+<a href="/s/bqcmxg/debian_celebrates_30_years" class="mobile_comments " style="display: none;">
+ <span>18</span>
+</a>
+</li>
+<li id="story_esnei4" data-shortid="esnei4"
+class="story
+
+
+
+
+
+
+">
+<div class="story_liner h-entry">
+ <div class="voters">
+ <a class="upvoter" href="/login"></a>
+ <div class="score">13</div>
+ </div>
+ <div class="details">
+ <span role="heading" aria-level="1" class="link h-cite u-repost-of">
+ <a class="u-url" href="https://rachit.pl/post/you-have-built-a-compiler/" rel="ugc noreferrer">Dear Sir, You have built a compiler (2022)</a>
+ </span>
+ <span class="tags">
+ <a class="tag tag_compilers" title="Compiler design" href="/t/compilers">compilers</a>
+ <a class="tag tag_plt" title="Programming language theory, types, design" href="/t/plt">plt</a>
+ </span>
+ <a class="domain" href="/domains/rachit.pl">rachit.pl</a>
+
+
+
+ <div class="byline">
+ <a href="/u/notypes"><img srcset="/avatars/notypes-16.png 1x, /avatars/notypes-32.png 2x" class="avatar" alt="notypes avatar" loading="lazy" decoding="async" src="/avatars/notypes-16.png" width="16" height="16" /></a>
+ <span> authored by </span>
+ <a href="/u/notypes" class="u-author h-card new_user">notypes</a>
+
+ <span title="2023-08-16 22:43:16 -0500">9 hours ago</span>
+
+ <span> | </span>
+ <span class="dropdown_parent">
+ <input id="archive_esnei4" class="archive_button" type="checkbox">
+ <label for="archive_esnei4">archive</label>
+ <div class="archive-dropdown">
+ <a href="https://web.archive.org/web/3/https%3A%2F%2Frachit.pl%2Fpost%2Fyou-have-built-a-compiler%2F">Archive.org</a>
+ <a href="https://archive.today/https%3A%2F%2Frachit.pl%2Fpost%2Fyou-have-built-a-compiler%2F">Archive.today</a>
+ <a href="https://ghostarchive.org/search?term=https%3A%2F%2Frachit.pl%2Fpost%2Fyou-have-built-a-compiler%2F">Ghostarchive</a>
+ </div>
+ </span>
+ <span class="comments_label">
+ <span> | </span>
+ <a role="heading" aria-level="2" href="/s/esnei4/dear_sir_you_have_built_compiler_2022">
+ 4 comments</a>
+ </span>
+
+ </div>
+ </div>
+</div>
+<a href="/s/esnei4/dear_sir_you_have_built_compiler_2022" class="mobile_comments " style="display: none;">
+ <span>4</span>
+</a>
+</li>
+<li id="story_nd5svs" data-shortid="nd5svs"
+class="story
+
+
+
+
+
+
+">
+<div class="story_liner h-entry">
+ <div class="voters">
+ <a class="upvoter" href="/login"></a>
+ <div class="score">14</div>
+ </div>
+ <div class="details">
+ <span role="heading" aria-level="1" class="link h-cite u-repost-of">
+ <a class="u-url" href="https://gist.github.com/sharadhr/39b804236c1941e9c30d90af828ad41e" rel="ugc noreferrer">$HOME, Not So Sweet $HOME</a>
+ </span>
+ <span class="tags">
+ <a class="tag tag_osdev" title="Operating system design and development when no specific OS tag exists" href="/t/osdev">osdev</a>
+ </span>
+ <a class="domain" href="/domains/gist.github.com">gist.github.com</a>
+
+
+
+ <div class="byline">
+ <a href="/u/christiano"><img srcset="/avatars/christiano-16.png 1x, /avatars/christiano-32.png 2x" class="avatar" alt="christiano avatar" loading="lazy" decoding="async" src="/avatars/christiano-16.png" width="16" height="16" /></a>
+ <span> via </span>
+ <a href="/u/christiano" class="u-author h-card ">christiano</a>
+
+ <span title="2023-08-17 01:42:29 -0500">6 hours ago</span>
+
+ <span> | </span>
+ <span class="dropdown_parent">
+ <input id="archive_nd5svs" class="archive_button" type="checkbox">
+ <label for="archive_nd5svs">archive</label>
+ <div class="archive-dropdown">
+ <a href="https://web.archive.org/web/3/https%3A%2F%2Fgist.github.com%2Fsharadhr%2F39b804236c1941e9c30d90af828ad41e">Archive.org</a>
+ <a href="https://archive.today/https%3A%2F%2Fgist.github.com%2Fsharadhr%2F39b804236c1941e9c30d90af828ad41e">Archive.today</a>
+ <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fgist.github.com%2Fsharadhr%2F39b804236c1941e9c30d90af828ad41e">Ghostarchive</a>
+ </div>
+ </span>
+ <span class="comments_label">
+ <span> | </span>
+ <a role="heading" aria-level="2" href="/s/nd5svs/home_not_so_sweet_home">
+ 6 comments</a>
+ </span>
+
+ </div>
+ </div>
+</div>
+<a href="/s/nd5svs/home_not_so_sweet_home" class="mobile_comments " style="display: none;">
+ <span>6</span>
+</a>
+</li>
+<li id="story_cuxddq" data-shortid="cuxddq"
+class="story
+
+
+
+
+
+
+">
+<div class="story_liner h-entry">
+ <div class="voters">
+ <a class="upvoter" href="/login"></a>
+ <div class="score">5</div>
+ </div>
+ <div class="details">
+ <span role="heading" aria-level="1" class="link h-cite u-repost-of">
+ <a class="u-url" href="https://github.com/ankitpokhrel/jira-cli" rel="ugc noreferrer">jira-cli: Feature-rich interactive Jira command line</a>
+ </span>
+ <span class="tags">
+ <a class="tag tag_a11y" title="accessibility, assistive technology, standards" href="/t/a11y">a11y</a>
+ <a class="tag tag_practices" title="Development and team practices" href="/t/practices">practices</a>
+ </span>
+ <a class="domain" href="/domains/github.com">github.com</a>
+
+
+
+ <div class="byline">
+ <a href="/u/pekkavaa"><img srcset="/avatars/pekkavaa-16.png 1x, /avatars/pekkavaa-32.png 2x" class="avatar" alt="pekkavaa avatar" loading="lazy" decoding="async" src="/avatars/pekkavaa-16.png" width="16" height="16" /></a>
+ <span> via </span>
+ <a href="/u/pekkavaa" class="u-author h-card ">pekkavaa</a>
+
+ <span title="2023-08-17 05:41:00 -0500">2 hours ago</span>
+
+ <span> | </span>
+ <span class="dropdown_parent">
+ <input id="archive_cuxddq" class="archive_button" type="checkbox">
+ <label for="archive_cuxddq">archive</label>
+ <div class="archive-dropdown">
+ <a href="https://web.archive.org/web/3/https%3A%2F%2Fgithub.com%2Fankitpokhrel%2Fjira-cli">Archive.org</a>
+ <a href="https://archive.today/https%3A%2F%2Fgithub.com%2Fankitpokhrel%2Fjira-cli">Archive.today</a>
+ <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fgithub.com%2Fankitpokhrel%2Fjira-cli">Ghostarchive</a>
+ </div>
+ </span>
+ <span class="comments_label">
+ <span> | </span>
+ <a role="heading" aria-level="2" href="/s/cuxddq/jira_cli_feature_rich_interactive_jira">
+ 3 comments</a>
+ </span>
+
+ </div>
+ </div>
+</div>
+<a href="/s/cuxddq/jira_cli_feature_rich_interactive_jira" class="mobile_comments " style="display: none;">
+ <span>3</span>
+</a>
+</li>
+<li id="story_zpgvkx" data-shortid="zpgvkx"
+class="story
+
+
+
+
+
+
+">
+<div class="story_liner h-entry">
+ <div class="voters">
+ <a class="upvoter" href="/login"></a>
+ <div class="score">21</div>
+ </div>
+ <div class="details">
+ <span role="heading" aria-level="1" class="link h-cite u-repost-of">
+ <a class="u-url" href="https://blog.chromium.org/2023/08/towards-https-by-default.html" rel="ugc noreferrer">Towards HTTPS by default</a>
+ </span>
+ <span class="tags">
+ <a class="tag tag_security" title="Netsec, appsec, and infosec" href="/t/security">security</a>
+ </span>
+ <a class="domain" href="/domains/blog.chromium.org">blog.chromium.org</a>
+
+
+
+ <div class="byline">
+ <a href="/u/insanitybit"><img srcset="/avatars/insanitybit-16.png 1x, /avatars/insanitybit-32.png 2x" class="avatar" alt="insanitybit avatar" loading="lazy" decoding="async" src="/avatars/insanitybit-16.png" width="16" height="16" /></a>
+ <span> via </span>
+ <a href="/u/insanitybit" class="u-author h-card ">insanitybit</a>
+
+ <span title="2023-08-16 13:41:07 -0500">18 hours ago</span>
+
+ <span> | </span>
+ <span class="dropdown_parent">
+ <input id="archive_zpgvkx" class="archive_button" type="checkbox">
+ <label for="archive_zpgvkx">archive</label>
+ <div class="archive-dropdown">
+ <a href="https://web.archive.org/web/3/https%3A%2F%2Fblog.chromium.org%2F2023%2F08%2Ftowards-https-by-default.html">Archive.org</a>
+ <a href="https://archive.today/https%3A%2F%2Fblog.chromium.org%2F2023%2F08%2Ftowards-https-by-default.html">Archive.today</a>
+ <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fblog.chromium.org%2F2023%2F08%2Ftowards-https-by-default.html">Ghostarchive</a>
+ </div>
+ </span>
+ <span class="comments_label">
+ <span> | </span>
+ <a role="heading" aria-level="2" href="/s/zpgvkx/towards_https_by_default">
+ 22 comments</a>
+ </span>
+
+ </div>
+ </div>
+</div>
+<a href="/s/zpgvkx/towards_https_by_default" class="mobile_comments " style="display: none;">
+ <span>22</span>
+</a>
+</li>
+<li id="story_cjxr3m" data-shortid="cjxr3m"
+class="story
+
+
+
+
+
+
+">
+<div class="story_liner h-entry">
+ <div class="voters">
+ <a class="upvoter" href="/login"></a>
+ <div class="score">15</div>
+ </div>
+ <div class="details">
+ <span role="heading" aria-level="1" class="link h-cite u-repost-of">
+ <a class="u-url" href="https://prefix.dev/blog/launching_pixi" rel="ugc noreferrer">Let's stop dependency hell: launching pixi</a>
+ </span>
+ <span class="tags">
+ <a class="tag tag_python" title="Python programming" href="/t/python">python</a>
+ <a class="tag tag_release" title="Software releases and announcements" href="/t/release">release</a>
+ </span>
+ <a class="domain" href="/domains/prefix.dev">prefix.dev</a>
+
+
+
+ <div class="byline">
+ <a href="/u/frkl"><img srcset="/avatars/frkl-16.png 1x, /avatars/frkl-32.png 2x" class="avatar" alt="frkl avatar" loading="lazy" decoding="async" src="/avatars/frkl-16.png" width="16" height="16" /></a>
+ <span> via </span>
+ <a href="/u/frkl" class="u-author h-card ">frkl</a>
+
+ <span title="2023-08-16 11:52:37 -0500">20 hours ago</span>
+
+ <span> | </span>
+ <span class="dropdown_parent">
+ <input id="archive_cjxr3m" class="archive_button" type="checkbox">
+ <label for="archive_cjxr3m">archive</label>
+ <div class="archive-dropdown">
+ <a href="https://web.archive.org/web/3/https%3A%2F%2Fprefix.dev%2Fblog%2Flaunching_pixi">Archive.org</a>
+ <a href="https://archive.today/https%3A%2F%2Fprefix.dev%2Fblog%2Flaunching_pixi">Archive.today</a>
+ <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fprefix.dev%2Fblog%2Flaunching_pixi">Ghostarchive</a>
+ </div>
+ </span>
+ <span class="comments_label">
+ <span> | </span>
+ <a role="heading" aria-level="2" href="/s/cjxr3m/let_s_stop_dependency_hell_launching_pixi">
+ 13 comments</a>
+ </span>
+
+ </div>
+ </div>
+</div>
+<a href="/s/cjxr3m/let_s_stop_dependency_hell_launching_pixi" class="mobile_comments " style="display: none;">
+ <span>13</span>
+</a>
+</li>
+<li id="story_gbfe6c" data-shortid="gbfe6c"
+class="story
+
+
+
+
+
+
+">
+<div class="story_liner h-entry">
+ <div class="voters">
+ <a class="upvoter" href="/login"></a>
+ <div class="score">18</div>
+ </div>
+ <div class="details">
+ <span role="heading" aria-level="1" class="link h-cite u-repost-of">
+ <a class="u-url" href="https://github.com/antonmedv/expr/releases/tag/v1.14.0" rel="ugc noreferrer">Expr v1.14 release: Go expression language</a>
+ </span>
+ <span class="tags">
+ <a class="tag tag_go" title="Golang programming" href="/t/go">go</a>
+ <a class="tag tag_release" title="Software releases and announcements" href="/t/release">release</a>
+ </span>
+ <a class="domain" href="/domains/github.com">github.com</a>
+
+
+
+ <div class="byline">
+ <a href="/u/antonmedv"><img srcset="/avatars/antonmedv-16.png 1x, /avatars/antonmedv-32.png 2x" class="avatar" alt="antonmedv avatar" loading="lazy" decoding="async" src="/avatars/antonmedv-16.png" width="16" height="16" /></a>
+ <span> authored by </span>
+ <a href="/u/antonmedv" class="u-author h-card user_is_author">antonmedv</a>
+
+ <span title="2023-08-16 04:59:16 -0500">27 hours ago</span>
+
+ <span> | </span>
+ <span class="dropdown_parent">
+ <input id="archive_gbfe6c" class="archive_button" type="checkbox">
+ <label for="archive_gbfe6c">archive</label>
+ <div class="archive-dropdown">
+ <a href="https://web.archive.org/web/3/https%3A%2F%2Fgithub.com%2Fantonmedv%2Fexpr%2Freleases%2Ftag%2Fv1.14.0">Archive.org</a>
+ <a href="https://archive.today/https%3A%2F%2Fgithub.com%2Fantonmedv%2Fexpr%2Freleases%2Ftag%2Fv1.14.0">Archive.today</a>
+ <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fgithub.com%2Fantonmedv%2Fexpr%2Freleases%2Ftag%2Fv1.14.0">Ghostarchive</a>
+ </div>
+ </span>
+ <span class="comments_label">
+ <span> | </span>
+ <a role="heading" aria-level="2" href="/s/gbfe6c/expr_v1_14_release_go_expression_language">
+ 12 comments</a>
+ </span>
+
+ </div>
+ </div>
+</div>
+<a href="/s/gbfe6c/expr_v1_14_release_go_expression_language" class="mobile_comments " style="display: none;">
+ <span>12</span>
+</a>
+</li>
+<li id="story_oy3k81" data-shortid="oy3k81"
+class="story
+
+
+
+
+
+
+">
+<div class="story_liner h-entry">
+ <div class="voters">
+ <a class="upvoter" href="/login"></a>
+ <div class="score">13</div>
+ </div>
+ <div class="details">
+ <span role="heading" aria-level="1" class="link h-cite u-repost-of">
+ <a class="u-url" href="https://telemachus.me/slogtest" rel="ugc noreferrer">slogtest</a>
+ </span>
+ <span class="tags">
+ <a class="tag tag_go" title="Golang programming" href="/t/go">go</a>
+ <a class="tag tag_testing" title="Software testing" href="/t/testing">testing</a>
+ </span>
+ <a class="domain" href="/domains/telemachus.me">telemachus.me</a>
+
+
+
+ <div class="byline">
+ <a href="/u/telemachus"><img srcset="/avatars/telemachus-16.png 1x, /avatars/telemachus-32.png 2x" class="avatar" alt="telemachus avatar" loading="lazy" decoding="async" src="/avatars/telemachus-16.png" width="16" height="16" /></a>
+ <span> authored by </span>
+ <a href="/u/telemachus" class="u-author h-card user_is_author">telemachus</a>
+
+ <span title="2023-08-16 06:20:20 -0500">25 hours ago</span>
+
+ <span> | </span>
+ <span class="dropdown_parent">
+ <input id="archive_oy3k81" class="archive_button" type="checkbox">
+ <label for="archive_oy3k81">archive</label>
+ <div class="archive-dropdown">
+ <a href="https://web.archive.org/web/3/https%3A%2F%2Ftelemachus.me%2Fslogtest">Archive.org</a>
+ <a href="https://archive.today/https%3A%2F%2Ftelemachus.me%2Fslogtest">Archive.today</a>
+ <a href="https://ghostarchive.org/search?term=https%3A%2F%2Ftelemachus.me%2Fslogtest">Ghostarchive</a>
+ </div>
+ </span>
+ <span class="comments_label">
+ <span> | </span>
+ <a role="heading" aria-level="2" href="/s/oy3k81/slogtest">
+ 8 comments</a>
+ </span>
+
+ </div>
+ </div>
+</div>
+<a href="/s/oy3k81/slogtest" class="mobile_comments " style="display: none;">
+ <span>8</span>
+</a>
+</li>
+<li id="story_vkcnau" data-shortid="vkcnau"
+class="story
+
+
+
+
+
+
+">
+<div class="story_liner h-entry">
+ <div class="voters">
+ <a class="upvoter" href="/login"></a>
+ <div class="score">6</div>
+ </div>
+ <div class="details">
+ <span role="heading" aria-level="1" class="link h-cite u-repost-of">
+ <a class="u-url" href="https://two-wrongs.com/optimise-the-expensive-first" rel="ugc noreferrer">Optimise the Expensive First</a>
+ </span>
+ <span class="tags">
+ <a class="tag tag_performance" title="Performance and optimization" href="/t/performance">performance</a>
+ </span>
+ <a class="domain" href="/domains/two-wrongs.com">two-wrongs.com</a>
+
+
+
+ <div class="byline">
+ <a href="/u/chriskrycho"><img srcset="/avatars/chriskrycho-16.png 1x, /avatars/chriskrycho-32.png 2x" class="avatar" alt="chriskrycho avatar" loading="lazy" decoding="async" src="/avatars/chriskrycho-16.png" width="16" height="16" /></a>
+ <span> via </span>
+ <a href="/u/chriskrycho" class="u-author h-card ">chriskrycho</a>
+
+ <span title="2023-08-16 19:19:19 -0500">12 hours ago</span>
+
+ <span> | </span>
+ <span class="dropdown_parent">
+ <input id="archive_vkcnau" class="archive_button" type="checkbox">
+ <label for="archive_vkcnau">archive</label>
+ <div class="archive-dropdown">
+ <a href="https://web.archive.org/web/3/https%3A%2F%2Ftwo-wrongs.com%2Foptimise-the-expensive-first">Archive.org</a>
+ <a href="https://archive.today/https%3A%2F%2Ftwo-wrongs.com%2Foptimise-the-expensive-first">Archive.today</a>
+ <a href="https://ghostarchive.org/search?term=https%3A%2F%2Ftwo-wrongs.com%2Foptimise-the-expensive-first">Ghostarchive</a>
+ </div>
+ </span>
+ <span class="comments_label">
+ <span> | </span>
+ <a role="heading" aria-level="2" href="/s/vkcnau/optimise_expensive_first">
+ 2 comments</a>
+ </span>
+
+ </div>
+ </div>
+</div>
+<a href="/s/vkcnau/optimise_expensive_first" class="mobile_comments " style="display: none;">
+ <span>2</span>
+</a>
+</li>
+<li id="story_yrntto" data-shortid="yrntto"
+class="story
+
+
+
+
+
+
+">
+<div class="story_liner h-entry">
+ <div class="voters">
+ <a class="upvoter" href="/login"></a>
+ <div class="score">9</div>
+ </div>
+ <div class="details">
+ <span role="heading" aria-level="1" class="link h-cite u-repost-of">
+ <a class="u-url" href="https://www.xorpd.net/pages/xchg_rax/snip_00.html" rel="ugc noreferrer">xchg rax,rax</a>
+ </span>
+ <span class="tags">
+ <a class="tag tag_book tag_is_media" title="Link to a book (not an ad or review)" href="/t/book">book</a>
+ <a class="tag tag_assembly" title="Assembly programming" href="/t/assembly">assembly</a>
+ </span>
+ <a class="domain" href="/domains/xorpd.net">xorpd.net</a>
+
+
+
+ <div class="byline">
+ <a href="/u/gepardo"><img srcset="/avatars/gepardo-16.png 1x, /avatars/gepardo-32.png 2x" class="avatar" alt="gepardo avatar" loading="lazy" decoding="async" src="/avatars/gepardo-16.png" width="16" height="16" /></a>
+ <span> via </span>
+ <a href="/u/gepardo" class="u-author h-card ">gepardo</a>
+
+ <span title="2023-08-16 15:05:51 -0500">17 hours ago</span>
+
+ <span> | </span>
+ <span class="dropdown_parent">
+ <input id="archive_yrntto" class="archive_button" type="checkbox">
+ <label for="archive_yrntto">archive</label>
+ <div class="archive-dropdown">
+ <a href="https://web.archive.org/web/3/https%3A%2F%2Fwww.xorpd.net%2Fpages%2Fxchg_rax%2Fsnip_00.html">Archive.org</a>
+ <a href="https://archive.today/https%3A%2F%2Fwww.xorpd.net%2Fpages%2Fxchg_rax%2Fsnip_00.html">Archive.today</a>
+ <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fwww.xorpd.net%2Fpages%2Fxchg_rax%2Fsnip_00.html">Ghostarchive</a>
+ </div>
+ </span>
+ <span class="comments_label">
+ <span> | </span>
+ <a role="heading" aria-level="2" href="/s/yrntto/xchg_rax_rax">
+ 3 comments</a>
+ </span>
+
+ </div>
+ </div>
+</div>
+<a href="/s/yrntto/xchg_rax_rax" class="mobile_comments " style="display: none;">
+ <span>3</span>
+</a>
+</li>
+<li id="story_wnv3ep" data-shortid="wnv3ep"
+class="story
+
+
+
+
+
+
+">
+<div class="story_liner h-entry">
+ <div class="voters">
+ <a class="upvoter" href="/login"></a>
+ <div class="score">2</div>
+ </div>
+ <div class="details">
+ <span role="heading" aria-level="1" class="link h-cite u-repost-of">
+ <a class="u-url" href="https://www.dolthub.com/blog/2023-08-16-go-pitfalls/" rel="ugc noreferrer">Avoiding Pitfalls in Go</a>
+ </span>
+ <span class="tags">
+ <a class="tag tag_go" title="Golang programming" href="/t/go">go</a>
+ </span>
+ <a class="domain" href="/domains/dolthub.com">dolthub.com</a>
+
+
+
+ <div class="byline">
+ <a href="/u/telemachus"><img srcset="/avatars/telemachus-16.png 1x, /avatars/telemachus-32.png 2x" class="avatar" alt="telemachus avatar" loading="lazy" decoding="async" src="/avatars/telemachus-16.png" width="16" height="16" /></a>
+ <span> via </span>
+ <a href="/u/telemachus" class="u-author h-card ">telemachus</a>
+
+ <span title="2023-08-17 06:05:01 -0500">2 hours ago</span>
+
+ <span> | </span>
+ <span class="dropdown_parent">
+ <input id="archive_wnv3ep" class="archive_button" type="checkbox">
+ <label for="archive_wnv3ep">archive</label>
+ <div class="archive-dropdown">
+ <a href="https://web.archive.org/web/3/https%3A%2F%2Fwww.dolthub.com%2Fblog%2F2023-08-16-go-pitfalls%2F">Archive.org</a>
+ <a href="https://archive.today/https%3A%2F%2Fwww.dolthub.com%2Fblog%2F2023-08-16-go-pitfalls%2F">Archive.today</a>
+ <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fwww.dolthub.com%2Fblog%2F2023-08-16-go-pitfalls%2F">Ghostarchive</a>
+ </div>
+ </span>
+ <span class="comments_label">
+ <span> | </span>
+ <a role="heading" aria-level="2" href="/s/wnv3ep/avoiding_pitfalls_go">
+ no comments</a>
+ </span>
+
+ </div>
+ </div>
+</div>
+<a href="/s/wnv3ep/avoiding_pitfalls_go" class="mobile_comments zero" style="display: none;">
+ <span>0</span>
+</a>
+</li>
+<li id="story_n4v6a8" data-shortid="n4v6a8"
+class="story
+
+
+
+
+
+
+">
+<div class="story_liner h-entry">
+ <div class="voters">
+ <a class="upvoter" href="/login"></a>
+ <div class="score">43</div>
+ </div>
+ <div class="details">
+ <span role="heading" aria-level="1" class="link h-cite u-repost-of">
+ <a class="u-url" href="https://jarvispowered.com/you-dont-hate-jira-you-hate-your-manager/" rel="ugc noreferrer">You don't hate JIRA, you hate your manager</a>
+ </span>
+ <span class="tags">
+ <a class="tag tag_practices" title="Development and team practices" href="/t/practices">practices</a>
+ </span>
+ <a class="domain" href="/domains/jarvispowered.com">jarvispowered.com</a>
+
+
+
+ <div class="byline">
+ <a href="/u/djx"><img srcset="/avatars/djx-16.png 1x, /avatars/djx-32.png 2x" class="avatar" alt="djx avatar" loading="lazy" decoding="async" src="/avatars/djx-16.png" width="16" height="16" /></a>
+ <span> authored by </span>
+ <a href="/u/djx" class="u-author h-card user_is_author">djx</a>
+
+ <span title="2023-08-15 15:46:17 -0500">40 hours ago</span>
+
+ <span> | </span>
+ <span class="dropdown_parent">
+ <input id="archive_n4v6a8" class="archive_button" type="checkbox">
+ <label for="archive_n4v6a8">archive</label>
+ <div class="archive-dropdown">
+ <a href="https://web.archive.org/web/3/https%3A%2F%2Fjarvispowered.com%2Fyou-dont-hate-jira-you-hate-your-manager%2F">Archive.org</a>
+ <a href="https://archive.today/https%3A%2F%2Fjarvispowered.com%2Fyou-dont-hate-jira-you-hate-your-manager%2F">Archive.today</a>
+ <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fjarvispowered.com%2Fyou-dont-hate-jira-you-hate-your-manager%2F">Ghostarchive</a>
+ </div>
+ </span>
+ <span class="comments_label">
+ <span> | </span>
+ <a role="heading" aria-level="2" href="/s/n4v6a8/you_don_t_hate_jira_you_hate_your_manager">
+ 84 comments</a>
+ </span>
+
+ </div>
+ </div>
+</div>
+<a href="/s/n4v6a8/you_don_t_hate_jira_you_hate_your_manager" class="mobile_comments " style="display: none;">
+ <span>84</span>
+</a>
+</li>
+<li id="story_sgw0sb" data-shortid="sgw0sb"
+class="story
+
+
+
+
+
+
+">
+<div class="story_liner h-entry">
+ <div class="voters">
+ <a class="upvoter" href="/login"></a>
+ <div class="score">1</div>
+ </div>
+ <div class="details">
+ <span role="heading" aria-level="1" class="link h-cite u-repost-of">
+ <a class="u-url" href="https://cbloomrants.blogspot.com/2023/07/float-to-int-casts-for-data-compression.html" rel="ugc noreferrer">Float to int casts for data compression</a>
+ </span>
+ <span class="tags">
+ <a class="tag tag_programming" title="Use when every tag or no specific tag applies" href="/t/programming">programming</a>
+ </span>
+ <a class="domain" href="/domains/cbloomrants.blogspot.com">cbloomrants.blogspot.com</a>
+
+
+
+ <div class="byline">
+ <a href="/u/mikejsavage"><img srcset="/avatars/mikejsavage-16.png 1x, /avatars/mikejsavage-32.png 2x" class="avatar" alt="mikejsavage avatar" loading="lazy" decoding="async" src="/avatars/mikejsavage-16.png" width="16" height="16" /></a>
+ <span> via </span>
+ <a href="/u/mikejsavage" class="u-author h-card ">mikejsavage</a>
+
+ <span title="2023-08-17 06:01:50 -0500">2 hours ago</span>
+
+ <span> | </span>
+ <span class="dropdown_parent">
+ <input id="archive_sgw0sb" class="archive_button" type="checkbox">
+ <label for="archive_sgw0sb">archive</label>
+ <div class="archive-dropdown">
+ <a href="https://web.archive.org/web/3/https%3A%2F%2Fcbloomrants.blogspot.com%2F2023%2F07%2Ffloat-to-int-casts-for-data-compression.html">Archive.org</a>
+ <a href="https://archive.today/https%3A%2F%2Fcbloomrants.blogspot.com%2F2023%2F07%2Ffloat-to-int-casts-for-data-compression.html">Archive.today</a>
+ <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fcbloomrants.blogspot.com%2F2023%2F07%2Ffloat-to-int-casts-for-data-compression.html">Ghostarchive</a>
+ </div>
+ </span>
+ <span class="comments_label">
+ <span> | </span>
+ <a role="heading" aria-level="2" href="/s/sgw0sb/float_int_casts_for_data_compression">
+ 1 comment</a>
+ </span>
+
+ </div>
+ </div>
+</div>
+<a href="/s/sgw0sb/float_int_casts_for_data_compression" class="mobile_comments " style="display: none;">
+ <span>1</span>
+</a>
+</li>
+<li id="story_5facyn" data-shortid="5facyn"
+class="story
+
+
+
+
+
+
+">
+<div class="story_liner h-entry">
+ <div class="voters">
+ <a class="upvoter" href="/login"></a>
+ <div class="score">4</div>
+ </div>
+ <div class="details">
+ <span role="heading" aria-level="1" class="link h-cite u-repost-of">
+ <a class="u-url" href="https://dissociatedpress.net/2023/06/24/red-hat-and-the-clone-wars/" rel="ugc noreferrer">Red Hat and the Clone Wars</a>
+ </span>
+ <span class="tags">
+ <a class="tag tag_historical" title="History and retrospectives (not for things that happen to be old)" href="/t/historical">historical</a>
+ <a class="tag tag_linux" title="Linux" href="/t/linux">linux</a>
+ </span>
+ <a class="domain" href="/domains/dissociatedpress.net">dissociatedpress.net</a>
+
+
+
+ <div class="byline">
+ <a href="/u/df"><img srcset="/avatars/df-16.png 1x, /avatars/df-32.png 2x" class="avatar" alt="df avatar" loading="lazy" decoding="async" src="/avatars/df-16.png" width="16" height="16" /></a>
+ <span> via </span>
+ <a href="/u/df" class="u-author h-card ">df</a>
+
+ <span title="2023-08-16 21:22:32 -0500">10 hours ago</span>
+
+ <span> | </span>
+ <span class="dropdown_parent">
+ <input id="archive_5facyn" class="archive_button" type="checkbox">
+ <label for="archive_5facyn">archive</label>
+ <div class="archive-dropdown">
+ <a href="https://web.archive.org/web/3/https%3A%2F%2Fdissociatedpress.net%2F2023%2F06%2F24%2Fred-hat-and-the-clone-wars%2F">Archive.org</a>
+ <a href="https://archive.today/https%3A%2F%2Fdissociatedpress.net%2F2023%2F06%2F24%2Fred-hat-and-the-clone-wars%2F">Archive.today</a>
+ <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fdissociatedpress.net%2F2023%2F06%2F24%2Fred-hat-and-the-clone-wars%2F">Ghostarchive</a>
+ </div>
+ </span>
+ <span class="comments_label">
+ <span> | </span>
+ <a role="heading" aria-level="2" href="/s/5facyn/red_hat_clone_wars">
+ 2 comments</a>
+ </span>
+
+ </div>
+ </div>
+</div>
+<a href="/s/5facyn/red_hat_clone_wars" class="mobile_comments " style="display: none;">
+ <span>2</span>
+</a>
+</li>
+<li id="story_qgoksp" data-shortid="qgoksp"
+class="story
+
+
+
+
+
+
+">
+<div class="story_liner h-entry">
+ <div class="voters">
+ <a class="upvoter" href="/login"></a>
+ <div class="score">23</div>
+ </div>
+ <div class="details">
+ <span role="heading" aria-level="1" class="link h-cite u-repost-of">
+ <a class="u-url" href="https://notes.eatonphil.com/2023-08-15-thinking-about-functional-programming.html" rel="ugc noreferrer">Thinking about functional programming</a>
+ </span>
+ <span class="tags">
+ <a class="tag tag_plt" title="Programming language theory, types, design" href="/t/plt">plt</a>
+ </span>
+ <a class="domain" href="/domains/notes.eatonphil.com">notes.eatonphil.com</a>
+
+
+
+ <div class="byline">
+ <a href="/u/eatonphil"><img srcset="/avatars/eatonphil-16.png 1x, /avatars/eatonphil-32.png 2x" class="avatar" alt="eatonphil avatar" loading="lazy" decoding="async" src="/avatars/eatonphil-16.png" width="16" height="16" /></a>
+ <span> authored by </span>
+ <a href="/u/eatonphil" class="u-author h-card user_is_author">eatonphil</a>
+
+ <span title="2023-08-15 20:20:57 -0500">35 hours ago</span>
+
+ <span> | </span>
+ <span class="dropdown_parent">
+ <input id="archive_qgoksp" class="archive_button" type="checkbox">
+ <label for="archive_qgoksp">archive</label>
+ <div class="archive-dropdown">
+ <a href="https://web.archive.org/web/3/https%3A%2F%2Fnotes.eatonphil.com%2F2023-08-15-thinking-about-functional-programming.html">Archive.org</a>
+ <a href="https://archive.today/https%3A%2F%2Fnotes.eatonphil.com%2F2023-08-15-thinking-about-functional-programming.html">Archive.today</a>
+ <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fnotes.eatonphil.com%2F2023-08-15-thinking-about-functional-programming.html">Ghostarchive</a>
+ </div>
+ </span>
+ <span class="comments_label">
+ <span> | </span>
+ <a role="heading" aria-level="2" href="/s/qgoksp/thinking_about_functional_programming">
+ 22 comments</a>
+ </span>
+
+ </div>
+ </div>
+</div>
+<a href="/s/qgoksp/thinking_about_functional_programming" class="mobile_comments " style="display: none;">
+ <span>22</span>
+</a>
+</li>
+<li id="story_jovzxw" data-shortid="jovzxw"
+class="story
+
+
+
+
+
+
+">
+<div class="story_liner h-entry">
+ <div class="voters">
+ <a class="upvoter" href="/login"></a>
+ <div class="score">1</div>
+ </div>
+ <div class="details">
+ <span role="heading" aria-level="1" class="link h-cite u-repost-of">
+ <a class="u-url" href="https://codeconfessions.substack.com/p/cpython-reference-counting-internals" rel="ugc noreferrer">How CPython Implements Reference Counting: Dissecting CPython Internals</a>
+ </span>
+ <span class="tags">
+ <a class="tag tag_c" title="C programming" href="/t/c">c</a>
+ <a class="tag tag_compilers" title="Compiler design" href="/t/compilers">compilers</a>
+ <a class="tag tag_python" title="Python programming" href="/t/python">python</a>
+ </span>
+ <a class="domain" href="/domains/codeconfessions.substack.com">codeconfessions.substack.com</a>
+
+
+
+ <div class="byline">
+ <a href="/u/abhi9u"><img srcset="/avatars/abhi9u-16.png 1x, /avatars/abhi9u-32.png 2x" class="avatar" alt="abhi9u avatar" loading="lazy" decoding="async" src="/avatars/abhi9u-16.png" width="16" height="16" /></a>
+ <span> authored by </span>
+ <a href="/u/abhi9u" class="u-author h-card user_is_author">abhi9u</a>
+
+ <span title="2023-08-17 00:52:33 -0500">7 hours ago</span>
+
+ <span> | </span>
+ <span class="dropdown_parent">
+ <input id="archive_jovzxw" class="archive_button" type="checkbox">
+ <label for="archive_jovzxw">archive</label>
+ <div class="archive-dropdown">
+ <a href="https://web.archive.org/web/3/https%3A%2F%2Fcodeconfessions.substack.com%2Fp%2Fcpython-reference-counting-internals">Archive.org</a>
+ <a href="https://archive.today/https%3A%2F%2Fcodeconfessions.substack.com%2Fp%2Fcpython-reference-counting-internals">Archive.today</a>
+ <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fcodeconfessions.substack.com%2Fp%2Fcpython-reference-counting-internals">Ghostarchive</a>
+ </div>
+ </span>
+ <span class="comments_label">
+ <span> | </span>
+ <a role="heading" aria-level="2" href="/s/jovzxw/how_cpython_implements_reference">
+ no comments</a>
+ </span>
+
+ </div>
+ </div>
+</div>
+<a href="/s/jovzxw/how_cpython_implements_reference" class="mobile_comments zero" style="display: none;">
+ <span>0</span>
+</a>
+</li>
+<li id="story_usishn" data-shortid="usishn"
+class="story
+
+
+
+
+
+
+">
+<div class="story_liner h-entry">
+ <div class="voters">
+ <a class="upvoter" href="/login"></a>
+ <div class="score">1</div>
+ </div>
+ <div class="details">
+ <span role="heading" aria-level="1" class="link h-cite u-repost-of">
+ <a class="u-url" href="https://vksegfault.github.io/posts/gentle-intro-gpu-inner-workings/" rel="ugc noreferrer">Gentle introduction to GPUs inner workings</a>
+ </span>
+ <span class="tags">
+ <a class="tag tag_graphics" title="Graphics programming" href="/t/graphics">graphics</a>
+ </span>
+ <a class="domain" href="/domains/vksegfault.github.io">vksegfault.github.io</a>
+
+
+
+ <div class="byline">
+ <a href="/u/mikejsavage"><img srcset="/avatars/mikejsavage-16.png 1x, /avatars/mikejsavage-32.png 2x" class="avatar" alt="mikejsavage avatar" loading="lazy" decoding="async" src="/avatars/mikejsavage-16.png" width="16" height="16" /></a>
+ <span> via </span>
+ <a href="/u/mikejsavage" class="u-author h-card ">mikejsavage</a>
+
+ <span title="2023-08-17 06:00:38 -0500">2 hours ago</span>
+
+ <span> | </span>
+ <span class="dropdown_parent">
+ <input id="archive_usishn" class="archive_button" type="checkbox">
+ <label for="archive_usishn">archive</label>
+ <div class="archive-dropdown">
+ <a href="https://web.archive.org/web/3/https%3A%2F%2Fvksegfault.github.io%2Fposts%2Fgentle-intro-gpu-inner-workings%2F">Archive.org</a>
+ <a href="https://archive.today/https%3A%2F%2Fvksegfault.github.io%2Fposts%2Fgentle-intro-gpu-inner-workings%2F">Archive.today</a>
+ <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fvksegfault.github.io%2Fposts%2Fgentle-intro-gpu-inner-workings%2F">Ghostarchive</a>
+ </div>
+ </span>
+ <span class="comments_label">
+ <span> | </span>
+ <a role="heading" aria-level="2" href="/s/usishn/gentle_introduction_gpus_inner_workings">
+ no comments</a>
+ </span>
+
+ </div>
+ </div>
+</div>
+<a href="/s/usishn/gentle_introduction_gpus_inner_workings" class="mobile_comments zero" style="display: none;">
+ <span>0</span>
+</a>
+</li>
+<li id="story_niscpx" data-shortid="niscpx"
+class="story
+
+
+
+
+
+
+">
+<div class="story_liner h-entry">
+ <div class="voters">
+ <a class="upvoter" href="/login"></a>
+ <div class="score">4</div>
+ </div>
+ <div class="details">
+ <span role="heading" aria-level="1" class="link h-cite u-repost-of">
+ <a class="u-url" href="https://www.youtube.com/watch?v=lvvzolKHt2E" rel="ugc noreferrer">Unit (Visual Programming System)</a>
+ </span>
+ <span class="tags">
+ <a class="tag tag_video tag_is_media" title="Link to a video" href="/t/video">video</a>
+ <a class="tag tag_design" title="Visual design" href="/t/design">design</a>
+ <a class="tag tag_plt" title="Programming language theory, types, design" href="/t/plt">plt</a>
+ </span>
+ <a class="domain" href="/domains/youtube.com">youtube.com</a>
+
+
+
+ <div class="byline">
+ <a href="/u/ivanreese"><img srcset="/avatars/ivanreese-16.png 1x, /avatars/ivanreese-32.png 2x" class="avatar" alt="ivanreese avatar" loading="lazy" decoding="async" src="/avatars/ivanreese-16.png" width="16" height="16" /></a>
+ <span> via </span>
+ <a href="/u/ivanreese" class="u-author h-card ">ivanreese</a>
+
+ <span title="2023-08-16 21:12:11 -0500">10 hours ago</span>
+
+ <span> | </span>
+ <span class="dropdown_parent">
+ <input id="archive_niscpx" class="archive_button" type="checkbox">
+ <label for="archive_niscpx">archive</label>
+ <div class="archive-dropdown">
+ <a href="https://web.archive.org/web/3/https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DlvvzolKHt2E">Archive.org</a>
+ <a href="https://archive.today/https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DlvvzolKHt2E">Archive.today</a>
+ <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DlvvzolKHt2E">Ghostarchive</a>
+ </div>
+ </span>
+ <span class="comments_label">
+ <span> | </span>
+ <a role="heading" aria-level="2" href="/s/niscpx/unit_visual_programming_system">
+ no comments</a>
+ </span>
+
+ </div>
+ </div>
+</div>
+<a href="/s/niscpx/unit_visual_programming_system" class="mobile_comments zero" style="display: none;">
+ <span>0</span>
+</a>
+</li>
+<li id="story_gh9yu9" data-shortid="gh9yu9"
+class="story
+
+
+
+
+
+
+">
+<div class="story_liner h-entry">
+ <div class="voters">
+ <a class="upvoter" href="/login"></a>
+ <div class="score">24</div>
+ </div>
+ <div class="details">
+ <span role="heading" aria-level="1" class="link h-cite u-repost-of">
+ <a class="u-url" href="https://www.haiku-os.org/blog/waddlesplash/2023-08-15_haiku_activity_contract_report_july_2023/" rel="ugc noreferrer">Haiku Activity & Contract Report, July 2023</a>
+ </span>
+ <span class="tags">
+ <a class="tag tag_osdev" title="Operating system design and development when no specific OS tag exists" href="/t/osdev">osdev</a>
+ </span>
+ <a class="domain" href="/domains/haiku-os.org">haiku-os.org</a>
+
+
+
+ <div class="byline">
+ <a href="/u/calvin"><img srcset="/avatars/calvin-16.png 1x, /avatars/calvin-32.png 2x" class="avatar" alt="calvin avatar" loading="lazy" decoding="async" src="/avatars/calvin-16.png" width="16" height="16" /></a>
+ <span> via </span>
+ <a href="/u/calvin" class="u-author h-card ">calvin</a>
+
+ <span title="2023-08-15 23:51:30 -0500">32 hours ago</span>
+
+ <span> | </span>
+ <span class="dropdown_parent">
+ <input id="archive_gh9yu9" class="archive_button" type="checkbox">
+ <label for="archive_gh9yu9">archive</label>
+ <div class="archive-dropdown">
+ <a href="https://web.archive.org/web/3/https%3A%2F%2Fwww.haiku-os.org%2Fblog%2Fwaddlesplash%2F2023-08-15_haiku_activity_contract_report_july_2023%2F">Archive.org</a>
+ <a href="https://archive.today/https%3A%2F%2Fwww.haiku-os.org%2Fblog%2Fwaddlesplash%2F2023-08-15_haiku_activity_contract_report_july_2023%2F">Archive.today</a>
+ <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fwww.haiku-os.org%2Fblog%2Fwaddlesplash%2F2023-08-15_haiku_activity_contract_report_july_2023%2F">Ghostarchive</a>
+ </div>
+ </span>
+ <span class="comments_label">
+ <span> | </span>
+ <a role="heading" aria-level="2" href="/s/gh9yu9/haiku_activity_contract_report_july_2023">
+ 10 comments</a>
+ </span>
+
+ </div>
+ </div>
+</div>
+<a href="/s/gh9yu9/haiku_activity_contract_report_july_2023" class="mobile_comments " style="display: none;">
+ <span>10</span>
+</a>
+</li>
+<li id="story_r9o9md" data-shortid="r9o9md"
+class="story
+
+
+
+
+
+
+">
+<div class="story_liner h-entry">
+ <div class="voters">
+ <a class="upvoter" href="/login"></a>
+ <div class="score">1</div>
+ </div>
+ <div class="details">
+ <span role="heading" aria-level="1" class="link h-cite u-repost-of">
+ <a class="u-url" href="https://www.youtube.com/watch?v=lUCegCa7A08" rel="ugc noreferrer">WebAssembly for the rest of us</a>
+ </span>
+ <span class="tags">
+ <a class="tag tag_video tag_is_media" title="Link to a video" href="/t/video">video</a>
+ <a class="tag tag_wasm" title="webassembly" href="/t/wasm">wasm</a>
+ </span>
+ <a class="domain" href="/domains/youtube.com">youtube.com</a>
+
+
+
+ <div class="byline">
+ <a href="/u/dbremner"><img srcset="/avatars/dbremner-16.png 1x, /avatars/dbremner-32.png 2x" class="avatar" alt="dbremner avatar" loading="lazy" decoding="async" src="/avatars/dbremner-16.png" width="16" height="16" /></a>
+ <span> via </span>
+ <a href="/u/dbremner" class="u-author h-card ">dbremner</a>
+
+ <span title="2023-08-17 05:46:28 -0500">2 hours ago</span>
+
+ <span> | </span>
+ <span class="dropdown_parent">
+ <input id="archive_r9o9md" class="archive_button" type="checkbox">
+ <label for="archive_r9o9md">archive</label>
+ <div class="archive-dropdown">
+ <a href="https://web.archive.org/web/3/https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DlUCegCa7A08">Archive.org</a>
+ <a href="https://archive.today/https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DlUCegCa7A08">Archive.today</a>
+ <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DlUCegCa7A08">Ghostarchive</a>
+ </div>
+ </span>
+ <span class="comments_label">
+ <span> | </span>
+ <a role="heading" aria-level="2" href="/s/r9o9md/webassembly_for_rest_us">
+ no comments</a>
+ </span>
+
+ </div>
+ </div>
+</div>
+<a href="/s/r9o9md/webassembly_for_rest_us" class="mobile_comments zero" style="display: none;">
+ <span>0</span>
+</a>
+</li>
+<li id="story_kyvlzb" data-shortid="kyvlzb"
+class="story
+
+
+
+
+
+
+">
+<div class="story_liner h-entry">
+ <div class="voters">
+ <a class="upvoter" href="/login"></a>
+ <div class="score">5</div>
+ </div>
+ <div class="details">
+ <span role="heading" aria-level="1" class="link h-cite u-repost-of">
+ <a class="u-url" href="https://www.systeminit.com/blog-open-source/" rel="ugc noreferrer">System Initiative Open Source</a>
+ </span>
+ <span class="tags">
+ <a class="tag tag_devops" title="DevOps" href="/t/devops">devops</a>
+ <a class="tag tag_release" title="Software releases and announcements" href="/t/release">release</a>
+ </span>
+ <a class="domain" href="/domains/systeminit.com">systeminit.com</a>
+
+
+
+ <div class="byline">
+ <a href="/u/caius"><img srcset="/avatars/caius-16.png 1x, /avatars/caius-32.png 2x" class="avatar" alt="caius avatar" loading="lazy" decoding="async" src="/avatars/caius-16.png" width="16" height="16" /></a>
+ <span> via </span>
+ <a href="/u/caius" class="u-author h-card ">caius</a>
+
+ <span title="2023-08-16 13:26:57 -0500">18 hours ago</span>
+
+ <span> | </span>
+ <span class="dropdown_parent">
+ <input id="archive_kyvlzb" class="archive_button" type="checkbox">
+ <label for="archive_kyvlzb">archive</label>
+ <div class="archive-dropdown">
+ <a href="https://web.archive.org/web/3/https%3A%2F%2Fwww.systeminit.com%2Fblog-open-source%2F">Archive.org</a>
+ <a href="https://archive.today/https%3A%2F%2Fwww.systeminit.com%2Fblog-open-source%2F">Archive.today</a>
+ <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fwww.systeminit.com%2Fblog-open-source%2F">Ghostarchive</a>
+ </div>
+ </span>
+ <span class="comments_label">
+ <span> | </span>
+ <a role="heading" aria-level="2" href="/s/kyvlzb/system_initiative_open_source">
+ 4 comments</a>
+ </span>
+
+ </div>
+ </div>
+</div>
+<a href="/s/kyvlzb/system_initiative_open_source" class="mobile_comments " style="display: none;">
+ <span>4</span>
+</a>
+</li>
+<li id="story_id9jet" data-shortid="id9jet"
+class="story
+
+
+
+
+
+
+">
+<div class="story_liner h-entry">
+ <div class="voters">
+ <a class="upvoter" href="/login"></a>
+ <div class="score">39</div>
+ </div>
+ <div class="details">
+ <span role="heading" aria-level="1" class="link h-cite u-repost-of">
+ <a class="u-url" href="https://rachit.pl/post/transpiler/" rel="ugc noreferrer">Transpiler, a meaningless word</a>
+ </span>
+ <span class="tags">
+ <a class="tag tag_plt" title="Programming language theory, types, design" href="/t/plt">plt</a>
+ </span>
+ <a class="domain" href="/domains/rachit.pl">rachit.pl</a>
+
+
+
+ <div class="byline">
+ <a href="/u/azhenley"><img srcset="/avatars/azhenley-16.png 1x, /avatars/azhenley-32.png 2x" class="avatar" alt="azhenley avatar" loading="lazy" decoding="async" src="/avatars/azhenley-16.png" width="16" height="16" /></a>
+ <span> via </span>
+ <a href="/u/azhenley" class="u-author h-card ">azhenley</a>
+
+ <span title="2023-08-15 11:34:33 -0500">44 hours ago</span>
+
+ <span> | </span>
+ <span class="dropdown_parent">
+ <input id="archive_id9jet" class="archive_button" type="checkbox">
+ <label for="archive_id9jet">archive</label>
+ <div class="archive-dropdown">
+ <a href="https://web.archive.org/web/3/https%3A%2F%2Frachit.pl%2Fpost%2Ftranspiler%2F">Archive.org</a>
+ <a href="https://archive.today/https%3A%2F%2Frachit.pl%2Fpost%2Ftranspiler%2F">Archive.today</a>
+ <a href="https://ghostarchive.org/search?term=https%3A%2F%2Frachit.pl%2Fpost%2Ftranspiler%2F">Ghostarchive</a>
+ </div>
+ </span>
+ <span class="comments_label">
+ <span> | </span>
+ <a role="heading" aria-level="2" href="/s/id9jet/transpiler_meaningless_word">
+ 53 comments</a>
+ </span>
+
+ </div>
+ </div>
+</div>
+<a href="/s/id9jet/transpiler_meaningless_word" class="mobile_comments " style="display: none;">
+ <span>53</span>
+</a>
+</li>
+<li id="story_h6vioy" data-shortid="h6vioy"
+class="story
+
+
+
+
+
+
+">
+<div class="story_liner h-entry">
+ <div class="voters">
+ <a class="upvoter" href="/login"></a>
+ <div class="score">28</div>
+ </div>
+ <div class="details">
+ <span role="heading" aria-level="1" class="link h-cite u-repost-of">
+ <a class="u-url" href="https://blog.redplanetlabs.com/2023/08/15/how-we-reduced-the-cost-of-building-twitter-at-twitter-scale-by-100x/" rel="ugc noreferrer">How we reduced the cost of building Twitter at Twitter-scale by 100x</a>
+ </span>
+ <span class="tags">
+ <a class="tag tag_distributed" title="Distributed systems" href="/t/distributed">distributed</a>
+ </span>
+ <a class="domain" href="/domains/blog.redplanetlabs.com">blog.redplanetlabs.com</a>
+
+
+
+ <div class="byline">
+ <a href="/u/manuel"><img srcset="/avatars/manuel-16.png 1x, /avatars/manuel-32.png 2x" class="avatar" alt="manuel avatar" loading="lazy" decoding="async" src="/avatars/manuel-16.png" width="16" height="16" /></a>
+ <span> via </span>
+ <a href="/u/manuel" class="u-author h-card ">manuel</a>
+
+ <span title="2023-08-15 13:17:27 -0500">42 hours ago</span>
+
+ <span> | </span>
+ <span class="dropdown_parent">
+ <input id="archive_h6vioy" class="archive_button" type="checkbox">
+ <label for="archive_h6vioy">archive</label>
+ <div class="archive-dropdown">
+ <a href="https://web.archive.org/web/3/https%3A%2F%2Fblog.redplanetlabs.com%2F2023%2F08%2F15%2Fhow-we-reduced-the-cost-of-building-twitter-at-twitter-scale-by-100x%2F">Archive.org</a>
+ <a href="https://archive.today/https%3A%2F%2Fblog.redplanetlabs.com%2F2023%2F08%2F15%2Fhow-we-reduced-the-cost-of-building-twitter-at-twitter-scale-by-100x%2F">Archive.today</a>
+ <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fblog.redplanetlabs.com%2F2023%2F08%2F15%2Fhow-we-reduced-the-cost-of-building-twitter-at-twitter-scale-by-100x%2F">Ghostarchive</a>
+ </div>
+ </span>
+ <span class="comments_label">
+ <span> | </span>
+ <a role="heading" aria-level="2" href="/s/h6vioy/how_we_reduced_cost_building_twitter_at">
+ 29 comments</a>
+ </span>
+
+ </div>
+ </div>
+</div>
+<a href="/s/h6vioy/how_we_reduced_cost_building_twitter_at" class="mobile_comments " style="display: none;">
+ <span>29</span>
+</a>
+</li>
+<li id="story_aade0u" data-shortid="aade0u"
+class="story
+
+
+
+
+
+
+">
+<div class="story_liner h-entry">
+ <div class="voters">
+ <a class="upvoter" href="/login"></a>
+ <div class="score">15</div>
+ </div>
+ <div class="details">
+ <span role="heading" aria-level="1" class="link h-cite u-repost-of">
+ <a class="u-url" href="https://www.wdj-consulting.com/blog/logicpuzzle-z3/" rel="ugc noreferrer">Using z3 To Solve Logic Puzzles</a>
+ </span>
+ <span class="tags">
+ <a class="tag tag_formalmethods" title="Formal methods" href="/t/formalmethods">formalmethods</a>
+ </span>
+ <a class="domain" href="/domains/wdj-consulting.com">wdj-consulting.com</a>
+
+
+
+ <div class="byline">
+ <a href="/u/Screwtape"><img srcset="/avatars/Screwtape-16.png 1x, /avatars/Screwtape-32.png 2x" class="avatar" alt="Screwtape avatar" loading="lazy" decoding="async" src="/avatars/Screwtape-16.png" width="16" height="16" /></a>
+ <span> via </span>
+ <a href="/u/Screwtape" class="u-author h-card ">Screwtape</a>
+
+ <span title="2023-08-15 21:03:14 -0500">35 hours ago</span>
+
+ <span> | </span>
+ <span class="dropdown_parent">
+ <input id="archive_aade0u" class="archive_button" type="checkbox">
+ <label for="archive_aade0u">archive</label>
+ <div class="archive-dropdown">
+ <a href="https://web.archive.org/web/3/https%3A%2F%2Fwww.wdj-consulting.com%2Fblog%2Flogicpuzzle-z3%2F">Archive.org</a>
+ <a href="https://archive.today/https%3A%2F%2Fwww.wdj-consulting.com%2Fblog%2Flogicpuzzle-z3%2F">Archive.today</a>
+ <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fwww.wdj-consulting.com%2Fblog%2Flogicpuzzle-z3%2F">Ghostarchive</a>
+ </div>
+ </span>
+ <span class="comments_label">
+ <span> | </span>
+ <a role="heading" aria-level="2" href="/s/aade0u/using_z3_solve_logic_puzzles">
+ 5 comments</a>
+ </span>
+
+ </div>
+ </div>
+</div>
+<a href="/s/aade0u/using_z3_solve_logic_puzzles" class="mobile_comments " style="display: none;">
+ <span>5</span>
+</a>
+</li>
+<li id="story_ohewtv" data-shortid="ohewtv"
+class="story
+
+
+
+
+
+
+">
+<div class="story_liner h-entry">
+ <div class="voters">
+ <a class="upvoter" href="/login"></a>
+ <div class="score">14</div>
+ </div>
+ <div class="details">
+ <span role="heading" aria-level="1" class="link h-cite u-repost-of">
+ <a class="u-url" href="https://github.com/mattrose/vimwiki-server" rel="ugc noreferrer">vimwiki-server: Sinatra server that creates a web server from a vimwiki directory</a>
+ </span>
+ <span class="tags">
+ <a class="tag tag_ruby" title="Ruby programming" href="/t/ruby">ruby</a>
+ <a class="tag tag_vim" title="Vim editor" href="/t/vim">vim</a>
+ <a class="tag tag_web" title="Web development and news" href="/t/web">web</a>
+ </span>
+ <a class="domain" href="/domains/github.com">github.com</a>
+
+
+
+ <div class="byline">
+ <a href="/u/mattrose"><img srcset="/avatars/mattrose-16.png 1x, /avatars/mattrose-32.png 2x" class="avatar" alt="mattrose avatar" loading="lazy" decoding="async" src="/avatars/mattrose-16.png" width="16" height="16" /></a>
+ <span> authored by </span>
+ <a href="/u/mattrose" class="u-author h-card user_is_author">mattrose</a>
+
+ <span title="2023-08-15 16:49:29 -0500">39 hours ago</span>
+
+ <span> | </span>
+ <span class="dropdown_parent">
+ <input id="archive_ohewtv" class="archive_button" type="checkbox">
+ <label for="archive_ohewtv">archive</label>
+ <div class="archive-dropdown">
+ <a href="https://web.archive.org/web/3/https%3A%2F%2Fgithub.com%2Fmattrose%2Fvimwiki-server">Archive.org</a>
+ <a href="https://archive.today/https%3A%2F%2Fgithub.com%2Fmattrose%2Fvimwiki-server">Archive.today</a>
+ <a href="https://ghostarchive.org/search?term=https%3A%2F%2Fgithub.com%2Fmattrose%2Fvimwiki-server">Ghostarchive</a>
+ </div>
+ </span>
+ <span class="comments_label">
+ <span> | </span>
+ <a role="heading" aria-level="2" href="/s/ohewtv/vimwiki_server_sinatra_server_creates">
+ 8 comments</a>
+ </span>
+
+ </div>
+ </div>
+</div>
+<a href="/s/ohewtv/vimwiki_server_sinatra_server_creates" class="mobile_comments " style="display: none;">
+ <span>8</span>
+</a>
+</li>
+
+</ol>
+
+
+
+<div class="morelink">
+
+ <a href="/page/2">Page 2 >></a>
+</div>
+
+ </div>
+
+ <footer>
+ <a href="/about">About</a>
+ <a href="/tags">Tags</a>
+ <a href="/filters">Filter</a>
+ <a href="/moderations">Moderation Log</a>
+ </footer>
+ <span id="iab-pcm-sdk"></span><span id="iab-autofill-sdk"></span>
+</body>
+</html>
diff --git a/tests/audio.html b/tests/audio.html
@@ -0,0 +1,3 @@
+<audio src="file1.mp3"></audio>
+<audio src="file2.mp3" />
+<audio controls src="file3.mp3"></audio>
diff --git a/tests/lists.html b/tests/lists.html
@@ -0,0 +1,50 @@
+<h2>List 1: list with hyperlinks</h2>
+
+<ul>
+<li>Sites:
+<ul>
+<li><a href="http://seriot.ch/parsing_json.php">seriot.ch - Parsing JSON is a Minefield</a></li>
+<li><a href="https://github.com/nst/JSONTestSuite">A comprehensive test suite for RFC 8259 compliant JSON parsers</a></li>
+<li><a href="https://json.org/">json.org</a></li>
+</ul>
+</li>
+<li>Current standard:
+<ul>
+<li><a href="https://tools.ietf.org/html/rfc8259">RFC8259 - The JavaScript Object Notation (JSON) Data Interchange Format</a></li>
+<li><a href="https://www.ecma-international.org/publications/standards/Ecma-404.htm">Standard ECMA-404 - The JSON Data Interchange Syntax (2nd edition (December 2017)</a></li>
+</ul>
+</ul>
+
+<h2>List 2: no hyperlink</h2>
+
+<ul>
+<li>Sites:
+<ul>
+<li>seriot.ch - Parsing JSON is a Minefield</li>
+<li>A comprehensive test suite for RFC 8259 compliant JSON parsers</li>
+<li>json.org</li>
+</ul>
+</li>
+<li>Current standard:
+<ul>
+<li>RFC8259 - The JavaScript Object Notation (JSON) Data Interchange Format</li>
+<li>Standard ECMA-404 - The JSON Data Interchange Syntax (2nd edition (December 2017)</li>
+</ul>
+</ul>
+
+<h2>List 3: autoclose / void tag</h2>
+
+<ul>
+<li>Sites:
+<ul>
+<li>seriot.ch - Parsing JSON is a Minefield
+<li>A comprehensive test suite for RFC 8259 compliant JSON parsers
+<li>json.org
+</ul>
+</li>
+<li>Current standard:
+<ul>
+<li>RFC8259 - The JavaScript Object Notation (JSON) Data Interchange Format
+<li>Standard ECMA-404 - The JSON Data Interchange Syntax (2nd edition (December 2017)
+</ul>
+</ul>
diff --git a/tests/ol.html b/tests/ol.html
@@ -0,0 +1,5 @@
+<ol>
+<li>one</li>
+<li>two</li>
+<li>three</li>
+</ol>
diff --git a/tests/ol_nested.html b/tests/ol_nested.html
@@ -0,0 +1,21 @@
+<ol>
+<li>one</li>
+<li>two
+ <ol>
+ <li>two. one
+ <ol>
+ <li>two. one. one</li>
+ <li>two. one. two</li>
+ </ol>
+ </li>
+ <li>two. two</li>
+ </ol>
+</li>
+<li>three
+ <ol>
+ <li>three. one</li>
+ <li>three. two</li>
+ </ol>
+</li>
+<li>four</li>
+</ol>
diff --git a/tests/table_head.html b/tests/table_head.html
@@ -0,0 +1,13 @@
+<table>
+<thead>
+<tr><th>ha</th><th>hb</th><th>hc</th></tr>
+</thead>
+<tbody>
+<tr><td>b1</td><td>b2</td><td>b3</td></tr>
+<tr><td>b1</td><td>b2</td><td>b3</td></tr>
+<tr><td>b1</td><td>b2</td><td>b3</td></tr>
+</tbody>
+<tfoot>
+<tr><td>f1</td><td>f2</td><td>f3</td></tr>
+</tfoot>
+</table>
diff --git a/tests/table_optional.html b/tests/table_optional.html
@@ -0,0 +1,8 @@
+<!-- optional closing of row -->
+
+<table>
+<tr><th>a</th><th>b</th><th>c</th>
+<tr><td>1</td><td>2</td><td>3</td>
+<tr><td>1</td><td>2</td><td>3</td>
+<tr><td>1</td><td>2</td><td>3</td>
+</table>
diff --git a/tests/ul.html b/tests/ul.html
@@ -0,0 +1,5 @@
+<ul>
+<li>one</li>
+<li>two</li>
+<li>three</li>
+</ul>
diff --git a/tests/ul_a.html b/tests/ul_a.html
@@ -0,0 +1,5 @@
+<ul>
+ <li><a href="#one">one</a></li>
+ <li><a href="#two">two</a></li>
+ <li><a href="#three">three</a></li>
+</ul>
diff --git a/tests/ul_nested.html b/tests/ul_nested.html
@@ -0,0 +1,21 @@
+<ul>
+<li>one</li>
+<li>two
+ <ul>
+ <li>two. one
+ <ul>
+ <li>two. one. one</li>
+ <li>two. one. two</li>
+ </ul>
+ </li>
+ <li>two. two</li>
+ </ul>
+</li>
+<li>three
+ <ul>
+ <li>three. one</li>
+ <li>three. two</li>
+ </ul>
+</li>
+<li>four</li>
+</ul>
diff --git a/tests/ul_whitespace.html b/tests/ul_whitespace.html
@@ -0,0 +1,5 @@
+<ul>
+ <li>one</li>
+ <li>two</li>
+ <li>three</li>
+</ul>
diff --git a/tests/video.html b/tests/video.html
@@ -0,0 +1,7 @@
+<video>
+<source src="video1.mp4" type="video/mp4"/>
+</video>
+
+<video controls width="360" preload="none">
+<source src="video2.mp4" type="video/mp4"/>
+</video>
diff --git a/tests/video_track.html b/tests/video_track.html
@@ -0,0 +1,7 @@
+<video controls src="/media/cc0-videos/friday.mp4">
+ <track default kind="captions" srclang="en" src="/media/examples/friday.vtt" />
+ Download the
+ <a href="/media/cc0-videos/friday.mp4">MP4</a>
+ video, and
+ <a href="/media/examples/friday.vtt">subtitles</a>.
+</video>